diff --git a/README.md b/README.md index 7ce21a9..2167328 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ quaggaJS ======== -- [Changelog](#changelog) (2016-08-15) +- [Changelog](#changelog) (2017-01-08) - [Browser Support](#browser-support) - [Installing](#installing) - [Getting Started](#gettingstarted) @@ -65,6 +65,30 @@ browsers, meaning that `http://` can only be used on `localhost`. All other hostnames need to be served via `https://`. You can find more information in the [Chrome M47 WebRTC Release Notes](https://groups.google.com/forum/#!topic/discuss-webrtc/sq5CVmY69sc). +### Feature-detection of getUserMedia + +Every browser seems to differently implement the `mediaDevices.getUserMedia` +API. Therefore it's highly recommended to include +[webrtc-adapter](https://github.com/webrtc/adapter) in your project. + +Here's how you can test your browser's capabilities: + +```javascript +if (navigator.mediaDevices && typeof navigator.mediaDevices.getUserMedia === 'function') { + // safely access `navigator.mediaDevices.getUserMedia` +} +``` + +The above condition evaluates to: + +| Browser | result | +| ------------- |:-------:| +| Edge | `true` | +| Chrome | `true` | +| Firefox | `true` | +| IE 11 | `false` | +| Safari iOS | `false` | + ## Installing QuaggaJS can be installed using __npm__, __bower__, or by including it with @@ -641,6 +665,17 @@ on the ``singleChannel`` flag in the configuration when using ``decodeSingle``. ## Changelog +### 2017-01-08 +- Improvements + - Exposing `CameraAccess` module to get access to methods like + `enumerateVideoDevices` and `getActiveStreamLabel` + (see `example/live_w_locator`) + - Update to webpack 2.2 (API is still unstable) + +### 2016-10-03 +- Fixes + - Fixed `facingMode` issue with Chrome >= 53 (see [#128](https://github.com/serratus/quaggaJS/issues/128)) + ### 2016-08-15 - Features - Proper handling of EXIF orientation when using `Quagga.decodeSingle` diff --git a/dist/quagga.js b/dist/quagga.js index b276391..4b99eae 100644 --- a/dist/quagga.js +++ b/dist/quagga.js @@ -15,23 +15,23 @@ return /******/ (function(modules) { // webpackBootstrap /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].e; +/******/ return installedModules[moduleId].exports; /******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { -/******/ e: {}, /******/ i: moduleId, -/******/ l: false +/******/ l: false, +/******/ exports: {} /******/ }; /******/ /******/ // Execute the module function -/******/ modules[moduleId].call(module.e, module, module.e, __webpack_require__); +/******/ 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.e; +/******/ return module.exports; /******/ } /******/ /******/ @@ -41,15360 +41,12932 @@ return /******/ (function(modules) { // webpackBootstrap /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // 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 = 214); +/******/ return __webpack_require__(__webpack_require__.s = 209); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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 = Array.isArray; - - module.e = isArray; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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 = Array.isArray; + +module.exports = isArray; + + +/***/ }), /* 1 */ -/***/ function(module, exports, __webpack_require__) { - - /* - * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ - /* eslint-env node */ - 'use strict'; - - var logDisabled_ = true; - - // Utility methods. - var utils = { - disableLog: function(bool) { - if (typeof bool !== 'boolean') { - return new Error('Argument type: ' + typeof bool + - '. Please use a boolean.'); - } - logDisabled_ = bool; - return (bool) ? 'adapter.js logging disabled' : - 'adapter.js logging enabled'; - }, - - log: function() { - if (typeof window === 'object') { - if (logDisabled_) { - return; - } - if (typeof console !== 'undefined' && typeof console.log === 'function') { - console.log.apply(console, arguments); - } - } - }, - - /** - * Extract browser version out of the provided user agent string. - * - * @param {!string} uastring userAgent string. - * @param {!string} expr Regular expression used as match criteria. - * @param {!number} pos position in the version string to be returned. - * @return {!number} browser version. - */ - extractVersion: function(uastring, expr, pos) { - var match = uastring.match(expr); - return match && match.length >= pos && parseInt(match[pos], 10); - }, - - /** - * Browser detector. - * - * @return {object} result containing browser and version - * properties. - */ - detectBrowser: function() { - // Returned result object. - var result = {}; - result.browser = null; - result.version = null; - - // Fail early if it's not a browser - if (typeof window === 'undefined' || !window.navigator) { - result.browser = 'Not a browser.'; - return result; - } - - // Firefox. - if (navigator.mozGetUserMedia) { - result.browser = 'firefox'; - result.version = this.extractVersion(navigator.userAgent, - /Firefox\/([0-9]+)\./, 1); - - // all webkit-based browsers - } else if (navigator.webkitGetUserMedia) { - // Chrome, Chromium, Webview, Opera, all use the chrome shim for now - if (window.webkitRTCPeerConnection) { - result.browser = 'chrome'; - result.version = this.extractVersion(navigator.userAgent, - /Chrom(e|ium)\/([0-9]+)\./, 2); - - // Safari or unknown webkit-based - // for the time being Safari has support for MediaStreams but not webRTC - } else { - // Safari UA substrings of interest for reference: - // - webkit version: AppleWebKit/602.1.25 (also used in Op,Cr) - // - safari UI version: Version/9.0.3 (unique to Safari) - // - safari UI webkit version: Safari/601.4.4 (also used in Op,Cr) - // - // if the webkit version and safari UI webkit versions are equals, - // ... this is a stable version. - // - // only the internal webkit version is important today to know if - // media streams are supported - // - if (navigator.userAgent.match(/Version\/(\d+).(\d+)/)) { - result.browser = 'safari'; - result.version = this.extractVersion(navigator.userAgent, - /AppleWebKit\/([0-9]+)\./, 1); - - // unknown webkit-based browser - } else { - result.browser = 'Unsupported webkit-based browser ' + - 'with GUM support but no WebRTC support.'; - return result; - } - } - - // Edge. - } else if (navigator.mediaDevices && - navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)) { - result.browser = 'edge'; - result.version = this.extractVersion(navigator.userAgent, - /Edge\/(\d+).(\d+)$/, 2); - - // Default fallthrough: not supported. - } else { - result.browser = 'Not a supported browser.'; - return result; - } - - return result; - } - }; - - // Export. - module.e = { - log: utils.log, - disableLog: utils.disableLog, - browserDetails: utils.detectBrowser(), - extractVersion: utils.extractVersion - }; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var freeGlobal = __webpack_require__(59); + +/** 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')(); + +module.exports = root; + + +/***/ }), /* 2 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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 && (type == 'object' || type == 'function'); - } - - module.e = isObject; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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'); +} + +module.exports = isObject; + + +/***/ }), /* 3 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { - var freeGlobal = __webpack_require__(63); - - /** 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')(); - - module.e = root; +var baseIsNative = __webpack_require__(124), + getValue = __webpack_require__(157); +/** + * 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; +} -/***/ }, +module.exports = getNative; + + +/***/ }), /* 4 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge__ = __webpack_require__(15); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default = __WEBPACK_IMPORTED_MODULE_0_lodash_merge__ && __WEBPACK_IMPORTED_MODULE_0_lodash_merge__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_merge__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_merge__; } - /* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_0_lodash_merge___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default }); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__barcode_reader__ = __webpack_require__(7); - - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - - - - function EANReader(opts, supplements) { - opts = /* harmony import */__WEBPACK_IMPORTED_MODULE_0_lodash_merge___default.a.bind()(getDefaulConfig(), opts); - /* harmony import */__WEBPACK_IMPORTED_MODULE_1__barcode_reader__["a"].call(this, opts, supplements); - } - - function getDefaulConfig() { - var config = {}; - - Object.keys(EANReader.CONFIG_KEYS).forEach(function (key) { - config[key] = EANReader.CONFIG_KEYS[key].default; - }); - return config; - } - - var properties = { - CODE_L_START: { value: 0 }, - CODE_G_START: { value: 10 }, - START_PATTERN: { value: [1, 1, 1] }, - STOP_PATTERN: { value: [1, 1, 1] }, - MIDDLE_PATTERN: { value: [1, 1, 1, 1, 1] }, - EXTENSION_START_PATTERN: { value: [1, 1, 2] }, - CODE_PATTERN: { value: [[3, 2, 1, 1], [2, 2, 2, 1], [2, 1, 2, 2], [1, 4, 1, 1], [1, 1, 3, 2], [1, 2, 3, 1], [1, 1, 1, 4], [1, 3, 1, 2], [1, 2, 1, 3], [3, 1, 1, 2], [1, 1, 2, 3], [1, 2, 2, 2], [2, 2, 1, 2], [1, 1, 4, 1], [2, 3, 1, 1], [1, 3, 2, 1], [4, 1, 1, 1], [2, 1, 3, 1], [3, 1, 2, 1], [2, 1, 1, 3]] }, - CODE_FREQUENCY: { value: [0, 11, 13, 14, 19, 25, 28, 21, 22, 26] }, - SINGLE_CODE_ERROR: { value: 0.70 }, - AVG_CODE_ERROR: { value: 0.48 }, - FORMAT: { value: "ean_13", writeable: false } - }; - - EANReader.prototype = Object.create(/* harmony import */__WEBPACK_IMPORTED_MODULE_1__barcode_reader__["a"].prototype, properties); - EANReader.prototype.constructor = EANReader; - - EANReader.prototype._decodeCode = function (start, coderange) { - var counter = [0, 0, 0, 0], - i, - self = this, - offset = start, - isWhite = !self._row[offset], - counterPos = 0, - bestMatch = { - error: Number.MAX_VALUE, - code: -1, - start: start, - end: start - }, - code, - error; - - if (!coderange) { - coderange = self.CODE_PATTERN.length; - } - - for (i = offset; i < self._row.length; i++) { - if (self._row[i] ^ isWhite) { - counter[counterPos]++; - } else { - if (counterPos === counter.length - 1) { - for (code = 0; code < coderange; code++) { - error = self._matchPattern(counter, self.CODE_PATTERN[code]); - if (error < bestMatch.error) { - bestMatch.code = code; - bestMatch.error = error; - } - } - bestMatch.end = i; - if (bestMatch.error > self.AVG_CODE_ERROR) { - return null; - } - return bestMatch; - } else { - counterPos++; - } - counter[counterPos] = 1; - isWhite = !isWhite; - } - } - return null; - }; - - EANReader.prototype._findPattern = function (pattern, offset, isWhite, tryHarder, epsilon) { - var counter = [], - self = this, - i, - counterPos = 0, - bestMatch = { - error: Number.MAX_VALUE, - code: -1, - start: 0, - end: 0 - }, - error, - j, - sum; - - if (!offset) { - offset = self._nextSet(self._row); - } - - if (isWhite === undefined) { - isWhite = false; - } - - if (tryHarder === undefined) { - tryHarder = true; - } - - if (epsilon === undefined) { - epsilon = self.AVG_CODE_ERROR; - } - - for (i = 0; i < pattern.length; i++) { - counter[i] = 0; - } - - for (i = offset; i < self._row.length; i++) { - if (self._row[i] ^ isWhite) { - counter[counterPos]++; - } else { - if (counterPos === counter.length - 1) { - sum = 0; - for (j = 0; j < counter.length; j++) { - sum += counter[j]; - } - error = self._matchPattern(counter, pattern); - - if (error < epsilon) { - bestMatch.error = error; - bestMatch.start = i - sum; - bestMatch.end = i; - return bestMatch; - } - if (tryHarder) { - for (j = 0; j < counter.length - 2; j++) { - counter[j] = counter[j + 2]; - } - counter[counter.length - 2] = 0; - counter[counter.length - 1] = 0; - counterPos--; - } else { - return null; - } - } else { - counterPos++; - } - counter[counterPos] = 1; - isWhite = !isWhite; - } - } - return null; - }; - - EANReader.prototype._findStart = function () { - var self = this, - leadingWhitespaceStart, - offset = self._nextSet(self._row), - startInfo; - - while (!startInfo) { - startInfo = self._findPattern(self.START_PATTERN, offset); - if (!startInfo) { - return null; - } - leadingWhitespaceStart = startInfo.start - (startInfo.end - startInfo.start); - if (leadingWhitespaceStart >= 0) { - if (self._matchRange(leadingWhitespaceStart, startInfo.start, 0)) { - return startInfo; - } - } - offset = startInfo.end; - startInfo = null; - } - }; - - EANReader.prototype._verifyTrailingWhitespace = function (endInfo) { - var self = this, - trailingWhitespaceEnd; - - trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start); - if (trailingWhitespaceEnd < self._row.length) { - if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { - return endInfo; - } - } - return null; - }; - - EANReader.prototype._findEnd = function (offset, isWhite) { - var self = this, - endInfo = self._findPattern(self.STOP_PATTERN, offset, isWhite, false); - - return endInfo !== null ? self._verifyTrailingWhitespace(endInfo) : null; - }; - - EANReader.prototype._calculateFirstDigit = function (codeFrequency) { - var i, - self = this; - - for (i = 0; i < self.CODE_FREQUENCY.length; i++) { - if (codeFrequency === self.CODE_FREQUENCY[i]) { - return i; - } - } - return null; - }; - - EANReader.prototype._decodePayload = function (code, result, decodedCodes) { - var i, - self = this, - codeFrequency = 0x0, - firstDigit; - - for (i = 0; i < 6; i++) { - code = self._decodeCode(code.end); - if (!code) { - return null; - } - if (code.code >= self.CODE_G_START) { - code.code = code.code - self.CODE_G_START; - codeFrequency |= 1 << 5 - i; - } else { - codeFrequency |= 0 << 5 - i; - } - result.push(code.code); - decodedCodes.push(code); - } - - firstDigit = self._calculateFirstDigit(codeFrequency); - if (firstDigit === null) { - return null; - } - result.unshift(firstDigit); - - code = self._findPattern(self.MIDDLE_PATTERN, code.end, true, false); - if (code === null) { - return null; - } - decodedCodes.push(code); - - for (i = 0; i < 6; i++) { - code = self._decodeCode(code.end, self.CODE_G_START); - if (!code) { - return null; - } - decodedCodes.push(code); - result.push(code.code); - } - - return code; - }; - - EANReader.prototype._decode = function () { - var startInfo, - self = this, - code, - result = [], - decodedCodes = [], - resultInfo = {}; - - startInfo = self._findStart(); - if (!startInfo) { - return null; - } - code = { - code: startInfo.code, - start: startInfo.start, - end: startInfo.end - }; - decodedCodes.push(code); - code = self._decodePayload(code, result, decodedCodes); - if (!code) { - return null; - } - code = self._findEnd(code.end, false); - if (!code) { - return null; - } - - decodedCodes.push(code); - - // Checksum - if (!self._checksum(result)) { - return null; - } - - if (this.supplements.length > 0) { - var ext = this._decodeExtensions(code.end); - if (!ext) { - return null; - } - var lastCode = ext.decodedCodes[ext.decodedCodes.length - 1], - endInfo = { - start: lastCode.start + ((lastCode.end - lastCode.start) / 2 | 0), - end: lastCode.end - }; - if (!self._verifyTrailingWhitespace(endInfo)) { - return null; - } - resultInfo = { - supplement: ext, - code: result.join("") + ext.code - }; - } - - return _extends({ - code: result.join(""), - start: startInfo.start, - end: code.end, - codeset: "", - startInfo: startInfo, - decodedCodes: decodedCodes - }, resultInfo); - }; - - EANReader.prototype._decodeExtensions = function (offset) { - var i, - start = this._nextSet(this._row, offset), - startInfo = this._findPattern(this.EXTENSION_START_PATTERN, start, false, false), - result; - - if (startInfo === null) { - return null; - } - - for (i = 0; i < this.supplements.length; i++) { - result = this.supplements[i].decode(this._row, startInfo.end); - if (result !== null) { - return { - code: result.code, - start: start, - startInfo: startInfo, - end: result.end, - codeset: "", - decodedCodes: result.decodedCodes - }; - } - } - return null; - }; - - EANReader.prototype._checksum = function (result) { - var sum = 0, - i; - - for (i = result.length - 2; i >= 0; i -= 2) { - sum += result[i]; - } - sum *= 3; - for (i = result.length - 1; i >= 0; i -= 2) { - sum += result[i]; - } - return sum % 10 === 0; - }; - - EANReader.CONFIG_KEYS = { - supplements: { - 'type': 'arrayOf(string)', - 'default': [], - 'description': 'Allowed extensions to be decoded (2 and/or 5)' - } - }; - - /* harmony default export */ exports["a"] = EANReader; - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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'; +} + +module.exports = isObjectLike; + + +/***/ }), /* 5 */ -/***/ function(module, exports, __webpack_require__) { - - var baseIsNative = __webpack_require__(129), - getValue = __webpack_require__(158); - - /** - * 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; - } - - module.e = getNative; - - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_merge__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__barcode_reader__ = __webpack_require__(8); + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + + + +function EANReader(opts, supplements) { + opts = __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default()(getDefaulConfig(), opts); + __WEBPACK_IMPORTED_MODULE_1__barcode_reader__["a" /* default */].call(this, opts, supplements); +} + +function getDefaulConfig() { + var config = {}; + + Object.keys(EANReader.CONFIG_KEYS).forEach(function (key) { + config[key] = EANReader.CONFIG_KEYS[key].default; + }); + return config; +} + +var properties = { + CODE_L_START: { value: 0 }, + CODE_G_START: { value: 10 }, + START_PATTERN: { value: [1, 1, 1] }, + STOP_PATTERN: { value: [1, 1, 1] }, + MIDDLE_PATTERN: { value: [1, 1, 1, 1, 1] }, + EXTENSION_START_PATTERN: { value: [1, 1, 2] }, + CODE_PATTERN: { value: [[3, 2, 1, 1], [2, 2, 2, 1], [2, 1, 2, 2], [1, 4, 1, 1], [1, 1, 3, 2], [1, 2, 3, 1], [1, 1, 1, 4], [1, 3, 1, 2], [1, 2, 1, 3], [3, 1, 1, 2], [1, 1, 2, 3], [1, 2, 2, 2], [2, 2, 1, 2], [1, 1, 4, 1], [2, 3, 1, 1], [1, 3, 2, 1], [4, 1, 1, 1], [2, 1, 3, 1], [3, 1, 2, 1], [2, 1, 1, 3]] }, + CODE_FREQUENCY: { value: [0, 11, 13, 14, 19, 25, 28, 21, 22, 26] }, + SINGLE_CODE_ERROR: { value: 0.70 }, + AVG_CODE_ERROR: { value: 0.48 }, + FORMAT: { value: "ean_13", writeable: false } +}; + +EANReader.prototype = Object.create(__WEBPACK_IMPORTED_MODULE_1__barcode_reader__["a" /* default */].prototype, properties); +EANReader.prototype.constructor = EANReader; + +EANReader.prototype._decodeCode = function (start, coderange) { + var counter = [0, 0, 0, 0], + i, + self = this, + offset = start, + isWhite = !self._row[offset], + counterPos = 0, + bestMatch = { + error: Number.MAX_VALUE, + code: -1, + start: start, + end: start + }, + code, + error; + + if (!coderange) { + coderange = self.CODE_PATTERN.length; + } + + for (i = offset; i < self._row.length; i++) { + if (self._row[i] ^ isWhite) { + counter[counterPos]++; + } else { + if (counterPos === counter.length - 1) { + for (code = 0; code < coderange; code++) { + error = self._matchPattern(counter, self.CODE_PATTERN[code]); + if (error < bestMatch.error) { + bestMatch.code = code; + bestMatch.error = error; + } + } + bestMatch.end = i; + if (bestMatch.error > self.AVG_CODE_ERROR) { + return null; + } + return bestMatch; + } else { + counterPos++; + } + counter[counterPos] = 1; + isWhite = !isWhite; + } + } + return null; +}; + +EANReader.prototype._findPattern = function (pattern, offset, isWhite, tryHarder, epsilon) { + var counter = [], + self = this, + i, + counterPos = 0, + bestMatch = { + error: Number.MAX_VALUE, + code: -1, + start: 0, + end: 0 + }, + error, + j, + sum; + + if (!offset) { + offset = self._nextSet(self._row); + } + + if (isWhite === undefined) { + isWhite = false; + } + + if (tryHarder === undefined) { + tryHarder = true; + } + + if (epsilon === undefined) { + epsilon = self.AVG_CODE_ERROR; + } + + for (i = 0; i < pattern.length; i++) { + counter[i] = 0; + } + + for (i = offset; i < self._row.length; i++) { + if (self._row[i] ^ isWhite) { + counter[counterPos]++; + } else { + if (counterPos === counter.length - 1) { + sum = 0; + for (j = 0; j < counter.length; j++) { + sum += counter[j]; + } + error = self._matchPattern(counter, pattern); + + if (error < epsilon) { + bestMatch.error = error; + bestMatch.start = i - sum; + bestMatch.end = i; + return bestMatch; + } + if (tryHarder) { + for (j = 0; j < counter.length - 2; j++) { + counter[j] = counter[j + 2]; + } + counter[counter.length - 2] = 0; + counter[counter.length - 1] = 0; + counterPos--; + } else { + return null; + } + } else { + counterPos++; + } + counter[counterPos] = 1; + isWhite = !isWhite; + } + } + return null; +}; + +EANReader.prototype._findStart = function () { + var self = this, + leadingWhitespaceStart, + offset = self._nextSet(self._row), + startInfo; + + while (!startInfo) { + startInfo = self._findPattern(self.START_PATTERN, offset); + if (!startInfo) { + return null; + } + leadingWhitespaceStart = startInfo.start - (startInfo.end - startInfo.start); + if (leadingWhitespaceStart >= 0) { + if (self._matchRange(leadingWhitespaceStart, startInfo.start, 0)) { + return startInfo; + } + } + offset = startInfo.end; + startInfo = null; + } +}; + +EANReader.prototype._verifyTrailingWhitespace = function (endInfo) { + var self = this, + trailingWhitespaceEnd; + + trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start); + if (trailingWhitespaceEnd < self._row.length) { + if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { + return endInfo; + } + } + return null; +}; + +EANReader.prototype._findEnd = function (offset, isWhite) { + var self = this, + endInfo = self._findPattern(self.STOP_PATTERN, offset, isWhite, false); + + return endInfo !== null ? self._verifyTrailingWhitespace(endInfo) : null; +}; + +EANReader.prototype._calculateFirstDigit = function (codeFrequency) { + var i, + self = this; + + for (i = 0; i < self.CODE_FREQUENCY.length; i++) { + if (codeFrequency === self.CODE_FREQUENCY[i]) { + return i; + } + } + return null; +}; + +EANReader.prototype._decodePayload = function (code, result, decodedCodes) { + var i, + self = this, + codeFrequency = 0x0, + firstDigit; + + for (i = 0; i < 6; i++) { + code = self._decodeCode(code.end); + if (!code) { + return null; + } + if (code.code >= self.CODE_G_START) { + code.code = code.code - self.CODE_G_START; + codeFrequency |= 1 << 5 - i; + } else { + codeFrequency |= 0 << 5 - i; + } + result.push(code.code); + decodedCodes.push(code); + } + + firstDigit = self._calculateFirstDigit(codeFrequency); + if (firstDigit === null) { + return null; + } + result.unshift(firstDigit); + + code = self._findPattern(self.MIDDLE_PATTERN, code.end, true, false); + if (code === null) { + return null; + } + decodedCodes.push(code); + + for (i = 0; i < 6; i++) { + code = self._decodeCode(code.end, self.CODE_G_START); + if (!code) { + return null; + } + decodedCodes.push(code); + result.push(code.code); + } + + return code; +}; + +EANReader.prototype._decode = function () { + var startInfo, + self = this, + code, + result = [], + decodedCodes = [], + resultInfo = {}; + + startInfo = self._findStart(); + if (!startInfo) { + return null; + } + code = { + code: startInfo.code, + start: startInfo.start, + end: startInfo.end + }; + decodedCodes.push(code); + code = self._decodePayload(code, result, decodedCodes); + if (!code) { + return null; + } + code = self._findEnd(code.end, false); + if (!code) { + return null; + } + + decodedCodes.push(code); + + // Checksum + if (!self._checksum(result)) { + return null; + } + + if (this.supplements.length > 0) { + var ext = this._decodeExtensions(code.end); + if (!ext) { + return null; + } + var lastCode = ext.decodedCodes[ext.decodedCodes.length - 1], + endInfo = { + start: lastCode.start + ((lastCode.end - lastCode.start) / 2 | 0), + end: lastCode.end + }; + if (!self._verifyTrailingWhitespace(endInfo)) { + return null; + } + resultInfo = { + supplement: ext, + code: result.join("") + ext.code + }; + } + + return _extends({ + code: result.join(""), + start: startInfo.start, + end: code.end, + codeset: "", + startInfo: startInfo, + decodedCodes: decodedCodes + }, resultInfo); +}; + +EANReader.prototype._decodeExtensions = function (offset) { + var i, + start = this._nextSet(this._row, offset), + startInfo = this._findPattern(this.EXTENSION_START_PATTERN, start, false, false), + result; + + if (startInfo === null) { + return null; + } + + for (i = 0; i < this.supplements.length; i++) { + result = this.supplements[i].decode(this._row, startInfo.end); + if (result !== null) { + return { + code: result.code, + start: start, + startInfo: startInfo, + end: result.end, + codeset: "", + decodedCodes: result.decodedCodes + }; + } + } + return null; +}; + +EANReader.prototype._checksum = function (result) { + var sum = 0, + i; + + for (i = result.length - 2; i >= 0; i -= 2) { + sum += result[i]; + } + sum *= 3; + for (i = result.length - 1; i >= 0; i -= 2) { + sum += result[i]; + } + return sum % 10 === 0; +}; + +EANReader.CONFIG_KEYS = { + supplements: { + 'type': 'arrayOf(string)', + 'default': [], + 'description': 'Allowed extensions to be decoded (2 and/or 5)' + } +}; + +/* harmony default export */ __webpack_exports__["a"] = EANReader; + +/***/ }), /* 6 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony default export */ exports["a"] = { - drawRect: function drawRect(pos, size, ctx, style) { - ctx.strokeStyle = style.color; - ctx.fillStyle = style.color; - ctx.lineWidth = 1; - ctx.beginPath(); - ctx.strokeRect(pos.x, pos.y, size.x, size.y); - }, - drawPath: function drawPath(path, def, ctx, style) { - ctx.strokeStyle = style.color; - ctx.fillStyle = style.color; - ctx.lineWidth = style.lineWidth; - ctx.beginPath(); - ctx.moveTo(path[0][def.x], path[0][def.y]); - for (var j = 1; j < path.length; j++) { - ctx.lineTo(path[j][def.x], path[j][def.y]); - } - ctx.closePath(); - ctx.stroke(); - }, - drawImage: function drawImage(imageData, size, ctx) { - var canvasData = ctx.getImageData(0, 0, size.x, size.y), - data = canvasData.data, - imageDataPos = imageData.length, - canvasDataPos = data.length, - value; - - if (canvasDataPos / imageDataPos !== 4) { - return false; - } - while (imageDataPos--) { - value = imageData[imageDataPos]; - data[--canvasDataPos] = 255; - data[--canvasDataPos] = value; - data[--canvasDataPos] = value; - data[--canvasDataPos] = value; - } - ctx.putImageData(canvasData, 0, 0); - return true; - } - }; - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(10), + getRawTag = __webpack_require__(155), + objectToString = __webpack_require__(184); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = 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 && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; + + +/***/ }), /* 7 */ -/***/ function(module, exports, __webpack_require__) { - - function BarcodeReader(config, supplements) { - this._row = []; - this.config = config || {}; - this.supplements = supplements; - return this; - } - - BarcodeReader.prototype._nextUnset = function (line, start) { - var i; - - if (start === undefined) { - start = 0; - } - for (i = start; i < line.length; i++) { - if (!line[i]) { - return i; - } - } - return line.length; - }; - - BarcodeReader.prototype._matchPattern = function (counter, code, maxSingleError) { - var i, - error = 0, - singleError = 0, - sum = 0, - modulo = 0, - barWidth, - count, - scaled; - - maxSingleError = maxSingleError || this.SINGLE_CODE_ERROR || 1; - - for (i = 0; i < counter.length; i++) { - sum += counter[i]; - modulo += code[i]; - } - if (sum < modulo) { - return Number.MAX_VALUE; - } - barWidth = sum / modulo; - maxSingleError *= barWidth; - - for (i = 0; i < counter.length; i++) { - count = counter[i]; - scaled = code[i] * barWidth; - singleError = Math.abs(count - scaled) / scaled; - if (singleError > maxSingleError) { - return Number.MAX_VALUE; - } - error += singleError; - } - return error / modulo; - }; - - BarcodeReader.prototype._nextSet = function (line, offset) { - var i; - - offset = offset || 0; - for (i = offset; i < line.length; i++) { - if (line[i]) { - return i; - } - } - return line.length; - }; - - BarcodeReader.prototype._correctBars = function (counter, correction, indices) { - var length = indices.length, - tmp = 0; - while (length--) { - tmp = counter[indices[length]] * (1 - (1 - correction) / 2); - if (tmp > 1) { - counter[indices[length]] = tmp; - } - } - }; - - BarcodeReader.prototype._matchTrace = function (cmpCounter, epsilon) { - var counter = [], - i, - self = this, - offset = self._nextSet(self._row), - isWhite = !self._row[offset], - counterPos = 0, - bestMatch = { - error: Number.MAX_VALUE, - code: -1, - start: 0 - }, - error; - - if (cmpCounter) { - for (i = 0; i < cmpCounter.length; i++) { - counter.push(0); - } - for (i = offset; i < self._row.length; i++) { - if (self._row[i] ^ isWhite) { - counter[counterPos]++; - } else { - if (counterPos === counter.length - 1) { - error = self._matchPattern(counter, cmpCounter); - - if (error < epsilon) { - bestMatch.start = i - offset; - bestMatch.end = i; - bestMatch.counter = counter; - return bestMatch; - } else { - return null; - } - } else { - counterPos++; - } - counter[counterPos] = 1; - isWhite = !isWhite; - } - } - } else { - counter.push(0); - for (i = offset; i < self._row.length; i++) { - if (self._row[i] ^ isWhite) { - counter[counterPos]++; - } else { - counterPos++; - counter.push(0); - counter[counterPos] = 1; - isWhite = !isWhite; - } - } - } - - // if cmpCounter was not given - bestMatch.start = offset; - bestMatch.end = self._row.length - 1; - bestMatch.counter = counter; - return bestMatch; - }; - - BarcodeReader.prototype.decodePattern = function (pattern) { - var self = this, - result; - - self._row = pattern; - result = self._decode(); - if (result === null) { - self._row.reverse(); - result = self._decode(); - if (result) { - result.direction = BarcodeReader.DIRECTION.REVERSE; - result.start = self._row.length - result.start; - result.end = self._row.length - result.end; - } - } else { - result.direction = BarcodeReader.DIRECTION.FORWARD; - } - if (result) { - result.format = self.FORMAT; - } - return result; - }; - - BarcodeReader.prototype._matchRange = function (start, end, value) { - var i; - - start = start < 0 ? 0 : start; - for (i = start; i < end; i++) { - if (this._row[i] !== value) { - return false; - } - } - return true; - }; - - BarcodeReader.prototype._fillCounters = function (offset, end, isWhite) { - var self = this, - counterPos = 0, - i, - counters = []; - - isWhite = typeof isWhite !== 'undefined' ? isWhite : true; - offset = typeof offset !== 'undefined' ? offset : self._nextUnset(self._row); - end = end || self._row.length; - - counters[counterPos] = 0; - for (i = offset; i < end; i++) { - if (self._row[i] ^ isWhite) { - counters[counterPos]++; - } else { - counterPos++; - counters[counterPos] = 1; - isWhite = !isWhite; - } - } - return counters; - }; - - Object.defineProperty(BarcodeReader.prototype, "FORMAT", { - value: 'unknown', - writeable: false - }); - - BarcodeReader.DIRECTION = { - FORWARD: 1, - REVERSE: -1 - }; - - BarcodeReader.Exception = { - StartNotFoundException: "Start-Info was not found!", - CodeNotFoundException: "Code could not be found!", - PatternNotFoundException: "Pattern could not be found!" - }; - - BarcodeReader.CONFIG_KEYS = {}; - - /* harmony default export */ exports["a"] = BarcodeReader; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony default export */ __webpack_exports__["a"] = { + drawRect: function drawRect(pos, size, ctx, style) { + ctx.strokeStyle = style.color; + ctx.fillStyle = style.color; + ctx.lineWidth = 1; + ctx.beginPath(); + ctx.strokeRect(pos.x, pos.y, size.x, size.y); + }, + drawPath: function drawPath(path, def, ctx, style) { + ctx.strokeStyle = style.color; + ctx.fillStyle = style.color; + ctx.lineWidth = style.lineWidth; + ctx.beginPath(); + ctx.moveTo(path[0][def.x], path[0][def.y]); + for (var j = 1; j < path.length; j++) { + ctx.lineTo(path[j][def.x], path[j][def.y]); + } + ctx.closePath(); + ctx.stroke(); + }, + drawImage: function drawImage(imageData, size, ctx) { + var canvasData = ctx.getImageData(0, 0, size.x, size.y), + data = canvasData.data, + imageDataPos = imageData.length, + canvasDataPos = data.length, + value; + + if (canvasDataPos / imageDataPos !== 4) { + return false; + } + while (imageDataPos--) { + value = imageData[imageDataPos]; + data[--canvasDataPos] = 255; + data[--canvasDataPos] = value; + data[--canvasDataPos] = value; + data[--canvasDataPos] = value; + } + ctx.putImageData(canvasData, 0, 0); + return true; + } +}; + +/***/ }), /* 8 */ -/***/ function(module, exports, __webpack_require__) { - - module.e = clone - - /** - * Creates a new vec2 initialized with values from an existing vector - * - * @param {vec2} a vector to clone - * @returns {vec2} a new 2D vector - */ - function clone(a) { - var out = new Float32Array(2) - out[0] = a[0] - out[1] = a[1] - return out - } - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +function BarcodeReader(config, supplements) { + this._row = []; + this.config = config || {}; + this.supplements = supplements; + return this; +} + +BarcodeReader.prototype._nextUnset = function (line, start) { + var i; + + if (start === undefined) { + start = 0; + } + for (i = start; i < line.length; i++) { + if (!line[i]) { + return i; + } + } + return line.length; +}; + +BarcodeReader.prototype._matchPattern = function (counter, code, maxSingleError) { + var i, + error = 0, + singleError = 0, + sum = 0, + modulo = 0, + barWidth, + count, + scaled; + + maxSingleError = maxSingleError || this.SINGLE_CODE_ERROR || 1; + + for (i = 0; i < counter.length; i++) { + sum += counter[i]; + modulo += code[i]; + } + if (sum < modulo) { + return Number.MAX_VALUE; + } + barWidth = sum / modulo; + maxSingleError *= barWidth; + + for (i = 0; i < counter.length; i++) { + count = counter[i]; + scaled = code[i] * barWidth; + singleError = Math.abs(count - scaled) / scaled; + if (singleError > maxSingleError) { + return Number.MAX_VALUE; + } + error += singleError; + } + return error / modulo; +}; + +BarcodeReader.prototype._nextSet = function (line, offset) { + var i; + + offset = offset || 0; + for (i = offset; i < line.length; i++) { + if (line[i]) { + return i; + } + } + return line.length; +}; + +BarcodeReader.prototype._correctBars = function (counter, correction, indices) { + var length = indices.length, + tmp = 0; + while (length--) { + tmp = counter[indices[length]] * (1 - (1 - correction) / 2); + if (tmp > 1) { + counter[indices[length]] = tmp; + } + } +}; + +BarcodeReader.prototype._matchTrace = function (cmpCounter, epsilon) { + var counter = [], + i, + self = this, + offset = self._nextSet(self._row), + isWhite = !self._row[offset], + counterPos = 0, + bestMatch = { + error: Number.MAX_VALUE, + code: -1, + start: 0 + }, + error; + + if (cmpCounter) { + for (i = 0; i < cmpCounter.length; i++) { + counter.push(0); + } + for (i = offset; i < self._row.length; i++) { + if (self._row[i] ^ isWhite) { + counter[counterPos]++; + } else { + if (counterPos === counter.length - 1) { + error = self._matchPattern(counter, cmpCounter); + + if (error < epsilon) { + bestMatch.start = i - offset; + bestMatch.end = i; + bestMatch.counter = counter; + return bestMatch; + } else { + return null; + } + } else { + counterPos++; + } + counter[counterPos] = 1; + isWhite = !isWhite; + } + } + } else { + counter.push(0); + for (i = offset; i < self._row.length; i++) { + if (self._row[i] ^ isWhite) { + counter[counterPos]++; + } else { + counterPos++; + counter.push(0); + counter[counterPos] = 1; + isWhite = !isWhite; + } + } + } + + // if cmpCounter was not given + bestMatch.start = offset; + bestMatch.end = self._row.length - 1; + bestMatch.counter = counter; + return bestMatch; +}; + +BarcodeReader.prototype.decodePattern = function (pattern) { + var self = this, + result; + + self._row = pattern; + result = self._decode(); + if (result === null) { + self._row.reverse(); + result = self._decode(); + if (result) { + result.direction = BarcodeReader.DIRECTION.REVERSE; + result.start = self._row.length - result.start; + result.end = self._row.length - result.end; + } + } else { + result.direction = BarcodeReader.DIRECTION.FORWARD; + } + if (result) { + result.format = self.FORMAT; + } + return result; +}; + +BarcodeReader.prototype._matchRange = function (start, end, value) { + var i; + + start = start < 0 ? 0 : start; + for (i = start; i < end; i++) { + if (this._row[i] !== value) { + return false; + } + } + return true; +}; + +BarcodeReader.prototype._fillCounters = function (offset, end, isWhite) { + var self = this, + counterPos = 0, + i, + counters = []; + + isWhite = typeof isWhite !== 'undefined' ? isWhite : true; + offset = typeof offset !== 'undefined' ? offset : self._nextUnset(self._row); + end = end || self._row.length; + + counters[counterPos] = 0; + for (i = offset; i < end; i++) { + if (self._row[i] ^ isWhite) { + counters[counterPos]++; + } else { + counterPos++; + counters[counterPos] = 1; + isWhite = !isWhite; + } + } + return counters; +}; + +Object.defineProperty(BarcodeReader.prototype, "FORMAT", { + value: 'unknown', + writeable: false +}); + +BarcodeReader.DIRECTION = { + FORWARD: 1, + REVERSE: -1 +}; + +BarcodeReader.Exception = { + StartNotFoundException: "Start-Info was not found!", + CodeNotFoundException: "Code could not be found!", + PatternNotFoundException: "Pattern could not be found!" +}; + +BarcodeReader.CONFIG_KEYS = {}; + +/* harmony default export */ __webpack_exports__["a"] = BarcodeReader; + +/***/ }), /* 9 */ -/***/ function(module, exports, __webpack_require__) { - - var isSymbol = __webpack_require__(40); - - /** Used as references for various `Number` constants. */ - var INFINITY = 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(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - module.e = toKey; - - -/***/ }, +/***/ (function(module, exports) { + +module.exports = clone + +/** + * Creates a new vec2 initialized with values from an existing vector + * + * @param {vec2} a vector to clone + * @returns {vec2} a new 2D vector + */ +function clone(a) { + var out = new Float32Array(2) + out[0] = a[0] + out[1] = a[1] + return out +} + +/***/ }), /* 10 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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); - } - - module.e = eq; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var root = __webpack_require__(1); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; + + +/***/ }), /* 11 */ -/***/ function(module, exports, __webpack_require__) { - - var isArrayLikeObject = __webpack_require__(70); - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]'; - - /** 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 objectToString = objectProto.toString; - - /** Built-in value references. */ - var propertyIsEnumerable = objectProto.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 - */ - function isArguments(value) { - // Safari 8.1 makes `arguments.callee` enumerable in strict mode. - return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && - (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); - } - - module.e = isArguments; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var isSymbol = __webpack_require__(39); + +/** Used as references for various `Number` constants. */ +var INFINITY = 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(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = toKey; + + +/***/ }), /* 12 */ -/***/ function(module, exports, __webpack_require__) { - - var isFunction = __webpack_require__(38), - isLength = __webpack_require__(39); - - /** - * 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(value.length) && !isFunction(value); - } - - module.e = isArrayLike; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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); +} + +module.exports = eq; + + +/***/ }), /* 13 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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 && typeof value == 'object'; - } - - module.e = isObjectLike; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseIsArguments = __webpack_require__(121), + isObjectLike = __webpack_require__(4); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.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(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +module.exports = isArguments; + + +/***/ }), /* 14 */ -/***/ function(module, exports, __webpack_require__) { - - var arrayLikeKeys = __webpack_require__(49), - baseKeys = __webpack_require__(131), - isArrayLike = __webpack_require__(12); - - /** - * 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(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - - module.e = keys; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var isFunction = __webpack_require__(37), + isLength = __webpack_require__(38); + +/** + * 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(value.length) && !isFunction(value); +} + +module.exports = isArrayLike; + + +/***/ }), /* 15 */ -/***/ function(module, exports, __webpack_require__) { - - var baseMerge = __webpack_require__(134), - createAssigner = __webpack_require__(151); - - /** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; - * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } - */ - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - - module.e = merge; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseMerge = __webpack_require__(129), + createAssigner = __webpack_require__(147); + +/** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ +var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); +}); + +module.exports = merge; + + +/***/ }), /* 16 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony default export */ exports["a"] = { - init: function init(arr, val) { - var l = arr.length; - while (l--) { - arr[l] = val; - } - }, - - /** - * Shuffles the content of an array - * @return {Array} the array itself shuffled - */ - shuffle: function shuffle(arr) { - var i = arr.length - 1, - j, - x; - for (i; i >= 0; i--) { - j = Math.floor(Math.random() * i); - x = arr[i]; - arr[i] = arr[j]; - arr[j] = x; - } - return arr; - }, - - toPointList: function toPointList(arr) { - var i, - j, - row = [], - rows = []; - for (i = 0; i < arr.length; i++) { - row = []; - for (j = 0; j < arr[i].length; j++) { - row[j] = arr[i][j]; - } - rows[i] = "[" + row.join(",") + "]"; - } - return "[" + rows.join(",\r\n") + "]"; - }, - - /** - * returns the elements which's score is bigger than the threshold - * @return {Array} the reduced array - */ - threshold: function threshold(arr, _threshold, scoreFunc) { - var i, - queue = []; - for (i = 0; i < arr.length; i++) { - if (scoreFunc.apply(arr, [arr[i]]) >= _threshold) { - queue.push(arr[i]); - } - } - return queue; - }, - - maxIndex: function maxIndex(arr) { - var i, - max = 0; - for (i = 0; i < arr.length; i++) { - if (arr[i] > arr[max]) { - max = i; - } - } - return max; - }, - - max: function max(arr) { - var i, - max = 0; - for (i = 0; i < arr.length; i++) { - if (arr[i] > max) { - max = arr[i]; - } - } - return max; - }, - - sum: function sum(arr) { - var length = arr.length, - sum = 0; - - while (length--) { - sum += arr[length]; - } - return sum; - } - }; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony default export */ __webpack_exports__["a"] = { + init: function init(arr, val) { + var l = arr.length; + while (l--) { + arr[l] = val; + } + }, + + /** + * Shuffles the content of an array + * @return {Array} the array itself shuffled + */ + shuffle: function shuffle(arr) { + var i = arr.length - 1, + j, + x; + for (i; i >= 0; i--) { + j = Math.floor(Math.random() * i); + x = arr[i]; + arr[i] = arr[j]; + arr[j] = x; + } + return arr; + }, + + toPointList: function toPointList(arr) { + var i, + j, + row = [], + rows = []; + for (i = 0; i < arr.length; i++) { + row = []; + for (j = 0; j < arr[i].length; j++) { + row[j] = arr[i][j]; + } + rows[i] = "[" + row.join(",") + "]"; + } + return "[" + rows.join(",\r\n") + "]"; + }, + + /** + * returns the elements which's score is bigger than the threshold + * @return {Array} the reduced array + */ + threshold: function threshold(arr, _threshold, scoreFunc) { + var i, + queue = []; + for (i = 0; i < arr.length; i++) { + if (scoreFunc.apply(arr, [arr[i]]) >= _threshold) { + queue.push(arr[i]); + } + } + return queue; + }, + + maxIndex: function maxIndex(arr) { + var i, + max = 0; + for (i = 0; i < arr.length; i++) { + if (arr[i] > arr[max]) { + max = i; + } + } + return max; + }, + + max: function max(arr) { + var i, + max = 0; + for (i = 0; i < arr.length; i++) { + if (arr[i] > max) { + max = arr[i]; + } + } + return max; + }, + + sum: function sum(arr) { + var length = arr.length, + sum = 0; + + while (length--) { + sum += arr[length]; + } + return sum; + } +}; + +/***/ }), /* 17 */ -/***/ function(module, exports, __webpack_require__) { - - var listCacheClear = __webpack_require__(172), - listCacheDelete = __webpack_require__(173), - listCacheGet = __webpack_require__(174), - listCacheHas = __webpack_require__(175), - listCacheSet = __webpack_require__(176); - - /** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function ListCache(entries) { - var index = -1, - length = entries ? entries.length : 0; - - 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; - - module.e = ListCache; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var listCacheClear = __webpack_require__(169), + listCacheDelete = __webpack_require__(170), + listCacheGet = __webpack_require__(171), + listCacheHas = __webpack_require__(172), + listCacheSet = __webpack_require__(173); + +/** + * 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; + +module.exports = ListCache; + + +/***/ }), /* 18 */ -/***/ function(module, exports, __webpack_require__) { - - var ListCache = __webpack_require__(17), - stackClear = __webpack_require__(186), - stackDelete = __webpack_require__(187), - stackGet = __webpack_require__(188), - stackHas = __webpack_require__(189), - stackSet = __webpack_require__(190); - - /** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Stack(entries) { - this.__data__ = new ListCache(entries); - } - - // Add methods to `Stack`. - Stack.prototype.clear = stackClear; - Stack.prototype['delete'] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; - - module.e = Stack; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var eq = __webpack_require__(12); + +/** + * 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(array[length][0], key)) { + return length; + } + } + return -1; +} + +module.exports = assocIndexOf; + + +/***/ }), /* 19 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { + +var isArray = __webpack_require__(0), + isKey = __webpack_require__(35), + stringToPath = __webpack_require__(194), + toString = __webpack_require__(208); + +/** + * 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(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); +} + +module.exports = castPath; + + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { - var root = __webpack_require__(3); - - /** Built-in value references. */ - var Symbol = root.Symbol; - - module.e = Symbol; +var isKeyable = __webpack_require__(167); +/** + * 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; +} -/***/ }, -/* 20 */ -/***/ function(module, exports, __webpack_require__) { - - var eq = __webpack_require__(10); - - /** - * 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(array[length][0], key)) { - return length; - } - } - return -1; - } - - module.e = assocIndexOf; - - -/***/ }, +module.exports = getMapData; + + +/***/ }), /* 21 */ -/***/ function(module, exports, __webpack_require__) { - - var isKeyable = __webpack_require__(170); - - /** - * 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; - } - - module.e = getMapData; - - -/***/ }, +/***/ (function(module, exports) { + +/** 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) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); +} + +module.exports = isIndex; + + +/***/ }), /* 22 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Checks if `value` is a host object in IE < 9. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a host object, else `false`. - */ - function isHostObject(value) { - // Many host objects are `Object` objects that can coerce to strings - // despite having improperly defined `toString` methods. - var result = false; - if (value != null && typeof value.toString != 'function') { - try { - result = !!(value + ''); - } catch (e) {} - } - return result; - } - - module.e = isHostObject; - - -/***/ }, +/***/ (function(module, exports) { + +/** Used for built-in method references. */ +var objectProto = 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; + + return value === proto; +} + +module.exports = isPrototype; + + +/***/ }), /* 23 */ -/***/ function(module, exports, __webpack_require__) { - - var isArray = __webpack_require__(0), - isSymbol = __webpack_require__(40); - - /** 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(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); - } - - module.e = isKey; - - -/***/ }, -/* 24 */ -/***/ function(module, exports, __webpack_require__) { - - /** Used for built-in method references. */ - var objectProto = 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; - - return value === proto; - } - - module.e = isPrototype; - - -/***/ }, -/* 25 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(3); + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); - var getNative = __webpack_require__(5); - - /* Built-in method references that are verified to be native. */ - var nativeCreate = getNative(Object, 'create'); - - module.e = nativeCreate; +module.exports = nativeCreate; -/***/ }, +/***/ }), +/* 24 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(1), + stubFalse = __webpack_require__(206); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == '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; + +module.exports = isBuffer; + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(41)(module))) + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseIsTypedArray = __webpack_require__(125), + baseUnary = __webpack_require__(139), + nodeUtil = __webpack_require__(183); + +/* 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; + +module.exports = isTypedArray; + + +/***/ }), /* 26 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cluster__ = __webpack_require__(77); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__array_helper__ = __webpack_require__(16); - /* harmony export */ exports["f"] = imageRef;/* unused harmony export computeIntegralImage2 *//* unused harmony export computeIntegralImage *//* unused harmony export thresholdImage *//* unused harmony export computeHistogram *//* unused harmony export sharpenLine *//* unused harmony export determineOtsuThreshold *//* harmony export */ exports["c"] = otsuThreshold;/* unused harmony export computeBinaryImage *//* harmony export */ exports["d"] = cluster;/* unused harmony export dilate *//* unused harmony export erode *//* unused harmony export subtract *//* unused harmony export bitwiseOr *//* unused harmony export countNonZero *//* harmony export */ exports["e"] = topGeneric;/* unused harmony export grayArrayFromImage *//* unused harmony export grayArrayFromContext *//* harmony export */ exports["i"] = grayAndHalfSampleFromCanvasData;/* harmony export */ exports["j"] = computeGray;/* unused harmony export loadImageArray *//* harmony export */ exports["g"] = halfSample;/* harmony export */ exports["a"] = hsv2rgb;/* unused harmony export _computeDivisors *//* harmony export */ exports["b"] = calculatePatchSize;/* unused harmony export _parseCSSDimensionValues *//* harmony export */ exports["h"] = computeImageArea; - - var vec2 = { - clone: __webpack_require__(8) - }; - var vec3 = { - clone: __webpack_require__(109) - }; - - /** - * @param x x-coordinate - * @param y y-coordinate - * @return ImageReference {x,y} Coordinate - */ - function imageRef(x, y) { - var that = { - x: x, - y: y, - toVec2: function toVec2() { - return vec2.clone([this.x, this.y]); - }, - toVec3: function toVec3() { - return vec3.clone([this.x, this.y, 1]); - }, - round: function round() { - this.x = this.x > 0.0 ? Math.floor(this.x + 0.5) : Math.floor(this.x - 0.5); - this.y = this.y > 0.0 ? Math.floor(this.y + 0.5) : Math.floor(this.y - 0.5); - return this; - } - }; - return that; - }; - - /** - * Computes an integral image of a given grayscale image. - * @param imageDataContainer {ImageDataContainer} the image to be integrated - */ - function computeIntegralImage2(imageWrapper, integralWrapper) { - var imageData = imageWrapper.data; - var width = imageWrapper.size.x; - var height = imageWrapper.size.y; - var integralImageData = integralWrapper.data; - var sum = 0, - posA = 0, - posB = 0, - posC = 0, - posD = 0, - x, - y; - - // sum up first column - posB = width; - sum = 0; - for (y = 1; y < height; y++) { - sum += imageData[posA]; - integralImageData[posB] += sum; - posA += width; - posB += width; - } - - posA = 0; - posB = 1; - sum = 0; - for (x = 1; x < width; x++) { - sum += imageData[posA]; - integralImageData[posB] += sum; - posA++; - posB++; - } - - for (y = 1; y < height; y++) { - posA = y * width + 1; - posB = (y - 1) * width + 1; - posC = y * width; - posD = (y - 1) * width; - for (x = 1; x < width; x++) { - integralImageData[posA] += imageData[posA] + integralImageData[posB] + integralImageData[posC] - integralImageData[posD]; - posA++; - posB++; - posC++; - posD++; - } - } - }; - - function computeIntegralImage(imageWrapper, integralWrapper) { - var imageData = imageWrapper.data; - var width = imageWrapper.size.x; - var height = imageWrapper.size.y; - var integralImageData = integralWrapper.data; - var sum = 0; - - // sum up first row - for (var i = 0; i < width; i++) { - sum += imageData[i]; - integralImageData[i] = sum; - } - - for (var v = 1; v < height; v++) { - sum = 0; - for (var u = 0; u < width; u++) { - sum += imageData[v * width + u]; - integralImageData[v * width + u] = sum + integralImageData[(v - 1) * width + u]; - } - } - }; - - function thresholdImage(imageWrapper, threshold, targetWrapper) { - if (!targetWrapper) { - targetWrapper = imageWrapper; - } - var imageData = imageWrapper.data, - length = imageData.length, - targetData = targetWrapper.data; - - while (length--) { - targetData[length] = imageData[length] < threshold ? 1 : 0; - } - }; - - function computeHistogram(imageWrapper, bitsPerPixel) { - if (!bitsPerPixel) { - bitsPerPixel = 8; - } - var imageData = imageWrapper.data, - length = imageData.length, - bitShift = 8 - bitsPerPixel, - bucketCnt = 1 << bitsPerPixel, - hist = new Int32Array(bucketCnt); - - while (length--) { - hist[imageData[length] >> bitShift]++; - } - return hist; - }; - - function sharpenLine(line) { - var i, - length = line.length, - left = line[0], - center = line[1], - right; - - for (i = 1; i < length - 1; i++) { - right = line[i + 1]; - // -1 4 -1 kernel - line[i - 1] = center * 2 - left - right & 255; - left = center; - center = right; - } - return line; - }; - - function determineOtsuThreshold(imageWrapper, bitsPerPixel) { - if (!bitsPerPixel) { - bitsPerPixel = 8; - } - var hist, - threshold, - bitShift = 8 - bitsPerPixel; - - function px(init, end) { - var sum = 0, - i; - for (i = init; i <= end; i++) { - sum += hist[i]; - } - return sum; - } - - function mx(init, end) { - var i, - sum = 0; - - for (i = init; i <= end; i++) { - sum += i * hist[i]; - } - - return sum; - } - - function determineThreshold() { - var vet = [0], - p1, - p2, - p12, - k, - m1, - m2, - m12, - max = (1 << bitsPerPixel) - 1; - - hist = computeHistogram(imageWrapper, bitsPerPixel); - for (k = 1; k < max; k++) { - p1 = px(0, k); - p2 = px(k + 1, max); - p12 = p1 * p2; - if (p12 === 0) { - p12 = 1; - } - m1 = mx(0, k) * p2; - m2 = mx(k + 1, max) * p1; - m12 = m1 - m2; - vet[k] = m12 * m12 / p12; - } - return /* harmony import */__WEBPACK_IMPORTED_MODULE_1__array_helper__["a"].maxIndex(vet); - } - - threshold = determineThreshold(); - return threshold << bitShift; - }; - - function otsuThreshold(imageWrapper, targetWrapper) { - var threshold = determineOtsuThreshold(imageWrapper); - - thresholdImage(imageWrapper, threshold, targetWrapper); - return threshold; - }; - - // local thresholding - function computeBinaryImage(imageWrapper, integralWrapper, targetWrapper) { - computeIntegralImage(imageWrapper, integralWrapper); - - if (!targetWrapper) { - targetWrapper = imageWrapper; - } - var imageData = imageWrapper.data; - var targetData = targetWrapper.data; - var width = imageWrapper.size.x; - var height = imageWrapper.size.y; - var integralImageData = integralWrapper.data; - var sum = 0, - v, - u, - kernel = 3, - A, - B, - C, - D, - avg, - size = (kernel * 2 + 1) * (kernel * 2 + 1); - - // clear out top & bottom-border - for (v = 0; v <= kernel; v++) { - for (u = 0; u < width; u++) { - targetData[v * width + u] = 0; - targetData[(height - 1 - v) * width + u] = 0; - } - } - - // clear out left & right border - for (v = kernel; v < height - kernel; v++) { - for (u = 0; u <= kernel; u++) { - targetData[v * width + u] = 0; - targetData[v * width + (width - 1 - u)] = 0; - } - } - - for (v = kernel + 1; v < height - kernel - 1; v++) { - for (u = kernel + 1; u < width - kernel; u++) { - A = integralImageData[(v - kernel - 1) * width + (u - kernel - 1)]; - B = integralImageData[(v - kernel - 1) * width + (u + kernel)]; - C = integralImageData[(v + kernel) * width + (u - kernel - 1)]; - D = integralImageData[(v + kernel) * width + (u + kernel)]; - sum = D - C - B + A; - avg = sum / size; - targetData[v * width + u] = imageData[v * width + u] > avg + 5 ? 0 : 1; - } - } - }; - - function cluster(points, threshold, property) { - var i, - k, - cluster, - point, - clusters = []; - - if (!property) { - property = "rad"; - } - - function addToCluster(newPoint) { - var found = false; - for (k = 0; k < clusters.length; k++) { - cluster = clusters[k]; - if (cluster.fits(newPoint)) { - cluster.add(newPoint); - found = true; - } - } - return found; - } - - // iterate over each cloud - for (i = 0; i < points.length; i++) { - point = /* harmony import */__WEBPACK_IMPORTED_MODULE_0__cluster__["a"].createPoint(points[i], i, property); - if (!addToCluster(point)) { - clusters.push(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__cluster__["a"].create(point, threshold)); - } - } - return clusters; - }; - - var Tracer = { - trace: function trace(points, vec) { - var iteration, - maxIterations = 10, - top = [], - result = [], - centerPos = 0, - currentPos = 0; - - function trace(idx, forward) { - var from, - to, - toIdx, - predictedPos, - thresholdX = 1, - thresholdY = Math.abs(vec[1] / 10), - found = false; - - function match(pos, predicted) { - if (pos.x > predicted.x - thresholdX && pos.x < predicted.x + thresholdX && pos.y > predicted.y - thresholdY && pos.y < predicted.y + thresholdY) { - return true; - } else { - return false; - } - } - - // check if the next index is within the vec specifications - // if not, check as long as the threshold is met - - from = points[idx]; - if (forward) { - predictedPos = { - x: from.x + vec[0], - y: from.y + vec[1] - }; - } else { - predictedPos = { - x: from.x - vec[0], - y: from.y - vec[1] - }; - } - - toIdx = forward ? idx + 1 : idx - 1; - to = points[toIdx]; - while (to && (found = match(to, predictedPos)) !== true && Math.abs(to.y - from.y) < vec[1]) { - toIdx = forward ? toIdx + 1 : toIdx - 1; - to = points[toIdx]; - } - - return found ? toIdx : null; - } - - for (iteration = 0; iteration < maxIterations; iteration++) { - // randomly select point to start with - centerPos = Math.floor(Math.random() * points.length); - - // trace forward - top = []; - currentPos = centerPos; - top.push(points[currentPos]); - while ((currentPos = trace(currentPos, true)) !== null) { - top.push(points[currentPos]); - } - if (centerPos > 0) { - currentPos = centerPos; - while ((currentPos = trace(currentPos, false)) !== null) { - top.push(points[currentPos]); - } - } - - if (top.length > result.length) { - result = top; - } - } - return result; - } - };/* unused harmony export Tracer */ - - var DILATE = 1;/* unused harmony export DILATE */ - var ERODE = 2;/* unused harmony export ERODE */ - - function dilate(inImageWrapper, outImageWrapper) { - var v, - u, - inImageData = inImageWrapper.data, - outImageData = outImageWrapper.data, - height = inImageWrapper.size.y, - width = inImageWrapper.size.x, - sum, - yStart1, - yStart2, - xStart1, - xStart2; - - for (v = 1; v < height - 1; v++) { - for (u = 1; u < width - 1; u++) { - yStart1 = v - 1; - yStart2 = v + 1; - xStart1 = u - 1; - xStart2 = u + 1; - sum = inImageData[yStart1 * width + xStart1] + inImageData[yStart1 * width + xStart2] + inImageData[v * width + u] + inImageData[yStart2 * width + xStart1] + inImageData[yStart2 * width + xStart2]; - outImageData[v * width + u] = sum > 0 ? 1 : 0; - } - } - }; - - function erode(inImageWrapper, outImageWrapper) { - var v, - u, - inImageData = inImageWrapper.data, - outImageData = outImageWrapper.data, - height = inImageWrapper.size.y, - width = inImageWrapper.size.x, - sum, - yStart1, - yStart2, - xStart1, - xStart2; - - for (v = 1; v < height - 1; v++) { - for (u = 1; u < width - 1; u++) { - yStart1 = v - 1; - yStart2 = v + 1; - xStart1 = u - 1; - xStart2 = u + 1; - sum = inImageData[yStart1 * width + xStart1] + inImageData[yStart1 * width + xStart2] + inImageData[v * width + u] + inImageData[yStart2 * width + xStart1] + inImageData[yStart2 * width + xStart2]; - outImageData[v * width + u] = sum === 5 ? 1 : 0; - } - } - }; - - function subtract(aImageWrapper, bImageWrapper, resultImageWrapper) { - if (!resultImageWrapper) { - resultImageWrapper = aImageWrapper; - } - var length = aImageWrapper.data.length, - aImageData = aImageWrapper.data, - bImageData = bImageWrapper.data, - cImageData = resultImageWrapper.data; - - while (length--) { - cImageData[length] = aImageData[length] - bImageData[length]; - } - }; - - function bitwiseOr(aImageWrapper, bImageWrapper, resultImageWrapper) { - if (!resultImageWrapper) { - resultImageWrapper = aImageWrapper; - } - var length = aImageWrapper.data.length, - aImageData = aImageWrapper.data, - bImageData = bImageWrapper.data, - cImageData = resultImageWrapper.data; - - while (length--) { - cImageData[length] = aImageData[length] || bImageData[length]; - } - }; - - function countNonZero(imageWrapper) { - var length = imageWrapper.data.length, - data = imageWrapper.data, - sum = 0; - - while (length--) { - sum += data[length]; - } - return sum; - }; - - function topGeneric(list, top, scoreFunc) { - var i, - minIdx = 0, - min = 0, - queue = [], - score, - hit, - pos; - - for (i = 0; i < top; i++) { - queue[i] = { - score: 0, - item: null - }; - } - - for (i = 0; i < list.length; i++) { - score = scoreFunc.apply(this, [list[i]]); - if (score > min) { - hit = queue[minIdx]; - hit.score = score; - hit.item = list[i]; - min = Number.MAX_VALUE; - for (pos = 0; pos < top; pos++) { - if (queue[pos].score < min) { - min = queue[pos].score; - minIdx = pos; - } - } - } - } - - return queue; - }; - - function grayArrayFromImage(htmlImage, offsetX, ctx, array) { - ctx.drawImage(htmlImage, offsetX, 0, htmlImage.width, htmlImage.height); - var ctxData = ctx.getImageData(offsetX, 0, htmlImage.width, htmlImage.height).data; - computeGray(ctxData, array); - }; - - function grayArrayFromContext(ctx, size, offset, array) { - var ctxData = ctx.getImageData(offset.x, offset.y, size.x, size.y).data; - computeGray(ctxData, array); - }; - - function grayAndHalfSampleFromCanvasData(canvasData, size, outArray) { - var topRowIdx = 0; - var bottomRowIdx = size.x; - var endIdx = Math.floor(canvasData.length / 4); - var outWidth = size.x / 2; - var outImgIdx = 0; - var inWidth = size.x; - var i; - - while (bottomRowIdx < endIdx) { - for (i = 0; i < outWidth; i++) { - outArray[outImgIdx] = Math.floor((0.299 * canvasData[topRowIdx * 4 + 0] + 0.587 * canvasData[topRowIdx * 4 + 1] + 0.114 * canvasData[topRowIdx * 4 + 2] + (0.299 * canvasData[(topRowIdx + 1) * 4 + 0] + 0.587 * canvasData[(topRowIdx + 1) * 4 + 1] + 0.114 * canvasData[(topRowIdx + 1) * 4 + 2]) + (0.299 * canvasData[bottomRowIdx * 4 + 0] + 0.587 * canvasData[bottomRowIdx * 4 + 1] + 0.114 * canvasData[bottomRowIdx * 4 + 2]) + (0.299 * canvasData[(bottomRowIdx + 1) * 4 + 0] + 0.587 * canvasData[(bottomRowIdx + 1) * 4 + 1] + 0.114 * canvasData[(bottomRowIdx + 1) * 4 + 2])) / 4); - outImgIdx++; - topRowIdx = topRowIdx + 2; - bottomRowIdx = bottomRowIdx + 2; - } - topRowIdx = topRowIdx + inWidth; - bottomRowIdx = bottomRowIdx + inWidth; - } - }; - - function computeGray(imageData, outArray, config) { - var l = imageData.length / 4 | 0, - i, - singleChannel = config && config.singleChannel === true; - - if (singleChannel) { - for (i = 0; i < l; i++) { - outArray[i] = imageData[i * 4 + 0]; - } - } else { - for (i = 0; i < l; i++) { - outArray[i] = Math.floor(0.299 * imageData[i * 4 + 0] + 0.587 * imageData[i * 4 + 1] + 0.114 * imageData[i * 4 + 2]); - } - } - }; - - function loadImageArray(src, callback, canvas) { - if (!canvas) { - canvas = document.createElement('canvas'); - } - var img = new Image(); - img.callback = callback; - img.onload = function () { - canvas.width = this.width; - canvas.height = this.height; - var ctx = canvas.getContext('2d'); - ctx.drawImage(this, 0, 0); - var array = new Uint8Array(this.width * this.height); - ctx.drawImage(this, 0, 0); - var data = ctx.getImageData(0, 0, this.width, this.height).data; - computeGray(data, array); - this.callback(array, { - x: this.width, - y: this.height - }, this); - }; - img.src = src; - }; - - /** - * @param inImg {ImageWrapper} input image to be sampled - * @param outImg {ImageWrapper} to be stored in - */ - function halfSample(inImgWrapper, outImgWrapper) { - var inImg = inImgWrapper.data; - var inWidth = inImgWrapper.size.x; - var outImg = outImgWrapper.data; - var topRowIdx = 0; - var bottomRowIdx = inWidth; - var endIdx = inImg.length; - var outWidth = inWidth / 2; - var outImgIdx = 0; - while (bottomRowIdx < endIdx) { - for (var i = 0; i < outWidth; i++) { - outImg[outImgIdx] = Math.floor((inImg[topRowIdx] + inImg[topRowIdx + 1] + inImg[bottomRowIdx] + inImg[bottomRowIdx + 1]) / 4); - outImgIdx++; - topRowIdx = topRowIdx + 2; - bottomRowIdx = bottomRowIdx + 2; - } - topRowIdx = topRowIdx + inWidth; - bottomRowIdx = bottomRowIdx + inWidth; - } - }; - - function hsv2rgb(hsv, rgb) { - var h = hsv[0], - s = hsv[1], - v = hsv[2], - c = v * s, - x = c * (1 - Math.abs(h / 60 % 2 - 1)), - m = v - c, - r = 0, - g = 0, - b = 0; - - rgb = rgb || [0, 0, 0]; - - if (h < 60) { - r = c; - g = x; - } else if (h < 120) { - r = x; - g = c; - } else if (h < 180) { - g = c; - b = x; - } else if (h < 240) { - g = x; - b = c; - } else if (h < 300) { - r = x; - b = c; - } else if (h < 360) { - r = c; - b = x; - } - rgb[0] = (r + m) * 255 | 0; - rgb[1] = (g + m) * 255 | 0; - rgb[2] = (b + m) * 255 | 0; - return rgb; - }; - - function _computeDivisors(n) { - var largeDivisors = [], - divisors = [], - i; - - for (i = 1; i < Math.sqrt(n) + 1; i++) { - if (n % i === 0) { - divisors.push(i); - if (i !== n / i) { - largeDivisors.unshift(Math.floor(n / i)); - } - } - } - return divisors.concat(largeDivisors); - }; - - function _computeIntersection(arr1, arr2) { - var i = 0, - j = 0, - result = []; - - while (i < arr1.length && j < arr2.length) { - if (arr1[i] === arr2[j]) { - result.push(arr1[i]); - i++; - j++; - } else if (arr1[i] > arr2[j]) { - j++; - } else { - i++; - } - } - return result; - }; - - function calculatePatchSize(patchSize, imgSize) { - var divisorsX = _computeDivisors(imgSize.x), - divisorsY = _computeDivisors(imgSize.y), - wideSide = Math.max(imgSize.x, imgSize.y), - common = _computeIntersection(divisorsX, divisorsY), - nrOfPatchesList = [8, 10, 15, 20, 32, 60, 80], - nrOfPatchesMap = { - "x-small": 5, - "small": 4, - "medium": 3, - "large": 2, - "x-large": 1 - }, - nrOfPatchesIdx = nrOfPatchesMap[patchSize] || nrOfPatchesMap.medium, - nrOfPatches = nrOfPatchesList[nrOfPatchesIdx], - desiredPatchSize = Math.floor(wideSide / nrOfPatches), - optimalPatchSize; - - function findPatchSizeForDivisors(divisors) { - var i = 0, - found = divisors[Math.floor(divisors.length / 2)]; - - while (i < divisors.length - 1 && divisors[i] < desiredPatchSize) { - i++; - } - if (i > 0) { - if (Math.abs(divisors[i] - desiredPatchSize) > Math.abs(divisors[i - 1] - desiredPatchSize)) { - found = divisors[i - 1]; - } else { - found = divisors[i]; - } - } - if (desiredPatchSize / found < nrOfPatchesList[nrOfPatchesIdx + 1] / nrOfPatchesList[nrOfPatchesIdx] && desiredPatchSize / found > nrOfPatchesList[nrOfPatchesIdx - 1] / nrOfPatchesList[nrOfPatchesIdx]) { - return { x: found, y: found }; - } - return null; - } - - optimalPatchSize = findPatchSizeForDivisors(common); - if (!optimalPatchSize) { - optimalPatchSize = findPatchSizeForDivisors(_computeDivisors(wideSide)); - if (!optimalPatchSize) { - optimalPatchSize = findPatchSizeForDivisors(_computeDivisors(desiredPatchSize * nrOfPatches)); - } - } - return optimalPatchSize; - }; - - function _parseCSSDimensionValues(value) { - var dimension = { - value: parseFloat(value), - unit: value.indexOf("%") === value.length - 1 ? "%" : "%" - }; - - return dimension; - }; - - var _dimensionsConverters = { - top: function top(dimension, context) { - if (dimension.unit === "%") { - return Math.floor(context.height * (dimension.value / 100)); - } - }, - right: function right(dimension, context) { - if (dimension.unit === "%") { - return Math.floor(context.width - context.width * (dimension.value / 100)); - } - }, - bottom: function bottom(dimension, context) { - if (dimension.unit === "%") { - return Math.floor(context.height - context.height * (dimension.value / 100)); - } - }, - left: function left(dimension, context) { - if (dimension.unit === "%") { - return Math.floor(context.width * (dimension.value / 100)); - } - } - };/* unused harmony export _dimensionsConverters */ - - function computeImageArea(inputWidth, inputHeight, area) { - var context = { width: inputWidth, height: inputHeight }; - - var parsedArea = Object.keys(area).reduce(function (result, key) { - var value = area[key], - parsed = _parseCSSDimensionValues(value), - calculated = _dimensionsConverters[key](parsed, context); - - result[key] = calculated; - return result; - }, {}); - - return { - sx: parsedArea.left, - sy: parsedArea.top, - sw: parsedArea.right - parsedArea.left, - sh: parsedArea.bottom - parsedArea.top - }; - }; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__cluster__ = __webpack_require__(74); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__array_helper__ = __webpack_require__(16); +/* harmony export (immutable) */ __webpack_exports__["f"] = imageRef; +/* unused harmony export computeIntegralImage2 */ +/* unused harmony export computeIntegralImage */ +/* unused harmony export thresholdImage */ +/* unused harmony export computeHistogram */ +/* unused harmony export sharpenLine */ +/* unused harmony export determineOtsuThreshold */ +/* harmony export (immutable) */ __webpack_exports__["c"] = otsuThreshold; +/* unused harmony export computeBinaryImage */ +/* harmony export (immutable) */ __webpack_exports__["d"] = cluster; +/* unused harmony export Tracer */ +/* unused harmony export DILATE */ +/* unused harmony export ERODE */ +/* unused harmony export dilate */ +/* unused harmony export erode */ +/* unused harmony export subtract */ +/* unused harmony export bitwiseOr */ +/* unused harmony export countNonZero */ +/* harmony export (immutable) */ __webpack_exports__["e"] = topGeneric; +/* unused harmony export grayArrayFromImage */ +/* unused harmony export grayArrayFromContext */ +/* harmony export (immutable) */ __webpack_exports__["i"] = grayAndHalfSampleFromCanvasData; +/* harmony export (immutable) */ __webpack_exports__["j"] = computeGray; +/* unused harmony export loadImageArray */ +/* harmony export (immutable) */ __webpack_exports__["g"] = halfSample; +/* harmony export (immutable) */ __webpack_exports__["a"] = hsv2rgb; +/* unused harmony export _computeDivisors */ +/* harmony export (immutable) */ __webpack_exports__["b"] = calculatePatchSize; +/* unused harmony export _parseCSSDimensionValues */ +/* unused harmony export _dimensionsConverters */ +/* harmony export (immutable) */ __webpack_exports__["h"] = computeImageArea; + + +var vec2 = { + clone: __webpack_require__(9) +}; +var vec3 = { + clone: __webpack_require__(107) +}; + +/** + * @param x x-coordinate + * @param y y-coordinate + * @return ImageReference {x,y} Coordinate + */ +function imageRef(x, y) { + var that = { + x: x, + y: y, + toVec2: function toVec2() { + return vec2.clone([this.x, this.y]); + }, + toVec3: function toVec3() { + return vec3.clone([this.x, this.y, 1]); + }, + round: function round() { + this.x = this.x > 0.0 ? Math.floor(this.x + 0.5) : Math.floor(this.x - 0.5); + this.y = this.y > 0.0 ? Math.floor(this.y + 0.5) : Math.floor(this.y - 0.5); + return this; + } + }; + return that; +}; + +/** + * Computes an integral image of a given grayscale image. + * @param imageDataContainer {ImageDataContainer} the image to be integrated + */ +function computeIntegralImage2(imageWrapper, integralWrapper) { + var imageData = imageWrapper.data; + var width = imageWrapper.size.x; + var height = imageWrapper.size.y; + var integralImageData = integralWrapper.data; + var sum = 0, + posA = 0, + posB = 0, + posC = 0, + posD = 0, + x, + y; + + // sum up first column + posB = width; + sum = 0; + for (y = 1; y < height; y++) { + sum += imageData[posA]; + integralImageData[posB] += sum; + posA += width; + posB += width; + } + + posA = 0; + posB = 1; + sum = 0; + for (x = 1; x < width; x++) { + sum += imageData[posA]; + integralImageData[posB] += sum; + posA++; + posB++; + } + + for (y = 1; y < height; y++) { + posA = y * width + 1; + posB = (y - 1) * width + 1; + posC = y * width; + posD = (y - 1) * width; + for (x = 1; x < width; x++) { + integralImageData[posA] += imageData[posA] + integralImageData[posB] + integralImageData[posC] - integralImageData[posD]; + posA++; + posB++; + posC++; + posD++; + } + } +}; + +function computeIntegralImage(imageWrapper, integralWrapper) { + var imageData = imageWrapper.data; + var width = imageWrapper.size.x; + var height = imageWrapper.size.y; + var integralImageData = integralWrapper.data; + var sum = 0; + + // sum up first row + for (var i = 0; i < width; i++) { + sum += imageData[i]; + integralImageData[i] = sum; + } + + for (var v = 1; v < height; v++) { + sum = 0; + for (var u = 0; u < width; u++) { + sum += imageData[v * width + u]; + integralImageData[v * width + u] = sum + integralImageData[(v - 1) * width + u]; + } + } +}; + +function thresholdImage(imageWrapper, threshold, targetWrapper) { + if (!targetWrapper) { + targetWrapper = imageWrapper; + } + var imageData = imageWrapper.data, + length = imageData.length, + targetData = targetWrapper.data; + + while (length--) { + targetData[length] = imageData[length] < threshold ? 1 : 0; + } +}; + +function computeHistogram(imageWrapper, bitsPerPixel) { + if (!bitsPerPixel) { + bitsPerPixel = 8; + } + var imageData = imageWrapper.data, + length = imageData.length, + bitShift = 8 - bitsPerPixel, + bucketCnt = 1 << bitsPerPixel, + hist = new Int32Array(bucketCnt); + + while (length--) { + hist[imageData[length] >> bitShift]++; + } + return hist; +}; + +function sharpenLine(line) { + var i, + length = line.length, + left = line[0], + center = line[1], + right; + + for (i = 1; i < length - 1; i++) { + right = line[i + 1]; + // -1 4 -1 kernel + line[i - 1] = center * 2 - left - right & 255; + left = center; + center = right; + } + return line; +}; + +function determineOtsuThreshold(imageWrapper, bitsPerPixel) { + if (!bitsPerPixel) { + bitsPerPixel = 8; + } + var hist, + threshold, + bitShift = 8 - bitsPerPixel; + + function px(init, end) { + var sum = 0, + i; + for (i = init; i <= end; i++) { + sum += hist[i]; + } + return sum; + } + + function mx(init, end) { + var i, + sum = 0; + + for (i = init; i <= end; i++) { + sum += i * hist[i]; + } + + return sum; + } + + function determineThreshold() { + var vet = [0], + p1, + p2, + p12, + k, + m1, + m2, + m12, + max = (1 << bitsPerPixel) - 1; + + hist = computeHistogram(imageWrapper, bitsPerPixel); + for (k = 1; k < max; k++) { + p1 = px(0, k); + p2 = px(k + 1, max); + p12 = p1 * p2; + if (p12 === 0) { + p12 = 1; + } + m1 = mx(0, k) * p2; + m2 = mx(k + 1, max) * p1; + m12 = m1 - m2; + vet[k] = m12 * m12 / p12; + } + return __WEBPACK_IMPORTED_MODULE_1__array_helper__["a" /* default */].maxIndex(vet); + } + + threshold = determineThreshold(); + return threshold << bitShift; +}; + +function otsuThreshold(imageWrapper, targetWrapper) { + var threshold = determineOtsuThreshold(imageWrapper); + + thresholdImage(imageWrapper, threshold, targetWrapper); + return threshold; +}; + +// local thresholding +function computeBinaryImage(imageWrapper, integralWrapper, targetWrapper) { + computeIntegralImage(imageWrapper, integralWrapper); + + if (!targetWrapper) { + targetWrapper = imageWrapper; + } + var imageData = imageWrapper.data; + var targetData = targetWrapper.data; + var width = imageWrapper.size.x; + var height = imageWrapper.size.y; + var integralImageData = integralWrapper.data; + var sum = 0, + v, + u, + kernel = 3, + A, + B, + C, + D, + avg, + size = (kernel * 2 + 1) * (kernel * 2 + 1); + + // clear out top & bottom-border + for (v = 0; v <= kernel; v++) { + for (u = 0; u < width; u++) { + targetData[v * width + u] = 0; + targetData[(height - 1 - v) * width + u] = 0; + } + } + + // clear out left & right border + for (v = kernel; v < height - kernel; v++) { + for (u = 0; u <= kernel; u++) { + targetData[v * width + u] = 0; + targetData[v * width + (width - 1 - u)] = 0; + } + } + + for (v = kernel + 1; v < height - kernel - 1; v++) { + for (u = kernel + 1; u < width - kernel; u++) { + A = integralImageData[(v - kernel - 1) * width + (u - kernel - 1)]; + B = integralImageData[(v - kernel - 1) * width + (u + kernel)]; + C = integralImageData[(v + kernel) * width + (u - kernel - 1)]; + D = integralImageData[(v + kernel) * width + (u + kernel)]; + sum = D - C - B + A; + avg = sum / size; + targetData[v * width + u] = imageData[v * width + u] > avg + 5 ? 0 : 1; + } + } +}; + +function cluster(points, threshold, property) { + var i, + k, + cluster, + point, + clusters = []; + + if (!property) { + property = "rad"; + } + + function addToCluster(newPoint) { + var found = false; + for (k = 0; k < clusters.length; k++) { + cluster = clusters[k]; + if (cluster.fits(newPoint)) { + cluster.add(newPoint); + found = true; + } + } + return found; + } + + // iterate over each cloud + for (i = 0; i < points.length; i++) { + point = __WEBPACK_IMPORTED_MODULE_0__cluster__["a" /* default */].createPoint(points[i], i, property); + if (!addToCluster(point)) { + clusters.push(__WEBPACK_IMPORTED_MODULE_0__cluster__["a" /* default */].create(point, threshold)); + } + } + return clusters; +}; + +var Tracer = { + trace: function trace(points, vec) { + var iteration, + maxIterations = 10, + top = [], + result = [], + centerPos = 0, + currentPos = 0; + + function trace(idx, forward) { + var from, + to, + toIdx, + predictedPos, + thresholdX = 1, + thresholdY = Math.abs(vec[1] / 10), + found = false; + + function match(pos, predicted) { + if (pos.x > predicted.x - thresholdX && pos.x < predicted.x + thresholdX && pos.y > predicted.y - thresholdY && pos.y < predicted.y + thresholdY) { + return true; + } else { + return false; + } + } + + // check if the next index is within the vec specifications + // if not, check as long as the threshold is met + + from = points[idx]; + if (forward) { + predictedPos = { + x: from.x + vec[0], + y: from.y + vec[1] + }; + } else { + predictedPos = { + x: from.x - vec[0], + y: from.y - vec[1] + }; + } + + toIdx = forward ? idx + 1 : idx - 1; + to = points[toIdx]; + while (to && (found = match(to, predictedPos)) !== true && Math.abs(to.y - from.y) < vec[1]) { + toIdx = forward ? toIdx + 1 : toIdx - 1; + to = points[toIdx]; + } + + return found ? toIdx : null; + } + + for (iteration = 0; iteration < maxIterations; iteration++) { + // randomly select point to start with + centerPos = Math.floor(Math.random() * points.length); + + // trace forward + top = []; + currentPos = centerPos; + top.push(points[currentPos]); + while ((currentPos = trace(currentPos, true)) !== null) { + top.push(points[currentPos]); + } + if (centerPos > 0) { + currentPos = centerPos; + while ((currentPos = trace(currentPos, false)) !== null) { + top.push(points[currentPos]); + } + } + + if (top.length > result.length) { + result = top; + } + } + return result; + } +}; + +var DILATE = 1; +var ERODE = 2; + +function dilate(inImageWrapper, outImageWrapper) { + var v, + u, + inImageData = inImageWrapper.data, + outImageData = outImageWrapper.data, + height = inImageWrapper.size.y, + width = inImageWrapper.size.x, + sum, + yStart1, + yStart2, + xStart1, + xStart2; + + for (v = 1; v < height - 1; v++) { + for (u = 1; u < width - 1; u++) { + yStart1 = v - 1; + yStart2 = v + 1; + xStart1 = u - 1; + xStart2 = u + 1; + sum = inImageData[yStart1 * width + xStart1] + inImageData[yStart1 * width + xStart2] + inImageData[v * width + u] + inImageData[yStart2 * width + xStart1] + inImageData[yStart2 * width + xStart2]; + outImageData[v * width + u] = sum > 0 ? 1 : 0; + } + } +}; + +function erode(inImageWrapper, outImageWrapper) { + var v, + u, + inImageData = inImageWrapper.data, + outImageData = outImageWrapper.data, + height = inImageWrapper.size.y, + width = inImageWrapper.size.x, + sum, + yStart1, + yStart2, + xStart1, + xStart2; + + for (v = 1; v < height - 1; v++) { + for (u = 1; u < width - 1; u++) { + yStart1 = v - 1; + yStart2 = v + 1; + xStart1 = u - 1; + xStart2 = u + 1; + sum = inImageData[yStart1 * width + xStart1] + inImageData[yStart1 * width + xStart2] + inImageData[v * width + u] + inImageData[yStart2 * width + xStart1] + inImageData[yStart2 * width + xStart2]; + outImageData[v * width + u] = sum === 5 ? 1 : 0; + } + } +}; + +function subtract(aImageWrapper, bImageWrapper, resultImageWrapper) { + if (!resultImageWrapper) { + resultImageWrapper = aImageWrapper; + } + var length = aImageWrapper.data.length, + aImageData = aImageWrapper.data, + bImageData = bImageWrapper.data, + cImageData = resultImageWrapper.data; + + while (length--) { + cImageData[length] = aImageData[length] - bImageData[length]; + } +}; + +function bitwiseOr(aImageWrapper, bImageWrapper, resultImageWrapper) { + if (!resultImageWrapper) { + resultImageWrapper = aImageWrapper; + } + var length = aImageWrapper.data.length, + aImageData = aImageWrapper.data, + bImageData = bImageWrapper.data, + cImageData = resultImageWrapper.data; + + while (length--) { + cImageData[length] = aImageData[length] || bImageData[length]; + } +}; + +function countNonZero(imageWrapper) { + var length = imageWrapper.data.length, + data = imageWrapper.data, + sum = 0; + + while (length--) { + sum += data[length]; + } + return sum; +}; + +function topGeneric(list, top, scoreFunc) { + var i, + minIdx = 0, + min = 0, + queue = [], + score, + hit, + pos; + + for (i = 0; i < top; i++) { + queue[i] = { + score: 0, + item: null + }; + } + + for (i = 0; i < list.length; i++) { + score = scoreFunc.apply(this, [list[i]]); + if (score > min) { + hit = queue[minIdx]; + hit.score = score; + hit.item = list[i]; + min = Number.MAX_VALUE; + for (pos = 0; pos < top; pos++) { + if (queue[pos].score < min) { + min = queue[pos].score; + minIdx = pos; + } + } + } + } + + return queue; +}; + +function grayArrayFromImage(htmlImage, offsetX, ctx, array) { + ctx.drawImage(htmlImage, offsetX, 0, htmlImage.width, htmlImage.height); + var ctxData = ctx.getImageData(offsetX, 0, htmlImage.width, htmlImage.height).data; + computeGray(ctxData, array); +}; + +function grayArrayFromContext(ctx, size, offset, array) { + var ctxData = ctx.getImageData(offset.x, offset.y, size.x, size.y).data; + computeGray(ctxData, array); +}; + +function grayAndHalfSampleFromCanvasData(canvasData, size, outArray) { + var topRowIdx = 0; + var bottomRowIdx = size.x; + var endIdx = Math.floor(canvasData.length / 4); + var outWidth = size.x / 2; + var outImgIdx = 0; + var inWidth = size.x; + var i; + + while (bottomRowIdx < endIdx) { + for (i = 0; i < outWidth; i++) { + outArray[outImgIdx] = Math.floor((0.299 * canvasData[topRowIdx * 4 + 0] + 0.587 * canvasData[topRowIdx * 4 + 1] + 0.114 * canvasData[topRowIdx * 4 + 2] + (0.299 * canvasData[(topRowIdx + 1) * 4 + 0] + 0.587 * canvasData[(topRowIdx + 1) * 4 + 1] + 0.114 * canvasData[(topRowIdx + 1) * 4 + 2]) + (0.299 * canvasData[bottomRowIdx * 4 + 0] + 0.587 * canvasData[bottomRowIdx * 4 + 1] + 0.114 * canvasData[bottomRowIdx * 4 + 2]) + (0.299 * canvasData[(bottomRowIdx + 1) * 4 + 0] + 0.587 * canvasData[(bottomRowIdx + 1) * 4 + 1] + 0.114 * canvasData[(bottomRowIdx + 1) * 4 + 2])) / 4); + outImgIdx++; + topRowIdx = topRowIdx + 2; + bottomRowIdx = bottomRowIdx + 2; + } + topRowIdx = topRowIdx + inWidth; + bottomRowIdx = bottomRowIdx + inWidth; + } +}; + +function computeGray(imageData, outArray, config) { + var l = imageData.length / 4 | 0, + i, + singleChannel = config && config.singleChannel === true; + + if (singleChannel) { + for (i = 0; i < l; i++) { + outArray[i] = imageData[i * 4 + 0]; + } + } else { + for (i = 0; i < l; i++) { + outArray[i] = Math.floor(0.299 * imageData[i * 4 + 0] + 0.587 * imageData[i * 4 + 1] + 0.114 * imageData[i * 4 + 2]); + } + } +}; + +function loadImageArray(src, callback, canvas) { + if (!canvas) { + canvas = document.createElement('canvas'); + } + var img = new Image(); + img.callback = callback; + img.onload = function () { + canvas.width = this.width; + canvas.height = this.height; + var ctx = canvas.getContext('2d'); + ctx.drawImage(this, 0, 0); + var array = new Uint8Array(this.width * this.height); + ctx.drawImage(this, 0, 0); + var data = ctx.getImageData(0, 0, this.width, this.height).data; + computeGray(data, array); + this.callback(array, { + x: this.width, + y: this.height + }, this); + }; + img.src = src; +}; + +/** + * @param inImg {ImageWrapper} input image to be sampled + * @param outImg {ImageWrapper} to be stored in + */ +function halfSample(inImgWrapper, outImgWrapper) { + var inImg = inImgWrapper.data; + var inWidth = inImgWrapper.size.x; + var outImg = outImgWrapper.data; + var topRowIdx = 0; + var bottomRowIdx = inWidth; + var endIdx = inImg.length; + var outWidth = inWidth / 2; + var outImgIdx = 0; + while (bottomRowIdx < endIdx) { + for (var i = 0; i < outWidth; i++) { + outImg[outImgIdx] = Math.floor((inImg[topRowIdx] + inImg[topRowIdx + 1] + inImg[bottomRowIdx] + inImg[bottomRowIdx + 1]) / 4); + outImgIdx++; + topRowIdx = topRowIdx + 2; + bottomRowIdx = bottomRowIdx + 2; + } + topRowIdx = topRowIdx + inWidth; + bottomRowIdx = bottomRowIdx + inWidth; + } +}; + +function hsv2rgb(hsv, rgb) { + var h = hsv[0], + s = hsv[1], + v = hsv[2], + c = v * s, + x = c * (1 - Math.abs(h / 60 % 2 - 1)), + m = v - c, + r = 0, + g = 0, + b = 0; + + rgb = rgb || [0, 0, 0]; + + if (h < 60) { + r = c; + g = x; + } else if (h < 120) { + r = x; + g = c; + } else if (h < 180) { + g = c; + b = x; + } else if (h < 240) { + g = x; + b = c; + } else if (h < 300) { + r = x; + b = c; + } else if (h < 360) { + r = c; + b = x; + } + rgb[0] = (r + m) * 255 | 0; + rgb[1] = (g + m) * 255 | 0; + rgb[2] = (b + m) * 255 | 0; + return rgb; +}; + +function _computeDivisors(n) { + var largeDivisors = [], + divisors = [], + i; + + for (i = 1; i < Math.sqrt(n) + 1; i++) { + if (n % i === 0) { + divisors.push(i); + if (i !== n / i) { + largeDivisors.unshift(Math.floor(n / i)); + } + } + } + return divisors.concat(largeDivisors); +}; + +function _computeIntersection(arr1, arr2) { + var i = 0, + j = 0, + result = []; + + while (i < arr1.length && j < arr2.length) { + if (arr1[i] === arr2[j]) { + result.push(arr1[i]); + i++; + j++; + } else if (arr1[i] > arr2[j]) { + j++; + } else { + i++; + } + } + return result; +}; + +function calculatePatchSize(patchSize, imgSize) { + var divisorsX = _computeDivisors(imgSize.x), + divisorsY = _computeDivisors(imgSize.y), + wideSide = Math.max(imgSize.x, imgSize.y), + common = _computeIntersection(divisorsX, divisorsY), + nrOfPatchesList = [8, 10, 15, 20, 32, 60, 80], + nrOfPatchesMap = { + "x-small": 5, + "small": 4, + "medium": 3, + "large": 2, + "x-large": 1 + }, + nrOfPatchesIdx = nrOfPatchesMap[patchSize] || nrOfPatchesMap.medium, + nrOfPatches = nrOfPatchesList[nrOfPatchesIdx], + desiredPatchSize = Math.floor(wideSide / nrOfPatches), + optimalPatchSize; + + function findPatchSizeForDivisors(divisors) { + var i = 0, + found = divisors[Math.floor(divisors.length / 2)]; + + while (i < divisors.length - 1 && divisors[i] < desiredPatchSize) { + i++; + } + if (i > 0) { + if (Math.abs(divisors[i] - desiredPatchSize) > Math.abs(divisors[i - 1] - desiredPatchSize)) { + found = divisors[i - 1]; + } else { + found = divisors[i]; + } + } + if (desiredPatchSize / found < nrOfPatchesList[nrOfPatchesIdx + 1] / nrOfPatchesList[nrOfPatchesIdx] && desiredPatchSize / found > nrOfPatchesList[nrOfPatchesIdx - 1] / nrOfPatchesList[nrOfPatchesIdx]) { + return { x: found, y: found }; + } + return null; + } + + optimalPatchSize = findPatchSizeForDivisors(common); + if (!optimalPatchSize) { + optimalPatchSize = findPatchSizeForDivisors(_computeDivisors(wideSide)); + if (!optimalPatchSize) { + optimalPatchSize = findPatchSizeForDivisors(_computeDivisors(desiredPatchSize * nrOfPatches)); + } + } + return optimalPatchSize; +}; + +function _parseCSSDimensionValues(value) { + var dimension = { + value: parseFloat(value), + unit: value.indexOf("%") === value.length - 1 ? "%" : "%" + }; + + return dimension; +}; + +var _dimensionsConverters = { + top: function top(dimension, context) { + if (dimension.unit === "%") { + return Math.floor(context.height * (dimension.value / 100)); + } + }, + right: function right(dimension, context) { + if (dimension.unit === "%") { + return Math.floor(context.width - context.width * (dimension.value / 100)); + } + }, + bottom: function bottom(dimension, context) { + if (dimension.unit === "%") { + return Math.floor(context.height - context.height * (dimension.value / 100)); + } + }, + left: function left(dimension, context) { + if (dimension.unit === "%") { + return Math.floor(context.width * (dimension.value / 100)); + } + } +}; + +function computeImageArea(inputWidth, inputHeight, area) { + var context = { width: inputWidth, height: inputHeight }; + + var parsedArea = Object.keys(area).reduce(function (result, key) { + var value = area[key], + parsed = _parseCSSDimensionValues(value), + calculated = _dimensionsConverters[key](parsed, context); + + result[key] = calculated; + return result; + }, {}); + + return { + sx: parsedArea.left, + sy: parsedArea.top, + sw: parsedArea.right - parsedArea.left, + sh: parsedArea.bottom - parsedArea.top + }; +}; + +/***/ }), /* 27 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__subImage__ = __webpack_require__(80); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_cv_utils__ = __webpack_require__(26); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__common_array_helper__ = __webpack_require__(16); - - - - var vec2 = { - clone: __webpack_require__(8) - }; - - /** - * Represents a basic image combining the data and size. - * In addition, some methods for manipulation are contained. - * @param size {x,y} The size of the image in pixel - * @param data {Array} If given, a flat array containing the pixel data - * @param ArrayType {Type} If given, the desired DataType of the Array (may be typed/non-typed) - * @param initialize {Boolean} Indicating if the array should be initialized on creation. - * @returns {ImageWrapper} - */ - function ImageWrapper(size, data, ArrayType, initialize) { - if (!data) { - if (ArrayType) { - this.data = new ArrayType(size.x * size.y); - if (ArrayType === Array && initialize) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_2__common_array_helper__["a"].init(this.data, 0); - } - } else { - this.data = new Uint8Array(size.x * size.y); - if (Uint8Array === Array && initialize) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_2__common_array_helper__["a"].init(this.data, 0); - } - } - } else { - this.data = data; - } - this.size = size; - } - - /** - * tests if a position is within the image with a given offset - * @param imgRef {x, y} The location to test - * @param border Number the padding value in pixel - * @returns {Boolean} true if location inside the image's border, false otherwise - * @see cvd/image.h - */ - ImageWrapper.prototype.inImageWithBorder = function (imgRef, border) { - return imgRef.x >= border && imgRef.y >= border && imgRef.x < this.size.x - border && imgRef.y < this.size.y - border; - }; - - /** - * Performs bilinear sampling - * @param inImg Image to extract sample from - * @param x the x-coordinate - * @param y the y-coordinate - * @returns the sampled value - * @see cvd/vision.h - */ - ImageWrapper.sample = function (inImg, x, y) { - var lx = Math.floor(x); - var ly = Math.floor(y); - var w = inImg.size.x; - var base = ly * inImg.size.x + lx; - var a = inImg.data[base + 0]; - var b = inImg.data[base + 1]; - var c = inImg.data[base + w]; - var d = inImg.data[base + w + 1]; - var e = a - b; - x -= lx; - y -= ly; - - var result = Math.floor(x * (y * (e - c + d) - e) + y * (c - a) + a); - return result; - }; - - /** - * Initializes a given array. Sets each element to zero. - * @param array {Array} The array to initialize - */ - ImageWrapper.clearArray = function (array) { - var l = array.length; - while (l--) { - array[l] = 0; - } - }; - - /** - * Creates a {SubImage} from the current image ({this}). - * @param from {ImageRef} The position where to start the {SubImage} from. (top-left corner) - * @param size {ImageRef} The size of the resulting image - * @returns {SubImage} A shared part of the original image - */ - ImageWrapper.prototype.subImage = function (from, size) { - return new /* harmony import */__WEBPACK_IMPORTED_MODULE_0__subImage__["a"](from, size, this); - }; - - /** - * Creates an {ImageWrapper) and copies the needed underlying image-data area - * @param imageWrapper {ImageWrapper} The target {ImageWrapper} where the data should be copied - * @param from {ImageRef} The location where to copy from (top-left location) - */ - ImageWrapper.prototype.subImageAsCopy = function (imageWrapper, from) { - var sizeY = imageWrapper.size.y, - sizeX = imageWrapper.size.x; - var x, y; - for (x = 0; x < sizeX; x++) { - for (y = 0; y < sizeY; y++) { - imageWrapper.data[y * sizeX + x] = this.data[(from.y + y) * this.size.x + from.x + x]; - } - } - }; - - ImageWrapper.prototype.copyTo = function (imageWrapper) { - var length = this.data.length, - srcData = this.data, - dstData = imageWrapper.data; - - while (length--) { - dstData[length] = srcData[length]; - } - }; - - /** - * Retrieves a given pixel position from the image - * @param x {Number} The x-position - * @param y {Number} The y-position - * @returns {Number} The grayscale value at the pixel-position - */ - ImageWrapper.prototype.get = function (x, y) { - return this.data[y * this.size.x + x]; - }; - - /** - * Retrieves a given pixel position from the image - * @param x {Number} The x-position - * @param y {Number} The y-position - * @returns {Number} The grayscale value at the pixel-position - */ - ImageWrapper.prototype.getSafe = function (x, y) { - var i; - - if (!this.indexMapping) { - this.indexMapping = { - x: [], - y: [] - }; - for (i = 0; i < this.size.x; i++) { - this.indexMapping.x[i] = i; - this.indexMapping.x[i + this.size.x] = i; - } - for (i = 0; i < this.size.y; i++) { - this.indexMapping.y[i] = i; - this.indexMapping.y[i + this.size.y] = i; - } - } - return this.data[this.indexMapping.y[y + this.size.y] * this.size.x + this.indexMapping.x[x + this.size.x]]; - }; - - /** - * Sets a given pixel position in the image - * @param x {Number} The x-position - * @param y {Number} The y-position - * @param value {Number} The grayscale value to set - * @returns {ImageWrapper} The Image itself (for possible chaining) - */ - ImageWrapper.prototype.set = function (x, y, value) { - this.data[y * this.size.x + x] = value; - return this; - }; - - /** - * Sets the border of the image (1 pixel) to zero - */ - ImageWrapper.prototype.zeroBorder = function () { - var i, - width = this.size.x, - height = this.size.y, - data = this.data; - for (i = 0; i < width; i++) { - data[i] = data[(height - 1) * width + i] = 0; - } - for (i = 1; i < height - 1; i++) { - data[i * width] = data[i * width + (width - 1)] = 0; - } - }; - - /** - * Inverts a binary image in place - */ - ImageWrapper.prototype.invert = function () { - var data = this.data, - length = data.length; - - while (length--) { - data[length] = data[length] ? 0 : 1; - } - }; - - ImageWrapper.prototype.convolve = function (kernel) { - var x, - y, - kx, - ky, - kSize = kernel.length / 2 | 0, - accu = 0; - for (y = 0; y < this.size.y; y++) { - for (x = 0; x < this.size.x; x++) { - accu = 0; - for (ky = -kSize; ky <= kSize; ky++) { - for (kx = -kSize; kx <= kSize; kx++) { - accu += kernel[ky + kSize][kx + kSize] * this.getSafe(x + kx, y + ky); - } - } - this.data[y * this.size.x + x] = accu; - } - } - }; - - ImageWrapper.prototype.moments = function (labelcount) { - var data = this.data, - x, - y, - height = this.size.y, - width = this.size.x, - val, - ysq, - labelsum = [], - i, - label, - mu11, - mu02, - mu20, - x_, - y_, - tmp, - result = [], - PI = Math.PI, - PI_4 = PI / 4; - - if (labelcount <= 0) { - return result; - } - - for (i = 0; i < labelcount; i++) { - labelsum[i] = { - m00: 0, - m01: 0, - m10: 0, - m11: 0, - m02: 0, - m20: 0, - theta: 0, - rad: 0 - }; - } - - for (y = 0; y < height; y++) { - ysq = y * y; - for (x = 0; x < width; x++) { - val = data[y * width + x]; - if (val > 0) { - label = labelsum[val - 1]; - label.m00 += 1; - label.m01 += y; - label.m10 += x; - label.m11 += x * y; - label.m02 += ysq; - label.m20 += x * x; - } - } - } - - for (i = 0; i < labelcount; i++) { - label = labelsum[i]; - if (!isNaN(label.m00) && label.m00 !== 0) { - x_ = label.m10 / label.m00; - y_ = label.m01 / label.m00; - mu11 = label.m11 / label.m00 - x_ * y_; - mu02 = label.m02 / label.m00 - y_ * y_; - mu20 = label.m20 / label.m00 - x_ * x_; - tmp = (mu02 - mu20) / (2 * mu11); - tmp = 0.5 * Math.atan(tmp) + (mu11 >= 0 ? PI_4 : -PI_4) + PI; - label.theta = (tmp * 180 / PI + 90) % 180 - 90; - if (label.theta < 0) { - label.theta += 180; - } - label.rad = tmp > PI ? tmp - PI : tmp; - label.vec = vec2.clone([Math.cos(tmp), Math.sin(tmp)]); - result.push(label); - } - } - - return result; - }; - - /** - * Displays the {ImageWrapper} in a given canvas - * @param canvas {Canvas} The canvas element to write to - * @param scale {Number} Scale which is applied to each pixel-value - */ - ImageWrapper.prototype.show = function (canvas, scale) { - var ctx, frame, data, current, pixel, x, y; - - if (!scale) { - scale = 1.0; - } - ctx = canvas.getContext('2d'); - canvas.width = this.size.x; - canvas.height = this.size.y; - frame = ctx.getImageData(0, 0, canvas.width, canvas.height); - data = frame.data; - current = 0; - for (y = 0; y < this.size.y; y++) { - for (x = 0; x < this.size.x; x++) { - pixel = y * this.size.x + x; - current = this.get(x, y) * scale; - data[pixel * 4 + 0] = current; - data[pixel * 4 + 1] = current; - data[pixel * 4 + 2] = current; - data[pixel * 4 + 3] = 255; - } - } - //frame.data = data; - ctx.putImageData(frame, 0, 0); - }; - - /** - * Displays the {SubImage} in a given canvas - * @param canvas {Canvas} The canvas element to write to - * @param scale {Number} Scale which is applied to each pixel-value - */ - ImageWrapper.prototype.overlay = function (canvas, scale, from) { - if (!scale || scale < 0 || scale > 360) { - scale = 360; - } - var hsv = [0, 1, 1]; - var rgb = [0, 0, 0]; - var whiteRgb = [255, 255, 255]; - var blackRgb = [0, 0, 0]; - var result = []; - var ctx = canvas.getContext('2d'); - var frame = ctx.getImageData(from.x, from.y, this.size.x, this.size.y); - var data = frame.data; - var length = this.data.length; - while (length--) { - hsv[0] = this.data[length] * scale; - result = hsv[0] <= 0 ? whiteRgb : hsv[0] >= 360 ? blackRgb : /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["a"].bind()(hsv, rgb); - data[length * 4 + 0] = result[0]; - data[length * 4 + 1] = result[1]; - data[length * 4 + 2] = result[2]; - data[length * 4 + 3] = 255; - } - ctx.putImageData(frame, from.x, from.y); - }; - - /* harmony default export */ exports["a"] = ImageWrapper; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__subImage__ = __webpack_require__(78); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_cv_utils__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__common_array_helper__ = __webpack_require__(16); + + + +var vec2 = { + clone: __webpack_require__(9) +}; + +/** + * Represents a basic image combining the data and size. + * In addition, some methods for manipulation are contained. + * @param size {x,y} The size of the image in pixel + * @param data {Array} If given, a flat array containing the pixel data + * @param ArrayType {Type} If given, the desired DataType of the Array (may be typed/non-typed) + * @param initialize {Boolean} Indicating if the array should be initialized on creation. + * @returns {ImageWrapper} + */ +function ImageWrapper(size, data, ArrayType, initialize) { + if (!data) { + if (ArrayType) { + this.data = new ArrayType(size.x * size.y); + if (ArrayType === Array && initialize) { + __WEBPACK_IMPORTED_MODULE_2__common_array_helper__["a" /* default */].init(this.data, 0); + } + } else { + this.data = new Uint8Array(size.x * size.y); + if (Uint8Array === Array && initialize) { + __WEBPACK_IMPORTED_MODULE_2__common_array_helper__["a" /* default */].init(this.data, 0); + } + } + } else { + this.data = data; + } + this.size = size; +} + +/** + * tests if a position is within the image with a given offset + * @param imgRef {x, y} The location to test + * @param border Number the padding value in pixel + * @returns {Boolean} true if location inside the image's border, false otherwise + * @see cvd/image.h + */ +ImageWrapper.prototype.inImageWithBorder = function (imgRef, border) { + return imgRef.x >= border && imgRef.y >= border && imgRef.x < this.size.x - border && imgRef.y < this.size.y - border; +}; + +/** + * Performs bilinear sampling + * @param inImg Image to extract sample from + * @param x the x-coordinate + * @param y the y-coordinate + * @returns the sampled value + * @see cvd/vision.h + */ +ImageWrapper.sample = function (inImg, x, y) { + var lx = Math.floor(x); + var ly = Math.floor(y); + var w = inImg.size.x; + var base = ly * inImg.size.x + lx; + var a = inImg.data[base + 0]; + var b = inImg.data[base + 1]; + var c = inImg.data[base + w]; + var d = inImg.data[base + w + 1]; + var e = a - b; + x -= lx; + y -= ly; + + var result = Math.floor(x * (y * (e - c + d) - e) + y * (c - a) + a); + return result; +}; + +/** + * Initializes a given array. Sets each element to zero. + * @param array {Array} The array to initialize + */ +ImageWrapper.clearArray = function (array) { + var l = array.length; + while (l--) { + array[l] = 0; + } +}; + +/** + * Creates a {SubImage} from the current image ({this}). + * @param from {ImageRef} The position where to start the {SubImage} from. (top-left corner) + * @param size {ImageRef} The size of the resulting image + * @returns {SubImage} A shared part of the original image + */ +ImageWrapper.prototype.subImage = function (from, size) { + return new __WEBPACK_IMPORTED_MODULE_0__subImage__["a" /* default */](from, size, this); +}; + +/** + * Creates an {ImageWrapper) and copies the needed underlying image-data area + * @param imageWrapper {ImageWrapper} The target {ImageWrapper} where the data should be copied + * @param from {ImageRef} The location where to copy from (top-left location) + */ +ImageWrapper.prototype.subImageAsCopy = function (imageWrapper, from) { + var sizeY = imageWrapper.size.y, + sizeX = imageWrapper.size.x; + var x, y; + for (x = 0; x < sizeX; x++) { + for (y = 0; y < sizeY; y++) { + imageWrapper.data[y * sizeX + x] = this.data[(from.y + y) * this.size.x + from.x + x]; + } + } +}; + +ImageWrapper.prototype.copyTo = function (imageWrapper) { + var length = this.data.length, + srcData = this.data, + dstData = imageWrapper.data; + + while (length--) { + dstData[length] = srcData[length]; + } +}; + +/** + * Retrieves a given pixel position from the image + * @param x {Number} The x-position + * @param y {Number} The y-position + * @returns {Number} The grayscale value at the pixel-position + */ +ImageWrapper.prototype.get = function (x, y) { + return this.data[y * this.size.x + x]; +}; + +/** + * Retrieves a given pixel position from the image + * @param x {Number} The x-position + * @param y {Number} The y-position + * @returns {Number} The grayscale value at the pixel-position + */ +ImageWrapper.prototype.getSafe = function (x, y) { + var i; + + if (!this.indexMapping) { + this.indexMapping = { + x: [], + y: [] + }; + for (i = 0; i < this.size.x; i++) { + this.indexMapping.x[i] = i; + this.indexMapping.x[i + this.size.x] = i; + } + for (i = 0; i < this.size.y; i++) { + this.indexMapping.y[i] = i; + this.indexMapping.y[i + this.size.y] = i; + } + } + return this.data[this.indexMapping.y[y + this.size.y] * this.size.x + this.indexMapping.x[x + this.size.x]]; +}; + +/** + * Sets a given pixel position in the image + * @param x {Number} The x-position + * @param y {Number} The y-position + * @param value {Number} The grayscale value to set + * @returns {ImageWrapper} The Image itself (for possible chaining) + */ +ImageWrapper.prototype.set = function (x, y, value) { + this.data[y * this.size.x + x] = value; + return this; +}; + +/** + * Sets the border of the image (1 pixel) to zero + */ +ImageWrapper.prototype.zeroBorder = function () { + var i, + width = this.size.x, + height = this.size.y, + data = this.data; + for (i = 0; i < width; i++) { + data[i] = data[(height - 1) * width + i] = 0; + } + for (i = 1; i < height - 1; i++) { + data[i * width] = data[i * width + (width - 1)] = 0; + } +}; + +/** + * Inverts a binary image in place + */ +ImageWrapper.prototype.invert = function () { + var data = this.data, + length = data.length; + + while (length--) { + data[length] = data[length] ? 0 : 1; + } +}; + +ImageWrapper.prototype.convolve = function (kernel) { + var x, + y, + kx, + ky, + kSize = kernel.length / 2 | 0, + accu = 0; + for (y = 0; y < this.size.y; y++) { + for (x = 0; x < this.size.x; x++) { + accu = 0; + for (ky = -kSize; ky <= kSize; ky++) { + for (kx = -kSize; kx <= kSize; kx++) { + accu += kernel[ky + kSize][kx + kSize] * this.getSafe(x + kx, y + ky); + } + } + this.data[y * this.size.x + x] = accu; + } + } +}; + +ImageWrapper.prototype.moments = function (labelcount) { + var data = this.data, + x, + y, + height = this.size.y, + width = this.size.x, + val, + ysq, + labelsum = [], + i, + label, + mu11, + mu02, + mu20, + x_, + y_, + tmp, + result = [], + PI = Math.PI, + PI_4 = PI / 4; + + if (labelcount <= 0) { + return result; + } + + for (i = 0; i < labelcount; i++) { + labelsum[i] = { + m00: 0, + m01: 0, + m10: 0, + m11: 0, + m02: 0, + m20: 0, + theta: 0, + rad: 0 + }; + } + + for (y = 0; y < height; y++) { + ysq = y * y; + for (x = 0; x < width; x++) { + val = data[y * width + x]; + if (val > 0) { + label = labelsum[val - 1]; + label.m00 += 1; + label.m01 += y; + label.m10 += x; + label.m11 += x * y; + label.m02 += ysq; + label.m20 += x * x; + } + } + } + + for (i = 0; i < labelcount; i++) { + label = labelsum[i]; + if (!isNaN(label.m00) && label.m00 !== 0) { + x_ = label.m10 / label.m00; + y_ = label.m01 / label.m00; + mu11 = label.m11 / label.m00 - x_ * y_; + mu02 = label.m02 / label.m00 - y_ * y_; + mu20 = label.m20 / label.m00 - x_ * x_; + tmp = (mu02 - mu20) / (2 * mu11); + tmp = 0.5 * Math.atan(tmp) + (mu11 >= 0 ? PI_4 : -PI_4) + PI; + label.theta = (tmp * 180 / PI + 90) % 180 - 90; + if (label.theta < 0) { + label.theta += 180; + } + label.rad = tmp > PI ? tmp - PI : tmp; + label.vec = vec2.clone([Math.cos(tmp), Math.sin(tmp)]); + result.push(label); + } + } + + return result; +}; + +/** + * Displays the {ImageWrapper} in a given canvas + * @param canvas {Canvas} The canvas element to write to + * @param scale {Number} Scale which is applied to each pixel-value + */ +ImageWrapper.prototype.show = function (canvas, scale) { + var ctx, frame, data, current, pixel, x, y; + + if (!scale) { + scale = 1.0; + } + ctx = canvas.getContext('2d'); + canvas.width = this.size.x; + canvas.height = this.size.y; + frame = ctx.getImageData(0, 0, canvas.width, canvas.height); + data = frame.data; + current = 0; + for (y = 0; y < this.size.y; y++) { + for (x = 0; x < this.size.x; x++) { + pixel = y * this.size.x + x; + current = this.get(x, y) * scale; + data[pixel * 4 + 0] = current; + data[pixel * 4 + 1] = current; + data[pixel * 4 + 2] = current; + data[pixel * 4 + 3] = 255; + } + } + //frame.data = data; + ctx.putImageData(frame, 0, 0); +}; + +/** + * Displays the {SubImage} in a given canvas + * @param canvas {Canvas} The canvas element to write to + * @param scale {Number} Scale which is applied to each pixel-value + */ +ImageWrapper.prototype.overlay = function (canvas, scale, from) { + if (!scale || scale < 0 || scale > 360) { + scale = 360; + } + var hsv = [0, 1, 1]; + var rgb = [0, 0, 0]; + var whiteRgb = [255, 255, 255]; + var blackRgb = [0, 0, 0]; + var result = []; + var ctx = canvas.getContext('2d'); + var frame = ctx.getImageData(from.x, from.y, this.size.x, this.size.y); + var data = frame.data; + var length = this.data.length; + while (length--) { + hsv[0] = this.data[length] * scale; + result = hsv[0] <= 0 ? whiteRgb : hsv[0] >= 360 ? blackRgb : __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["a" /* hsv2rgb */])(hsv, rgb); + data[length * 4 + 0] = result[0]; + data[length * 4 + 1] = result[1]; + data[length * 4 + 2] = result[2]; + data[length * 4 + 3] = 255; + } + ctx.putImageData(frame, from.x, from.y); +}; + +/* harmony default export */ __webpack_exports__["a"] = ImageWrapper; + +/***/ }), /* 28 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(3), + root = __webpack_require__(1); - var getNative = __webpack_require__(5), - root = __webpack_require__(3); - - /* Built-in method references that are verified to be native. */ - var Map = getNative(root, 'Map'); - - module.e = Map; +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); +module.exports = Map; -/***/ }, + +/***/ }), /* 29 */ -/***/ function(module, exports, __webpack_require__) { - - var mapCacheClear = __webpack_require__(177), - mapCacheDelete = __webpack_require__(178), - mapCacheGet = __webpack_require__(179), - mapCacheHas = __webpack_require__(180), - mapCacheSet = __webpack_require__(181); - - /** - * 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 ? entries.length : 0; - - 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; - - module.e = MapCache; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var mapCacheClear = __webpack_require__(174), + mapCacheDelete = __webpack_require__(175), + mapCacheGet = __webpack_require__(176), + mapCacheHas = __webpack_require__(177), + mapCacheSet = __webpack_require__(178); + +/** + * 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; + +module.exports = MapCache; + + +/***/ }), /* 30 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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; - } - - module.e = arrayPush; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var ListCache = __webpack_require__(17), + stackClear = __webpack_require__(189), + stackDelete = __webpack_require__(190), + stackGet = __webpack_require__(191), + stackHas = __webpack_require__(192), + stackSet = __webpack_require__(193); + +/** + * 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; + +module.exports = Stack; + + +/***/ }), /* 31 */ -/***/ function(module, exports, __webpack_require__) { - - var Uint8Array = __webpack_require__(47); - - /** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; - } - - module.e = cloneArrayBuffer; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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; +} + +module.exports = arrayPush; + + +/***/ }), /* 32 */ -/***/ function(module, exports, __webpack_require__) { - - var assignValue = __webpack_require__(52); - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - assignValue(object, key, newValue === undefined ? source[key] : newValue); - } - return object; - } - - module.e = copyObject; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var defineProperty = __webpack_require__(57); + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +module.exports = baseAssignValue; + + +/***/ }), /* 33 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { + +var castPath = __webpack_require__(19), + toKey = __webpack_require__(11); + +/** + * 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 overArg = __webpack_require__(37); - - /** Built-in value references. */ - var getPrototype = overArg(Object.getPrototypeOf, Object); - - module.e = getPrototype; + var index = 0, + length = path.length; + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} -/***/ }, +module.exports = baseGet; + + +/***/ }), /* 34 */ -/***/ function(module, exports, __webpack_require__) { - - var overArg = __webpack_require__(37), - stubArray = __webpack_require__(74); - - /* 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 symbol properties of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray; - - module.e = getSymbols; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var overArg = __webpack_require__(64); + +/** Built-in value references. */ +var getPrototype = overArg(Object.getPrototypeOf, Object); + +module.exports = getPrototype; + + +/***/ }), /* 35 */ -/***/ function(module, exports, __webpack_require__) { - - var DataView = __webpack_require__(110), - Map = __webpack_require__(28), - Promise = __webpack_require__(112), - Set = __webpack_require__(113), - WeakMap = __webpack_require__(115), - baseGetTag = __webpack_require__(125), - toSource = __webpack_require__(69); - - /** `Object#toString` result references. */ - var mapTag = '[object Map]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - setTag = '[object Set]', - weakMapTag = '[object WeakMap]'; - - var dataViewTag = '[object DataView]'; - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** 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, - // for data views in Edge < 14, and promises in Node.js. - if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = objectToString.call(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : undefined; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; - } - - module.e = getTag; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var isArray = __webpack_require__(0), + isSymbol = __webpack_require__(39); + +/** 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(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +module.exports = isKey; + + +/***/ }), /* 36 */ -/***/ function(module, exports, __webpack_require__) { - - /** 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) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); - } - - module.e = isIndex; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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; +} + +module.exports = identity; + + +/***/ }), /* 37 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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)); - }; - } - - module.e = overArg; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(6), + isObject = __webpack_require__(2); + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[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(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 || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +module.exports = isFunction; + + +/***/ }), /* 38 */ -/***/ function(module, exports, __webpack_require__) { - - var isObject = __webpack_require__(2); - - /** `Object#toString` result references. */ - var funcTag = '[object Function]', - genTag = '[object GeneratorFunction]'; - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** - * 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) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8-9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; - } - - module.e = isFunction; - - -/***/ }, +/***/ (function(module, exports) { + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 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; +} + +module.exports = isLength; + + +/***/ }), /* 39 */ -/***/ function(module, exports, __webpack_require__) { - - /** Used as references for various `Number` constants. */ - var MAX_SAFE_INTEGER = 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; - } - - module.e = isLength; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(6), + isObjectLike = __webpack_require__(4); + +/** `Object#toString` result references. */ +var symbolTag = '[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(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; + + +/***/ }), /* 40 */ -/***/ function(module, exports, __webpack_require__) { - - var isObjectLike = __webpack_require__(13); - - /** `Object#toString` result references. */ - var symbolTag = '[object Symbol]'; - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** - * 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(value) && objectToString.call(value) == symbolTag); - } - - module.e = isSymbol; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var arrayLikeKeys = __webpack_require__(48), + baseKeysIn = __webpack_require__(126), + isArrayLike = __webpack_require__(14); + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @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; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +} + +module.exports = keysIn; + + +/***/ }), /* 41 */ -/***/ function(module, exports, __webpack_require__) { - - var baseIsTypedArray = __webpack_require__(130), - baseUnary = __webpack_require__(141), - nodeUtil = __webpack_require__(183); - - /* 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; - - module.e = isTypedArray; - - -/***/ }, +/***/ (function(module, exports) { + +module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + if(!module.children) module.children = []; + Object.defineProperty(module, "loaded", { + enumerable: true, + get: function() { + return module.l; + } + }); + Object.defineProperty(module, "id", { + enumerable: true, + get: function() { + return module.i; + } + }); + module.webpackPolyfill = 1; + } + return module; +}; + + +/***/ }), /* 42 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_image_debug__ = __webpack_require__(6); - - - function contains(codeResult, list) { - if (list) { - return list.some(function (item) { - return Object.keys(item).every(function (key) { - return item[key] === codeResult[key]; - }); - }); - } - return false; - } - - function passesFilter(codeResult, filter) { - if (typeof filter === 'function') { - return filter(codeResult); - } - return true; - } - - /* harmony default export */ exports["a"] = { - create: function create(config) { - var canvas = document.createElement("canvas"), - ctx = canvas.getContext("2d"), - results = [], - capacity = config.capacity || 20, - capture = config.capture === true; - - function matchesConstraints(codeResult) { - return capacity && codeResult && !contains(codeResult, config.blacklist) && passesFilter(codeResult, config.filter); - } - - return { - addResult: function addResult(data, imageSize, codeResult) { - var result = {}; - - if (matchesConstraints(codeResult)) { - capacity--; - result.codeResult = codeResult; - if (capture) { - canvas.width = imageSize.x; - canvas.height = imageSize.y; - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_image_debug__["a"].drawImage(data, imageSize, ctx); - result.frame = canvas.toDataURL(); - } - results.push(result); - } - }, - getResults: function getResults() { - return results; - } - }; - } - }; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_image_debug__ = __webpack_require__(7); + + +function contains(codeResult, list) { + if (list) { + return list.some(function (item) { + return Object.keys(item).every(function (key) { + return item[key] === codeResult[key]; + }); + }); + } + return false; +} + +function passesFilter(codeResult, filter) { + if (typeof filter === 'function') { + return filter(codeResult); + } + return true; +} + +/* harmony default export */ __webpack_exports__["a"] = { + create: function create(config) { + var canvas = document.createElement("canvas"), + ctx = canvas.getContext("2d"), + results = [], + capacity = config.capacity || 20, + capture = config.capture === true; + + function matchesConstraints(codeResult) { + return capacity && codeResult && !contains(codeResult, config.blacklist) && passesFilter(codeResult, config.filter); + } + + return { + addResult: function addResult(data, imageSize, codeResult) { + var result = {}; + + if (matchesConstraints(codeResult)) { + capacity--; + result.codeResult = codeResult; + if (capture) { + canvas.width = imageSize.x; + canvas.height = imageSize.y; + __WEBPACK_IMPORTED_MODULE_0__common_image_debug__["a" /* default */].drawImage(data, imageSize, ctx); + result.frame = canvas.toDataURL(); + } + results.push(result); + } + }, + getResults: function getResults() { + return results; + } + }; + } +}; + +/***/ }), /* 43 */ -/***/ function(module, exports, __webpack_require__) { - - var config = void 0; - - if (true) { - config = __webpack_require__(82); - } else if (ENV.node) { - config = require('./config.node.js'); - } else { - config = require('./config.prod.js'); - } - - /* harmony default export */ exports["a"] = config; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +var config = void 0; + +if (true) { + config = __webpack_require__(80); +} else if (ENV.node) { + config = require('./config.node.js'); +} else { + config = require('./config.prod.js'); +} + +/* harmony default export */ __webpack_exports__["a"] = config; + +/***/ }), /* 44 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization - */ - var Tracer = { - searchDirections: [[0, 1], [1, 1], [1, 0], [1, -1], [0, -1], [-1, -1], [-1, 0], [-1, 1]], - create: function create(imageWrapper, labelWrapper) { - var imageData = imageWrapper.data, - labelData = labelWrapper.data, - searchDirections = this.searchDirections, - width = imageWrapper.size.x, - pos; - - function _trace(current, color, label, edgelabel) { - var i, y, x; - - for (i = 0; i < 7; i++) { - y = current.cy + searchDirections[current.dir][0]; - x = current.cx + searchDirections[current.dir][1]; - pos = y * width + x; - if (imageData[pos] === color && (labelData[pos] === 0 || labelData[pos] === label)) { - labelData[pos] = label; - current.cy = y; - current.cx = x; - return true; - } else { - if (labelData[pos] === 0) { - labelData[pos] = edgelabel; - } - current.dir = (current.dir + 1) % 8; - } - } - return false; - } - - function vertex2D(x, y, dir) { - return { - dir: dir, - x: x, - y: y, - next: null, - prev: null - }; - } - - function _contourTracing(sy, sx, label, color, edgelabel) { - var Fv = null, - Cv, - P, - ldir, - current = { - cx: sx, - cy: sy, - dir: 0 - }; - - if (_trace(current, color, label, edgelabel)) { - Fv = vertex2D(sx, sy, current.dir); - Cv = Fv; - ldir = current.dir; - P = vertex2D(current.cx, current.cy, 0); - P.prev = Cv; - Cv.next = P; - P.next = null; - Cv = P; - do { - current.dir = (current.dir + 6) % 8; - _trace(current, color, label, edgelabel); - if (ldir !== current.dir) { - Cv.dir = current.dir; - P = vertex2D(current.cx, current.cy, 0); - P.prev = Cv; - Cv.next = P; - P.next = null; - Cv = P; - } else { - Cv.dir = ldir; - Cv.x = current.cx; - Cv.y = current.cy; - } - ldir = current.dir; - } while (current.cx !== sx || current.cy !== sy); - Fv.prev = Cv.prev; - Cv.prev.next = Fv; - } - return Fv; - } - - return { - trace: function trace(current, color, label, edgelabel) { - return _trace(current, color, label, edgelabel); - }, - contourTracing: function contourTracing(sy, sx, label, color, edgelabel) { - return _contourTracing(sy, sx, label, color, edgelabel); - } - }; - } - }; - - /* harmony default export */ exports["a"] = Tracer; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/** + * http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization + */ +var Tracer = { + searchDirections: [[0, 1], [1, 1], [1, 0], [1, -1], [0, -1], [-1, -1], [-1, 0], [-1, 1]], + create: function create(imageWrapper, labelWrapper) { + var imageData = imageWrapper.data, + labelData = labelWrapper.data, + searchDirections = this.searchDirections, + width = imageWrapper.size.x, + pos; + + function _trace(current, color, label, edgelabel) { + var i, y, x; + + for (i = 0; i < 7; i++) { + y = current.cy + searchDirections[current.dir][0]; + x = current.cx + searchDirections[current.dir][1]; + pos = y * width + x; + if (imageData[pos] === color && (labelData[pos] === 0 || labelData[pos] === label)) { + labelData[pos] = label; + current.cy = y; + current.cx = x; + return true; + } else { + if (labelData[pos] === 0) { + labelData[pos] = edgelabel; + } + current.dir = (current.dir + 1) % 8; + } + } + return false; + } + + function vertex2D(x, y, dir) { + return { + dir: dir, + x: x, + y: y, + next: null, + prev: null + }; + } + + function _contourTracing(sy, sx, label, color, edgelabel) { + var Fv = null, + Cv, + P, + ldir, + current = { + cx: sx, + cy: sy, + dir: 0 + }; + + if (_trace(current, color, label, edgelabel)) { + Fv = vertex2D(sx, sy, current.dir); + Cv = Fv; + ldir = current.dir; + P = vertex2D(current.cx, current.cy, 0); + P.prev = Cv; + Cv.next = P; + P.next = null; + Cv = P; + do { + current.dir = (current.dir + 6) % 8; + _trace(current, color, label, edgelabel); + if (ldir !== current.dir) { + Cv.dir = current.dir; + P = vertex2D(current.cx, current.cy, 0); + P.prev = Cv; + Cv.next = P; + P.next = null; + Cv = P; + } else { + Cv.dir = ldir; + Cv.x = current.cx; + Cv.y = current.cy; + } + ldir = current.dir; + } while (current.cx !== sx || current.cy !== sy); + Fv.prev = Cv.prev; + Cv.prev.next = Fv; + } + return Fv; + } + + return { + trace: function trace(current, color, label, edgelabel) { + return _trace(current, color, label, edgelabel); + }, + contourTracing: function contourTracing(sy, sx, label, color, edgelabel) { + return _contourTracing(sy, sx, label, color, edgelabel); + } + }; + } +}; + +/* harmony default export */ __webpack_exports__["a"] = Tracer; + +/***/ }), /* 45 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__barcode_reader__ = __webpack_require__(7); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_array_helper__ = __webpack_require__(16); - - - - function Code39Reader() { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a"].call(this); - } - - var properties = { - ALPHABETH_STRING: { value: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%" }, - ALPHABET: { value: [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 45, 46, 32, 42, 36, 47, 43, 37] }, - CHARACTER_ENCODINGS: { value: [0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064, 0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C, 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016, 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x094, 0x0A8, 0x0A2, 0x08A, 0x02A] }, - ASTERISK: { value: 0x094 }, - FORMAT: { value: "code_39", writeable: false } - }; - - Code39Reader.prototype = Object.create(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a"].prototype, properties); - Code39Reader.prototype.constructor = Code39Reader; - - Code39Reader.prototype._toCounters = function (start, counter) { - var self = this, - numCounters = counter.length, - end = self._row.length, - isWhite = !self._row[start], - i, - counterPos = 0; - - /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_array_helper__["a"].init(counter, 0); - - for (i = start; i < end; i++) { - if (self._row[i] ^ isWhite) { - counter[counterPos]++; - } else { - counterPos++; - if (counterPos === numCounters) { - break; - } else { - counter[counterPos] = 1; - isWhite = !isWhite; - } - } - } - - return counter; - }; - - Code39Reader.prototype._decode = function () { - var self = this, - counters = [0, 0, 0, 0, 0, 0, 0, 0, 0], - result = [], - start = self._findStart(), - decodedChar, - lastStart, - pattern, - nextStart; - - if (!start) { - return null; - } - nextStart = self._nextSet(self._row, start.end); - - do { - counters = self._toCounters(nextStart, counters); - pattern = self._toPattern(counters); - if (pattern < 0) { - return null; - } - decodedChar = self._patternToChar(pattern); - if (decodedChar < 0) { - return null; - } - result.push(decodedChar); - lastStart = nextStart; - nextStart += /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_array_helper__["a"].sum(counters); - nextStart = self._nextSet(self._row, nextStart); - } while (decodedChar !== '*'); - result.pop(); - - if (!result.length) { - return null; - } - - if (!self._verifyTrailingWhitespace(lastStart, nextStart, counters)) { - return null; - } - - return { - code: result.join(""), - start: start.start, - end: nextStart, - startInfo: start, - decodedCodes: result - }; - }; - - Code39Reader.prototype._verifyTrailingWhitespace = function (lastStart, nextStart, counters) { - var trailingWhitespaceEnd, - patternSize = /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_array_helper__["a"].sum(counters); - - trailingWhitespaceEnd = nextStart - lastStart - patternSize; - if (trailingWhitespaceEnd * 3 >= patternSize) { - return true; - } - return false; - }; - - Code39Reader.prototype._patternToChar = function (pattern) { - var i, - self = this; - - for (i = 0; i < self.CHARACTER_ENCODINGS.length; i++) { - if (self.CHARACTER_ENCODINGS[i] === pattern) { - return String.fromCharCode(self.ALPHABET[i]); - } - } - return -1; - }; - - Code39Reader.prototype._findNextWidth = function (counters, current) { - var i, - minWidth = Number.MAX_VALUE; - - for (i = 0; i < counters.length; i++) { - if (counters[i] < minWidth && counters[i] > current) { - minWidth = counters[i]; - } - } - - return minWidth; - }; - - Code39Reader.prototype._toPattern = function (counters) { - var numCounters = counters.length, - maxNarrowWidth = 0, - numWideBars = numCounters, - wideBarWidth = 0, - self = this, - pattern, - i; - - while (numWideBars > 3) { - maxNarrowWidth = self._findNextWidth(counters, maxNarrowWidth); - numWideBars = 0; - pattern = 0; - for (i = 0; i < numCounters; i++) { - if (counters[i] > maxNarrowWidth) { - pattern |= 1 << numCounters - 1 - i; - numWideBars++; - wideBarWidth += counters[i]; - } - } - - if (numWideBars === 3) { - for (i = 0; i < numCounters && numWideBars > 0; i++) { - if (counters[i] > maxNarrowWidth) { - numWideBars--; - if (counters[i] * 2 >= wideBarWidth) { - return -1; - } - } - } - return pattern; - } - } - return -1; - }; - - Code39Reader.prototype._findStart = function () { - var self = this, - offset = self._nextSet(self._row), - patternStart = offset, - counter = [0, 0, 0, 0, 0, 0, 0, 0, 0], - counterPos = 0, - isWhite = false, - i, - j, - whiteSpaceMustStart; - - for (i = offset; i < self._row.length; i++) { - if (self._row[i] ^ isWhite) { - counter[counterPos]++; - } else { - if (counterPos === counter.length - 1) { - // find start pattern - if (self._toPattern(counter) === self.ASTERISK) { - whiteSpaceMustStart = Math.floor(Math.max(0, patternStart - (i - patternStart) / 4)); - if (self._matchRange(whiteSpaceMustStart, patternStart, 0)) { - return { - start: patternStart, - end: i - }; - } - } - - patternStart += counter[0] + counter[1]; - for (j = 0; j < 7; j++) { - counter[j] = counter[j + 2]; - } - counter[7] = 0; - counter[8] = 0; - counterPos--; - } else { - counterPos++; - } - counter[counterPos] = 1; - isWhite = !isWhite; - } - } - return null; - }; - - /* harmony default export */ exports["a"] = Code39Reader; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__barcode_reader__ = __webpack_require__(8); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_array_helper__ = __webpack_require__(16); + + + +function Code39Reader() { + __WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a" /* default */].call(this); +} + +var properties = { + ALPHABETH_STRING: { value: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%" }, + ALPHABET: { value: [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 45, 46, 32, 42, 36, 47, 43, 37] }, + CHARACTER_ENCODINGS: { value: [0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064, 0x109, 0x049, 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C, 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106, 0x046, 0x016, 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x094, 0x0A8, 0x0A2, 0x08A, 0x02A] }, + ASTERISK: { value: 0x094 }, + FORMAT: { value: "code_39", writeable: false } +}; + +Code39Reader.prototype = Object.create(__WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a" /* default */].prototype, properties); +Code39Reader.prototype.constructor = Code39Reader; + +Code39Reader.prototype._toCounters = function (start, counter) { + var self = this, + numCounters = counter.length, + end = self._row.length, + isWhite = !self._row[start], + i, + counterPos = 0; + + __WEBPACK_IMPORTED_MODULE_1__common_array_helper__["a" /* default */].init(counter, 0); + + for (i = start; i < end; i++) { + if (self._row[i] ^ isWhite) { + counter[counterPos]++; + } else { + counterPos++; + if (counterPos === numCounters) { + break; + } else { + counter[counterPos] = 1; + isWhite = !isWhite; + } + } + } + + return counter; +}; + +Code39Reader.prototype._decode = function () { + var self = this, + counters = [0, 0, 0, 0, 0, 0, 0, 0, 0], + result = [], + start = self._findStart(), + decodedChar, + lastStart, + pattern, + nextStart; + + if (!start) { + return null; + } + nextStart = self._nextSet(self._row, start.end); + + do { + counters = self._toCounters(nextStart, counters); + pattern = self._toPattern(counters); + if (pattern < 0) { + return null; + } + decodedChar = self._patternToChar(pattern); + if (decodedChar < 0) { + return null; + } + result.push(decodedChar); + lastStart = nextStart; + nextStart += __WEBPACK_IMPORTED_MODULE_1__common_array_helper__["a" /* default */].sum(counters); + nextStart = self._nextSet(self._row, nextStart); + } while (decodedChar !== '*'); + result.pop(); + + if (!result.length) { + return null; + } + + if (!self._verifyTrailingWhitespace(lastStart, nextStart, counters)) { + return null; + } + + return { + code: result.join(""), + start: start.start, + end: nextStart, + startInfo: start, + decodedCodes: result + }; +}; + +Code39Reader.prototype._verifyTrailingWhitespace = function (lastStart, nextStart, counters) { + var trailingWhitespaceEnd, + patternSize = __WEBPACK_IMPORTED_MODULE_1__common_array_helper__["a" /* default */].sum(counters); + + trailingWhitespaceEnd = nextStart - lastStart - patternSize; + if (trailingWhitespaceEnd * 3 >= patternSize) { + return true; + } + return false; +}; + +Code39Reader.prototype._patternToChar = function (pattern) { + var i, + self = this; + + for (i = 0; i < self.CHARACTER_ENCODINGS.length; i++) { + if (self.CHARACTER_ENCODINGS[i] === pattern) { + return String.fromCharCode(self.ALPHABET[i]); + } + } + return -1; +}; + +Code39Reader.prototype._findNextWidth = function (counters, current) { + var i, + minWidth = Number.MAX_VALUE; + + for (i = 0; i < counters.length; i++) { + if (counters[i] < minWidth && counters[i] > current) { + minWidth = counters[i]; + } + } + + return minWidth; +}; + +Code39Reader.prototype._toPattern = function (counters) { + var numCounters = counters.length, + maxNarrowWidth = 0, + numWideBars = numCounters, + wideBarWidth = 0, + self = this, + pattern, + i; + + while (numWideBars > 3) { + maxNarrowWidth = self._findNextWidth(counters, maxNarrowWidth); + numWideBars = 0; + pattern = 0; + for (i = 0; i < numCounters; i++) { + if (counters[i] > maxNarrowWidth) { + pattern |= 1 << numCounters - 1 - i; + numWideBars++; + wideBarWidth += counters[i]; + } + } + + if (numWideBars === 3) { + for (i = 0; i < numCounters && numWideBars > 0; i++) { + if (counters[i] > maxNarrowWidth) { + numWideBars--; + if (counters[i] * 2 >= wideBarWidth) { + return -1; + } + } + } + return pattern; + } + } + return -1; +}; + +Code39Reader.prototype._findStart = function () { + var self = this, + offset = self._nextSet(self._row), + patternStart = offset, + counter = [0, 0, 0, 0, 0, 0, 0, 0, 0], + counterPos = 0, + isWhite = false, + i, + j, + whiteSpaceMustStart; + + for (i = offset; i < self._row.length; i++) { + if (self._row[i] ^ isWhite) { + counter[counterPos]++; + } else { + if (counterPos === counter.length - 1) { + // find start pattern + if (self._toPattern(counter) === self.ASTERISK) { + whiteSpaceMustStart = Math.floor(Math.max(0, patternStart - (i - patternStart) / 4)); + if (self._matchRange(whiteSpaceMustStart, patternStart, 0)) { + return { + start: patternStart, + end: i + }; + } + } + + patternStart += counter[0] + counter[1]; + for (j = 0; j < 7; j++) { + counter[j] = counter[j + 2]; + } + counter[7] = 0; + counter[8] = 0; + counterPos--; + } else { + counterPos++; + } + counter[counterPos] = 1; + isWhite = !isWhite; + } + } + return null; +}; + +/* harmony default export */ __webpack_exports__["a"] = Code39Reader; + +/***/ }), /* 46 */ -/***/ function(module, exports, __webpack_require__) { - - module.e = dot - - /** - * Calculates the dot product of two vec2's - * - * @param {vec2} a the first operand - * @param {vec2} b the second operand - * @returns {Number} dot product of a and b - */ - function dot(a, b) { - return a[0] * b[0] + a[1] * b[1] - } - -/***/ }, +/***/ (function(module, exports) { + +module.exports = dot + +/** + * Calculates the dot product of two vec2's + * + * @param {vec2} a the first operand + * @param {vec2} b the second operand + * @returns {Number} dot product of a and b + */ +function dot(a, b) { + return a[0] * b[0] + a[1] * b[1] +} + +/***/ }), /* 47 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { + +var root = __webpack_require__(1); - var root = __webpack_require__(3); - - /** Built-in value references. */ - var Uint8Array = root.Uint8Array; - - module.e = Uint8Array; +/** Built-in value references. */ +var Uint8Array = root.Uint8Array; +module.exports = Uint8Array; -/***/ }, + +/***/ }), /* 48 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * A specialized version of `_.forEach` 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 `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array ? array.length : 0; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - - module.e = arrayEach; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseTimes = __webpack_require__(137), + isArguments = __webpack_require__(13), + isArray = __webpack_require__(0), + isBuffer = __webpack_require__(24), + isIndex = __webpack_require__(21), + isTypedArray = __webpack_require__(25); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.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(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.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; +} + +module.exports = arrayLikeKeys; + + +/***/ }), /* 49 */ -/***/ function(module, exports, __webpack_require__) { - - var baseTimes = __webpack_require__(139), - isArguments = __webpack_require__(11), - isArray = __webpack_require__(0), - isIndex = __webpack_require__(36); - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.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) { - // Safari 8.1 makes `arguments.callee` enumerable in strict mode. - // Safari 9 makes `arguments.length` enumerable in strict mode. - var result = (isArray(value) || isArguments(value)) - ? baseTimes(value.length, String) - : []; - - var length = result.length, - skipIndexes = !!length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && (key == 'length' || isIndex(key, length)))) { - result.push(key); - } - } - return result; - } - - module.e = arrayLikeKeys; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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; +} + +module.exports = arrayMap; + + +/***/ }), /* 50 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array ? array.length : 0; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } - - module.e = arrayReduce; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseAssignValue = __webpack_require__(32), + eq = __webpack_require__(12); + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignMergeValue; + + +/***/ }), /* 51 */ -/***/ function(module, exports, __webpack_require__) { - - var eq = __webpack_require__(10); - - /** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (typeof key == 'number' && value === undefined && !(key in object))) { - object[key] = value; - } - } - - module.e = assignMergeValue; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseAssignValue = __webpack_require__(32), + eq = __webpack_require__(12); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignValue; + + +/***/ }), /* 52 */ -/***/ function(module, exports, __webpack_require__) { - - var eq = __webpack_require__(10); - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - object[key] = value; - } - } - - module.e = assignValue; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var arrayPush = __webpack_require__(31), + isArray = __webpack_require__(0); + +/** + * 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(object) ? result : arrayPush(result, symbolsFunc(object)); +} + +module.exports = baseGetAllKeys; + + +/***/ }), /* 53 */ -/***/ function(module, exports, __webpack_require__) { - - var castPath = __webpack_require__(60), - isKey = __webpack_require__(23), - toKey = __webpack_require__(9); - - /** - * 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 = isKey(path, object) ? [path] : castPath(path); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; - } - - module.e = baseGet; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseIsEqualDeep = __webpack_require__(122), + isObjectLike = __webpack_require__(4); + +/** + * 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(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +module.exports = baseIsEqual; + + +/***/ }), /* 54 */ -/***/ function(module, exports, __webpack_require__) { - - var arrayPush = __webpack_require__(30), - isArray = __webpack_require__(0); - - /** - * 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(object) ? result : arrayPush(result, symbolsFunc(object)); - } - - module.e = baseGetAllKeys; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseMatches = __webpack_require__(127), + baseMatchesProperty = __webpack_require__(128), + identity = __webpack_require__(36), + isArray = __webpack_require__(0), + property = __webpack_require__(205); + +/** + * 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; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); +} + +module.exports = baseIteratee; + + +/***/ }), /* 55 */ -/***/ function(module, exports, __webpack_require__) { - - var baseIsEqualDeep = __webpack_require__(127), - isObject = __webpack_require__(2), - isObjectLike = __webpack_require__(13); - - /** - * 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 {Function} [customizer] The function to customize comparisons. - * @param {boolean} [bitmask] The bitmask of comparison flags. - * The bitmask may be composed of the following flags: - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, customizer, bitmask, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); - } - - module.e = baseIsEqual; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var isPrototype = __webpack_require__(22), + nativeKeys = __webpack_require__(181); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.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.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +module.exports = baseKeys; + + +/***/ }), /* 56 */ -/***/ function(module, exports, __webpack_require__) { - - var baseMatches = __webpack_require__(132), - baseMatchesProperty = __webpack_require__(133), - identity = __webpack_require__(194), - isArray = __webpack_require__(0), - property = __webpack_require__(201); - - /** - * 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; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); - } - - module.e = baseIteratee; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseGet = __webpack_require__(33), + baseSet = __webpack_require__(135), + castPath = __webpack_require__(19); + +/** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ +function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; +} + +module.exports = basePickBy; + + +/***/ }), /* 57 */ -/***/ function(module, exports, __webpack_require__) { - - var isObject = __webpack_require__(2), - isPrototype = __webpack_require__(24), - nativeKeysIn = __webpack_require__(182); - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** - * The base implementation of `_.keysIn` 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 baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - module.e = baseKeysIn; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(3); + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +module.exports = defineProperty; + + +/***/ }), /* 58 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick from. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ - function basePickBy(object, props, predicate) { - var index = -1, - length = props.length, - result = {}; - - while (++index < length) { - var key = props[index], - value = object[key]; - - if (predicate(value, key)) { - result[key] = value; - } - } - return result; - } - - module.e = basePickBy; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var SetCache = __webpack_require__(112), + arraySome = __webpack_require__(116), + cacheHas = __webpack_require__(140); + +/** 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; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + 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; +} + +module.exports = equalArrays; + + +/***/ }), /* 59 */ -/***/ function(module, exports, __webpack_require__) { - - var apply = __webpack_require__(118); - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeMax = Math.max; - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = array; - return apply(func, this, otherArgs); - }; - } - - module.e = baseRest; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +module.exports = freeGlobal; + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(72))) + +/***/ }), /* 60 */ -/***/ function(module, exports, __webpack_require__) { - - var isArray = __webpack_require__(0), - stringToPath = __webpack_require__(191); - - /** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast property path array. - */ - function castPath(value) { - return isArray(value) ? value : stringToPath(value); - } - - module.e = castPath; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var arrayFilter = __webpack_require__(115), + stubArray = __webpack_require__(71); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.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 : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +module.exports = getSymbols; + + +/***/ }), /* 61 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - module.e = copyArray; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var DataView = __webpack_require__(108), + Map = __webpack_require__(28), + Promise = __webpack_require__(110), + Set = __webpack_require__(111), + WeakMap = __webpack_require__(113), + baseGetTag = __webpack_require__(6), + toSource = __webpack_require__(67); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + +var dataViewTag = '[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) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} + +module.exports = getTag; + + +/***/ }), /* 62 */ -/***/ function(module, exports, __webpack_require__) { - - var SetCache = __webpack_require__(114), - arraySome = __webpack_require__(120); - - /** Used to compose bitmasks for comparison styles. */ - var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_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 {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked && stack.get(other)) { - return stacked == other; - } - var index = -1, - result = true, - seen = (bitmask & UNORDERED_COMPARE_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 (!seen.has(othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { - return seen.add(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, customizer, bitmask, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; - } - - module.e = equalArrays; - - -/***/ }, -/* 63 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(2); + +/** + * 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(value); +} - /* WEBPACK VAR INJECTION */(function(global) {/** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - module.e = freeGlobal; - - /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) +module.exports = isStrictComparable; -/***/ }, + +/***/ }), +/* 63 */ +/***/ (function(module, exports) { + +/** + * 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))); + }; +} + +module.exports = matchesStrictComparable; + + +/***/ }), /* 64 */ -/***/ function(module, exports, __webpack_require__) { - - var isObject = __webpack_require__(2); - - /** - * 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(value); - } - - module.e = isStrictComparable; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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)); + }; +} + +module.exports = overArg; + + +/***/ }), /* 65 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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; - } - - module.e = mapToArray; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var apply = __webpack_require__(114); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; +} + +module.exports = overRest; + + +/***/ }), /* 66 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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))); - }; - } - - module.e = matchesStrictComparable; - - -/***/ }, -/* 67 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { - var overArg = __webpack_require__(37); - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeKeys = overArg(Object.keys, Object); - - module.e = nativeKeys; +var baseSetToString = __webpack_require__(136), + shortOut = __webpack_require__(188); +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = shortOut(baseSetToString); -/***/ }, +module.exports = setToString; + + +/***/ }), +/* 67 */ +/***/ (function(module, exports) { + +/** 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 ''; +} + +module.exports = toSource; + + +/***/ }), /* 68 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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; - } - - module.e = setToArray; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseHasIn = __webpack_require__(120), + hasPath = __webpack_require__(158); + +/** + * 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); +} + +module.exports = hasIn; + + +/***/ }), /* 69 */ -/***/ function(module, exports, __webpack_require__) { - - /** 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 process. - * @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 ''; - } - - module.e = toSource; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var arrayLikeKeys = __webpack_require__(48), + baseKeys = __webpack_require__(55), + isArrayLike = __webpack_require__(14); + +/** + * 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(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +module.exports = keys; + + +/***/ }), /* 70 */ -/***/ function(module, exports, __webpack_require__) { - - var isArrayLike = __webpack_require__(12), - isObjectLike = __webpack_require__(13); - - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - - module.e = isArrayLikeObject; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var basePick = __webpack_require__(131), + flatRest = __webpack_require__(151); + +/** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ +var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); +}); + +module.exports = pick; + + +/***/ }), /* 71 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(3), - stubFalse = __webpack_require__(202); - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == '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; - - module.e = isBuffer; - - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(75)(module))) - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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 []; +} + +module.exports = stubArray; + + +/***/ }), /* 72 */ -/***/ function(module, exports, __webpack_require__) { - - var arrayLikeKeys = __webpack_require__(49), - baseKeysIn = __webpack_require__(57), - isArrayLike = __webpack_require__(12); - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @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; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - - module.e = keysIn; - - -/***/ }, +/***/ (function(module, exports) { + +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; + + +/***/ }), /* 73 */ -/***/ function(module, exports, __webpack_require__) { - - var arrayMap = __webpack_require__(119), - baseFlatten = __webpack_require__(124), - basePick = __webpack_require__(136), - baseRest = __webpack_require__(59), - toKey = __webpack_require__(9); - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = baseRest(function(object, props) { - return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey)); - }); - - module.e = pick; - - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_merge__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_typedefs__ = __webpack_require__(79); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_typedefs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__common_typedefs__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__scanner__ = __webpack_require__(101); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__common_image_wrapper__ = __webpack_require__(27); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__common_image_debug__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__analytics_result_collector__ = __webpack_require__(42); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__config_config__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__input_config_factory__ = __webpack_require__(84); + + + + + + + + + + +function _fromConfig(config) { + var scanner = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__scanner__["a" /* default */])(); + var pendingStart = null; + var initialized = false; + return { + addEventListener: function addEventListener(eventType, cb) { + scanner.subscribe(eventType, cb); + return this; + }, + removeEventListener: function removeEventListener(eventType, cb) { + scanner.unsubscribe(eventType, cb); + return this; + }, + start: function start() { + if (scanner.isRunning()) { + return Promise.resolve(true); + } + if (pendingStart) { + return pendingStart; + } + if (initialized) { + scanner.start(); + return Promise.resolve(true); + } + pendingStart = new Promise(function (resolve, reject) { + scanner.init(config, function (error) { + if (error) { + console.log(error); + reject(error); + } + initialized = true; + scanner.start(); + resolve(); + pendingStart = null; + }); + }); + return pendingStart; + }, + stop: function stop() { + scanner.stop(); + initialized = false; + return this; + }, + toPromise: function toPromise() { + var _this = this; + + if (config.inputStream.type === 'LiveStream' || config.inputStream.type === 'VideoStream') { + var cancelRequested = false; + return { + cancel: function cancel() { + cancelRequested = true; + }, + + promise: new Promise(function (resolve, reject) { + function onProcessed(result) { + if (result && result.codeResult && result.codeResult.code) { + scanner.stop(); + scanner.unsubscribe("processed", onProcessed); + resolve(result); + } + if (cancelRequested) { + scanner.stop(); + scanner.unsubscribe("processed", onProcessed); + reject("cancelled!"); + } + } + scanner.subscribe("processed", onProcessed); + _this.start(); + }) + }; + } else { + return new Promise(function (resolve, reject) { + scanner.decodeSingle(config, function (result) { + if (result && result.codeResult && result.codeResult.code) { + return resolve(result); + } + return reject(result); + }); + }); + } + }, + registerResultCollector: function registerResultCollector(resultCollector) { + scanner.registerResultCollector(resultCollector); + }, + getCanvas: function getCanvas() { + return scanner.canvas.dom.image; + } + }; +} + +function _fromSource(config, source) { + var inputConfig = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + config = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_7__input_config_factory__["a" /* createConfigFromSource */])(config, inputConfig, source); + return _fromConfig(config); +} + +function setConfig() { + var configuration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + var _merge2; + + var key = arguments[1]; + var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var mergedConfig = __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default()({}, configuration, (_merge2 = {}, _merge2[key] = config, _merge2)); + return createApi(mergedConfig); +} + +function createApi() { + var configuration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : __WEBPACK_IMPORTED_MODULE_6__config_config__["a" /* default */]; + + return { + fromSource: function fromSource(src, inputConfig) { + return _fromSource(configuration, src, inputConfig); + }, + fromConfig: function fromConfig(conf) { + return _fromConfig(__WEBPACK_IMPORTED_MODULE_0_lodash_merge___default()({}, configuration, conf)); + }, + decoder: function decoder(conf) { + return setConfig(configuration, "decoder", conf); + }, + locator: function locator(conf) { + return setConfig(configuration, "locator", conf); + }, + throttle: function throttle(timeInMs) { + return setConfig(configuration, "frequency", 1000 / parseInt(timeInMs)); + }, + config: function config(conf) { + return createApi(__WEBPACK_IMPORTED_MODULE_0_lodash_merge___default()({}, configuration, conf)); + }, + + ImageWrapper: __WEBPACK_IMPORTED_MODULE_3__common_image_wrapper__["a" /* default */], + ImageDebug: __WEBPACK_IMPORTED_MODULE_4__common_image_debug__["a" /* default */], + ResultCollector: __WEBPACK_IMPORTED_MODULE_5__analytics_result_collector__["a" /* default */], + _worker: { + createScanner: __WEBPACK_IMPORTED_MODULE_2__scanner__["a" /* default */] + } + }; +} + +/* harmony default export */ __webpack_exports__["default"] = createApi(); + +/***/ }), /* 74 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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 []; - } - - module.e = stubArray; - - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +var vec2 = { + clone: __webpack_require__(9), + dot: __webpack_require__(46) +}; + +/** + * Creates a cluster for grouping similar orientations of datapoints + */ +/* harmony default export */ __webpack_exports__["a"] = { + create: function create(point, threshold) { + var points = [], + center = { + rad: 0, + vec: vec2.clone([0, 0]) + }, + pointMap = {}; + + function init() { + _add(point); + updateCenter(); + } + + function _add(pointToAdd) { + pointMap[pointToAdd.id] = pointToAdd; + points.push(pointToAdd); + } + + function updateCenter() { + var i, + sum = 0; + for (i = 0; i < points.length; i++) { + sum += points[i].rad; + } + center.rad = sum / points.length; + center.vec = vec2.clone([Math.cos(center.rad), Math.sin(center.rad)]); + } + + init(); + + return { + add: function add(pointToAdd) { + if (!pointMap[pointToAdd.id]) { + _add(pointToAdd); + updateCenter(); + } + }, + fits: function fits(otherPoint) { + // check cosine similarity to center-angle + var similarity = Math.abs(vec2.dot(otherPoint.point.vec, center.vec)); + if (similarity > threshold) { + return true; + } + return false; + }, + getPoints: function getPoints() { + return points; + }, + getCenter: function getCenter() { + return center; + } + }; + }, + createPoint: function createPoint(newPoint, id, property) { + return { + rad: newPoint[property], + point: newPoint, + id: id + }; + } +}; + +/***/ }), /* 75 */ -/***/ function(module, exports, __webpack_require__) { - - module.e = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - module.children = []; - Object.defineProperty(module, "exports", { - enumerable: true, - configurable: false, - get: function() { return module.e; }, - set: function(v) { return module.e = v; } - }); - Object.defineProperty(module, "loaded", { - enumerable: true, - configurable: false, - get: function() { return module.l; } - }); - Object.defineProperty(module, "id", { - enumerable: true, - configurable: false, - get: function() { return module.i; } - }); - module.webpackPolyfill = 1; - } - return module; - } +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +var hasWindow = typeof window !== 'undefined'; +var windowRef = hasWindow ? window : {}; + +var windowObjects = ["MediaStream", "HTMLImageElement", "HTMLVideoElement", "HTMLCanvasElement", "FileList", "File", "URL"]; + +var DOMHelper = windowObjects.reduce(function (result, obj) { + var _extends2; + + return _extends({}, result, (_extends2 = {}, _extends2[obj] = obj in windowRef ? windowRef[obj] : function () {}, _extends2)); +}, {}); +DOMHelper.setObject = function (key, value) { + DOMHelper[key] = value; +}; -/***/ }, +/* harmony default export */ __webpack_exports__["a"] = DOMHelper; + +/***/ }), /* 76 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge__ = __webpack_require__(15); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default = __WEBPACK_IMPORTED_MODULE_0_lodash_merge__ && __WEBPACK_IMPORTED_MODULE_0_lodash_merge__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_merge__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_merge__; } - /* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_0_lodash_merge___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default }); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_typedefs__ = __webpack_require__(81); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_typedefs___default = __WEBPACK_IMPORTED_MODULE_1__common_typedefs__ && __WEBPACK_IMPORTED_MODULE_1__common_typedefs__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_1__common_typedefs__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_1__common_typedefs__; } - /* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_1__common_typedefs___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_1__common_typedefs___default }); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_webrtc_adapter__ = __webpack_require__(206); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_webrtc_adapter___default = __WEBPACK_IMPORTED_MODULE_2_webrtc_adapter__ && __WEBPACK_IMPORTED_MODULE_2_webrtc_adapter__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_2_webrtc_adapter__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_2_webrtc_adapter__; } - /* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_2_webrtc_adapter___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_2_webrtc_adapter___default }); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__scanner__ = __webpack_require__(103); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__common_image_wrapper__ = __webpack_require__(27); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__common_image_debug__ = __webpack_require__(6); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__analytics_result_collector__ = __webpack_require__(42); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__config_config__ = __webpack_require__(43); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__input_config_factory__ = __webpack_require__(86); - - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - - - - - - - - - - - - function _fromConfig(config) { - var scanner = /* harmony import */__WEBPACK_IMPORTED_MODULE_3__scanner__["a"].bind()(); - var pendingStart = null; - var initialized = false; - return { - addEventListener: function addEventListener(eventType, cb) { - scanner.subscribe(eventType, cb); - return this; - }, - removeEventListener: function removeEventListener(eventType, cb) { - scanner.unsubscribe(eventType, cb); - return this; - }, - start: function start() { - if (scanner.isRunning()) { - return Promise.resolve(true); - } - if (pendingStart) { - return pendingStart; - } - if (initialized) { - scanner.start(); - return Promise.resolve(true); - } - pendingStart = new Promise(function (resolve, reject) { - scanner.init(config, function (error) { - if (error) { - console.log(error); - reject(error); - } - initialized = true; - scanner.start(); - resolve(); - pendingStart = null; - }); - }); - return pendingStart; - }, - stop: function stop() { - scanner.stop(); - initialized = false; - return this; - }, - toPromise: function toPromise() { - var _this = this; - - if (config.inputStream.type === 'LiveStream' || config.inputStream.type === 'VideoStream') { - var _ret = function () { - var cancelRequested = false; - return { - v: { - cancel: function cancel() { - cancelRequested = true; - }, - - promise: new Promise(function (resolve, reject) { - function onProcessed(result) { - if (result && result.codeResult && result.codeResult.code) { - scanner.stop(); - scanner.unsubscribe("processed", onProcessed); - resolve(result); - } - if (cancelRequested) { - scanner.stop(); - scanner.unsubscribe("processed", onProcessed); - reject("cancelled!"); - } - } - scanner.subscribe("processed", onProcessed); - _this.start(); - }) - } - }; - }(); - - if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; - } else { - return new Promise(function (resolve, reject) { - scanner.decodeSingle(config, function (result) { - if (result && result.codeResult && result.codeResult.code) { - return resolve(result); - } - return reject(result); - }); - }); - } - }, - registerResultCollector: function registerResultCollector(resultCollector) { - scanner.registerResultCollector(resultCollector); - }, - getCanvas: function getCanvas() { - return scanner.canvas.dom.image; - } - }; - } - - function _fromSource(config, source) { - var inputConfig = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; - - config = /* harmony import */__WEBPACK_IMPORTED_MODULE_8__input_config_factory__["a"].bind()(config, inputConfig, source); - return _fromConfig(config); - } - - function setConfig() { - var configuration = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - var _merge2; - - var key = arguments[1]; - var config = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; - - var mergedConfig = /* harmony import */__WEBPACK_IMPORTED_MODULE_0_lodash_merge___default.a.bind()({}, configuration, (_merge2 = {}, _merge2[key] = config, _merge2)); - return createApi(mergedConfig); - } - - function createApi() { - var configuration = arguments.length <= 0 || arguments[0] === undefined ? /* harmony import */__WEBPACK_IMPORTED_MODULE_7__config_config__["a"] : arguments[0]; - - return { - fromSource: function fromSource(src, inputConfig) { - return _fromSource(configuration, src, inputConfig); - }, - fromConfig: function fromConfig(conf) { - return _fromConfig(/* harmony import */__WEBPACK_IMPORTED_MODULE_0_lodash_merge___default.a.bind()({}, configuration, conf)); - }, - decoder: function decoder(conf) { - return setConfig(configuration, "decoder", conf); - }, - locator: function locator(conf) { - return setConfig(configuration, "locator", conf); - }, - throttle: function throttle(timeInMs) { - return setConfig(configuration, "frequency", 1000 / parseInt(timeInMs)); - }, - config: function config(conf) { - return createApi(/* harmony import */__WEBPACK_IMPORTED_MODULE_0_lodash_merge___default.a.bind()({}, configuration, conf)); - }, - - ImageWrapper: /* harmony import */__WEBPACK_IMPORTED_MODULE_4__common_image_wrapper__["a"], - ImageDebug: /* harmony import */__WEBPACK_IMPORTED_MODULE_5__common_image_debug__["a"], - ResultCollector: /* harmony import */__WEBPACK_IMPORTED_MODULE_6__analytics_result_collector__["a"], - _worker: { - createScanner: /* harmony import */__WEBPACK_IMPORTED_MODULE_3__scanner__["a"] - } - }; - } - /* harmony default export */ exports["default"] = createApi(); - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = createEventedElement; +function createEventedElement() { + var events = {}; + + function getEvent(eventName) { + if (!events[eventName]) { + events[eventName] = { + subscribers: [] + }; + } + return events[eventName]; + } + + function clearEvents() { + events = {}; + } + + function publishSubscription(subscription, data) { + if (subscription.async) { + setTimeout(function () { + subscription.callback(data); + }, 4); + } else { + subscription.callback(data); + } + } + + function _subscribe(event, callback, async) { + var subscription; + + if (typeof callback === "function") { + subscription = { + callback: callback, + async: async + }; + } else { + subscription = callback; + if (!subscription.callback) { + throw "Callback was not specified on options"; + } + } + + getEvent(event).subscribers.push(subscription); + } + + return { + subscribe: function subscribe(event, callback, async) { + return _subscribe(event, callback, async); + }, + publish: function publish(eventName, data) { + var event = getEvent(eventName), + subscribers = event.subscribers; + + // Publish one-time subscriptions + subscribers.filter(function (subscriber) { + return !!subscriber.once; + }).forEach(function (subscriber) { + publishSubscription(subscriber, data); + }); + + // remove them from the subscriber + event.subscribers = subscribers.filter(function (subscriber) { + return !subscriber.once; + }); + + // publish the rest + event.subscribers.forEach(function (subscriber) { + publishSubscription(subscriber, data); + }); + }, + once: function once(event, callback, async) { + _subscribe(event, { + callback: callback, + async: async, + once: true + }); + }, + unsubscribe: function unsubscribe(eventName, callback) { + var event; + + if (eventName) { + event = getEvent(eventName); + if (event && callback) { + event.subscribers = event.subscribers.filter(function (subscriber) { + return subscriber.callback !== callback; + }); + } else { + event.subscribers = []; + } + } else { + clearEvents(); + } + } + }; +}; + +/***/ }), /* 77 */ -/***/ function(module, exports, __webpack_require__) { - - var vec2 = { - clone: __webpack_require__(8), - dot: __webpack_require__(46) - }; - - /** - * Creates a cluster for grouping similar orientations of datapoints - */ - /* harmony default export */ exports["a"] = { - create: function create(point, threshold) { - var points = [], - center = { - rad: 0, - vec: vec2.clone([0, 0]) - }, - pointMap = {}; - - function init() { - _add(point); - updateCenter(); - } - - function _add(pointToAdd) { - pointMap[pointToAdd.id] = pointToAdd; - points.push(pointToAdd); - } - - function updateCenter() { - var i, - sum = 0; - for (i = 0; i < points.length; i++) { - sum += points[i].rad; - } - center.rad = sum / points.length; - center.vec = vec2.clone([Math.cos(center.rad), Math.sin(center.rad)]); - } - - init(); - - return { - add: function add(pointToAdd) { - if (!pointMap[pointToAdd.id]) { - _add(pointToAdd); - updateCenter(); - } - }, - fits: function fits(otherPoint) { - // check cosine similarity to center-angle - var similarity = Math.abs(vec2.dot(otherPoint.point.vec, center.vec)); - if (similarity > threshold) { - return true; - } - return false; - }, - getPoints: function getPoints() { - return points; - }, - getCenter: function getCenter() { - return center; - } - }; - }, - createPoint: function createPoint(newPoint, id, property) { - return { - rad: newPoint[property], - point: newPoint, - id: id - }; - } - }; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (immutable) */ __webpack_exports__["b"] = enumerateDevices; +/* harmony export (immutable) */ __webpack_exports__["a"] = getUserMedia; + +function enumerateDevices() { + if (navigator.mediaDevices && typeof navigator.mediaDevices.enumerateDevices === 'function') { + return navigator.mediaDevices.enumerateDevices(); + } + return Promise.reject(new Error('enumerateDevices is not defined')); +}; + +function getUserMedia(constraints) { + if (navigator.mediaDevices && typeof navigator.mediaDevices.getUserMedia === 'function') { + return navigator.mediaDevices.getUserMedia(constraints); + } + return Promise.reject(new Error('getUserMedia is not defined')); +} + +/***/ }), /* 78 */ -/***/ function(module, exports, __webpack_require__) { - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - var hasWindow = typeof window !== 'undefined'; - var windowRef = hasWindow ? window : {}; - - var windowObjects = ["MediaStream", "HTMLImageElement", "HTMLVideoElement", "HTMLCanvasElement", "FileList", "File", "URL"]; - - var DOMHelper = windowObjects.reduce(function (result, obj) { - var _extends2; - - return _extends({}, result, (_extends2 = {}, _extends2[obj] = obj in windowRef ? windowRef[obj] : function () {}, _extends2)); - }, {}); - - DOMHelper.setObject = function (key, value) { - DOMHelper[key] = value; - }; - - /* harmony default export */ exports["a"] = DOMHelper; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/** + * Construct representing a part of another {ImageWrapper}. Shares data + * between the parent and the child. + * @param from {ImageRef} The position where to start the {SubImage} from. (top-left corner) + * @param size {ImageRef} The size of the resulting image + * @param I {ImageWrapper} The {ImageWrapper} to share from + * @returns {SubImage} A shared part of the original image + */ +function SubImage(from, size, I) { + if (!I) { + I = { + data: null, + size: size + }; + } + this.data = I.data; + this.originalSize = I.size; + this.I = I; + + this.from = from; + this.size = size; +} + +/** + * Displays the {SubImage} in a given canvas + * @param canvas {Canvas} The canvas element to write to + * @param scale {Number} Scale which is applied to each pixel-value + */ +SubImage.prototype.show = function (canvas, scale) { + var ctx, frame, data, current, y, x, pixel; + + if (!scale) { + scale = 1.0; + } + ctx = canvas.getContext('2d'); + canvas.width = this.size.x; + canvas.height = this.size.y; + frame = ctx.getImageData(0, 0, canvas.width, canvas.height); + data = frame.data; + current = 0; + for (y = 0; y < this.size.y; y++) { + for (x = 0; x < this.size.x; x++) { + pixel = y * this.size.x + x; + current = this.get(x, y) * scale; + data[pixel * 4 + 0] = current; + data[pixel * 4 + 1] = current; + data[pixel * 4 + 2] = current; + data[pixel * 4 + 3] = 255; + } + } + frame.data = data; + ctx.putImageData(frame, 0, 0); +}; + +/** + * Retrieves a given pixel position from the {SubImage} + * @param x {Number} The x-position + * @param y {Number} The y-position + * @returns {Number} The grayscale value at the pixel-position + */ +SubImage.prototype.get = function (x, y) { + return this.data[(this.from.y + y) * this.originalSize.x + this.from.x + x]; +}; + +/** + * Updates the underlying data from a given {ImageWrapper} + * @param image {ImageWrapper} The updated image + */ +SubImage.prototype.updateData = function (image) { + this.originalSize = image.size; + this.data = image.data; +}; + +/** + * Updates the position of the shared area + * @param from {x,y} The new location + * @returns {SubImage} returns {this} for possible chaining + */ +SubImage.prototype.updateFrom = function (from) { + this.from = from; + return this; +}; + +/* harmony default export */ __webpack_exports__["a"] = SubImage; + +/***/ }), /* 79 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony export */ exports["a"] = createEventedElement;function createEventedElement() { - var events = {}; - - function getEvent(eventName) { - if (!events[eventName]) { - events[eventName] = { - subscribers: [] - }; - } - return events[eventName]; - } - - function clearEvents() { - events = {}; - } - - function publishSubscription(subscription, data) { - if (subscription.async) { - setTimeout(function () { - subscription.callback(data); - }, 4); - } else { - subscription.callback(data); - } - } - - function _subscribe(event, callback, async) { - var subscription; - - if (typeof callback === "function") { - subscription = { - callback: callback, - async: async - }; - } else { - subscription = callback; - if (!subscription.callback) { - throw "Callback was not specified on options"; - } - } - - getEvent(event).subscribers.push(subscription); - } - - return { - subscribe: function subscribe(event, callback, async) { - return _subscribe(event, callback, async); - }, - publish: function publish(eventName, data) { - var event = getEvent(eventName), - subscribers = event.subscribers; - - // Publish one-time subscriptions - subscribers.filter(function (subscriber) { - return !!subscriber.once; - }).forEach(function (subscriber) { - publishSubscription(subscriber, data); - }); - - // remove them from the subscriber - event.subscribers = subscribers.filter(function (subscriber) { - return !subscriber.once; - }); - - // publish the rest - event.subscribers.forEach(function (subscriber) { - publishSubscription(subscriber, data); - }); - }, - once: function once(event, callback, async) { - _subscribe(event, { - callback: callback, - async: async, - once: true - }); - }, - unsubscribe: function unsubscribe(eventName, callback) { - var event; - - if (eventName) { - event = getEvent(eventName); - if (event && callback) { - event.subscribers = event.subscribers.filter(function (subscriber) { - return subscriber.callback !== callback; - }); - } else { - event.subscribers = []; - } - } else { - clearEvents(); - } - } - }; - }; - -/***/ }, +/***/ (function(module, exports) { + +/* + * typedefs.js + * Normalizes browser-specific prefixes + */ + +if (typeof window !== 'undefined') { + window.requestAnimFrame = function () { + return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function ( /* function FrameRequestCallback */callback) { + window.setTimeout(callback, 1000 / 60); + }; + }(); +} +Math.imul = Math.imul || function (a, b) { + var ah = a >>> 16 & 0xffff, + al = a & 0xffff, + bh = b >>> 16 & 0xffff, + bl = b & 0xffff; + // the shift by 0 fixes the sign on the high part + // the final |0 converts the unsigned value into a signed value + return al * bl + (ah * bl + al * bh << 16 >>> 0) | 0; +}; + +if (typeof Object.assign !== 'function') { + Object.assign = function (target) { + // .length of function is 2 + 'use strict'; + + if (target === null) { + // TypeError if undefined or null + throw new TypeError('Cannot convert undefined or null to object'); + } + + var to = Object(target); + + for (var index = 1; index < arguments.length; index++) { + var nextSource = arguments[index]; + + if (nextSource !== null) { + // Skip over if undefined or null + for (var nextKey in nextSource) { + // Avoid bugs when hasOwnProperty is shadowed + if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + return to; + }; +} + +/***/ }), /* 80 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Construct representing a part of another {ImageWrapper}. Shares data - * between the parent and the child. - * @param from {ImageRef} The position where to start the {SubImage} from. (top-left corner) - * @param size {ImageRef} The size of the resulting image - * @param I {ImageWrapper} The {ImageWrapper} to share from - * @returns {SubImage} A shared part of the original image - */ - function SubImage(from, size, I) { - if (!I) { - I = { - data: null, - size: size - }; - } - this.data = I.data; - this.originalSize = I.size; - this.I = I; - - this.from = from; - this.size = size; - } - - /** - * Displays the {SubImage} in a given canvas - * @param canvas {Canvas} The canvas element to write to - * @param scale {Number} Scale which is applied to each pixel-value - */ - SubImage.prototype.show = function (canvas, scale) { - var ctx, frame, data, current, y, x, pixel; - - if (!scale) { - scale = 1.0; - } - ctx = canvas.getContext('2d'); - canvas.width = this.size.x; - canvas.height = this.size.y; - frame = ctx.getImageData(0, 0, canvas.width, canvas.height); - data = frame.data; - current = 0; - for (y = 0; y < this.size.y; y++) { - for (x = 0; x < this.size.x; x++) { - pixel = y * this.size.x + x; - current = this.get(x, y) * scale; - data[pixel * 4 + 0] = current; - data[pixel * 4 + 1] = current; - data[pixel * 4 + 2] = current; - data[pixel * 4 + 3] = 255; - } - } - frame.data = data; - ctx.putImageData(frame, 0, 0); - }; - - /** - * Retrieves a given pixel position from the {SubImage} - * @param x {Number} The x-position - * @param y {Number} The y-position - * @returns {Number} The grayscale value at the pixel-position - */ - SubImage.prototype.get = function (x, y) { - return this.data[(this.from.y + y) * this.originalSize.x + this.from.x + x]; - }; - - /** - * Updates the underlying data from a given {ImageWrapper} - * @param image {ImageWrapper} The updated image - */ - SubImage.prototype.updateData = function (image) { - this.originalSize = image.size; - this.data = image.data; - }; - - /** - * Updates the position of the shared area - * @param from {x,y} The new location - * @returns {SubImage} returns {this} for possible chaining - */ - SubImage.prototype.updateFrom = function (from) { - this.from = from; - return this; - }; - - /* harmony default export */ exports["a"] = SubImage; - -/***/ }, +/***/ (function(module, exports) { + +module.exports = { + inputStream: { + name: "Live", + type: "LiveStream", + constraints: { + width: 640, + height: 480, + // aspectRatio: 640/480, // optional + facingMode: "environment" }, + area: { + top: "0%", + right: "0%", + left: "0%", + bottom: "0%" + }, + singleChannel: false // true: only the red color-channel is read + }, + locate: true, + numOfWorkers: 2, + decoder: { + readers: ['code_128_reader'], + debug: { + drawBoundingBox: false, + showFrequency: false, + drawScanline: false, + showPattern: false + } + }, + locator: { + halfSample: true, + patchSize: "medium", // x-small, small, medium, large, x-large + debug: { + showCanvas: false, + showPatches: false, + showFoundPatches: false, + showSkeleton: false, + showLabels: false, + showPatchLabels: false, + showRemainingPatchLabels: false, + boxFromPatches: { + showTransformed: false, + showTransformedBox: false, + showBB: false + } + } + } +}; + +/***/ }), /* 81 */ -/***/ function(module, exports) { - - /* - * typedefs.js - * Normalizes browser-specific prefixes - */ - - if (typeof window !== 'undefined') { - window.requestAnimFrame = function () { - return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function ( /* function FrameRequestCallback */callback) { - window.setTimeout(callback, 1000 / 60); - }; - }(); - } - Math.imul = Math.imul || function (a, b) { - var ah = a >>> 16 & 0xffff, - al = a & 0xffff, - bh = b >>> 16 & 0xffff, - bl = b & 0xffff; - // the shift by 0 fixes the sign on the high part - // the final |0 converts the unsigned value into a signed value - return al * bl + (ah * bl + al * bh << 16 >>> 0) | 0; - }; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__bresenham__ = __webpack_require__(82); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_image_debug__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reader_code_128_reader__ = __webpack_require__(93); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reader_ean_reader__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reader_code_39_reader__ = __webpack_require__(45); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__reader_code_39_vin_reader__ = __webpack_require__(94); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__reader_codabar_reader__ = __webpack_require__(92); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__reader_upc_reader__ = __webpack_require__(100); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__reader_ean_8_reader__ = __webpack_require__(97); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__reader_ean_2_reader__ = __webpack_require__(95); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__reader_ean_5_reader__ = __webpack_require__(96); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__reader_upc_e_reader__ = __webpack_require__(99); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__reader_i2of5_reader__ = __webpack_require__(98); +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + + + + + + + + + + + + + + + +var READERS = { + code_128_reader: __WEBPACK_IMPORTED_MODULE_2__reader_code_128_reader__["a" /* default */], + ean_reader: __WEBPACK_IMPORTED_MODULE_3__reader_ean_reader__["a" /* default */], + ean_5_reader: __WEBPACK_IMPORTED_MODULE_10__reader_ean_5_reader__["a" /* default */], + ean_2_reader: __WEBPACK_IMPORTED_MODULE_9__reader_ean_2_reader__["a" /* default */], + ean_8_reader: __WEBPACK_IMPORTED_MODULE_8__reader_ean_8_reader__["a" /* default */], + code_39_reader: __WEBPACK_IMPORTED_MODULE_4__reader_code_39_reader__["a" /* default */], + code_39_vin_reader: __WEBPACK_IMPORTED_MODULE_5__reader_code_39_vin_reader__["a" /* default */], + codabar_reader: __WEBPACK_IMPORTED_MODULE_6__reader_codabar_reader__["a" /* default */], + upc_reader: __WEBPACK_IMPORTED_MODULE_7__reader_upc_reader__["a" /* default */], + upc_e_reader: __WEBPACK_IMPORTED_MODULE_11__reader_upc_e_reader__["a" /* default */], + i2of5_reader: __WEBPACK_IMPORTED_MODULE_12__reader_i2of5_reader__["a" /* default */] +}; +/* harmony default export */ __webpack_exports__["a"] = { + create: function create(config, inputImageWrapper) { + var _canvas = { + ctx: { + frequency: null, + pattern: null, + overlay: null + }, + dom: { + frequency: null, + pattern: null, + overlay: null + } + }, + _barcodeReaders = []; + + initCanvas(); + initReaders(); + initConfig(); + + function initCanvas() { + if (true && typeof document !== 'undefined') { + var $debug = document.querySelector("#debug.detection"); + _canvas.dom.frequency = document.querySelector("canvas.frequency"); + if (!_canvas.dom.frequency) { + _canvas.dom.frequency = document.createElement("canvas"); + _canvas.dom.frequency.className = "frequency"; + if ($debug) { + $debug.appendChild(_canvas.dom.frequency); + } + } + _canvas.ctx.frequency = _canvas.dom.frequency.getContext("2d"); + + _canvas.dom.pattern = document.querySelector("canvas.patternBuffer"); + if (!_canvas.dom.pattern) { + _canvas.dom.pattern = document.createElement("canvas"); + _canvas.dom.pattern.className = "patternBuffer"; + if ($debug) { + $debug.appendChild(_canvas.dom.pattern); + } + } + _canvas.ctx.pattern = _canvas.dom.pattern.getContext("2d"); + + if ($debug) { + _canvas.dom.overlay = document.querySelector("canvas.drawingBuffer"); + if (!_canvas.dom.overlay) { + _canvas.dom.overlay = document.createElement("canvas"); + _canvas.dom.overlay.className = "drawingBuffer"; + $debug.appendChild(_canvas.dom.overlay); + } + _canvas.ctx.overlay = _canvas.dom.overlay.getContext("2d"); + } + } + } + + function initReaders() { + config.readers.forEach(function (readerConfig) { + var reader, + configuration = {}, + supplements = []; + + if ((typeof readerConfig === 'undefined' ? 'undefined' : _typeof(readerConfig)) === 'object') { + reader = readerConfig.format; + configuration = readerConfig.config; + } else if (typeof readerConfig === 'string') { + reader = readerConfig; + } + if (true) { + console.log("Before registering reader: ", reader); + } + if (configuration.supplements) { + supplements = configuration.supplements.map(function (supplement) { + return new READERS[supplement](); + }); + } + _barcodeReaders.push(new READERS[reader](configuration, supplements)); + }); + if (true) { + console.log("Registered Readers: " + _barcodeReaders.map(function (reader) { + return JSON.stringify({ format: reader.FORMAT, config: reader.config }); + }).join(', ')); + } + } + + function initConfig() { + if (true && typeof document !== 'undefined') { + var i, + vis = [{ + node: _canvas.dom.frequency, + prop: config.debug.showFrequency + }, { + node: _canvas.dom.pattern, + prop: config.debug.showPattern + }]; + + for (i = 0; i < vis.length; i++) { + if (vis[i].prop === true) { + vis[i].node.style.display = "block"; + } else { + vis[i].node.style.display = "none"; + } + } + } + } + + /** + * extend the line on both ends + * @param {Array} line + * @param {Number} angle + */ + function getExtendedLine(line, angle, ext) { + function extendLine(amount) { + var extension = { + y: amount * Math.sin(angle), + x: amount * Math.cos(angle) + }; + + line[0].y -= extension.y; + line[0].x -= extension.x; + line[1].y += extension.y; + line[1].x += extension.x; + } + + // check if inside image + extendLine(ext); + while (ext > 1 && (!inputImageWrapper.inImageWithBorder(line[0], 0) || !inputImageWrapper.inImageWithBorder(line[1], 0))) { + ext -= Math.ceil(ext / 2); + extendLine(-ext); + } + return line; + } + + function getLine(box) { + return [{ + x: (box[1][0] - box[0][0]) / 2 + box[0][0], + y: (box[1][1] - box[0][1]) / 2 + box[0][1] + }, { + x: (box[3][0] - box[2][0]) / 2 + box[2][0], + y: (box[3][1] - box[2][1]) / 2 + box[2][1] + }]; + } + + function tryDecode(line) { + var result = null, + i, + barcodeLine = __WEBPACK_IMPORTED_MODULE_0__bresenham__["a" /* default */].getBarcodeLine(inputImageWrapper, line[0], line[1]); + + if (true && config.debug.showFrequency) { + __WEBPACK_IMPORTED_MODULE_1__common_image_debug__["a" /* default */].drawPath(line, { x: 'x', y: 'y' }, _canvas.ctx.overlay, { color: 'red', lineWidth: 3 }); + __WEBPACK_IMPORTED_MODULE_0__bresenham__["a" /* default */].debug.printFrequency(barcodeLine.line, _canvas.dom.frequency); + } + + __WEBPACK_IMPORTED_MODULE_0__bresenham__["a" /* default */].toBinaryLine(barcodeLine); + + if (true && config.debug.showPattern) { + __WEBPACK_IMPORTED_MODULE_0__bresenham__["a" /* default */].debug.printPattern(barcodeLine.line, _canvas.dom.pattern); + } + + for (i = 0; i < _barcodeReaders.length && result === null; i++) { + result = _barcodeReaders[i].decodePattern(barcodeLine.line); + } + if (result === null) { + return null; + } + return { + codeResult: result, + barcodeLine: barcodeLine + }; + } + + /** + * This method slices the given area apart and tries to detect a barcode-pattern + * for each slice. It returns the decoded barcode, or null if nothing was found + * @param {Array} box + * @param {Array} line + * @param {Number} lineAngle + */ + function tryDecodeBruteForce(box, line, lineAngle) { + var sideLength = Math.sqrt(Math.pow(box[1][0] - box[0][0], 2) + Math.pow(box[1][1] - box[0][1], 2)), + i, + slices = 16, + result = null, + dir, + extension, + xdir = Math.sin(lineAngle), + ydir = Math.cos(lineAngle); + + for (i = 1; i < slices && result === null; i++) { + // move line perpendicular to angle + dir = sideLength / slices * i * (i % 2 === 0 ? -1 : 1); + extension = { + y: dir * xdir, + x: dir * ydir + }; + line[0].y += extension.x; + line[0].x -= extension.y; + line[1].y += extension.x; + line[1].x -= extension.y; + + result = tryDecode(line); + } + return result; + } + + function getLineLength(line) { + return Math.sqrt(Math.pow(Math.abs(line[1].y - line[0].y), 2) + Math.pow(Math.abs(line[1].x - line[0].x), 2)); + } + + /** + * With the help of the configured readers (Code128 or EAN) this function tries to detect a + * valid barcode pattern within the given area. + * @param {Object} box The area to search in + * @returns {Object} the result {codeResult, line, angle, pattern, threshold} + */ + function _decodeFromBoundingBox(box) { + var line, + lineAngle, + ctx = _canvas.ctx.overlay, + result, + lineLength; + + if (true) { + if (config.debug.drawBoundingBox && ctx) { + __WEBPACK_IMPORTED_MODULE_1__common_image_debug__["a" /* default */].drawPath(box, { x: 0, y: 1 }, ctx, { color: "blue", lineWidth: 2 }); + } + } + + line = getLine(box); + lineLength = getLineLength(line); + lineAngle = Math.atan2(line[1].y - line[0].y, line[1].x - line[0].x); + line = getExtendedLine(line, lineAngle, Math.floor(lineLength * 0.1)); + if (line === null) { + return null; + } + + result = tryDecode(line); + if (result === null) { + result = tryDecodeBruteForce(box, line, lineAngle); + } + + if (result === null) { + return null; + } + + if (true && result && config.debug.drawScanline && ctx) { + __WEBPACK_IMPORTED_MODULE_1__common_image_debug__["a" /* default */].drawPath(line, { x: 'x', y: 'y' }, ctx, { color: 'red', lineWidth: 3 }); + } + + return { + codeResult: result.codeResult, + line: line, + angle: lineAngle, + pattern: result.barcodeLine.line, + threshold: result.barcodeLine.threshold + }; + } + + return { + decodeFromBoundingBox: function decodeFromBoundingBox(box) { + return _decodeFromBoundingBox(box); + }, + decodeFromBoundingBoxes: function decodeFromBoundingBoxes(boxes) { + var i, + result, + barcodes = [], + multiple = config.multiple; + + for (i = 0; i < boxes.length; i++) { + var box = boxes[i]; + result = _decodeFromBoundingBox(box) || {}; + result.box = box; + + if (multiple) { + barcodes.push(result); + } else if (result.codeResult) { + return result; + } + } + + if (multiple) { + return { + barcodes: barcodes + }; + } + }, + setReaders: function setReaders(readers) { + config.readers = readers; + _barcodeReaders.length = 0; + initReaders(); + } + }; + } +}; + +/***/ }), /* 82 */ -/***/ function(module, exports, __webpack_require__) { - - module.e = { - inputStream: { - name: "Live", - type: "LiveStream", - constraints: { - width: 640, - height: 480, - // aspectRatio: 640/480, // optional - facingMode: "environment" }, - area: { - top: "0%", - right: "0%", - left: "0%", - bottom: "0%" - }, - singleChannel: false // true: only the red color-channel is read - }, - locate: true, - numOfWorkers: 2, - decoder: { - readers: ['code_128_reader'], - debug: { - drawBoundingBox: false, - showFrequency: false, - drawScanline: false, - showPattern: false - } - }, - locator: { - halfSample: true, - patchSize: "medium", // x-small, small, medium, large, x-large - debug: { - showCanvas: false, - showPatches: false, - showFoundPatches: false, - showSkeleton: false, - showLabels: false, - showPatchLabels: false, - showRemainingPatchLabels: false, - boxFromPatches: { - showTransformed: false, - showTransformedBox: false, - showBB: false - } - } - } - }; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +var Bresenham = {}; + +var Slope = { + DIR: { + UP: 1, + DOWN: -1 + } +}; +/** + * Scans a line of the given image from point p1 to p2 and returns a result object containing + * gray-scale values (0-255) of the underlying pixels in addition to the min + * and max values. + * @param {Object} imageWrapper + * @param {Object} p1 The start point {x,y} + * @param {Object} p2 The end point {x,y} + * @returns {line, min, max} + */ +Bresenham.getBarcodeLine = function (imageWrapper, p1, p2) { + var x0 = p1.x | 0, + y0 = p1.y | 0, + x1 = p2.x | 0, + y1 = p2.y | 0, + steep = Math.abs(y1 - y0) > Math.abs(x1 - x0), + deltax, + deltay, + error, + ystep, + y, + tmp, + x, + line = [], + imageData = imageWrapper.data, + width = imageWrapper.size.x, + sum = 0, + val, + min = 255, + max = 0; + + function read(a, b) { + val = imageData[b * width + a]; + sum += val; + min = val < min ? val : min; + max = val > max ? val : max; + line.push(val); + } + + if (steep) { + tmp = x0; + x0 = y0; + y0 = tmp; + + tmp = x1; + x1 = y1; + y1 = tmp; + } + if (x0 > x1) { + tmp = x0; + x0 = x1; + x1 = tmp; + + tmp = y0; + y0 = y1; + y1 = tmp; + } + deltax = x1 - x0; + deltay = Math.abs(y1 - y0); + error = deltax / 2 | 0; + y = y0; + ystep = y0 < y1 ? 1 : -1; + for (x = x0; x < x1; x++) { + if (steep) { + read(y, x); + } else { + read(x, y); + } + error = error - deltay; + if (error < 0) { + y = y + ystep; + error = error + deltax; + } + } + + return { + line: line, + min: min, + max: max + }; +}; + +/** + * Converts the result from getBarcodeLine into a binary representation + * also considering the frequency and slope of the signal for more robust results + * @param {Object} result {line, min, max} + */ +Bresenham.toBinaryLine = function (result) { + var min = result.min, + max = result.max, + line = result.line, + slope, + slope2, + center = min + (max - min) / 2, + extrema = [], + currentDir, + dir, + threshold = (max - min) / 12, + rThreshold = -threshold, + i, + j; + + // 1. find extrema + currentDir = line[0] > center ? Slope.DIR.UP : Slope.DIR.DOWN; + extrema.push({ + pos: 0, + val: line[0] + }); + for (i = 0; i < line.length - 2; i++) { + slope = line[i + 1] - line[i]; + slope2 = line[i + 2] - line[i + 1]; + if (slope + slope2 < rThreshold && line[i + 1] < center * 1.5) { + dir = Slope.DIR.DOWN; + } else if (slope + slope2 > threshold && line[i + 1] > center * 0.5) { + dir = Slope.DIR.UP; + } else { + dir = currentDir; + } + + if (currentDir !== dir) { + extrema.push({ + pos: i, + val: line[i] + }); + currentDir = dir; + } + } + extrema.push({ + pos: line.length, + val: line[line.length - 1] + }); + + for (j = extrema[0].pos; j < extrema[1].pos; j++) { + line[j] = line[j] > center ? 0 : 1; + } + + // iterate over extrema and convert to binary based on avg between minmax + for (i = 1; i < extrema.length - 1; i++) { + if (extrema[i + 1].val > extrema[i].val) { + threshold = extrema[i].val + (extrema[i + 1].val - extrema[i].val) / 3 * 2 | 0; + } else { + threshold = extrema[i + 1].val + (extrema[i].val - extrema[i + 1].val) / 3 | 0; + } + + for (j = extrema[i].pos; j < extrema[i + 1].pos; j++) { + line[j] = line[j] > threshold ? 0 : 1; + } + } + + return { + line: line, + threshold: threshold + }; +}; + +/** + * Used for development only + */ +Bresenham.debug = { + printFrequency: function printFrequency(line, canvas) { + var i, + ctx = canvas.getContext("2d"); + canvas.width = line.length; + canvas.height = 256; + + ctx.beginPath(); + ctx.strokeStyle = "blue"; + for (i = 0; i < line.length; i++) { + ctx.moveTo(i, 255); + ctx.lineTo(i, 255 - line[i]); + } + ctx.stroke(); + ctx.closePath(); + }, + + printPattern: function printPattern(line, canvas) { + var ctx = canvas.getContext("2d"), + i; + + canvas.width = line.length; + ctx.fillColor = "black"; + for (i = 0; i < line.length; i++) { + if (line[i] === 1) { + ctx.fillRect(i, 0, 1, 100); + } + } + } +}; + +/* harmony default export */ __webpack_exports__["a"] = Bresenham; + +/***/ }), /* 83 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__bresenham__ = __webpack_require__(84); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_image_debug__ = __webpack_require__(6); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__reader_code_128_reader__ = __webpack_require__(95); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__reader_ean_reader__ = __webpack_require__(4); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__reader_code_39_reader__ = __webpack_require__(45); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__reader_code_39_vin_reader__ = __webpack_require__(96); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__reader_codabar_reader__ = __webpack_require__(94); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__reader_upc_reader__ = __webpack_require__(102); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__reader_ean_8_reader__ = __webpack_require__(99); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__reader_ean_2_reader__ = __webpack_require__(97); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__reader_ean_5_reader__ = __webpack_require__(98); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__reader_upc_e_reader__ = __webpack_require__(101); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__reader_i2of5_reader__ = __webpack_require__(100); - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - - - - - - - - - - - - - - - - var READERS = { - code_128_reader: /* harmony import */__WEBPACK_IMPORTED_MODULE_2__reader_code_128_reader__["a"], - ean_reader: /* harmony import */__WEBPACK_IMPORTED_MODULE_3__reader_ean_reader__["a"], - ean_5_reader: /* harmony import */__WEBPACK_IMPORTED_MODULE_10__reader_ean_5_reader__["a"], - ean_2_reader: /* harmony import */__WEBPACK_IMPORTED_MODULE_9__reader_ean_2_reader__["a"], - ean_8_reader: /* harmony import */__WEBPACK_IMPORTED_MODULE_8__reader_ean_8_reader__["a"], - code_39_reader: /* harmony import */__WEBPACK_IMPORTED_MODULE_4__reader_code_39_reader__["a"], - code_39_vin_reader: /* harmony import */__WEBPACK_IMPORTED_MODULE_5__reader_code_39_vin_reader__["a"], - codabar_reader: /* harmony import */__WEBPACK_IMPORTED_MODULE_6__reader_codabar_reader__["a"], - upc_reader: /* harmony import */__WEBPACK_IMPORTED_MODULE_7__reader_upc_reader__["a"], - upc_e_reader: /* harmony import */__WEBPACK_IMPORTED_MODULE_11__reader_upc_e_reader__["a"], - i2of5_reader: /* harmony import */__WEBPACK_IMPORTED_MODULE_12__reader_i2of5_reader__["a"] - }; - /* harmony default export */ exports["a"] = { - create: function create(config, inputImageWrapper) { - var _canvas = { - ctx: { - frequency: null, - pattern: null, - overlay: null - }, - dom: { - frequency: null, - pattern: null, - overlay: null - } - }, - _barcodeReaders = []; - - initCanvas(); - initReaders(); - initConfig(); - - function initCanvas() { - if (true && typeof document !== 'undefined') { - var $debug = document.querySelector("#debug.detection"); - _canvas.dom.frequency = document.querySelector("canvas.frequency"); - if (!_canvas.dom.frequency) { - _canvas.dom.frequency = document.createElement("canvas"); - _canvas.dom.frequency.className = "frequency"; - if ($debug) { - $debug.appendChild(_canvas.dom.frequency); - } - } - _canvas.ctx.frequency = _canvas.dom.frequency.getContext("2d"); - - _canvas.dom.pattern = document.querySelector("canvas.patternBuffer"); - if (!_canvas.dom.pattern) { - _canvas.dom.pattern = document.createElement("canvas"); - _canvas.dom.pattern.className = "patternBuffer"; - if ($debug) { - $debug.appendChild(_canvas.dom.pattern); - } - } - _canvas.ctx.pattern = _canvas.dom.pattern.getContext("2d"); - - if ($debug) { - _canvas.dom.overlay = document.querySelector("canvas.drawingBuffer"); - if (!_canvas.dom.overlay) { - _canvas.dom.overlay = document.createElement("canvas"); - _canvas.dom.overlay.className = "drawingBuffer"; - $debug.appendChild(_canvas.dom.overlay); - } - _canvas.ctx.overlay = _canvas.dom.overlay.getContext("2d"); - } - } - } - - function initReaders() { - config.readers.forEach(function (readerConfig) { - var reader, - configuration = {}, - supplements = []; - - if ((typeof readerConfig === 'undefined' ? 'undefined' : _typeof(readerConfig)) === 'object') { - reader = readerConfig.format; - configuration = readerConfig.config; - } else if (typeof readerConfig === 'string') { - reader = readerConfig; - } - if (true) { - console.log("Before registering reader: ", reader); - } - if (configuration.supplements) { - supplements = configuration.supplements.map(function (supplement) { - return new READERS[supplement](); - }); - } - _barcodeReaders.push(new READERS[reader](configuration, supplements)); - }); - if (true) { - console.log("Registered Readers: " + _barcodeReaders.map(function (reader) { - return JSON.stringify({ format: reader.FORMAT, config: reader.config }); - }).join(', ')); - } - } - - function initConfig() { - if (true && typeof document !== 'undefined') { - var i, - vis = [{ - node: _canvas.dom.frequency, - prop: config.debug.showFrequency - }, { - node: _canvas.dom.pattern, - prop: config.debug.showPattern - }]; - - for (i = 0; i < vis.length; i++) { - if (vis[i].prop === true) { - vis[i].node.style.display = "block"; - } else { - vis[i].node.style.display = "none"; - } - } - } - } - - /** - * extend the line on both ends - * @param {Array} line - * @param {Number} angle - */ - function getExtendedLine(line, angle, ext) { - function extendLine(amount) { - var extension = { - y: amount * Math.sin(angle), - x: amount * Math.cos(angle) - }; - - line[0].y -= extension.y; - line[0].x -= extension.x; - line[1].y += extension.y; - line[1].x += extension.x; - } - - // check if inside image - extendLine(ext); - while (ext > 1 && (!inputImageWrapper.inImageWithBorder(line[0], 0) || !inputImageWrapper.inImageWithBorder(line[1], 0))) { - ext -= Math.ceil(ext / 2); - extendLine(-ext); - } - return line; - } - - function getLine(box) { - return [{ - x: (box[1][0] - box[0][0]) / 2 + box[0][0], - y: (box[1][1] - box[0][1]) / 2 + box[0][1] - }, { - x: (box[3][0] - box[2][0]) / 2 + box[2][0], - y: (box[3][1] - box[2][1]) / 2 + box[2][1] - }]; - } - - function tryDecode(line) { - var result = null, - i, - barcodeLine = /* harmony import */__WEBPACK_IMPORTED_MODULE_0__bresenham__["a"].getBarcodeLine(inputImageWrapper, line[0], line[1]); - - if (true && config.debug.showFrequency) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_image_debug__["a"].drawPath(line, { x: 'x', y: 'y' }, _canvas.ctx.overlay, { color: 'red', lineWidth: 3 }); - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__bresenham__["a"].debug.printFrequency(barcodeLine.line, _canvas.dom.frequency); - } - - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__bresenham__["a"].toBinaryLine(barcodeLine); - - if (true && config.debug.showPattern) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__bresenham__["a"].debug.printPattern(barcodeLine.line, _canvas.dom.pattern); - } - - for (i = 0; i < _barcodeReaders.length && result === null; i++) { - result = _barcodeReaders[i].decodePattern(barcodeLine.line); - } - if (result === null) { - return null; - } - return { - codeResult: result, - barcodeLine: barcodeLine - }; - } - - /** - * This method slices the given area apart and tries to detect a barcode-pattern - * for each slice. It returns the decoded barcode, or null if nothing was found - * @param {Array} box - * @param {Array} line - * @param {Number} lineAngle - */ - function tryDecodeBruteForce(box, line, lineAngle) { - var sideLength = Math.sqrt(Math.pow(box[1][0] - box[0][0], 2) + Math.pow(box[1][1] - box[0][1], 2)), - i, - slices = 16, - result = null, - dir, - extension, - xdir = Math.sin(lineAngle), - ydir = Math.cos(lineAngle); - - for (i = 1; i < slices && result === null; i++) { - // move line perpendicular to angle - dir = sideLength / slices * i * (i % 2 === 0 ? -1 : 1); - extension = { - y: dir * xdir, - x: dir * ydir - }; - line[0].y += extension.x; - line[0].x -= extension.y; - line[1].y += extension.x; - line[1].x -= extension.y; - - result = tryDecode(line); - } - return result; - } - - function getLineLength(line) { - return Math.sqrt(Math.pow(Math.abs(line[1].y - line[0].y), 2) + Math.pow(Math.abs(line[1].x - line[0].x), 2)); - } - - /** - * With the help of the configured readers (Code128 or EAN) this function tries to detect a - * valid barcode pattern within the given area. - * @param {Object} box The area to search in - * @returns {Object} the result {codeResult, line, angle, pattern, threshold} - */ - function _decodeFromBoundingBox(box) { - var line, - lineAngle, - ctx = _canvas.ctx.overlay, - result, - lineLength; - - if (true) { - if (config.debug.drawBoundingBox && ctx) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_image_debug__["a"].drawPath(box, { x: 0, y: 1 }, ctx, { color: "blue", lineWidth: 2 }); - } - } - - line = getLine(box); - lineLength = getLineLength(line); - lineAngle = Math.atan2(line[1].y - line[0].y, line[1].x - line[0].x); - line = getExtendedLine(line, lineAngle, Math.floor(lineLength * 0.1)); - if (line === null) { - return null; - } - - result = tryDecode(line); - if (result === null) { - result = tryDecodeBruteForce(box, line, lineAngle); - } - - if (result === null) { - return null; - } - - if (true && result && config.debug.drawScanline && ctx) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_image_debug__["a"].drawPath(line, { x: 'x', y: 'y' }, ctx, { color: 'red', lineWidth: 3 }); - } - - return { - codeResult: result.codeResult, - line: line, - angle: lineAngle, - pattern: result.barcodeLine.line, - threshold: result.barcodeLine.threshold - }; - } - - return { - decodeFromBoundingBox: function decodeFromBoundingBox(box) { - return _decodeFromBoundingBox(box); - }, - decodeFromBoundingBoxes: function decodeFromBoundingBoxes(boxes) { - var i, - result, - barcodes = [], - multiple = config.multiple; - - for (i = 0; i < boxes.length; i++) { - var box = boxes[i]; - result = _decodeFromBoundingBox(box) || {}; - result.box = box; - - if (multiple) { - barcodes.push(result); - } else if (result.codeResult) { - return result; - } - } - - if (multiple) { - return { - barcodes: barcodes - }; - } - }, - setReaders: function setReaders(readers) { - config.readers = readers; - _barcodeReaders.length = 0; - initReaders(); - } - }; - } - }; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_pick__ = __webpack_require__(70); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_pick___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_pick__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_mediaDevices__ = __webpack_require__(77); +/* unused harmony export pickConstraints */ + + + + +var facingMatching = { + "user": /front/i, + "environment": /back/i +}; + +var streamRef; + +function waitForVideo(video) { + return new Promise(function (resolve, reject) { + var attempts = 10; + + function checkVideo() { + if (attempts > 0) { + if (video.videoWidth > 0 && video.videoHeight > 0) { + if (true) { + console.log(video.videoWidth + "px x " + video.videoHeight + "px"); + } + resolve(); + } else { + window.setTimeout(checkVideo, 500); + } + } else { + reject('Unable to play video stream. Is webcam working?'); + } + attempts--; + } + checkVideo(); + }); +} + +/** + * Tries to attach the camera-stream to a given video-element + * and calls the callback function when the content is ready + * @param {Object} constraints + * @param {Object} video + */ +function initCamera(video, constraints) { + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_mediaDevices__["a" /* getUserMedia */])(constraints).then(function (stream) { + return new Promise(function (resolve) { + streamRef = stream; + video.setAttribute("autoplay", 'true'); + video.srcObject = stream; + video.addEventListener('loadedmetadata', function () { + video.play(); + resolve(); + }); + }); + }).then(waitForVideo.bind(null, video)); +} + +function deprecatedConstraints(videoConstraints) { + var normalized = __WEBPACK_IMPORTED_MODULE_0_lodash_pick___default()(videoConstraints, ["width", "height", "facingMode", "aspectRatio", "deviceId"]); + + if (typeof videoConstraints.minAspectRatio !== 'undefined' && videoConstraints.minAspectRatio > 0) { + normalized.aspectRatio = videoConstraints.minAspectRatio; + console.log("WARNING: Constraint 'minAspectRatio' is deprecated; Use 'aspectRatio' instead"); + } + if (typeof videoConstraints.facing !== 'undefined') { + normalized.facingMode = videoConstraints.facing; + console.log("WARNING: Constraint 'facing' is deprecated. Use 'facingMode' instead'"); + } + return normalized; +} + +function pickConstraints(videoConstraints) { + var normalizedConstraints = { + audio: false, + video: deprecatedConstraints(videoConstraints) + }; + + if (normalizedConstraints.video.deviceId && normalizedConstraints.video.facingMode) { + delete normalizedConstraints.video.facingMode; + } + return Promise.resolve(normalizedConstraints); +} + +function enumerateVideoDevices() { + return __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1_mediaDevices__["b" /* enumerateDevices */])().then(function (devices) { + return devices.filter(function (device) { + return device.kind === 'videoinput'; + }); + }); +} + +/* harmony default export */ __webpack_exports__["a"] = { + request: function request(video, videoConstraints) { + return pickConstraints(videoConstraints).then(initCamera.bind(null, video)); + }, + release: function release() { + var tracks = streamRef && streamRef.getVideoTracks(); + if (tracks && tracks.length) { + tracks[0].stop(); + } + streamRef = null; + }, + enumerateVideoDevices: enumerateVideoDevices, + getActiveStreamLabel: function getActiveStreamLabel() { + if (streamRef) { + var tracks = streamRef.getVideoTracks(); + if (tracks && tracks.length) { + return tracks[0].label; + } + } + } +}; + +/***/ }), /* 84 */ -/***/ function(module, exports, __webpack_require__) { - - var Bresenham = {}; - - var Slope = { - DIR: { - UP: 1, - DOWN: -1 - } - }; - /** - * Scans a line of the given image from point p1 to p2 and returns a result object containing - * gray-scale values (0-255) of the underlying pixels in addition to the min - * and max values. - * @param {Object} imageWrapper - * @param {Object} p1 The start point {x,y} - * @param {Object} p2 The end point {x,y} - * @returns {line, min, max} - */ - Bresenham.getBarcodeLine = function (imageWrapper, p1, p2) { - var x0 = p1.x | 0, - y0 = p1.y | 0, - x1 = p2.x | 0, - y1 = p2.y | 0, - steep = Math.abs(y1 - y0) > Math.abs(x1 - x0), - deltax, - deltay, - error, - ystep, - y, - tmp, - x, - line = [], - imageData = imageWrapper.data, - width = imageWrapper.size.x, - sum = 0, - val, - min = 255, - max = 0; - - function read(a, b) { - val = imageData[b * width + a]; - sum += val; - min = val < min ? val : min; - max = val > max ? val : max; - line.push(val); - } - - if (steep) { - tmp = x0; - x0 = y0; - y0 = tmp; - - tmp = x1; - x1 = y1; - y1 = tmp; - } - if (x0 > x1) { - tmp = x0; - x0 = x1; - x1 = tmp; - - tmp = y0; - y0 = y1; - y1 = tmp; - } - deltax = x1 - x0; - deltay = Math.abs(y1 - y0); - error = deltax / 2 | 0; - y = y0; - ystep = y0 < y1 ? 1 : -1; - for (x = x0; x < x1; x++) { - if (steep) { - read(y, x); - } else { - read(x, y); - } - error = error - deltay; - if (error < 0) { - y = y + ystep; - error = error + deltax; - } - } - - return { - line: line, - min: min, - max: max - }; - }; - - /** - * Converts the result from getBarcodeLine into a binary representation - * also considering the frequency and slope of the signal for more robust results - * @param {Object} result {line, min, max} - */ - Bresenham.toBinaryLine = function (result) { - var min = result.min, - max = result.max, - line = result.line, - slope, - slope2, - center = min + (max - min) / 2, - extrema = [], - currentDir, - dir, - threshold = (max - min) / 12, - rThreshold = -threshold, - i, - j; - - // 1. find extrema - currentDir = line[0] > center ? Slope.DIR.UP : Slope.DIR.DOWN; - extrema.push({ - pos: 0, - val: line[0] - }); - for (i = 0; i < line.length - 2; i++) { - slope = line[i + 1] - line[i]; - slope2 = line[i + 2] - line[i + 1]; - if (slope + slope2 < rThreshold && line[i + 1] < center * 1.5) { - dir = Slope.DIR.DOWN; - } else if (slope + slope2 > threshold && line[i + 1] > center * 0.5) { - dir = Slope.DIR.UP; - } else { - dir = currentDir; - } - - if (currentDir !== dir) { - extrema.push({ - pos: i, - val: line[i] - }); - currentDir = dir; - } - } - extrema.push({ - pos: line.length, - val: line[line.length - 1] - }); - - for (j = extrema[0].pos; j < extrema[1].pos; j++) { - line[j] = line[j] > center ? 0 : 1; - } - - // iterate over extrema and convert to binary based on avg between minmax - for (i = 1; i < extrema.length - 1; i++) { - if (extrema[i + 1].val > extrema[i].val) { - threshold = extrema[i].val + (extrema[i + 1].val - extrema[i].val) / 3 * 2 | 0; - } else { - threshold = extrema[i + 1].val + (extrema[i].val - extrema[i + 1].val) / 3 | 0; - } - - for (j = extrema[i].pos; j < extrema[i + 1].pos; j++) { - line[j] = line[j] > threshold ? 0 : 1; - } - } - - return { - line: line, - threshold: threshold - }; - }; - - /** - * Used for development only - */ - Bresenham.debug = { - printFrequency: function printFrequency(line, canvas) { - var i, - ctx = canvas.getContext("2d"); - canvas.width = line.length; - canvas.height = 256; - - ctx.beginPath(); - ctx.strokeStyle = "blue"; - for (i = 0; i < line.length; i++) { - ctx.moveTo(i, 255); - ctx.lineTo(i, 255 - line[i]); - } - ctx.stroke(); - ctx.closePath(); - }, - - printPattern: function printPattern(line, canvas) { - var ctx = canvas.getContext("2d"), - i; - - canvas.width = line.length; - ctx.fillColor = "black"; - for (i = 0; i < line.length; i++) { - if (line[i] === 1) { - ctx.fillRect(i, 0, 1, 100); - } - } - } - }; - - /* harmony default export */ exports["a"] = Bresenham; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty__ = __webpack_require__(199); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_omitBy__ = __webpack_require__(203); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_omitBy___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_lodash_omitBy__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_pick__ = __webpack_require__(70); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_pick___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_lodash_pick__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_merge__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_merge___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash_merge__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__common_dom_helper__ = __webpack_require__(75); +/* harmony export (immutable) */ __webpack_exports__["a"] = createConfigFromSource; + + + + + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + + + +var isDataURL = { regex: /^\s*data:([a-z]+\/[a-z0-9\-\+]+(;[a-z\-]+\=[a-z0-9\-]+)?)?(;base64)?,[a-z0-9\!\$\&\'\,\(\)\*\+\,\;\=\-\.\_\~\:\@\/\?\%\s]*\s*$/i }, + // eslint-disable-line max-len +isBlobURL = { regex: /^\s*blob:(.*)$/i }, + isMediaURL = { regex: /^(?:(?:http[s]?|ftp):\/)?\/?(?:(?:[^:\/\s]+)(?:(?:\/\w+)*\/))?([\w\-]+\.([^#?\s]+))(?:.*)?(?:#[\w\-]+)?$/i }, + // eslint-disable-line max-len +isImageExt = { regex: /(jpe?g|png|gif|tiff)(?:\s+|$)/i }, + isVideoExt = { regex: /(webm|ogg|mp4|m4v)/i }; + +function createConfigFromSource(config, sourceConfig, source) { + if (source instanceof __WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a" /* default */].MediaStream) { + return createConfigForStream(config, sourceConfig, { srcObject: source }); + } else if (source instanceof __WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a" /* default */].HTMLImageElement) { + throw new Error('Source "HTMLImageElement": not yet supported'); + // return createConfigForImage(config, inputConfig, {image: source}); + } else if (source instanceof __WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a" /* default */].HTMLVideoElement) { + throw new Error('Source "HTMLVideoElement": not yet supported'); + // return createConfigForVideo(config, inputConfig, {video: source}); + } else if (source instanceof __WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a" /* default */].HTMLCanvasElement) { + return createConfigForCanvas(config, sourceConfig, { canvas: source }); + } else if (source instanceof __WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a" /* default */].FileList) { + if (source.length > 0) { + return createConfigForFile(config, sourceConfig, source[0]); + } + } else if (source instanceof __WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a" /* default */].File) { + return createConfigForFile(config, sourceConfig, source); + } else if (typeof source === 'string') { + return createConfigForString(config, sourceConfig, source); + } else if ((typeof source === 'undefined' ? 'undefined' : _typeof(source)) === 'object' && (typeof source.constraints !== 'undefined' || typeof source.area !== 'undefined')) { + return createConfigForLiveStream(config, source); + } else { + throw new Error("No source given!"); + } +} + +function createConfigForImage(config, source) { + var inputConfig = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var staticImageConfig = { + inputStream: __WEBPACK_IMPORTED_MODULE_3_lodash_merge___default()({ + type: "ImageStream", + sequence: false, + size: 800 + }, source), + numOfWorkers: true && config.debug ? 0 : 1 + }; + return __WEBPACK_IMPORTED_MODULE_3_lodash_merge___default()(config, staticImageConfig, { numOfWorkers: typeof config.numOfWorkers === 'number' && config.numOfWorkers > 0 ? 1 : 0 }, { inputStream: __WEBPACK_IMPORTED_MODULE_1_lodash_omitBy___default()(__WEBPACK_IMPORTED_MODULE_2_lodash_pick___default()(config.inputStream, ['size']), __WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty___default.a) }, { inputStream: inputConfig }); +} + +function createConfigForMimeType(config, inputConfig, _ref) { + var src = _ref.src, + mime = _ref.mime; + + var _ref2 = mime.match(/^(video|image)\/(.*)$/i) || [], + type = _ref2[1]; + + if (type === 'video') { + return createConfigForVideo(config, { src: src }, inputConfig); + } else if (type === 'image') { + return createConfigForImage(config, { src: src }, inputConfig); + } + throw new Error('Source with mimetype: "' + type + '" not supported'); +} + +function createConfigForFile(config, inputConfig, file) { + var src = __WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a" /* default */].URL.createObjectURL(file); + return createConfigForMimeType(config, inputConfig, { + src: src, + mime: file.type + }); +} + +function createConfigForString(config) { + var inputConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var source = arguments[2]; + + var _ref3 = source.match(isDataURL.regex) || [], + mime = _ref3[1]; + + if (mime) { + return createConfigForMimeType(config, inputConfig, { src: source, mime: mime }); + } + var blobURL = source.match(isBlobURL.regex); + if (blobURL) { + throw new Error('Source "objectURL": not supported'); + } + + var _ref4 = source.match(isMediaURL.regex) || [], + ext = _ref4[2]; + + if (ext) { + return createConfigForMediaExtension(config, inputConfig, { src: source, ext: ext }); + } + throw new Error('Source "' + source + '": not recognized'); +} + +function createConfigForMediaExtension(config, inputConfig, _ref5) { + var src = _ref5.src, + ext = _ref5.ext; + + if (ext.match(isImageExt.regex)) { + return createConfigForImage(config, { src: src }, inputConfig); + } else if (ext.match(isVideoExt.regex)) { + return createConfigForVideo(config, { src: src }, inputConfig); + } + throw new Error('Source "MediaString": not recognized'); +} + +function createConfigForCanvas(config, _ref6) { + var canvas = _ref6.canvas; + var inputConfig = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + // TODO: adjust stream & frame-grabber + // once/continous + throw new Error('Source "Canvas": not implemented!'); +} + +function createConfigForVideo(config, source) { + var inputConfig = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + return __WEBPACK_IMPORTED_MODULE_3_lodash_merge___default()({}, config, { + inputStream: __WEBPACK_IMPORTED_MODULE_3_lodash_merge___default()({ + type: "VideoStream" + }, source) + }, { + inputStream: inputConfig + }); +} + +function createConfigForStream(config, _ref7) { + var srcObject = _ref7.srcObject; + var inputConfig = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + // TODO: attach to element + // wait for the video to be ready (dimensions known) + throw new Error('Source "MediaStream": not implemented!'); +} + +function createConfigForLiveStream(config) { + var inputConfig = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + return __WEBPACK_IMPORTED_MODULE_3_lodash_merge___default()({}, config, { + inputStream: { + type: "LiveStream", + constraints: { + width: 640, + height: 480, + facingMode: "environment" + } + } + }, { + inputStream: inputConfig + }); +} + +/***/ }), /* 85 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_pick__ = __webpack_require__(73); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_pick___default = __WEBPACK_IMPORTED_MODULE_0_lodash_pick__ && __WEBPACK_IMPORTED_MODULE_0_lodash_pick__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_pick__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_pick__; } - /* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_0_lodash_pick___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_0_lodash_pick___default }); - - - - var streamRef; - - function waitForVideo(video) { - return new Promise(function (resolve, reject) { - var attempts = 10; - - function checkVideo() { - if (attempts > 0) { - if (video.videoWidth > 0 && video.videoHeight > 0) { - if (true) { - console.log(video.videoWidth + "px x " + video.videoHeight + "px"); - } - resolve(); - } else { - window.setTimeout(checkVideo, 500); - } - } else { - reject('Unable to play video stream. Is webcam working?'); - } - attempts--; - } - checkVideo(); - }); - } - - /** - * Tries to attach the camera-stream to a given video-element - * and calls the callback function when the content is ready - * @param {Object} constraints - * @param {Object} video - */ - function initCamera(video, constraints) { - if (navigator.mediaDevices && typeof navigator.mediaDevices.getUserMedia === 'function') { - return navigator.mediaDevices.getUserMedia(constraints).then(function (stream) { - return new Promise(function (resolve) { - streamRef = stream; - video.setAttribute("autoplay", 'true'); - video.srcObject = stream; - video.addEventListener('loadedmetadata', function () { - video.play(); - resolve(); - }); - }); - }).then(waitForVideo.bind(null, video)); - } - return Promise.reject(new Error('getUserMedia is not defined')); - } - - function deprecatedConstraints(videoConstraints) { - var normalized = /* harmony import */__WEBPACK_IMPORTED_MODULE_0_lodash_pick___default.a.bind()(videoConstraints, ["width", "height", "facingMode", "aspectRatio", "deviceId"]); - - if (typeof videoConstraints.minAspectRatio !== 'undefined' && videoConstraints.minAspectRatio > 0) { - normalized.aspectRatio = videoConstraints.minAspectRatio; - console.log("WARNING: Constraint 'minAspectRatio' is deprecated; Use 'aspectRatio' instead"); - } - if (typeof videoConstraints.facing !== 'undefined') { - normalized.facingMode = videoConstraints.facing; - console.log("WARNING: Constraint 'facing' is deprecated. Use 'facingMode' instead'"); - } - return normalized; - } - - function pickConstraints(videoConstraints) { - return { - audio: false, - video: deprecatedConstraints(videoConstraints) - }; - } - - /* harmony default export */ exports["a"] = { - request: function request(video, videoConstraints) { - return initCamera(video, pickConstraints(videoConstraints)); - }, - release: function release() { - var tracks = streamRef && streamRef.getVideoTracks(); - if (tracks && tracks.length) { - tracks[0].stop(); - } - streamRef = null; - } - }; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* unused harmony export AvailableTags */ +/* harmony export (immutable) */ __webpack_exports__["a"] = findTagsInObjectURL; +/* unused harmony export base64ToArrayBuffer */ +/* unused harmony export findTagsInBuffer */ +// Scraped from https://github.com/exif-js/exif-js + +var ExifTags = { 0x0112: "orientation" }; +var AvailableTags = Object.keys(ExifTags).map(function (key) { + return ExifTags[key]; +}); + +function findTagsInObjectURL(src) { + var tags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : AvailableTags; + + if (/^blob\:/i.test(src)) { + return objectURLToBlob(src).then(readToBuffer).then(function (buffer) { + return findTagsInBuffer(buffer, tags); + }); + } + return Promise.resolve(null); +} + +function base64ToArrayBuffer(dataUrl) { + var base64 = dataUrl.replace(/^data\:([^\;]+)\;base64,/gmi, ''), + binary = atob(base64), + len = binary.length, + buffer = new ArrayBuffer(len), + view = new Uint8Array(buffer); + + for (var i = 0; i < len; i++) { + view[i] = binary.charCodeAt(i); + } + return buffer; +} + +function readToBuffer(blob) { + return new Promise(function (resolve) { + var fileReader = new FileReader(); + fileReader.onload = function (e) { + return resolve(e.target.result); + }; + fileReader.readAsArrayBuffer(blob); + }); +} + +function objectURLToBlob(url) { + return new Promise(function (resolve, reject) { + var http = new XMLHttpRequest(); + http.open("GET", url, true); + http.responseType = "blob"; + http.onreadystatechange = function () { + if (http.readyState === XMLHttpRequest.DONE && (http.status === 200 || http.status === 0)) { + resolve(this.response); + } + }; + http.onerror = reject; + http.send(); + }); +} + +function findTagsInBuffer(file) { + var selectedTags = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : AvailableTags; + + var dataView = new DataView(file), + length = file.byteLength, + exifTags = selectedTags.reduce(function (result, selectedTag) { + var exifTag = Object.keys(ExifTags).filter(function (tag) { + return ExifTags[tag] === selectedTag; + })[0]; + if (exifTag) { + result[exifTag] = selectedTag; + } + return result; + }, {}); + var offset = 2, + marker = void 0; + + if (dataView.getUint8(0) !== 0xFF || dataView.getUint8(1) !== 0xD8) { + return false; + } + + while (offset < length) { + if (dataView.getUint8(offset) !== 0xFF) { + return false; + } + + marker = dataView.getUint8(offset + 1); + if (marker === 0xE1) { + return readEXIFData(dataView, offset + 4, exifTags); + } else { + offset += 2 + dataView.getUint16(offset + 2); + } + } +} + +function readEXIFData(file, start, exifTags) { + if (getStringFromBuffer(file, start, 4) !== "Exif") { + return false; + } + + var tiffOffset = start + 6; + var bigEnd = void 0, + tags = void 0; + + if (file.getUint16(tiffOffset) === 0x4949) { + bigEnd = false; + } else if (file.getUint16(tiffOffset) === 0x4D4D) { + bigEnd = true; + } else { + return false; + } + + if (file.getUint16(tiffOffset + 2, !bigEnd) !== 0x002A) { + return false; + } + + var firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd); + if (firstIFDOffset < 0x00000008) { + return false; + } + + tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, exifTags, bigEnd); + return tags; +} + +function readTags(file, tiffStart, dirStart, strings, bigEnd) { + var entries = file.getUint16(dirStart, !bigEnd), + tags = {}; + + for (var i = 0; i < entries; i++) { + var entryOffset = dirStart + i * 12 + 2, + tag = strings[file.getUint16(entryOffset, !bigEnd)]; + if (tag) { + tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd); + } + } + return tags; +} + +function readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd) { + var type = file.getUint16(entryOffset + 2, !bigEnd), + numValues = file.getUint32(entryOffset + 4, !bigEnd); + + switch (type) { + case 3: + if (numValues === 1) { + return file.getUint16(entryOffset + 8, !bigEnd); + } + } +} + +function getStringFromBuffer(buffer, start, length) { + var outstr = ""; + for (var n = start; n < start + length; n++) { + outstr += String.fromCharCode(buffer.getUint8(n)); + } + return outstr; +} + +/***/ }), /* 86 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty__ = __webpack_require__(195); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty___default = __WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty__ && __WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty__; } - /* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty___default }); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_omitBy__ = __webpack_require__(199); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_lodash_omitBy___default = __WEBPACK_IMPORTED_MODULE_1_lodash_omitBy__ && __WEBPACK_IMPORTED_MODULE_1_lodash_omitBy__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_1_lodash_omitBy__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_1_lodash_omitBy__; } - /* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_1_lodash_omitBy___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_1_lodash_omitBy___default }); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_pick__ = __webpack_require__(73); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_lodash_pick___default = __WEBPACK_IMPORTED_MODULE_2_lodash_pick__ && __WEBPACK_IMPORTED_MODULE_2_lodash_pick__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_2_lodash_pick__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_2_lodash_pick__; } - /* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_2_lodash_pick___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_2_lodash_pick___default }); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_merge__ = __webpack_require__(15); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash_merge___default = __WEBPACK_IMPORTED_MODULE_3_lodash_merge__ && __WEBPACK_IMPORTED_MODULE_3_lodash_merge__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_3_lodash_merge__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_3_lodash_merge__; } - /* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_3_lodash_merge___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_3_lodash_merge___default }); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__common_dom_helper__ = __webpack_require__(78); - /* harmony export */ exports["a"] = createConfigFromSource; - - - - - var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - - - - var isDataURL = { regex: /^\s*data:([a-z]+\/[a-z0-9\-\+]+(;[a-z\-]+\=[a-z0-9\-]+)?)?(;base64)?,[a-z0-9\!\$\&\'\,\(\)\*\+\,\;\=\-\.\_\~\:\@\/\?\%\s]*\s*$/i }, - // eslint-disable-line max-len - isBlobURL = { regex: /^\s*blob:(.*)$/i }, - isMediaURL = { regex: /^(?:(?:http[s]?|ftp):\/)?\/?(?:(?:[^:\/\s]+)(?:(?:\/\w+)*\/))?([\w\-]+\.([^#?\s]+))(?:.*)?(?:#[\w\-]+)?$/i }, - // eslint-disable-line max-len - isImageExt = { regex: /(jpe?g|png|gif|tiff)(?:\s+|$)/i }, - isVideoExt = { regex: /(webm|ogg|mp4|m4v)/i }; - - function createConfigFromSource(config, sourceConfig, source) { - if (source instanceof /* harmony import */__WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a"].MediaStream) { - return createConfigForStream(config, sourceConfig, { srcObject: source }); - } else if (source instanceof /* harmony import */__WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a"].HTMLImageElement) { - throw new Error('Source "HTMLImageElement": not yet supported'); - // return createConfigForImage(config, inputConfig, {image: source}); - } else if (source instanceof /* harmony import */__WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a"].HTMLVideoElement) { - throw new Error('Source "HTMLVideoElement": not yet supported'); - // return createConfigForVideo(config, inputConfig, {video: source}); - } else if (source instanceof /* harmony import */__WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a"].HTMLCanvasElement) { - return createConfigForCanvas(config, sourceConfig, { canvas: source }); - } else if (source instanceof /* harmony import */__WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a"].FileList) { - if (source.length > 0) { - return createConfigForFile(config, sourceConfig, source[0]); - } - } else if (source instanceof /* harmony import */__WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a"].File) { - return createConfigForFile(config, sourceConfig, source); - } else if (typeof source === 'string') { - return createConfigForString(config, sourceConfig, source); - } else if ((typeof source === 'undefined' ? 'undefined' : _typeof(source)) === 'object' && (typeof source.constraints !== 'undefined' || typeof source.area !== 'undefined')) { - return createConfigForLiveStream(config, source); - } else { - throw new Error("No source given!"); - } - } - - function createConfigForImage(config, source) { - var inputConfig = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; - - var staticImageConfig = { - inputStream: /* harmony import */__WEBPACK_IMPORTED_MODULE_3_lodash_merge___default.a.bind()({ - type: "ImageStream", - sequence: false, - size: 800 - }, source), - numOfWorkers: true && config.debug ? 0 : 1 - }; - return /* harmony import */__WEBPACK_IMPORTED_MODULE_3_lodash_merge___default.a.bind()(config, staticImageConfig, { numOfWorkers: typeof config.numOfWorkers === 'number' && config.numOfWorkers > 0 ? 1 : 0 }, { inputStream: /* harmony import */__WEBPACK_IMPORTED_MODULE_1_lodash_omitBy___default.a.bind()(/* harmony import */__WEBPACK_IMPORTED_MODULE_2_lodash_pick___default.a.bind()(config.inputStream, ['size']), /* harmony import */__WEBPACK_IMPORTED_MODULE_0_lodash_isEmpty___default.a) }, { inputStream: inputConfig }); - } - - function createConfigForMimeType(config, inputConfig, _ref) { - var src = _ref.src; - var mime = _ref.mime; - - var _ref2 = mime.match(/^(video|image)\/(.*)$/i) || []; - - var type = _ref2[1]; - - if (type === 'video') { - return createConfigForVideo(config, { src: src }, inputConfig); - } else if (type === 'image') { - return createConfigForImage(config, { src: src }, inputConfig); - } - throw new Error('Source with mimetype: "' + type + '" not supported'); - } - - function createConfigForFile(config, inputConfig, file) { - var src = /* harmony import */__WEBPACK_IMPORTED_MODULE_4__common_dom_helper__["a"].URL.createObjectURL(file); - return createConfigForMimeType(config, inputConfig, { - src: src, - mime: file.type - }); - } - - function createConfigForString(config) { - var inputConfig = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - var source = arguments[2]; - - var _ref3 = source.match(isDataURL.regex) || []; - - var mime = _ref3[1]; - - if (mime) { - return createConfigForMimeType(config, inputConfig, { src: source, mime: mime }); - } - var blobURL = source.match(isBlobURL.regex); - if (blobURL) { - throw new Error('Source "objectURL": not supported'); - } - - var _ref4 = source.match(isMediaURL.regex) || []; - - var ext = _ref4[2]; - - if (ext) { - return createConfigForMediaExtension(config, inputConfig, { src: source, ext: ext }); - } - throw new Error('Source "' + source + '": not recognized'); - } - - function createConfigForMediaExtension(config, inputConfig, _ref5) { - var src = _ref5.src; - var ext = _ref5.ext; - - if (ext.match(isImageExt.regex)) { - return createConfigForImage(config, { src: src }, inputConfig); - } else if (ext.match(isVideoExt.regex)) { - return createConfigForVideo(config, { src: src }, inputConfig); - } - throw new Error('Source "MediaString": not recognized'); - } - - function createConfigForCanvas(config, _ref6) { - var canvas = _ref6.canvas; - var inputConfig = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; - - // TODO: adjust stream & frame-grabber - // once/continous - throw new Error('Source "Canvas": not implemented!'); - } - - function createConfigForVideo(config, source) { - var inputConfig = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; - - return /* harmony import */__WEBPACK_IMPORTED_MODULE_3_lodash_merge___default.a.bind()({}, config, { - inputStream: /* harmony import */__WEBPACK_IMPORTED_MODULE_3_lodash_merge___default.a.bind()({ - type: "VideoStream" - }, source) - }, { - inputStream: inputConfig - }); - } - - function createConfigForStream(config, _ref7) { - var srcObject = _ref7.srcObject; - var inputConfig = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2]; - - // TODO: attach to element - // wait for the video to be ready (dimensions known) - throw new Error('Source "MediaStream": not implemented!'); - } - - function createConfigForLiveStream(config) { - var inputConfig = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - return /* harmony import */__WEBPACK_IMPORTED_MODULE_3_lodash_merge___default.a.bind()({}, config, { - inputStream: { - type: "LiveStream", - constraints: { - width: 640, - height: 480, - facingMode: "environment" - } - } - }, { - inputStream: inputConfig - }); - } - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_cv_utils__ = __webpack_require__(26); + + +var TO_RADIANS = Math.PI / 180; + +function adjustCanvasSize(canvas, targetSize) { + if (canvas.width !== targetSize.x) { + if (true) { + console.log("WARNING: canvas-size needs to be adjusted"); + } + canvas.width = targetSize.x; + } + if (canvas.height !== targetSize.y) { + if (true) { + console.log("WARNING: canvas-size needs to be adjusted"); + } + canvas.height = targetSize.y; + } +} + +var FrameGrabber = {}; + +FrameGrabber.create = function (inputStream, canvas) { + var _that = {}, + _streamConfig = inputStream.getConfig(), + _video_size = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common_cv_utils__["f" /* imageRef */])(inputStream.getRealWidth(), inputStream.getRealHeight()), + _canvasSize = inputStream.getCanvasSize(), + _size = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common_cv_utils__["f" /* imageRef */])(inputStream.getWidth(), inputStream.getHeight()), + topRight = inputStream.getTopRight(), + _sx = topRight.x, + _sy = topRight.y, + _canvas, + _ctx = null, + _data = null; + + _canvas = canvas ? canvas : document.createElement("canvas"); + _canvas.width = _canvasSize.x; + _canvas.height = _canvasSize.y; + _ctx = _canvas.getContext("2d"); + _data = new Uint8Array(_size.x * _size.y); + if (true) { + console.log("FrameGrabber", JSON.stringify({ + size: _size, + topRight: topRight, + videoSize: _video_size, + canvasSize: _canvasSize + })); + } + + /** + * Uses the given array as frame-buffer + */ + _that.attachData = function (data) { + _data = data; + }; + + /** + * Returns the used frame-buffer + */ + _that.getData = function () { + return _data; + }; + + /** + * Fetches a frame from the input-stream and puts into the frame-buffer. + * The image-data is converted to gray-scale and then half-sampled if configured. + */ + _that.grab = function () { + var doHalfSample = _streamConfig.halfSample, + frame = inputStream.getFrame(), + drawable = frame, + drawAngle = 0, + ctxData; + if (drawable) { + adjustCanvasSize(_canvas, _canvasSize); + if (_streamConfig.type === 'ImageStream') { + drawable = frame.img; + if (frame.tags && frame.tags.orientation) { + switch (frame.tags.orientation) { + case 6: + drawAngle = 90 * TO_RADIANS; + break; + case 8: + drawAngle = -90 * TO_RADIANS; + break; + } + } + } + + if (drawAngle !== 0) { + _ctx.translate(_canvasSize.x / 2, _canvasSize.y / 2); + _ctx.rotate(drawAngle); + _ctx.drawImage(drawable, -_canvasSize.y / 2, -_canvasSize.x / 2, _canvasSize.y, _canvasSize.x); + _ctx.rotate(-drawAngle); + _ctx.translate(-_canvasSize.x / 2, -_canvasSize.y / 2); + } else { + _ctx.drawImage(drawable, 0, 0, _canvasSize.x, _canvasSize.y); + } + + ctxData = _ctx.getImageData(_sx, _sy, _size.x, _size.y).data; + if (doHalfSample) { + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common_cv_utils__["i" /* grayAndHalfSampleFromCanvasData */])(ctxData, _size, _data); + } else { + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__common_cv_utils__["j" /* computeGray */])(ctxData, _data, _streamConfig); + } + return true; + } else { + return false; + } + }; + + _that.getSize = function () { + return _size; + }; + + return _that; +}; + +/* harmony default export */ __webpack_exports__["a"] = FrameGrabber; + +/***/ }), /* 87 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony export */ exports["a"] = findTagsInObjectURL;/* unused harmony export base64ToArrayBuffer *//* unused harmony export findTagsInBuffer */// Scraped from https://github.com/exif-js/exif-js - - var ExifTags = { 0x0112: "orientation" }; - var AvailableTags = Object.keys(ExifTags).map(function (key) { - return ExifTags[key]; - });/* unused harmony export AvailableTags */ - - function findTagsInObjectURL(src) { - var tags = arguments.length <= 1 || arguments[1] === undefined ? AvailableTags : arguments[1]; - - if (/^blob\:/i.test(src)) { - return objectURLToBlob(src).then(readToBuffer).then(function (buffer) { - return findTagsInBuffer(buffer, tags); - }); - } - return Promise.resolve(null); - } - - function base64ToArrayBuffer(dataUrl) { - var base64 = dataUrl.replace(/^data\:([^\;]+)\;base64,/gmi, ''), - binary = atob(base64), - len = binary.length, - buffer = new ArrayBuffer(len), - view = new Uint8Array(buffer); - - for (var i = 0; i < len; i++) { - view[i] = binary.charCodeAt(i); - } - return buffer; - } - - function readToBuffer(blob) { - return new Promise(function (resolve) { - var fileReader = new FileReader(); - fileReader.onload = function (e) { - return resolve(e.target.result); - }; - fileReader.readAsArrayBuffer(blob); - }); - } - - function objectURLToBlob(url) { - return new Promise(function (resolve, reject) { - var http = new XMLHttpRequest(); - http.open("GET", url, true); - http.responseType = "blob"; - http.onreadystatechange = function () { - if (http.readyState === XMLHttpRequest.DONE && (http.status === 200 || http.status === 0)) { - resolve(this.response); - } - }; - http.onerror = reject; - http.send(); - }); - } - - function findTagsInBuffer(file) { - var selectedTags = arguments.length <= 1 || arguments[1] === undefined ? AvailableTags : arguments[1]; - - var dataView = new DataView(file), - length = file.byteLength, - exifTags = selectedTags.reduce(function (result, selectedTag) { - var exifTag = Object.keys(ExifTags).filter(function (tag) { - return ExifTags[tag] === selectedTag; - })[0]; - if (exifTag) { - result[exifTag] = selectedTag; - } - return result; - }, {}); - var offset = 2, - marker = void 0; - - if (dataView.getUint8(0) !== 0xFF || dataView.getUint8(1) !== 0xD8) { - return false; - } - - while (offset < length) { - if (dataView.getUint8(offset) !== 0xFF) { - return false; - } - - marker = dataView.getUint8(offset + 1); - if (marker === 0xE1) { - return readEXIFData(dataView, offset + 4, exifTags); - } else { - offset += 2 + dataView.getUint16(offset + 2); - } - } - } - - function readEXIFData(file, start, exifTags) { - if (getStringFromBuffer(file, start, 4) !== "Exif") { - return false; - } - - var tiffOffset = start + 6; - var bigEnd = void 0, - tags = void 0; - - if (file.getUint16(tiffOffset) === 0x4949) { - bigEnd = false; - } else if (file.getUint16(tiffOffset) === 0x4D4D) { - bigEnd = true; - } else { - return false; - } - - if (file.getUint16(tiffOffset + 2, !bigEnd) !== 0x002A) { - return false; - } - - var firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd); - if (firstIFDOffset < 0x00000008) { - return false; - } - - tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, exifTags, bigEnd); - return tags; - } - - function readTags(file, tiffStart, dirStart, strings, bigEnd) { - var entries = file.getUint16(dirStart, !bigEnd), - tags = {}; - - for (var i = 0; i < entries; i++) { - var entryOffset = dirStart + i * 12 + 2, - tag = strings[file.getUint16(entryOffset, !bigEnd)]; - if (tag) { - tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd); - } - } - return tags; - } - - function readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd) { - var type = file.getUint16(entryOffset + 2, !bigEnd), - numValues = file.getUint32(entryOffset + 4, !bigEnd); - - switch (type) { - case 3: - if (numValues === 1) { - return file.getUint16(entryOffset + 8, !bigEnd); - } - } - } - - function getStringFromBuffer(buffer, start, length) { - var outstr = ""; - for (var n = start; n < start + length; n++) { - outstr += String.fromCharCode(buffer.getUint8(n)); - } - return outstr; - } - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__exif_helper__ = __webpack_require__(85); + + +var ImageLoader = {}; +ImageLoader.load = function (directory, callback, offset, size, sequence) { + var htmlImagesSrcArray = new Array(size), + htmlImagesArray = new Array(htmlImagesSrcArray.length), + i, + img, + num; + + if (sequence === false) { + htmlImagesSrcArray[0] = directory; + } else { + for (i = 0; i < htmlImagesSrcArray.length; i++) { + num = offset + i; + htmlImagesSrcArray[i] = directory + "image-" + ("00" + num).slice(-3) + ".jpg"; + } + } + htmlImagesArray.notLoaded = []; + htmlImagesArray.addImage = function (image) { + htmlImagesArray.notLoaded.push(image); + }; + htmlImagesArray.loaded = function (loadedImg) { + var notloadedImgs = htmlImagesArray.notLoaded; + for (var x = 0; x < notloadedImgs.length; x++) { + if (notloadedImgs[x] === loadedImg) { + notloadedImgs.splice(x, 1); + for (var y = 0; y < htmlImagesSrcArray.length; y++) { + var imgName = htmlImagesSrcArray[y].substr(htmlImagesSrcArray[y].lastIndexOf("/")); + if (loadedImg.src.lastIndexOf(imgName) !== -1) { + htmlImagesArray[y] = { img: loadedImg }; + break; + } + } + break; + } + } + if (notloadedImgs.length === 0) { + if (true) { + console.log("Images loaded"); + } + if (sequence === false) { + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__exif_helper__["a" /* findTagsInObjectURL */])(directory, ['orientation']).then(function (tags) { + htmlImagesArray[0].tags = tags; + callback(htmlImagesArray); + }).catch(function (e) { + console.log(e); + callback(htmlImagesArray); + }); + } else { + callback(htmlImagesArray); + } + } + }; + + for (i = 0; i < htmlImagesSrcArray.length; i++) { + img = new Image(); + htmlImagesArray.addImage(img); + addOnloadHandler(img, htmlImagesArray); + img.src = htmlImagesSrcArray[i]; + } +}; + +function addOnloadHandler(img, htmlImagesArray) { + img.onload = function () { + htmlImagesArray.loaded(this); + }; +} + +/* harmony default export */ __webpack_exports__["a"] = ImageLoader; + +/***/ }), /* 88 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_cv_utils__ = __webpack_require__(26); - - - var TO_RADIANS = Math.PI / 180; - - function adjustCanvasSize(canvas, targetSize) { - if (canvas.width !== targetSize.x) { - if (true) { - console.log("WARNING: canvas-size needs to be adjusted"); - } - canvas.width = targetSize.x; - } - if (canvas.height !== targetSize.y) { - if (true) { - console.log("WARNING: canvas-size needs to be adjusted"); - } - canvas.height = targetSize.y; - } - } - - var FrameGrabber = {}; - - FrameGrabber.create = function (inputStream, canvas) { - var _that = {}, - _streamConfig = inputStream.getConfig(), - _video_size = /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_cv_utils__["f"].bind()(inputStream.getRealWidth(), inputStream.getRealHeight()), - _canvasSize = inputStream.getCanvasSize(), - _size = /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_cv_utils__["f"].bind()(inputStream.getWidth(), inputStream.getHeight()), - topRight = inputStream.getTopRight(), - _sx = topRight.x, - _sy = topRight.y, - _canvas, - _ctx = null, - _data = null; - - _canvas = canvas ? canvas : document.createElement("canvas"); - _canvas.width = _canvasSize.x; - _canvas.height = _canvasSize.y; - _ctx = _canvas.getContext("2d"); - _data = new Uint8Array(_size.x * _size.y); - if (true) { - console.log("FrameGrabber", JSON.stringify({ - size: _size, - topRight: topRight, - videoSize: _video_size, - canvasSize: _canvasSize - })); - } - - /** - * Uses the given array as frame-buffer - */ - _that.attachData = function (data) { - _data = data; - }; - - /** - * Returns the used frame-buffer - */ - _that.getData = function () { - return _data; - }; - - /** - * Fetches a frame from the input-stream and puts into the frame-buffer. - * The image-data is converted to gray-scale and then half-sampled if configured. - */ - _that.grab = function () { - var doHalfSample = _streamConfig.halfSample, - frame = inputStream.getFrame(), - drawable = frame, - drawAngle = 0, - ctxData; - if (drawable) { - adjustCanvasSize(_canvas, _canvasSize); - if (_streamConfig.type === 'ImageStream') { - drawable = frame.img; - if (frame.tags && frame.tags.orientation) { - switch (frame.tags.orientation) { - case 6: - drawAngle = 90 * TO_RADIANS; - break; - case 8: - drawAngle = -90 * TO_RADIANS; - break; - } - } - } - - if (drawAngle !== 0) { - _ctx.translate(_canvasSize.x / 2, _canvasSize.y / 2); - _ctx.rotate(drawAngle); - _ctx.drawImage(drawable, -_canvasSize.y / 2, -_canvasSize.x / 2, _canvasSize.y, _canvasSize.x); - _ctx.rotate(-drawAngle); - _ctx.translate(-_canvasSize.x / 2, -_canvasSize.y / 2); - } else { - _ctx.drawImage(drawable, 0, 0, _canvasSize.x, _canvasSize.y); - } - - ctxData = _ctx.getImageData(_sx, _sy, _size.x, _size.y).data; - if (doHalfSample) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_cv_utils__["i"].bind()(ctxData, _size, _data); - } else { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_cv_utils__["j"].bind()(ctxData, _data, _streamConfig); - } - return true; - } else { - return false; - } - }; - - _that.getSize = function () { - return _size; - }; - - return _that; - }; - - /* harmony default export */ exports["a"] = FrameGrabber; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__image_loader__ = __webpack_require__(87); + + +var InputStream = {}; +InputStream.createVideoStream = function (video) { + var that = {}, + _config = null, + _eventNames = ['canrecord', 'ended'], + _eventHandlers = {}, + _calculatedWidth, + _calculatedHeight, + _topRight = { x: 0, y: 0 }, + _canvasSize = { x: 0, y: 0 }; + + function initSize() { + var width = video.videoWidth, + height = video.videoHeight; + + _calculatedWidth = _config.size ? width / height > 1 ? _config.size : Math.floor(width / height * _config.size) : width; + _calculatedHeight = _config.size ? width / height > 1 ? Math.floor(height / width * _config.size) : _config.size : height; + + _canvasSize.x = _calculatedWidth; + _canvasSize.y = _calculatedHeight; + } + + that.getRealWidth = function () { + return video.videoWidth; + }; + + that.getRealHeight = function () { + return video.videoHeight; + }; + + that.getWidth = function () { + return _calculatedWidth; + }; + + that.getHeight = function () { + return _calculatedHeight; + }; + + that.setWidth = function (width) { + _calculatedWidth = width; + }; + + that.setHeight = function (height) { + _calculatedHeight = height; + }; + + that.setInputStream = function (config) { + _config = config; + video.src = typeof config.src !== 'undefined' ? config.src : ''; + }; + + that.ended = function () { + return video.ended; + }; + + that.getConfig = function () { + return _config; + }; + + that.setAttribute = function (name, value) { + video.setAttribute(name, value); + }; + + that.pause = function () { + video.pause(); + }; + + that.play = function () { + video.play(); + }; + + that.setCurrentTime = function (time) { + if (_config.type !== "LiveStream") { + video.currentTime = time; + } + }; + + that.addEventListener = function (event, f, bool) { + if (_eventNames.indexOf(event) !== -1) { + if (!_eventHandlers[event]) { + _eventHandlers[event] = []; + } + _eventHandlers[event].push(f); + } else { + video.addEventListener(event, f, bool); + } + }; + + that.clearEventHandlers = function () { + _eventNames.forEach(function (eventName) { + var handlers = _eventHandlers[eventName]; + if (handlers && handlers.length > 0) { + handlers.forEach(function (handler) { + video.removeEventListener(eventName, handler); + }); + } + }); + }; + + that.trigger = function (eventName, args) { + var j, + handlers = _eventHandlers[eventName]; + + if (eventName === 'canrecord') { + initSize(); + } + if (handlers && handlers.length > 0) { + for (j = 0; j < handlers.length; j++) { + handlers[j].apply(that, args); + } + } + }; + + that.setTopRight = function (topRight) { + _topRight.x = topRight.x; + _topRight.y = topRight.y; + }; + + that.getTopRight = function () { + return _topRight; + }; + + that.setCanvasSize = function (size) { + _canvasSize.x = size.x; + _canvasSize.y = size.y; + }; + + that.getCanvasSize = function () { + return _canvasSize; + }; + + that.getFrame = function () { + return video; + }; + + return that; +}; + +InputStream.createLiveStream = function (video) { + video.setAttribute("autoplay", true); + var that = InputStream.createVideoStream(video); + + that.ended = function () { + return false; + }; + + return that; +}; + +InputStream.createImageStream = function () { + var that = {}; + var _config = null; + + var width = 0, + height = 0, + frameIdx = 0, + paused = true, + loaded = false, + imgArray = null, + size = 0, + offset = 1, + baseUrl = null, + ended = false, + calculatedWidth, + calculatedHeight, + _eventNames = ['canrecord', 'ended'], + _eventHandlers = {}, + _topRight = { x: 0, y: 0 }, + _canvasSize = { x: 0, y: 0 }; + + function loadImages() { + loaded = false; + __WEBPACK_IMPORTED_MODULE_0__image_loader__["a" /* default */].load(baseUrl, function (imgs) { + imgArray = imgs; + if (imgs[0].tags && imgs[0].tags.orientation) { + switch (imgs[0].tags.orientation) { + case 6: + case 8: + width = imgs[0].img.height; + height = imgs[0].img.width; + break; + default: + width = imgs[0].img.width; + height = imgs[0].img.height; + } + } else { + width = imgs[0].img.width; + height = imgs[0].img.height; + } + calculatedWidth = _config.size ? width / height > 1 ? _config.size : Math.floor(width / height * _config.size) : width; + calculatedHeight = _config.size ? width / height > 1 ? Math.floor(height / width * _config.size) : _config.size : height; + _canvasSize.x = calculatedWidth; + _canvasSize.y = calculatedHeight; + loaded = true; + frameIdx = 0; + setTimeout(function () { + publishEvent("canrecord", []); + }, 0); + }, offset, size, _config.sequence); + } + + function publishEvent(eventName, args) { + var j, + handlers = _eventHandlers[eventName]; + + if (handlers && handlers.length > 0) { + for (j = 0; j < handlers.length; j++) { + handlers[j].apply(that, args); + } + } + } + + that.trigger = publishEvent; + + that.getWidth = function () { + return calculatedWidth; + }; + + that.getHeight = function () { + return calculatedHeight; + }; + + that.setWidth = function (newWidth) { + calculatedWidth = newWidth; + }; + + that.setHeight = function (newHeight) { + calculatedHeight = newHeight; + }; + + that.getRealWidth = function () { + return width; + }; + + that.getRealHeight = function () { + return height; + }; + + that.setInputStream = function (stream) { + _config = stream; + if (stream.sequence === false) { + baseUrl = stream.src; + size = 1; + } else { + baseUrl = stream.src; + size = stream.length; + } + loadImages(); + }; + + that.ended = function () { + return ended; + }; + + that.setAttribute = function () {}; + + that.getConfig = function () { + return _config; + }; + + that.pause = function () { + paused = true; + }; + + that.play = function () { + paused = false; + }; + + that.setCurrentTime = function (time) { + frameIdx = time; + }; + + that.addEventListener = function (event, f) { + if (_eventNames.indexOf(event) !== -1) { + if (!_eventHandlers[event]) { + _eventHandlers[event] = []; + } + _eventHandlers[event].push(f); + } + }; + + that.clearEventHandlers = function () { + _eventHandlers = {}; + }; + + that.setTopRight = function (topRight) { + _topRight.x = topRight.x; + _topRight.y = topRight.y; + }; + + that.getTopRight = function () { + return _topRight; + }; + + that.setCanvasSize = function (canvasSize) { + _canvasSize.x = canvasSize.x; + _canvasSize.y = canvasSize.y; + }; + + that.getCanvasSize = function () { + return _canvasSize; + }; + + that.getFrame = function () { + var frame; + + if (!loaded) { + return null; + } + if (!paused) { + frame = imgArray[frameIdx]; + if (frameIdx < size - 1) { + frameIdx++; + } else { + setTimeout(function () { + ended = true; + publishEvent("ended", []); + }, 0); + } + } + return frame; + }; + + return that; +}; + +/* harmony default export */ __webpack_exports__["a"] = InputStream; + +/***/ }), /* 89 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__exif_helper__ = __webpack_require__(87); - - - var ImageLoader = {}; - ImageLoader.load = function (directory, callback, offset, size, sequence) { - var htmlImagesSrcArray = new Array(size), - htmlImagesArray = new Array(htmlImagesSrcArray.length), - i, - img, - num; - - if (sequence === false) { - htmlImagesSrcArray[0] = directory; - } else { - for (i = 0; i < htmlImagesSrcArray.length; i++) { - num = offset + i; - htmlImagesSrcArray[i] = directory + "image-" + ("00" + num).slice(-3) + ".jpg"; - } - } - htmlImagesArray.notLoaded = []; - htmlImagesArray.addImage = function (image) { - htmlImagesArray.notLoaded.push(image); - }; - htmlImagesArray.loaded = function (loadedImg) { - var notloadedImgs = htmlImagesArray.notLoaded; - for (var x = 0; x < notloadedImgs.length; x++) { - if (notloadedImgs[x] === loadedImg) { - notloadedImgs.splice(x, 1); - for (var y = 0; y < htmlImagesSrcArray.length; y++) { - var imgName = htmlImagesSrcArray[y].substr(htmlImagesSrcArray[y].lastIndexOf("/")); - if (loadedImg.src.lastIndexOf(imgName) !== -1) { - htmlImagesArray[y] = { img: loadedImg }; - break; - } - } - break; - } - } - if (notloadedImgs.length === 0) { - if (true) { - console.log("Images loaded"); - } - if (sequence === false) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__exif_helper__["a"].bind()(directory, ['orientation']).then(function (tags) { - htmlImagesArray[0].tags = tags; - callback(htmlImagesArray); - }).catch(function (e) { - console.log(e); - callback(htmlImagesArray); - }); - } else { - callback(htmlImagesArray); - } - } - }; - - for (i = 0; i < htmlImagesSrcArray.length; i++) { - img = new Image(); - htmlImagesArray.addImage(img); - addOnloadHandler(img, htmlImagesArray); - img.src = htmlImagesSrcArray[i]; - } - }; - - function addOnloadHandler(img, htmlImagesArray) { - img.onload = function () { - htmlImagesArray.loaded(this); - }; - } - - /* harmony default export */ exports["a"] = ImageLoader; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__ = __webpack_require__(27); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_cv_utils__ = __webpack_require__(26); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__common_array_helper__ = __webpack_require__(16); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__common_image_debug__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__rasterizer__ = __webpack_require__(90); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__tracer__ = __webpack_require__(44); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__skeletonizer__ = __webpack_require__(91); +/* harmony export (immutable) */ __webpack_exports__["b"] = createLocator; +/* harmony export (immutable) */ __webpack_exports__["a"] = checkImageConstraints; + + + + + + + +var vec2 = { + clone: __webpack_require__(9), + dot: __webpack_require__(46), + scale: __webpack_require__(105), + transformMat2: __webpack_require__(106) +}; +var mat2 = { + copy: __webpack_require__(102), + create: __webpack_require__(103), + invert: __webpack_require__(104) +}; + +function createLocator(inputImageWrapper, config) { + var _config = config, + _currentImageWrapper, + _skelImageWrapper, + _subImageWrapper, + _labelImageWrapper, + _patchGrid, + _patchLabelGrid, + _imageToPatchGrid, + _binaryImageWrapper, + _patchSize, + _canvasContainer = { + ctx: { + binary: null + }, + dom: { + binary: null + } + }, + _numPatches = { x: 0, y: 0 }, + _inputImageWrapper = inputImageWrapper, + _skeletonizer; + + initBuffers(); + initCanvas(); + + function initBuffers() { + var skeletonImageData; + + if (_config.halfSample) { + _currentImageWrapper = new __WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a" /* default */]({ + x: _inputImageWrapper.size.x / 2 | 0, + y: _inputImageWrapper.size.y / 2 | 0 + }); + } else { + _currentImageWrapper = _inputImageWrapper; + } + + _patchSize = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["b" /* calculatePatchSize */])(_config.patchSize, _currentImageWrapper.size); + + _numPatches.x = _currentImageWrapper.size.x / _patchSize.x | 0; + _numPatches.y = _currentImageWrapper.size.y / _patchSize.y | 0; + + _binaryImageWrapper = new __WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a" /* default */](_currentImageWrapper.size, undefined, Uint8Array, false); + + _labelImageWrapper = new __WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a" /* default */](_patchSize, undefined, Array, true); + + skeletonImageData = new ArrayBuffer(64 * 1024); + _subImageWrapper = new __WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a" /* default */](_patchSize, new Uint8Array(skeletonImageData, 0, _patchSize.x * _patchSize.y)); + _skelImageWrapper = new __WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a" /* default */](_patchSize, new Uint8Array(skeletonImageData, _patchSize.x * _patchSize.y * 3, _patchSize.x * _patchSize.y), undefined, true); + _skeletonizer = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_6__skeletonizer__["a" /* default */])(typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : global, { + size: _patchSize.x + }, skeletonImageData); + + _imageToPatchGrid = new __WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a" /* default */]({ + x: _currentImageWrapper.size.x / _subImageWrapper.size.x | 0, + y: _currentImageWrapper.size.y / _subImageWrapper.size.y | 0 + }, undefined, Array, true); + _patchGrid = new __WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a" /* default */](_imageToPatchGrid.size, undefined, undefined, true); + _patchLabelGrid = new __WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a" /* default */](_imageToPatchGrid.size, undefined, Int32Array, true); + } + + function initCanvas() { + if (_config.useWorker || typeof document === 'undefined') { + return; + } + _canvasContainer.dom.binary = document.createElement("canvas"); + _canvasContainer.dom.binary.className = "binaryBuffer"; + if (true && _config.debug.showCanvas === true) { + document.querySelector("#debug").appendChild(_canvasContainer.dom.binary); + } + _canvasContainer.ctx.binary = _canvasContainer.dom.binary.getContext("2d"); + _canvasContainer.dom.binary.width = _binaryImageWrapper.size.x; + _canvasContainer.dom.binary.height = _binaryImageWrapper.size.y; + } + + /** + * Creates a bounding box which encloses all the given patches + * @returns {Array} The minimal bounding box + */ + function boxFromPatches(patches) { + var overAvg, + i, + j, + patch, + transMat, + minx = _binaryImageWrapper.size.x, + miny = _binaryImageWrapper.size.y, + maxx = -_binaryImageWrapper.size.x, + maxy = -_binaryImageWrapper.size.y, + box, + scale; + + // draw all patches which are to be taken into consideration + overAvg = 0; + for (i = 0; i < patches.length; i++) { + patch = patches[i]; + overAvg += patch.rad; + if (true && _config.debug.showPatches) { + __WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a" /* default */].drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary, { color: "red" }); + } + } + + overAvg /= patches.length; + overAvg = (overAvg * 180 / Math.PI + 90) % 180 - 90; + if (overAvg < 0) { + overAvg += 180; + } + + overAvg = (180 - overAvg) * Math.PI / 180; + transMat = mat2.copy(mat2.create(), [Math.cos(overAvg), Math.sin(overAvg), -Math.sin(overAvg), Math.cos(overAvg)]); + + // iterate over patches and rotate by angle + for (i = 0; i < patches.length; i++) { + patch = patches[i]; + for (j = 0; j < 4; j++) { + vec2.transformMat2(patch.box[j], patch.box[j], transMat); + } + + if (true && _config.debug.boxFromPatches.showTransformed) { + __WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a" /* default */].drawPath(patch.box, { x: 0, y: 1 }, _canvasContainer.ctx.binary, { color: '#99ff00', lineWidth: 2 }); + } + } + + // find bounding box + for (i = 0; i < patches.length; i++) { + patch = patches[i]; + for (j = 0; j < 4; j++) { + if (patch.box[j][0] < minx) { + minx = patch.box[j][0]; + } + if (patch.box[j][0] > maxx) { + maxx = patch.box[j][0]; + } + if (patch.box[j][1] < miny) { + miny = patch.box[j][1]; + } + if (patch.box[j][1] > maxy) { + maxy = patch.box[j][1]; + } + } + } + + box = [[minx, miny], [maxx, miny], [maxx, maxy], [minx, maxy]]; + + if (true && _config.debug.boxFromPatches.showTransformedBox) { + __WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a" /* default */].drawPath(box, { x: 0, y: 1 }, _canvasContainer.ctx.binary, { color: '#ff0000', lineWidth: 2 }); + } + + scale = _config.halfSample ? 2 : 1; + // reverse rotation; + transMat = mat2.invert(transMat, transMat); + for (j = 0; j < 4; j++) { + vec2.transformMat2(box[j], box[j], transMat); + } + + if (true && _config.debug.boxFromPatches.showBB) { + __WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a" /* default */].drawPath(box, { x: 0, y: 1 }, _canvasContainer.ctx.binary, { color: '#ff0000', lineWidth: 2 }); + } + + for (j = 0; j < 4; j++) { + vec2.scale(box[j], box[j], scale); + } + + return box; + } + + /** + * Creates a binary image of the current image + */ + function binarizeImage() { + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["c" /* otsuThreshold */])(_currentImageWrapper, _binaryImageWrapper); + _binaryImageWrapper.zeroBorder(); + if (true && _config.debug.showCanvas) { + _binaryImageWrapper.show(_canvasContainer.dom.binary, 255); + } + } + + /** + * Iterate over the entire image + * extract patches + */ + function findPatches() { + var i, + j, + x, + y, + moments, + patchesFound = [], + rasterizer, + rasterResult, + patch; + for (i = 0; i < _numPatches.x; i++) { + for (j = 0; j < _numPatches.y; j++) { + x = _subImageWrapper.size.x * i; + y = _subImageWrapper.size.y * j; + + // seperate parts + skeletonize(x, y); + + // Rasterize, find individual bars + _skelImageWrapper.zeroBorder(); + __WEBPACK_IMPORTED_MODULE_2__common_array_helper__["a" /* default */].init(_labelImageWrapper.data, 0); + rasterizer = __WEBPACK_IMPORTED_MODULE_4__rasterizer__["a" /* default */].create(_skelImageWrapper, _labelImageWrapper); + rasterResult = rasterizer.rasterize(0); + + if (true && _config.debug.showLabels) { + _labelImageWrapper.overlay(_canvasContainer.dom.binary, Math.floor(360 / rasterResult.count), { x: x, y: y }); + } + + // calculate moments from the skeletonized patch + moments = _labelImageWrapper.moments(rasterResult.count); + + // extract eligible patches + patchesFound = patchesFound.concat(describePatch(moments, [i, j], x, y)); + } + } + + if (true && _config.debug.showFoundPatches) { + for (i = 0; i < patchesFound.length; i++) { + patch = patchesFound[i]; + __WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a" /* default */].drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary, { color: "#99ff00", lineWidth: 2 }); + } + } + + return patchesFound; + } + + /** + * Finds those connected areas which contain at least 6 patches + * and returns them ordered DESC by the number of contained patches + * @param {Number} maxLabel + */ + function findBiggestConnectedAreas(maxLabel) { + var i, + sum, + labelHist = [], + topLabels = []; + + for (i = 0; i < maxLabel; i++) { + labelHist.push(0); + } + sum = _patchLabelGrid.data.length; + while (sum--) { + if (_patchLabelGrid.data[sum] > 0) { + labelHist[_patchLabelGrid.data[sum] - 1]++; + } + } + + labelHist = labelHist.map(function (val, idx) { + return { + val: val, + label: idx + 1 + }; + }); + + labelHist.sort(function (a, b) { + return b.val - a.val; + }); + + // extract top areas with at least 6 patches present + topLabels = labelHist.filter(function (el) { + return el.val >= 5; + }); + + return topLabels; + } + + /** + * + */ + function findBoxes(topLabels, maxLabel) { + var i, + j, + sum, + patches = [], + patch, + box, + boxes = [], + hsv = [0, 1, 1], + rgb = [0, 0, 0]; + + for (i = 0; i < topLabels.length; i++) { + sum = _patchLabelGrid.data.length; + patches.length = 0; + while (sum--) { + if (_patchLabelGrid.data[sum] === topLabels[i].label) { + patch = _imageToPatchGrid.data[sum]; + patches.push(patch); + } + } + box = boxFromPatches(patches); + if (box) { + boxes.push(box); + + // draw patch-labels if requested + if (true && _config.debug.showRemainingPatchLabels) { + for (j = 0; j < patches.length; j++) { + patch = patches[j]; + hsv[0] = topLabels[i].label / (maxLabel + 1) * 360; + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["a" /* hsv2rgb */])(hsv, rgb); + __WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a" /* default */].drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary, { color: "rgb(" + rgb.join(",") + ")", lineWidth: 2 }); + } + } + } + } + return boxes; + } + + /** + * Find similar moments (via cluster) + * @param {Object} moments + */ + function similarMoments(moments) { + var clusters = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["d" /* cluster */])(moments, 0.90); + var topCluster = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["e" /* topGeneric */])(clusters, 1, function (e) { + return e.getPoints().length; + }); + var points = [], + result = []; + if (topCluster.length === 1) { + points = topCluster[0].item.getPoints(); + for (var i = 0; i < points.length; i++) { + result.push(points[i].point); + } + } + return result; + } + + function skeletonize(x, y) { + _binaryImageWrapper.subImageAsCopy(_subImageWrapper, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["f" /* imageRef */])(x, y)); + _skeletonizer.skeletonize(); + + // Show skeleton if requested + if (true && _config.debug.showSkeleton) { + _skelImageWrapper.overlay(_canvasContainer.dom.binary, 360, __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["f" /* imageRef */])(x, y)); + } + } + + /** + * Extracts and describes those patches which seem to contain a barcode pattern + * @param {Array} moments + * @param {Object} patchPos, + * @param {Number} x + * @param {Number} y + * @returns {Array} list of patches + */ + function describePatch(moments, patchPos, x, y) { + var k, + avg, + eligibleMoments = [], + matchingMoments, + patch, + patchesFound = [], + minComponentWeight = Math.ceil(_patchSize.x / 3); + + if (moments.length >= 2) { + // only collect moments which's area covers at least minComponentWeight pixels. + for (k = 0; k < moments.length; k++) { + if (moments[k].m00 > minComponentWeight) { + eligibleMoments.push(moments[k]); + } + } + + // if at least 2 moments are found which have at least minComponentWeights covered + if (eligibleMoments.length >= 2) { + matchingMoments = similarMoments(eligibleMoments); + avg = 0; + // determine the similarity of the moments + for (k = 0; k < matchingMoments.length; k++) { + avg += matchingMoments[k].rad; + } + + // Only two of the moments are allowed not to fit into the equation + // add the patch to the set + if (matchingMoments.length > 1 && matchingMoments.length >= eligibleMoments.length / 4 * 3 && matchingMoments.length > moments.length / 4) { + avg /= matchingMoments.length; + patch = { + index: patchPos[1] * _numPatches.x + patchPos[0], + pos: { + x: x, + y: y + }, + box: [vec2.clone([x, y]), vec2.clone([x + _subImageWrapper.size.x, y]), vec2.clone([x + _subImageWrapper.size.x, y + _subImageWrapper.size.y]), vec2.clone([x, y + _subImageWrapper.size.y])], + moments: matchingMoments, + rad: avg, + vec: vec2.clone([Math.cos(avg), Math.sin(avg)]) + }; + patchesFound.push(patch); + } + } + } + return patchesFound; + } + + /** + * finds patches which are connected and share the same orientation + * @param {Object} patchesFound + */ + function rasterizeAngularSimilarity(patchesFound) { + var label = 0, + threshold = 0.95, + currIdx = 0, + j, + patch, + hsv = [0, 1, 1], + rgb = [0, 0, 0]; + + function notYetProcessed() { + var i; + for (i = 0; i < _patchLabelGrid.data.length; i++) { + if (_patchLabelGrid.data[i] === 0 && _patchGrid.data[i] === 1) { + return i; + } + } + return _patchLabelGrid.length; + } + + function trace(currentIdx) { + var x, + y, + currentPatch, + idx, + dir, + current = { + x: currentIdx % _patchLabelGrid.size.x, + y: currentIdx / _patchLabelGrid.size.x | 0 + }, + similarity; + + if (currentIdx < _patchLabelGrid.data.length) { + currentPatch = _imageToPatchGrid.data[currentIdx]; + // assign label + _patchLabelGrid.data[currentIdx] = label; + for (dir = 0; dir < __WEBPACK_IMPORTED_MODULE_5__tracer__["a" /* default */].searchDirections.length; dir++) { + y = current.y + __WEBPACK_IMPORTED_MODULE_5__tracer__["a" /* default */].searchDirections[dir][0]; + x = current.x + __WEBPACK_IMPORTED_MODULE_5__tracer__["a" /* default */].searchDirections[dir][1]; + idx = y * _patchLabelGrid.size.x + x; + + // continue if patch empty + if (_patchGrid.data[idx] === 0) { + _patchLabelGrid.data[idx] = Number.MAX_VALUE; + continue; + } + + if (_patchLabelGrid.data[idx] === 0) { + similarity = Math.abs(vec2.dot(_imageToPatchGrid.data[idx].vec, currentPatch.vec)); + if (similarity > threshold) { + trace(idx); + } + } + } + } + } + + // prepare for finding the right patches + __WEBPACK_IMPORTED_MODULE_2__common_array_helper__["a" /* default */].init(_patchGrid.data, 0); + __WEBPACK_IMPORTED_MODULE_2__common_array_helper__["a" /* default */].init(_patchLabelGrid.data, 0); + __WEBPACK_IMPORTED_MODULE_2__common_array_helper__["a" /* default */].init(_imageToPatchGrid.data, null); + + for (j = 0; j < patchesFound.length; j++) { + patch = patchesFound[j]; + _imageToPatchGrid.data[patch.index] = patch; + _patchGrid.data[patch.index] = 1; + } + + // rasterize the patches found to determine area + _patchGrid.zeroBorder(); + + while ((currIdx = notYetProcessed()) < _patchLabelGrid.data.length) { + label++; + trace(currIdx); + } + + // draw patch-labels if requested + if (true && _config.debug.showPatchLabels) { + for (j = 0; j < _patchLabelGrid.data.length; j++) { + if (_patchLabelGrid.data[j] > 0 && _patchLabelGrid.data[j] <= label) { + patch = _imageToPatchGrid.data[j]; + hsv[0] = _patchLabelGrid.data[j] / (label + 1) * 360; + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["a" /* hsv2rgb */])(hsv, rgb); + __WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a" /* default */].drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary, { color: "rgb(" + rgb.join(",") + ")", lineWidth: 2 }); + } + } + } + + return label; + } + + return { + locate: function locate() { + var patchesFound, topLabels, boxes; + + if (_config.halfSample) { + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["g" /* halfSample */])(_inputImageWrapper, _currentImageWrapper); + } + + binarizeImage(); + patchesFound = findPatches(); + // return unless 5% or more patches are found + if (patchesFound.length < _numPatches.x * _numPatches.y * 0.05) { + return null; + } + + // rasterrize area by comparing angular similarity; + var maxLabel = rasterizeAngularSimilarity(patchesFound); + if (maxLabel < 1) { + return null; + } + + // search for area with the most patches (biggest connected area) + topLabels = findBiggestConnectedAreas(maxLabel); + if (topLabels.length === 0) { + return null; + } + + boxes = findBoxes(topLabels, maxLabel); + return boxes; + } + }; +} +function checkImageConstraints(inputStream, config) { + var patchSize, + width = inputStream.getWidth(), + height = inputStream.getHeight(), + halfSample = config.halfSample ? 0.5 : 1, + size, + area; + + // calculate width and height based on area + if (inputStream.getConfig().area) { + area = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["h" /* computeImageArea */])(width, height, inputStream.getConfig().area); + inputStream.setTopRight({ x: area.sx, y: area.sy }); + inputStream.setCanvasSize({ x: width, y: height }); + width = area.sw; + height = area.sh; + } + + size = { + x: Math.floor(width * halfSample), + y: Math.floor(height * halfSample) + }; + + patchSize = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["b" /* calculatePatchSize */])(config.patchSize, size); + if (true) { + console.log("Patch-Size: " + JSON.stringify(patchSize)); + } + + inputStream.setWidth(Math.floor(Math.floor(size.x / patchSize.x) * (1 / halfSample) * patchSize.x)); + inputStream.setHeight(Math.floor(Math.floor(size.y / patchSize.y) * (1 / halfSample) * patchSize.y)); + + if (inputStream.getWidth() % patchSize.x === 0 && inputStream.getHeight() % patchSize.y === 0) { + return true; + } + + throw new Error("Image dimensions do not comply with the current settings: Width (" + width + " )and height (" + height + ") must a multiple of " + patchSize.x); +} +/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(72))) + +/***/ }), /* 90 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__image_loader__ = __webpack_require__(89); - - - var InputStream = {}; - InputStream.createVideoStream = function (video) { - var that = {}, - _config = null, - _eventNames = ['canrecord', 'ended'], - _eventHandlers = {}, - _calculatedWidth, - _calculatedHeight, - _topRight = { x: 0, y: 0 }, - _canvasSize = { x: 0, y: 0 }; - - function initSize() { - var width = video.videoWidth, - height = video.videoHeight; - - _calculatedWidth = _config.size ? width / height > 1 ? _config.size : Math.floor(width / height * _config.size) : width; - _calculatedHeight = _config.size ? width / height > 1 ? Math.floor(height / width * _config.size) : _config.size : height; - - _canvasSize.x = _calculatedWidth; - _canvasSize.y = _calculatedHeight; - } - - that.getRealWidth = function () { - return video.videoWidth; - }; - - that.getRealHeight = function () { - return video.videoHeight; - }; - - that.getWidth = function () { - return _calculatedWidth; - }; - - that.getHeight = function () { - return _calculatedHeight; - }; - - that.setWidth = function (width) { - _calculatedWidth = width; - }; - - that.setHeight = function (height) { - _calculatedHeight = height; - }; - - that.setInputStream = function (config) { - _config = config; - video.src = typeof config.src !== 'undefined' ? config.src : ''; - }; - - that.ended = function () { - return video.ended; - }; - - that.getConfig = function () { - return _config; - }; - - that.setAttribute = function (name, value) { - video.setAttribute(name, value); - }; - - that.pause = function () { - video.pause(); - }; - - that.play = function () { - video.play(); - }; - - that.setCurrentTime = function (time) { - if (_config.type !== "LiveStream") { - video.currentTime = time; - } - }; - - that.addEventListener = function (event, f, bool) { - if (_eventNames.indexOf(event) !== -1) { - if (!_eventHandlers[event]) { - _eventHandlers[event] = []; - } - _eventHandlers[event].push(f); - } else { - video.addEventListener(event, f, bool); - } - }; - - that.clearEventHandlers = function () { - _eventNames.forEach(function (eventName) { - var handlers = _eventHandlers[eventName]; - if (handlers && handlers.length > 0) { - handlers.forEach(function (handler) { - video.removeEventListener(eventName, handler); - }); - } - }); - }; - - that.trigger = function (eventName, args) { - var j, - handlers = _eventHandlers[eventName]; - - if (eventName === 'canrecord') { - initSize(); - } - if (handlers && handlers.length > 0) { - for (j = 0; j < handlers.length; j++) { - handlers[j].apply(that, args); - } - } - }; - - that.setTopRight = function (topRight) { - _topRight.x = topRight.x; - _topRight.y = topRight.y; - }; - - that.getTopRight = function () { - return _topRight; - }; - - that.setCanvasSize = function (size) { - _canvasSize.x = size.x; - _canvasSize.y = size.y; - }; - - that.getCanvasSize = function () { - return _canvasSize; - }; - - that.getFrame = function () { - return video; - }; - - return that; - }; - - InputStream.createLiveStream = function (video) { - video.setAttribute("autoplay", true); - var that = InputStream.createVideoStream(video); - - that.ended = function () { - return false; - }; - - return that; - }; - - InputStream.createImageStream = function () { - var that = {}; - var _config = null; - - var width = 0, - height = 0, - frameIdx = 0, - paused = true, - loaded = false, - imgArray = null, - size = 0, - offset = 1, - baseUrl = null, - ended = false, - calculatedWidth, - calculatedHeight, - _eventNames = ['canrecord', 'ended'], - _eventHandlers = {}, - _topRight = { x: 0, y: 0 }, - _canvasSize = { x: 0, y: 0 }; - - function loadImages() { - loaded = false; - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__image_loader__["a"].load(baseUrl, function (imgs) { - imgArray = imgs; - if (imgs[0].tags && imgs[0].tags.orientation) { - switch (imgs[0].tags.orientation) { - case 6: - case 8: - width = imgs[0].img.height; - height = imgs[0].img.width; - break; - default: - width = imgs[0].img.width; - height = imgs[0].img.height; - } - } else { - width = imgs[0].img.width; - height = imgs[0].img.height; - } - calculatedWidth = _config.size ? width / height > 1 ? _config.size : Math.floor(width / height * _config.size) : width; - calculatedHeight = _config.size ? width / height > 1 ? Math.floor(height / width * _config.size) : _config.size : height; - _canvasSize.x = calculatedWidth; - _canvasSize.y = calculatedHeight; - loaded = true; - frameIdx = 0; - setTimeout(function () { - publishEvent("canrecord", []); - }, 0); - }, offset, size, _config.sequence); - } - - function publishEvent(eventName, args) { - var j, - handlers = _eventHandlers[eventName]; - - if (handlers && handlers.length > 0) { - for (j = 0; j < handlers.length; j++) { - handlers[j].apply(that, args); - } - } - } - - that.trigger = publishEvent; - - that.getWidth = function () { - return calculatedWidth; - }; - - that.getHeight = function () { - return calculatedHeight; - }; - - that.setWidth = function (newWidth) { - calculatedWidth = newWidth; - }; - - that.setHeight = function (newHeight) { - calculatedHeight = newHeight; - }; - - that.getRealWidth = function () { - return width; - }; - - that.getRealHeight = function () { - return height; - }; - - that.setInputStream = function (stream) { - _config = stream; - if (stream.sequence === false) { - baseUrl = stream.src; - size = 1; - } else { - baseUrl = stream.src; - size = stream.length; - } - loadImages(); - }; - - that.ended = function () { - return ended; - }; - - that.setAttribute = function () {}; - - that.getConfig = function () { - return _config; - }; - - that.pause = function () { - paused = true; - }; - - that.play = function () { - paused = false; - }; - - that.setCurrentTime = function (time) { - frameIdx = time; - }; - - that.addEventListener = function (event, f) { - if (_eventNames.indexOf(event) !== -1) { - if (!_eventHandlers[event]) { - _eventHandlers[event] = []; - } - _eventHandlers[event].push(f); - } - }; - - that.clearEventHandlers = function () { - _eventHandlers = {}; - }; - - that.setTopRight = function (topRight) { - _topRight.x = topRight.x; - _topRight.y = topRight.y; - }; - - that.getTopRight = function () { - return _topRight; - }; - - that.setCanvasSize = function (canvasSize) { - _canvasSize.x = canvasSize.x; - _canvasSize.y = canvasSize.y; - }; - - that.getCanvasSize = function () { - return _canvasSize; - }; - - that.getFrame = function () { - var frame; - - if (!loaded) { - return null; - } - if (!paused) { - frame = imgArray[frameIdx]; - if (frameIdx < size - 1) { - frameIdx++; - } else { - setTimeout(function () { - ended = true; - publishEvent("ended", []); - }, 0); - } - } - return frame; - }; - - return that; - }; - - /* harmony default export */ exports["a"] = InputStream; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__tracer__ = __webpack_require__(44); + + +/** + * http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization + */ +var Rasterizer = { + createContour2D: function createContour2D() { + return { + dir: null, + index: null, + firstVertex: null, + insideContours: null, + nextpeer: null, + prevpeer: null + }; + }, + CONTOUR_DIR: { + CW_DIR: 0, + CCW_DIR: 1, + UNKNOWN_DIR: 2 + }, + DIR: { + OUTSIDE_EDGE: -32767, + INSIDE_EDGE: -32766 + }, + create: function create(imageWrapper, labelWrapper) { + var imageData = imageWrapper.data, + labelData = labelWrapper.data, + width = imageWrapper.size.x, + height = imageWrapper.size.y, + tracer = __WEBPACK_IMPORTED_MODULE_0__tracer__["a" /* default */].create(imageWrapper, labelWrapper); + + return { + rasterize: function rasterize(depthlabel) { + var color, + bc, + lc, + labelindex, + cx, + cy, + colorMap = [], + vertex, + p, + cc, + sc, + pos, + connectedCount = 0, + i; + + for (i = 0; i < 400; i++) { + colorMap[i] = 0; + } + + colorMap[0] = imageData[0]; + cc = null; + for (cy = 1; cy < height - 1; cy++) { + labelindex = 0; + bc = colorMap[0]; + for (cx = 1; cx < width - 1; cx++) { + pos = cy * width + cx; + if (labelData[pos] === 0) { + color = imageData[pos]; + if (color !== bc) { + if (labelindex === 0) { + lc = connectedCount + 1; + colorMap[lc] = color; + bc = color; + vertex = tracer.contourTracing(cy, cx, lc, color, Rasterizer.DIR.OUTSIDE_EDGE); + if (vertex !== null) { + connectedCount++; + labelindex = lc; + p = Rasterizer.createContour2D(); + p.dir = Rasterizer.CONTOUR_DIR.CW_DIR; + p.index = labelindex; + p.firstVertex = vertex; + p.nextpeer = cc; + p.insideContours = null; + if (cc !== null) { + cc.prevpeer = p; + } + cc = p; + } + } else { + vertex = tracer.contourTracing(cy, cx, Rasterizer.DIR.INSIDE_EDGE, color, labelindex); + if (vertex !== null) { + p = Rasterizer.createContour2D(); + p.firstVertex = vertex; + p.insideContours = null; + if (depthlabel === 0) { + p.dir = Rasterizer.CONTOUR_DIR.CCW_DIR; + } else { + p.dir = Rasterizer.CONTOUR_DIR.CW_DIR; + } + p.index = depthlabel; + sc = cc; + while (sc !== null && sc.index !== labelindex) { + sc = sc.nextpeer; + } + if (sc !== null) { + p.nextpeer = sc.insideContours; + if (sc.insideContours !== null) { + sc.insideContours.prevpeer = p; + } + sc.insideContours = p; + } + } + } + } else { + labelData[pos] = labelindex; + } + } else if (labelData[pos] === Rasterizer.DIR.OUTSIDE_EDGE || labelData[pos] === Rasterizer.DIR.INSIDE_EDGE) { + labelindex = 0; + if (labelData[pos] === Rasterizer.DIR.INSIDE_EDGE) { + bc = imageData[pos]; + } else { + bc = colorMap[0]; + } + } else { + labelindex = labelData[pos]; + bc = colorMap[labelindex]; + } + } + } + sc = cc; + while (sc !== null) { + sc.index = depthlabel; + sc = sc.nextpeer; + } + return { + cc: cc, + count: connectedCount + }; + }, + debug: { + drawContour: function drawContour(canvas, firstContour) { + var ctx = canvas.getContext("2d"), + pq = firstContour, + iq, + q, + p; + + ctx.strokeStyle = "red"; + ctx.fillStyle = "red"; + ctx.lineWidth = 1; + + if (pq !== null) { + iq = pq.insideContours; + } else { + iq = null; + } + + while (pq !== null) { + if (iq !== null) { + q = iq; + iq = iq.nextpeer; + } else { + q = pq; + pq = pq.nextpeer; + if (pq !== null) { + iq = pq.insideContours; + } else { + iq = null; + } + } + + switch (q.dir) { + case Rasterizer.CONTOUR_DIR.CW_DIR: + ctx.strokeStyle = "red"; + break; + case Rasterizer.CONTOUR_DIR.CCW_DIR: + ctx.strokeStyle = "blue"; + break; + case Rasterizer.CONTOUR_DIR.UNKNOWN_DIR: + ctx.strokeStyle = "green"; + break; + } + + p = q.firstVertex; + ctx.beginPath(); + ctx.moveTo(p.x, p.y); + do { + p = p.next; + ctx.lineTo(p.x, p.y); + } while (p !== q.firstVertex); + ctx.stroke(); + } + } + } + }; + } +}; + +/* harmony default export */ __webpack_exports__["a"] = Rasterizer; + +/***/ }), /* 91 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(global) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__ = __webpack_require__(27); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_cv_utils__ = __webpack_require__(26); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__common_array_helper__ = __webpack_require__(16); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__common_image_debug__ = __webpack_require__(6); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__rasterizer__ = __webpack_require__(92); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__tracer__ = __webpack_require__(44); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__skeletonizer__ = __webpack_require__(93); - /* harmony export */ exports["b"] = createLocator;/* harmony export */ exports["a"] = checkImageConstraints; - - - - - - - var vec2 = { - clone: __webpack_require__(8), - dot: __webpack_require__(46), - scale: __webpack_require__(107), - transformMat2: __webpack_require__(108) - }; - var mat2 = { - copy: __webpack_require__(104), - create: __webpack_require__(105), - invert: __webpack_require__(106) - }; - - function createLocator(inputImageWrapper, config) { - var _config = config, - _currentImageWrapper, - _skelImageWrapper, - _subImageWrapper, - _labelImageWrapper, - _patchGrid, - _patchLabelGrid, - _imageToPatchGrid, - _binaryImageWrapper, - _patchSize, - _canvasContainer = { - ctx: { - binary: null - }, - dom: { - binary: null - } - }, - _numPatches = { x: 0, y: 0 }, - _inputImageWrapper = inputImageWrapper, - _skeletonizer; - - initBuffers(); - initCanvas(); - - function initBuffers() { - var skeletonImageData; - - if (_config.halfSample) { - _currentImageWrapper = new /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a"]({ - x: _inputImageWrapper.size.x / 2 | 0, - y: _inputImageWrapper.size.y / 2 | 0 - }); - } else { - _currentImageWrapper = _inputImageWrapper; - } - - _patchSize = /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["b"].bind()(_config.patchSize, _currentImageWrapper.size); - - _numPatches.x = _currentImageWrapper.size.x / _patchSize.x | 0; - _numPatches.y = _currentImageWrapper.size.y / _patchSize.y | 0; - - _binaryImageWrapper = new /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a"](_currentImageWrapper.size, undefined, Uint8Array, false); - - _labelImageWrapper = new /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a"](_patchSize, undefined, Array, true); - - skeletonImageData = new ArrayBuffer(64 * 1024); - _subImageWrapper = new /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a"](_patchSize, new Uint8Array(skeletonImageData, 0, _patchSize.x * _patchSize.y)); - _skelImageWrapper = new /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a"](_patchSize, new Uint8Array(skeletonImageData, _patchSize.x * _patchSize.y * 3, _patchSize.x * _patchSize.y), undefined, true); - _skeletonizer = /* harmony import */__WEBPACK_IMPORTED_MODULE_6__skeletonizer__["a"].bind()(typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : global, { - size: _patchSize.x - }, skeletonImageData); - - _imageToPatchGrid = new /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a"]({ - x: _currentImageWrapper.size.x / _subImageWrapper.size.x | 0, - y: _currentImageWrapper.size.y / _subImageWrapper.size.y | 0 - }, undefined, Array, true); - _patchGrid = new /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a"](_imageToPatchGrid.size, undefined, undefined, true); - _patchLabelGrid = new /* harmony import */__WEBPACK_IMPORTED_MODULE_0__common_image_wrapper__["a"](_imageToPatchGrid.size, undefined, Int32Array, true); - } - - function initCanvas() { - if (_config.useWorker || typeof document === 'undefined') { - return; - } - _canvasContainer.dom.binary = document.createElement("canvas"); - _canvasContainer.dom.binary.className = "binaryBuffer"; - if (true && _config.debug.showCanvas === true) { - document.querySelector("#debug").appendChild(_canvasContainer.dom.binary); - } - _canvasContainer.ctx.binary = _canvasContainer.dom.binary.getContext("2d"); - _canvasContainer.dom.binary.width = _binaryImageWrapper.size.x; - _canvasContainer.dom.binary.height = _binaryImageWrapper.size.y; - } - - /** - * Creates a bounding box which encloses all the given patches - * @returns {Array} The minimal bounding box - */ - function boxFromPatches(patches) { - var overAvg, - i, - j, - patch, - transMat, - minx = _binaryImageWrapper.size.x, - miny = _binaryImageWrapper.size.y, - maxx = -_binaryImageWrapper.size.x, - maxy = -_binaryImageWrapper.size.y, - box, - scale; - - // draw all patches which are to be taken into consideration - overAvg = 0; - for (i = 0; i < patches.length; i++) { - patch = patches[i]; - overAvg += patch.rad; - if (true && _config.debug.showPatches) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a"].drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary, { color: "red" }); - } - } - - overAvg /= patches.length; - overAvg = (overAvg * 180 / Math.PI + 90) % 180 - 90; - if (overAvg < 0) { - overAvg += 180; - } - - overAvg = (180 - overAvg) * Math.PI / 180; - transMat = mat2.copy(mat2.create(), [Math.cos(overAvg), Math.sin(overAvg), -Math.sin(overAvg), Math.cos(overAvg)]); - - // iterate over patches and rotate by angle - for (i = 0; i < patches.length; i++) { - patch = patches[i]; - for (j = 0; j < 4; j++) { - vec2.transformMat2(patch.box[j], patch.box[j], transMat); - } - - if (true && _config.debug.boxFromPatches.showTransformed) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a"].drawPath(patch.box, { x: 0, y: 1 }, _canvasContainer.ctx.binary, { color: '#99ff00', lineWidth: 2 }); - } - } - - // find bounding box - for (i = 0; i < patches.length; i++) { - patch = patches[i]; - for (j = 0; j < 4; j++) { - if (patch.box[j][0] < minx) { - minx = patch.box[j][0]; - } - if (patch.box[j][0] > maxx) { - maxx = patch.box[j][0]; - } - if (patch.box[j][1] < miny) { - miny = patch.box[j][1]; - } - if (patch.box[j][1] > maxy) { - maxy = patch.box[j][1]; - } - } - } - - box = [[minx, miny], [maxx, miny], [maxx, maxy], [minx, maxy]]; - - if (true && _config.debug.boxFromPatches.showTransformedBox) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a"].drawPath(box, { x: 0, y: 1 }, _canvasContainer.ctx.binary, { color: '#ff0000', lineWidth: 2 }); - } - - scale = _config.halfSample ? 2 : 1; - // reverse rotation; - transMat = mat2.invert(transMat, transMat); - for (j = 0; j < 4; j++) { - vec2.transformMat2(box[j], box[j], transMat); - } - - if (true && _config.debug.boxFromPatches.showBB) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a"].drawPath(box, { x: 0, y: 1 }, _canvasContainer.ctx.binary, { color: '#ff0000', lineWidth: 2 }); - } - - for (j = 0; j < 4; j++) { - vec2.scale(box[j], box[j], scale); - } - - return box; - } - - /** - * Creates a binary image of the current image - */ - function binarizeImage() { - /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["c"].bind()(_currentImageWrapper, _binaryImageWrapper); - _binaryImageWrapper.zeroBorder(); - if (true && _config.debug.showCanvas) { - _binaryImageWrapper.show(_canvasContainer.dom.binary, 255); - } - } - - /** - * Iterate over the entire image - * extract patches - */ - function findPatches() { - var i, - j, - x, - y, - moments, - patchesFound = [], - rasterizer, - rasterResult, - patch; - for (i = 0; i < _numPatches.x; i++) { - for (j = 0; j < _numPatches.y; j++) { - x = _subImageWrapper.size.x * i; - y = _subImageWrapper.size.y * j; - - // seperate parts - skeletonize(x, y); - - // Rasterize, find individual bars - _skelImageWrapper.zeroBorder(); - /* harmony import */__WEBPACK_IMPORTED_MODULE_2__common_array_helper__["a"].init(_labelImageWrapper.data, 0); - rasterizer = /* harmony import */__WEBPACK_IMPORTED_MODULE_4__rasterizer__["a"].create(_skelImageWrapper, _labelImageWrapper); - rasterResult = rasterizer.rasterize(0); - - if (true && _config.debug.showLabels) { - _labelImageWrapper.overlay(_canvasContainer.dom.binary, Math.floor(360 / rasterResult.count), { x: x, y: y }); - } - - // calculate moments from the skeletonized patch - moments = _labelImageWrapper.moments(rasterResult.count); - - // extract eligible patches - patchesFound = patchesFound.concat(describePatch(moments, [i, j], x, y)); - } - } - - if (true && _config.debug.showFoundPatches) { - for (i = 0; i < patchesFound.length; i++) { - patch = patchesFound[i]; - /* harmony import */__WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a"].drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary, { color: "#99ff00", lineWidth: 2 }); - } - } - - return patchesFound; - } - - /** - * Finds those connected areas which contain at least 6 patches - * and returns them ordered DESC by the number of contained patches - * @param {Number} maxLabel - */ - function findBiggestConnectedAreas(maxLabel) { - var i, - sum, - labelHist = [], - topLabels = []; - - for (i = 0; i < maxLabel; i++) { - labelHist.push(0); - } - sum = _patchLabelGrid.data.length; - while (sum--) { - if (_patchLabelGrid.data[sum] > 0) { - labelHist[_patchLabelGrid.data[sum] - 1]++; - } - } - - labelHist = labelHist.map(function (val, idx) { - return { - val: val, - label: idx + 1 - }; - }); - - labelHist.sort(function (a, b) { - return b.val - a.val; - }); - - // extract top areas with at least 6 patches present - topLabels = labelHist.filter(function (el) { - return el.val >= 5; - }); - - return topLabels; - } - - /** - * - */ - function findBoxes(topLabels, maxLabel) { - var i, - j, - sum, - patches = [], - patch, - box, - boxes = [], - hsv = [0, 1, 1], - rgb = [0, 0, 0]; - - for (i = 0; i < topLabels.length; i++) { - sum = _patchLabelGrid.data.length; - patches.length = 0; - while (sum--) { - if (_patchLabelGrid.data[sum] === topLabels[i].label) { - patch = _imageToPatchGrid.data[sum]; - patches.push(patch); - } - } - box = boxFromPatches(patches); - if (box) { - boxes.push(box); - - // draw patch-labels if requested - if (true && _config.debug.showRemainingPatchLabels) { - for (j = 0; j < patches.length; j++) { - patch = patches[j]; - hsv[0] = topLabels[i].label / (maxLabel + 1) * 360; - /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["a"].bind()(hsv, rgb); - /* harmony import */__WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a"].drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary, { color: "rgb(" + rgb.join(",") + ")", lineWidth: 2 }); - } - } - } - } - return boxes; - } - - /** - * Find similar moments (via cluster) - * @param {Object} moments - */ - function similarMoments(moments) { - var clusters = /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["d"].bind()(moments, 0.90); - var topCluster = /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["e"].bind()(clusters, 1, function (e) { - return e.getPoints().length; - }); - var points = [], - result = []; - if (topCluster.length === 1) { - points = topCluster[0].item.getPoints(); - for (var i = 0; i < points.length; i++) { - result.push(points[i].point); - } - } - return result; - } - - function skeletonize(x, y) { - _binaryImageWrapper.subImageAsCopy(_subImageWrapper, /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["f"].bind()(x, y)); - _skeletonizer.skeletonize(); - - // Show skeleton if requested - if (true && _config.debug.showSkeleton) { - _skelImageWrapper.overlay(_canvasContainer.dom.binary, 360, /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["f"].bind()(x, y)); - } - } - - /** - * Extracts and describes those patches which seem to contain a barcode pattern - * @param {Array} moments - * @param {Object} patchPos, - * @param {Number} x - * @param {Number} y - * @returns {Array} list of patches - */ - function describePatch(moments, patchPos, x, y) { - var k, - avg, - eligibleMoments = [], - matchingMoments, - patch, - patchesFound = [], - minComponentWeight = Math.ceil(_patchSize.x / 3); - - if (moments.length >= 2) { - // only collect moments which's area covers at least minComponentWeight pixels. - for (k = 0; k < moments.length; k++) { - if (moments[k].m00 > minComponentWeight) { - eligibleMoments.push(moments[k]); - } - } - - // if at least 2 moments are found which have at least minComponentWeights covered - if (eligibleMoments.length >= 2) { - matchingMoments = similarMoments(eligibleMoments); - avg = 0; - // determine the similarity of the moments - for (k = 0; k < matchingMoments.length; k++) { - avg += matchingMoments[k].rad; - } - - // Only two of the moments are allowed not to fit into the equation - // add the patch to the set - if (matchingMoments.length > 1 && matchingMoments.length >= eligibleMoments.length / 4 * 3 && matchingMoments.length > moments.length / 4) { - avg /= matchingMoments.length; - patch = { - index: patchPos[1] * _numPatches.x + patchPos[0], - pos: { - x: x, - y: y - }, - box: [vec2.clone([x, y]), vec2.clone([x + _subImageWrapper.size.x, y]), vec2.clone([x + _subImageWrapper.size.x, y + _subImageWrapper.size.y]), vec2.clone([x, y + _subImageWrapper.size.y])], - moments: matchingMoments, - rad: avg, - vec: vec2.clone([Math.cos(avg), Math.sin(avg)]) - }; - patchesFound.push(patch); - } - } - } - return patchesFound; - } - - /** - * finds patches which are connected and share the same orientation - * @param {Object} patchesFound - */ - function rasterizeAngularSimilarity(patchesFound) { - var label = 0, - threshold = 0.95, - currIdx = 0, - j, - patch, - hsv = [0, 1, 1], - rgb = [0, 0, 0]; - - function notYetProcessed() { - var i; - for (i = 0; i < _patchLabelGrid.data.length; i++) { - if (_patchLabelGrid.data[i] === 0 && _patchGrid.data[i] === 1) { - return i; - } - } - return _patchLabelGrid.length; - } - - function trace(currentIdx) { - var x, - y, - currentPatch, - idx, - dir, - current = { - x: currentIdx % _patchLabelGrid.size.x, - y: currentIdx / _patchLabelGrid.size.x | 0 - }, - similarity; - - if (currentIdx < _patchLabelGrid.data.length) { - currentPatch = _imageToPatchGrid.data[currentIdx]; - // assign label - _patchLabelGrid.data[currentIdx] = label; - for (dir = 0; dir < /* harmony import */__WEBPACK_IMPORTED_MODULE_5__tracer__["a"].searchDirections.length; dir++) { - y = current.y + /* harmony import */__WEBPACK_IMPORTED_MODULE_5__tracer__["a"].searchDirections[dir][0]; - x = current.x + /* harmony import */__WEBPACK_IMPORTED_MODULE_5__tracer__["a"].searchDirections[dir][1]; - idx = y * _patchLabelGrid.size.x + x; - - // continue if patch empty - if (_patchGrid.data[idx] === 0) { - _patchLabelGrid.data[idx] = Number.MAX_VALUE; - continue; - } - - if (_patchLabelGrid.data[idx] === 0) { - similarity = Math.abs(vec2.dot(_imageToPatchGrid.data[idx].vec, currentPatch.vec)); - if (similarity > threshold) { - trace(idx); - } - } - } - } - } - - // prepare for finding the right patches - /* harmony import */__WEBPACK_IMPORTED_MODULE_2__common_array_helper__["a"].init(_patchGrid.data, 0); - /* harmony import */__WEBPACK_IMPORTED_MODULE_2__common_array_helper__["a"].init(_patchLabelGrid.data, 0); - /* harmony import */__WEBPACK_IMPORTED_MODULE_2__common_array_helper__["a"].init(_imageToPatchGrid.data, null); - - for (j = 0; j < patchesFound.length; j++) { - patch = patchesFound[j]; - _imageToPatchGrid.data[patch.index] = patch; - _patchGrid.data[patch.index] = 1; - } - - // rasterize the patches found to determine area - _patchGrid.zeroBorder(); - - while ((currIdx = notYetProcessed()) < _patchLabelGrid.data.length) { - label++; - trace(currIdx); - } - - // draw patch-labels if requested - if (true && _config.debug.showPatchLabels) { - for (j = 0; j < _patchLabelGrid.data.length; j++) { - if (_patchLabelGrid.data[j] > 0 && _patchLabelGrid.data[j] <= label) { - patch = _imageToPatchGrid.data[j]; - hsv[0] = _patchLabelGrid.data[j] / (label + 1) * 360; - /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["a"].bind()(hsv, rgb); - /* harmony import */__WEBPACK_IMPORTED_MODULE_3__common_image_debug__["a"].drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary, { color: "rgb(" + rgb.join(",") + ")", lineWidth: 2 }); - } - } - } - - return label; - } - - return { - locate: function locate() { - var patchesFound, topLabels, boxes; - - if (_config.halfSample) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["g"].bind()(_inputImageWrapper, _currentImageWrapper); - } - - binarizeImage(); - patchesFound = findPatches(); - // return unless 5% or more patches are found - if (patchesFound.length < _numPatches.x * _numPatches.y * 0.05) { - return null; - } - - // rasterrize area by comparing angular similarity; - var maxLabel = rasterizeAngularSimilarity(patchesFound); - if (maxLabel < 1) { - return null; - } - - // search for area with the most patches (biggest connected area) - topLabels = findBiggestConnectedAreas(maxLabel); - if (topLabels.length === 0) { - return null; - } - - boxes = findBoxes(topLabels, maxLabel); - return boxes; - } - }; - } - function checkImageConstraints(inputStream, config) { - var patchSize, - width = inputStream.getWidth(), - height = inputStream.getHeight(), - halfSample = config.halfSample ? 0.5 : 1, - size, - area; - - // calculate width and height based on area - if (inputStream.getConfig().area) { - area = /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["h"].bind()(width, height, inputStream.getConfig().area); - inputStream.setTopRight({ x: area.sx, y: area.sy }); - inputStream.setCanvasSize({ x: width, y: height }); - width = area.sw; - height = area.sh; - } - - size = { - x: Math.floor(width * halfSample), - y: Math.floor(height * halfSample) - }; - - patchSize = /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_cv_utils__["b"].bind()(config.patchSize, size); - if (true) { - console.log("Patch-Size: " + JSON.stringify(patchSize)); - } - - inputStream.setWidth(Math.floor(Math.floor(size.x / patchSize.x) * (1 / halfSample) * patchSize.x)); - inputStream.setHeight(Math.floor(Math.floor(size.y / patchSize.y) * (1 / halfSample) * patchSize.y)); - - if (inputStream.getWidth() % patchSize.x === 0 && inputStream.getHeight() % patchSize.y === 0) { - return true; - } - - throw new Error("Image dimensions do not comply with the current settings: Width (" + width + " )and height (" + height + ") must a multiple of " + patchSize.x); - } - /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* @preserve ASM BEGIN */ +/* eslint-disable eqeqeq*/ +function Skeletonizer(stdlib, foreign, buffer) { + "use asm"; + + var images = new stdlib.Uint8Array(buffer), + size = foreign.size | 0, + imul = stdlib.Math.imul; + + function erode(inImagePtr, outImagePtr) { + inImagePtr = inImagePtr | 0; + outImagePtr = outImagePtr | 0; + + var v = 0, + u = 0, + sum = 0, + yStart1 = 0, + yStart2 = 0, + xStart1 = 0, + xStart2 = 0, + offset = 0; + + for (v = 1; (v | 0) < (size - 1 | 0); v = v + 1 | 0) { + offset = offset + size | 0; + for (u = 1; (u | 0) < (size - 1 | 0); u = u + 1 | 0) { + yStart1 = offset - size | 0; + yStart2 = offset + size | 0; + xStart1 = u - 1 | 0; + xStart2 = u + 1 | 0; + sum = (images[inImagePtr + yStart1 + xStart1 | 0] | 0) + (images[inImagePtr + yStart1 + xStart2 | 0] | 0) + (images[inImagePtr + offset + u | 0] | 0) + (images[inImagePtr + yStart2 + xStart1 | 0] | 0) + (images[inImagePtr + yStart2 + xStart2 | 0] | 0) | 0; + if ((sum | 0) == (5 | 0)) { + images[outImagePtr + offset + u | 0] = 1; + } else { + images[outImagePtr + offset + u | 0] = 0; + } + } + } + return; + } + + function subtract(aImagePtr, bImagePtr, outImagePtr) { + aImagePtr = aImagePtr | 0; + bImagePtr = bImagePtr | 0; + outImagePtr = outImagePtr | 0; + + var length = 0; + + length = imul(size, size) | 0; + + while ((length | 0) > 0) { + length = length - 1 | 0; + images[outImagePtr + length | 0] = (images[aImagePtr + length | 0] | 0) - (images[bImagePtr + length | 0] | 0) | 0; + } + } + + function bitwiseOr(aImagePtr, bImagePtr, outImagePtr) { + aImagePtr = aImagePtr | 0; + bImagePtr = bImagePtr | 0; + outImagePtr = outImagePtr | 0; + + var length = 0; + + length = imul(size, size) | 0; + + while ((length | 0) > 0) { + length = length - 1 | 0; + images[outImagePtr + length | 0] = images[aImagePtr + length | 0] | 0 | (images[bImagePtr + length | 0] | 0) | 0; + } + } + + function countNonZero(imagePtr) { + imagePtr = imagePtr | 0; + + var sum = 0, + length = 0; + + length = imul(size, size) | 0; + + while ((length | 0) > 0) { + length = length - 1 | 0; + sum = (sum | 0) + (images[imagePtr + length | 0] | 0) | 0; + } + + return sum | 0; + } + + function init(imagePtr, value) { + imagePtr = imagePtr | 0; + value = value | 0; + + var length = 0; + + length = imul(size, size) | 0; + + while ((length | 0) > 0) { + length = length - 1 | 0; + images[imagePtr + length | 0] = value; + } + } + + function dilate(inImagePtr, outImagePtr) { + inImagePtr = inImagePtr | 0; + outImagePtr = outImagePtr | 0; + + var v = 0, + u = 0, + sum = 0, + yStart1 = 0, + yStart2 = 0, + xStart1 = 0, + xStart2 = 0, + offset = 0; + + for (v = 1; (v | 0) < (size - 1 | 0); v = v + 1 | 0) { + offset = offset + size | 0; + for (u = 1; (u | 0) < (size - 1 | 0); u = u + 1 | 0) { + yStart1 = offset - size | 0; + yStart2 = offset + size | 0; + xStart1 = u - 1 | 0; + xStart2 = u + 1 | 0; + sum = (images[inImagePtr + yStart1 + xStart1 | 0] | 0) + (images[inImagePtr + yStart1 + xStart2 | 0] | 0) + (images[inImagePtr + offset + u | 0] | 0) + (images[inImagePtr + yStart2 + xStart1 | 0] | 0) + (images[inImagePtr + yStart2 + xStart2 | 0] | 0) | 0; + if ((sum | 0) > (0 | 0)) { + images[outImagePtr + offset + u | 0] = 1; + } else { + images[outImagePtr + offset + u | 0] = 0; + } + } + } + return; + } + + function memcpy(srcImagePtr, dstImagePtr) { + srcImagePtr = srcImagePtr | 0; + dstImagePtr = dstImagePtr | 0; + + var length = 0; + + length = imul(size, size) | 0; + + while ((length | 0) > 0) { + length = length - 1 | 0; + images[dstImagePtr + length | 0] = images[srcImagePtr + length | 0] | 0; + } + } + + function zeroBorder(imagePtr) { + imagePtr = imagePtr | 0; + + var x = 0, + y = 0; + + for (x = 0; (x | 0) < (size - 1 | 0); x = x + 1 | 0) { + images[imagePtr + x | 0] = 0; + images[imagePtr + y | 0] = 0; + y = y + size - 1 | 0; + images[imagePtr + y | 0] = 0; + y = y + 1 | 0; + } + for (x = 0; (x | 0) < (size | 0); x = x + 1 | 0) { + images[imagePtr + y | 0] = 0; + y = y + 1 | 0; + } + } + + function skeletonize() { + var subImagePtr = 0, + erodedImagePtr = 0, + tempImagePtr = 0, + skelImagePtr = 0, + sum = 0, + done = 0; + + erodedImagePtr = imul(size, size) | 0; + tempImagePtr = erodedImagePtr + erodedImagePtr | 0; + skelImagePtr = tempImagePtr + erodedImagePtr | 0; + + // init skel-image + init(skelImagePtr, 0); + zeroBorder(subImagePtr); + + do { + erode(subImagePtr, erodedImagePtr); + dilate(erodedImagePtr, tempImagePtr); + subtract(subImagePtr, tempImagePtr, tempImagePtr); + bitwiseOr(skelImagePtr, tempImagePtr, skelImagePtr); + memcpy(erodedImagePtr, subImagePtr); + sum = countNonZero(subImagePtr) | 0; + done = (sum | 0) == 0 | 0; + } while (!done); + } + return { + skeletonize: skeletonize + }; +} +/* @preserve ASM END */ +/* harmony default export */ __webpack_exports__["a"] = Skeletonizer; +/* eslint-enable eqeqeq*/ + +/***/ }), /* 92 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__tracer__ = __webpack_require__(44); - - - /** - * http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization - */ - var Rasterizer = { - createContour2D: function createContour2D() { - return { - dir: null, - index: null, - firstVertex: null, - insideContours: null, - nextpeer: null, - prevpeer: null - }; - }, - CONTOUR_DIR: { - CW_DIR: 0, - CCW_DIR: 1, - UNKNOWN_DIR: 2 - }, - DIR: { - OUTSIDE_EDGE: -32767, - INSIDE_EDGE: -32766 - }, - create: function create(imageWrapper, labelWrapper) { - var imageData = imageWrapper.data, - labelData = labelWrapper.data, - width = imageWrapper.size.x, - height = imageWrapper.size.y, - tracer = /* harmony import */__WEBPACK_IMPORTED_MODULE_0__tracer__["a"].create(imageWrapper, labelWrapper); - - return { - rasterize: function rasterize(depthlabel) { - var color, - bc, - lc, - labelindex, - cx, - cy, - colorMap = [], - vertex, - p, - cc, - sc, - pos, - connectedCount = 0, - i; - - for (i = 0; i < 400; i++) { - colorMap[i] = 0; - } - - colorMap[0] = imageData[0]; - cc = null; - for (cy = 1; cy < height - 1; cy++) { - labelindex = 0; - bc = colorMap[0]; - for (cx = 1; cx < width - 1; cx++) { - pos = cy * width + cx; - if (labelData[pos] === 0) { - color = imageData[pos]; - if (color !== bc) { - if (labelindex === 0) { - lc = connectedCount + 1; - colorMap[lc] = color; - bc = color; - vertex = tracer.contourTracing(cy, cx, lc, color, Rasterizer.DIR.OUTSIDE_EDGE); - if (vertex !== null) { - connectedCount++; - labelindex = lc; - p = Rasterizer.createContour2D(); - p.dir = Rasterizer.CONTOUR_DIR.CW_DIR; - p.index = labelindex; - p.firstVertex = vertex; - p.nextpeer = cc; - p.insideContours = null; - if (cc !== null) { - cc.prevpeer = p; - } - cc = p; - } - } else { - vertex = tracer.contourTracing(cy, cx, Rasterizer.DIR.INSIDE_EDGE, color, labelindex); - if (vertex !== null) { - p = Rasterizer.createContour2D(); - p.firstVertex = vertex; - p.insideContours = null; - if (depthlabel === 0) { - p.dir = Rasterizer.CONTOUR_DIR.CCW_DIR; - } else { - p.dir = Rasterizer.CONTOUR_DIR.CW_DIR; - } - p.index = depthlabel; - sc = cc; - while (sc !== null && sc.index !== labelindex) { - sc = sc.nextpeer; - } - if (sc !== null) { - p.nextpeer = sc.insideContours; - if (sc.insideContours !== null) { - sc.insideContours.prevpeer = p; - } - sc.insideContours = p; - } - } - } - } else { - labelData[pos] = labelindex; - } - } else if (labelData[pos] === Rasterizer.DIR.OUTSIDE_EDGE || labelData[pos] === Rasterizer.DIR.INSIDE_EDGE) { - labelindex = 0; - if (labelData[pos] === Rasterizer.DIR.INSIDE_EDGE) { - bc = imageData[pos]; - } else { - bc = colorMap[0]; - } - } else { - labelindex = labelData[pos]; - bc = colorMap[labelindex]; - } - } - } - sc = cc; - while (sc !== null) { - sc.index = depthlabel; - sc = sc.nextpeer; - } - return { - cc: cc, - count: connectedCount - }; - }, - debug: { - drawContour: function drawContour(canvas, firstContour) { - var ctx = canvas.getContext("2d"), - pq = firstContour, - iq, - q, - p; - - ctx.strokeStyle = "red"; - ctx.fillStyle = "red"; - ctx.lineWidth = 1; - - if (pq !== null) { - iq = pq.insideContours; - } else { - iq = null; - } - - while (pq !== null) { - if (iq !== null) { - q = iq; - iq = iq.nextpeer; - } else { - q = pq; - pq = pq.nextpeer; - if (pq !== null) { - iq = pq.insideContours; - } else { - iq = null; - } - } - - switch (q.dir) { - case Rasterizer.CONTOUR_DIR.CW_DIR: - ctx.strokeStyle = "red"; - break; - case Rasterizer.CONTOUR_DIR.CCW_DIR: - ctx.strokeStyle = "blue"; - break; - case Rasterizer.CONTOUR_DIR.UNKNOWN_DIR: - ctx.strokeStyle = "green"; - break; - } - - p = q.firstVertex; - ctx.beginPath(); - ctx.moveTo(p.x, p.y); - do { - p = p.next; - ctx.lineTo(p.x, p.y); - } while (p !== q.firstVertex); - ctx.stroke(); - } - } - } - }; - } - }; - - /* harmony default export */ exports["a"] = Rasterizer; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__barcode_reader__ = __webpack_require__(8); + + +function CodabarReader() { + __WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a" /* default */].call(this); + this._counters = []; +} + +var properties = { + ALPHABETH_STRING: { value: "0123456789-$:/.+ABCD" }, + ALPHABET: { value: [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 45, 36, 58, 47, 46, 43, 65, 66, 67, 68] }, + CHARACTER_ENCODINGS: { value: [0x003, 0x006, 0x009, 0x060, 0x012, 0x042, 0x021, 0x024, 0x030, 0x048, 0x00c, 0x018, 0x045, 0x051, 0x054, 0x015, 0x01A, 0x029, 0x00B, 0x00E] }, + START_END: { value: [0x01A, 0x029, 0x00B, 0x00E] }, + MIN_ENCODED_CHARS: { value: 4 }, + MAX_ACCEPTABLE: { value: 2.0 }, + PADDING: { value: 1.5 }, + FORMAT: { value: "codabar", writeable: false } +}; + +CodabarReader.prototype = Object.create(__WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a" /* default */].prototype, properties); +CodabarReader.prototype.constructor = CodabarReader; + +CodabarReader.prototype._decode = function () { + var self = this, + result = [], + start, + decodedChar, + pattern, + nextStart, + end; + + this._counters = self._fillCounters(); + start = self._findStart(); + if (!start) { + return null; + } + nextStart = start.startCounter; + + do { + pattern = self._toPattern(nextStart); + if (pattern < 0) { + return null; + } + decodedChar = self._patternToChar(pattern); + if (decodedChar < 0) { + return null; + } + result.push(decodedChar); + nextStart += 8; + if (result.length > 1 && self._isStartEnd(pattern)) { + break; + } + } while (nextStart < self._counters.length); + + // verify end + if (result.length - 2 < self.MIN_ENCODED_CHARS || !self._isStartEnd(pattern)) { + return null; + } + + // verify end white space + if (!self._verifyWhitespace(start.startCounter, nextStart - 8)) { + return null; + } + + if (!self._validateResult(result, start.startCounter)) { + return null; + } + + nextStart = nextStart > self._counters.length ? self._counters.length : nextStart; + end = start.start + self._sumCounters(start.startCounter, nextStart - 8); + + return { + code: result.join(""), + start: start.start, + end: end, + startInfo: start, + decodedCodes: result + }; +}; + +CodabarReader.prototype._verifyWhitespace = function (startCounter, endCounter) { + if (startCounter - 1 <= 0 || this._counters[startCounter - 1] >= this._calculatePatternLength(startCounter) / 2.0) { + if (endCounter + 8 >= this._counters.length || this._counters[endCounter + 7] >= this._calculatePatternLength(endCounter) / 2.0) { + return true; + } + } + return false; +}; + +CodabarReader.prototype._calculatePatternLength = function (offset) { + var i, + sum = 0; + + for (i = offset; i < offset + 7; i++) { + sum += this._counters[i]; + } + + return sum; +}; + +CodabarReader.prototype._thresholdResultPattern = function (result, startCounter) { + var self = this, + categorization = { + space: { + narrow: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE }, + wide: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE } + }, + bar: { + narrow: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE }, + wide: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE } + } + }, + kind, + cat, + i, + j, + pos = startCounter, + pattern; + + for (i = 0; i < result.length; i++) { + pattern = self._charToPattern(result[i]); + for (j = 6; j >= 0; j--) { + kind = (j & 1) === 2 ? categorization.bar : categorization.space; + cat = (pattern & 1) === 1 ? kind.wide : kind.narrow; + cat.size += self._counters[pos + j]; + cat.counts++; + pattern >>= 1; + } + pos += 8; + } + + ["space", "bar"].forEach(function (key) { + var newkind = categorization[key]; + newkind.wide.min = Math.floor((newkind.narrow.size / newkind.narrow.counts + newkind.wide.size / newkind.wide.counts) / 2); + newkind.narrow.max = Math.ceil(newkind.wide.min); + newkind.wide.max = Math.ceil((newkind.wide.size * self.MAX_ACCEPTABLE + self.PADDING) / newkind.wide.counts); + }); + + return categorization; +}; + +CodabarReader.prototype._charToPattern = function (char) { + var self = this, + charCode = char.charCodeAt(0), + i; + + for (i = 0; i < self.ALPHABET.length; i++) { + if (self.ALPHABET[i] === charCode) { + return self.CHARACTER_ENCODINGS[i]; + } + } + return 0x0; +}; + +CodabarReader.prototype._validateResult = function (result, startCounter) { + var self = this, + thresholds = self._thresholdResultPattern(result, startCounter), + i, + j, + kind, + cat, + size, + pos = startCounter, + pattern; + + for (i = 0; i < result.length; i++) { + pattern = self._charToPattern(result[i]); + for (j = 6; j >= 0; j--) { + kind = (j & 1) === 0 ? thresholds.bar : thresholds.space; + cat = (pattern & 1) === 1 ? kind.wide : kind.narrow; + size = self._counters[pos + j]; + if (size < cat.min || size > cat.max) { + return false; + } + pattern >>= 1; + } + pos += 8; + } + return true; +}; + +CodabarReader.prototype._patternToChar = function (pattern) { + var i, + self = this; + + for (i = 0; i < self.CHARACTER_ENCODINGS.length; i++) { + if (self.CHARACTER_ENCODINGS[i] === pattern) { + return String.fromCharCode(self.ALPHABET[i]); + } + } + return -1; +}; + +CodabarReader.prototype._computeAlternatingThreshold = function (offset, end) { + var i, + min = Number.MAX_VALUE, + max = 0, + counter; + + for (i = offset; i < end; i += 2) { + counter = this._counters[i]; + if (counter > max) { + max = counter; + } + if (counter < min) { + min = counter; + } + } + + return (min + max) / 2.0 | 0; +}; + +CodabarReader.prototype._toPattern = function (offset) { + var numCounters = 7, + end = offset + numCounters, + barThreshold, + spaceThreshold, + bitmask = 1 << numCounters - 1, + pattern = 0, + i, + threshold; + + if (end > this._counters.length) { + return -1; + } + + barThreshold = this._computeAlternatingThreshold(offset, end); + spaceThreshold = this._computeAlternatingThreshold(offset + 1, end); + + for (i = 0; i < numCounters; i++) { + threshold = (i & 1) === 0 ? barThreshold : spaceThreshold; + if (this._counters[offset + i] > threshold) { + pattern |= bitmask; + } + bitmask >>= 1; + } + + return pattern; +}; + +CodabarReader.prototype._isStartEnd = function (pattern) { + var i; + + for (i = 0; i < this.START_END.length; i++) { + if (this.START_END[i] === pattern) { + return true; + } + } + return false; +}; + +CodabarReader.prototype._sumCounters = function (start, end) { + var i, + sum = 0; + + for (i = start; i < end; i++) { + sum += this._counters[i]; + } + return sum; +}; + +CodabarReader.prototype._findStart = function () { + var self = this, + i, + pattern, + start = self._nextUnset(self._row), + end; + + for (i = 1; i < this._counters.length; i++) { + pattern = self._toPattern(i); + if (pattern !== -1 && self._isStartEnd(pattern)) { + // TODO: Look for whitespace ahead + start += self._sumCounters(0, i); + end = start + self._sumCounters(i, i + 8); + return { + start: start, + end: end, + startCounter: i, + endCounter: i + 8 + }; + } + } +}; + +/* harmony default export */ __webpack_exports__["a"] = CodabarReader; + +/***/ }), /* 93 */ -/***/ function(module, exports, __webpack_require__) { - - /* @preserve ASM BEGIN */ - /* eslint-disable eqeqeq*/ - function Skeletonizer(stdlib, foreign, buffer) { - "use asm"; - - var images = new stdlib.Uint8Array(buffer), - size = foreign.size | 0, - imul = stdlib.Math.imul; - - function erode(inImagePtr, outImagePtr) { - inImagePtr = inImagePtr | 0; - outImagePtr = outImagePtr | 0; - - var v = 0, - u = 0, - sum = 0, - yStart1 = 0, - yStart2 = 0, - xStart1 = 0, - xStart2 = 0, - offset = 0; - - for (v = 1; (v | 0) < (size - 1 | 0); v = v + 1 | 0) { - offset = offset + size | 0; - for (u = 1; (u | 0) < (size - 1 | 0); u = u + 1 | 0) { - yStart1 = offset - size | 0; - yStart2 = offset + size | 0; - xStart1 = u - 1 | 0; - xStart2 = u + 1 | 0; - sum = (images[inImagePtr + yStart1 + xStart1 | 0] | 0) + (images[inImagePtr + yStart1 + xStart2 | 0] | 0) + (images[inImagePtr + offset + u | 0] | 0) + (images[inImagePtr + yStart2 + xStart1 | 0] | 0) + (images[inImagePtr + yStart2 + xStart2 | 0] | 0) | 0; - if ((sum | 0) == (5 | 0)) { - images[outImagePtr + offset + u | 0] = 1; - } else { - images[outImagePtr + offset + u | 0] = 0; - } - } - } - return; - } - - function subtract(aImagePtr, bImagePtr, outImagePtr) { - aImagePtr = aImagePtr | 0; - bImagePtr = bImagePtr | 0; - outImagePtr = outImagePtr | 0; - - var length = 0; - - length = imul(size, size) | 0; - - while ((length | 0) > 0) { - length = length - 1 | 0; - images[outImagePtr + length | 0] = (images[aImagePtr + length | 0] | 0) - (images[bImagePtr + length | 0] | 0) | 0; - } - } - - function bitwiseOr(aImagePtr, bImagePtr, outImagePtr) { - aImagePtr = aImagePtr | 0; - bImagePtr = bImagePtr | 0; - outImagePtr = outImagePtr | 0; - - var length = 0; - - length = imul(size, size) | 0; - - while ((length | 0) > 0) { - length = length - 1 | 0; - images[outImagePtr + length | 0] = images[aImagePtr + length | 0] | 0 | (images[bImagePtr + length | 0] | 0) | 0; - } - } - - function countNonZero(imagePtr) { - imagePtr = imagePtr | 0; - - var sum = 0, - length = 0; - - length = imul(size, size) | 0; - - while ((length | 0) > 0) { - length = length - 1 | 0; - sum = (sum | 0) + (images[imagePtr + length | 0] | 0) | 0; - } - - return sum | 0; - } - - function init(imagePtr, value) { - imagePtr = imagePtr | 0; - value = value | 0; - - var length = 0; - - length = imul(size, size) | 0; - - while ((length | 0) > 0) { - length = length - 1 | 0; - images[imagePtr + length | 0] = value; - } - } - - function dilate(inImagePtr, outImagePtr) { - inImagePtr = inImagePtr | 0; - outImagePtr = outImagePtr | 0; - - var v = 0, - u = 0, - sum = 0, - yStart1 = 0, - yStart2 = 0, - xStart1 = 0, - xStart2 = 0, - offset = 0; - - for (v = 1; (v | 0) < (size - 1 | 0); v = v + 1 | 0) { - offset = offset + size | 0; - for (u = 1; (u | 0) < (size - 1 | 0); u = u + 1 | 0) { - yStart1 = offset - size | 0; - yStart2 = offset + size | 0; - xStart1 = u - 1 | 0; - xStart2 = u + 1 | 0; - sum = (images[inImagePtr + yStart1 + xStart1 | 0] | 0) + (images[inImagePtr + yStart1 + xStart2 | 0] | 0) + (images[inImagePtr + offset + u | 0] | 0) + (images[inImagePtr + yStart2 + xStart1 | 0] | 0) + (images[inImagePtr + yStart2 + xStart2 | 0] | 0) | 0; - if ((sum | 0) > (0 | 0)) { - images[outImagePtr + offset + u | 0] = 1; - } else { - images[outImagePtr + offset + u | 0] = 0; - } - } - } - return; - } - - function memcpy(srcImagePtr, dstImagePtr) { - srcImagePtr = srcImagePtr | 0; - dstImagePtr = dstImagePtr | 0; - - var length = 0; - - length = imul(size, size) | 0; - - while ((length | 0) > 0) { - length = length - 1 | 0; - images[dstImagePtr + length | 0] = images[srcImagePtr + length | 0] | 0; - } - } - - function zeroBorder(imagePtr) { - imagePtr = imagePtr | 0; - - var x = 0, - y = 0; - - for (x = 0; (x | 0) < (size - 1 | 0); x = x + 1 | 0) { - images[imagePtr + x | 0] = 0; - images[imagePtr + y | 0] = 0; - y = y + size - 1 | 0; - images[imagePtr + y | 0] = 0; - y = y + 1 | 0; - } - for (x = 0; (x | 0) < (size | 0); x = x + 1 | 0) { - images[imagePtr + y | 0] = 0; - y = y + 1 | 0; - } - } - - function skeletonize() { - var subImagePtr = 0, - erodedImagePtr = 0, - tempImagePtr = 0, - skelImagePtr = 0, - sum = 0, - done = 0; - - erodedImagePtr = imul(size, size) | 0; - tempImagePtr = erodedImagePtr + erodedImagePtr | 0; - skelImagePtr = tempImagePtr + erodedImagePtr | 0; - - // init skel-image - init(skelImagePtr, 0); - zeroBorder(subImagePtr); - - do { - erode(subImagePtr, erodedImagePtr); - dilate(erodedImagePtr, tempImagePtr); - subtract(subImagePtr, tempImagePtr, tempImagePtr); - bitwiseOr(skelImagePtr, tempImagePtr, skelImagePtr); - memcpy(erodedImagePtr, subImagePtr); - sum = countNonZero(subImagePtr) | 0; - done = (sum | 0) == 0 | 0; - } while (!done); - } - return { - skeletonize: skeletonize - }; - } - /* @preserve ASM END */ - /* harmony default export */ exports["a"] = Skeletonizer; - /* eslint-enable eqeqeq*/ - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__barcode_reader__ = __webpack_require__(8); + + +function Code128Reader() { + __WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a" /* default */].call(this); +} + +var properties = { + CODE_SHIFT: { value: 98 }, + CODE_C: { value: 99 }, + CODE_B: { value: 100 }, + CODE_A: { value: 101 }, + START_CODE_A: { value: 103 }, + START_CODE_B: { value: 104 }, + START_CODE_C: { value: 105 }, + STOP_CODE: { value: 106 }, + CODE_PATTERN: { value: [[2, 1, 2, 2, 2, 2], [2, 2, 2, 1, 2, 2], [2, 2, 2, 2, 2, 1], [1, 2, 1, 2, 2, 3], [1, 2, 1, 3, 2, 2], [1, 3, 1, 2, 2, 2], [1, 2, 2, 2, 1, 3], [1, 2, 2, 3, 1, 2], [1, 3, 2, 2, 1, 2], [2, 2, 1, 2, 1, 3], [2, 2, 1, 3, 1, 2], [2, 3, 1, 2, 1, 2], [1, 1, 2, 2, 3, 2], [1, 2, 2, 1, 3, 2], [1, 2, 2, 2, 3, 1], [1, 1, 3, 2, 2, 2], [1, 2, 3, 1, 2, 2], [1, 2, 3, 2, 2, 1], [2, 2, 3, 2, 1, 1], [2, 2, 1, 1, 3, 2], [2, 2, 1, 2, 3, 1], [2, 1, 3, 2, 1, 2], [2, 2, 3, 1, 1, 2], [3, 1, 2, 1, 3, 1], [3, 1, 1, 2, 2, 2], [3, 2, 1, 1, 2, 2], [3, 2, 1, 2, 2, 1], [3, 1, 2, 2, 1, 2], [3, 2, 2, 1, 1, 2], [3, 2, 2, 2, 1, 1], [2, 1, 2, 1, 2, 3], [2, 1, 2, 3, 2, 1], [2, 3, 2, 1, 2, 1], [1, 1, 1, 3, 2, 3], [1, 3, 1, 1, 2, 3], [1, 3, 1, 3, 2, 1], [1, 1, 2, 3, 1, 3], [1, 3, 2, 1, 1, 3], [1, 3, 2, 3, 1, 1], [2, 1, 1, 3, 1, 3], [2, 3, 1, 1, 1, 3], [2, 3, 1, 3, 1, 1], [1, 1, 2, 1, 3, 3], [1, 1, 2, 3, 3, 1], [1, 3, 2, 1, 3, 1], [1, 1, 3, 1, 2, 3], [1, 1, 3, 3, 2, 1], [1, 3, 3, 1, 2, 1], [3, 1, 3, 1, 2, 1], [2, 1, 1, 3, 3, 1], [2, 3, 1, 1, 3, 1], [2, 1, 3, 1, 1, 3], [2, 1, 3, 3, 1, 1], [2, 1, 3, 1, 3, 1], [3, 1, 1, 1, 2, 3], [3, 1, 1, 3, 2, 1], [3, 3, 1, 1, 2, 1], [3, 1, 2, 1, 1, 3], [3, 1, 2, 3, 1, 1], [3, 3, 2, 1, 1, 1], [3, 1, 4, 1, 1, 1], [2, 2, 1, 4, 1, 1], [4, 3, 1, 1, 1, 1], [1, 1, 1, 2, 2, 4], [1, 1, 1, 4, 2, 2], [1, 2, 1, 1, 2, 4], [1, 2, 1, 4, 2, 1], [1, 4, 1, 1, 2, 2], [1, 4, 1, 2, 2, 1], [1, 1, 2, 2, 1, 4], [1, 1, 2, 4, 1, 2], [1, 2, 2, 1, 1, 4], [1, 2, 2, 4, 1, 1], [1, 4, 2, 1, 1, 2], [1, 4, 2, 2, 1, 1], [2, 4, 1, 2, 1, 1], [2, 2, 1, 1, 1, 4], [4, 1, 3, 1, 1, 1], [2, 4, 1, 1, 1, 2], [1, 3, 4, 1, 1, 1], [1, 1, 1, 2, 4, 2], [1, 2, 1, 1, 4, 2], [1, 2, 1, 2, 4, 1], [1, 1, 4, 2, 1, 2], [1, 2, 4, 1, 1, 2], [1, 2, 4, 2, 1, 1], [4, 1, 1, 2, 1, 2], [4, 2, 1, 1, 1, 2], [4, 2, 1, 2, 1, 1], [2, 1, 2, 1, 4, 1], [2, 1, 4, 1, 2, 1], [4, 1, 2, 1, 2, 1], [1, 1, 1, 1, 4, 3], [1, 1, 1, 3, 4, 1], [1, 3, 1, 1, 4, 1], [1, 1, 4, 1, 1, 3], [1, 1, 4, 3, 1, 1], [4, 1, 1, 1, 1, 3], [4, 1, 1, 3, 1, 1], [1, 1, 3, 1, 4, 1], [1, 1, 4, 1, 3, 1], [3, 1, 1, 1, 4, 1], [4, 1, 1, 1, 3, 1], [2, 1, 1, 4, 1, 2], [2, 1, 1, 2, 1, 4], [2, 1, 1, 2, 3, 2], [2, 3, 3, 1, 1, 1, 2]] }, + SINGLE_CODE_ERROR: { value: 0.64 }, + AVG_CODE_ERROR: { value: 0.30 }, + FORMAT: { value: "code_128", writeable: false }, + MODULE_INDICES: { value: { bar: [0, 2, 4], space: [1, 3, 5] } } +}; + +Code128Reader.prototype = Object.create(__WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a" /* default */].prototype, properties); +Code128Reader.prototype.constructor = Code128Reader; + +Code128Reader.prototype._decodeCode = function (start, correction) { + var counter = [0, 0, 0, 0, 0, 0], + i, + self = this, + offset = start, + isWhite = !self._row[offset], + counterPos = 0, + bestMatch = { + error: Number.MAX_VALUE, + code: -1, + start: start, + end: start, + correction: { + bar: 1, + space: 1 + } + }, + code, + error; + + for (i = offset; i < self._row.length; i++) { + if (self._row[i] ^ isWhite) { + counter[counterPos]++; + } else { + if (counterPos === counter.length - 1) { + if (correction) { + self._correct(counter, correction); + } + for (code = 0; code < self.CODE_PATTERN.length; code++) { + error = self._matchPattern(counter, self.CODE_PATTERN[code]); + if (error < bestMatch.error) { + bestMatch.code = code; + bestMatch.error = error; + } + } + bestMatch.end = i; + if (bestMatch.code === -1 || bestMatch.error > self.AVG_CODE_ERROR) { + return null; + } + if (self.CODE_PATTERN[bestMatch.code]) { + bestMatch.correction.bar = calculateCorrection(self.CODE_PATTERN[bestMatch.code], counter, this.MODULE_INDICES.bar); + bestMatch.correction.space = calculateCorrection(self.CODE_PATTERN[bestMatch.code], counter, this.MODULE_INDICES.space); + } + return bestMatch; + } else { + counterPos++; + } + counter[counterPos] = 1; + isWhite = !isWhite; + } + } + return null; +}; + +Code128Reader.prototype._correct = function (counter, correction) { + this._correctBars(counter, correction.bar, this.MODULE_INDICES.bar); + this._correctBars(counter, correction.space, this.MODULE_INDICES.space); +}; + +Code128Reader.prototype._findStart = function () { + var counter = [0, 0, 0, 0, 0, 0], + i, + self = this, + offset = self._nextSet(self._row), + isWhite = false, + counterPos = 0, + bestMatch = { + error: Number.MAX_VALUE, + code: -1, + start: 0, + end: 0, + correction: { + bar: 1, + space: 1 + } + }, + code, + error, + j, + sum; + + for (i = offset; i < self._row.length; i++) { + if (self._row[i] ^ isWhite) { + counter[counterPos]++; + } else { + if (counterPos === counter.length - 1) { + sum = 0; + for (j = 0; j < counter.length; j++) { + sum += counter[j]; + } + for (code = self.START_CODE_A; code <= self.START_CODE_C; code++) { + error = self._matchPattern(counter, self.CODE_PATTERN[code]); + if (error < bestMatch.error) { + bestMatch.code = code; + bestMatch.error = error; + } + } + if (bestMatch.error < self.AVG_CODE_ERROR) { + bestMatch.start = i - sum; + bestMatch.end = i; + bestMatch.correction.bar = calculateCorrection(self.CODE_PATTERN[bestMatch.code], counter, this.MODULE_INDICES.bar); + bestMatch.correction.space = calculateCorrection(self.CODE_PATTERN[bestMatch.code], counter, this.MODULE_INDICES.space); + return bestMatch; + } + + for (j = 0; j < 4; j++) { + counter[j] = counter[j + 2]; + } + counter[4] = 0; + counter[5] = 0; + counterPos--; + } else { + counterPos++; + } + counter[counterPos] = 1; + isWhite = !isWhite; + } + } + return null; +}; + +Code128Reader.prototype._decode = function () { + var self = this, + startInfo = self._findStart(), + code = null, + done = false, + result = [], + multiplier = 0, + checksum = 0, + codeset, + rawResult = [], + decodedCodes = [], + shiftNext = false, + unshift, + removeLastCharacter = true; + + if (startInfo === null) { + return null; + } + code = { + code: startInfo.code, + start: startInfo.start, + end: startInfo.end, + correction: { + bar: startInfo.correction.bar, + space: startInfo.correction.space + } + }; + decodedCodes.push(code); + checksum = code.code; + switch (code.code) { + case self.START_CODE_A: + codeset = self.CODE_A; + break; + case self.START_CODE_B: + codeset = self.CODE_B; + break; + case self.START_CODE_C: + codeset = self.CODE_C; + break; + default: + return null; + } + + while (!done) { + unshift = shiftNext; + shiftNext = false; + code = self._decodeCode(code.end, code.correction); + if (code !== null) { + if (code.code !== self.STOP_CODE) { + removeLastCharacter = true; + } + + if (code.code !== self.STOP_CODE) { + rawResult.push(code.code); + multiplier++; + checksum += multiplier * code.code; + } + decodedCodes.push(code); + + switch (codeset) { + case self.CODE_A: + if (code.code < 64) { + result.push(String.fromCharCode(32 + code.code)); + } else if (code.code < 96) { + result.push(String.fromCharCode(code.code - 64)); + } else { + if (code.code !== self.STOP_CODE) { + removeLastCharacter = false; + } + switch (code.code) { + case self.CODE_SHIFT: + shiftNext = true; + codeset = self.CODE_B; + break; + case self.CODE_B: + codeset = self.CODE_B; + break; + case self.CODE_C: + codeset = self.CODE_C; + break; + case self.STOP_CODE: + done = true; + break; + } + } + break; + case self.CODE_B: + if (code.code < 96) { + result.push(String.fromCharCode(32 + code.code)); + } else { + if (code.code !== self.STOP_CODE) { + removeLastCharacter = false; + } + switch (code.code) { + case self.CODE_SHIFT: + shiftNext = true; + codeset = self.CODE_A; + break; + case self.CODE_A: + codeset = self.CODE_A; + break; + case self.CODE_C: + codeset = self.CODE_C; + break; + case self.STOP_CODE: + done = true; + break; + } + } + break; + case self.CODE_C: + if (code.code < 100) { + result.push(code.code < 10 ? "0" + code.code : code.code); + } else { + if (code.code !== self.STOP_CODE) { + removeLastCharacter = false; + } + switch (code.code) { + case self.CODE_A: + codeset = self.CODE_A; + break; + case self.CODE_B: + codeset = self.CODE_B; + break; + case self.STOP_CODE: + done = true; + break; + } + } + break; + } + } else { + done = true; + } + if (unshift) { + codeset = codeset === self.CODE_A ? self.CODE_B : self.CODE_A; + } + } + + if (code === null) { + return null; + } + + code.end = self._nextUnset(self._row, code.end); + if (!self._verifyTrailingWhitespace(code)) { + return null; + } + + checksum -= multiplier * rawResult[rawResult.length - 1]; + if (checksum % 103 !== rawResult[rawResult.length - 1]) { + return null; + } + + if (!result.length) { + return null; + } + + // remove last code from result (checksum) + if (removeLastCharacter) { + result.splice(result.length - 1, 1); + } + + return { + code: result.join(""), + start: startInfo.start, + end: code.end, + codeset: codeset, + startInfo: startInfo, + decodedCodes: decodedCodes, + endInfo: code + }; +}; + +__WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a" /* default */].prototype._verifyTrailingWhitespace = function (endInfo) { + var self = this, + trailingWhitespaceEnd; + + trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start) / 2; + if (trailingWhitespaceEnd < self._row.length) { + if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { + return endInfo; + } + } + return null; +}; + +function calculateCorrection(expected, normalized, indices) { + var length = indices.length, + sumNormalized = 0, + sumExpected = 0; + + while (length--) { + sumExpected += expected[indices[length]]; + sumNormalized += normalized[indices[length]]; + } + return sumExpected / sumNormalized; +} + +/* harmony default export */ __webpack_exports__["a"] = Code128Reader; + +/***/ }), /* 94 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__barcode_reader__ = __webpack_require__(7); - - - function CodabarReader() { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a"].call(this); - this._counters = []; - } - - var properties = { - ALPHABETH_STRING: { value: "0123456789-$:/.+ABCD" }, - ALPHABET: { value: [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 45, 36, 58, 47, 46, 43, 65, 66, 67, 68] }, - CHARACTER_ENCODINGS: { value: [0x003, 0x006, 0x009, 0x060, 0x012, 0x042, 0x021, 0x024, 0x030, 0x048, 0x00c, 0x018, 0x045, 0x051, 0x054, 0x015, 0x01A, 0x029, 0x00B, 0x00E] }, - START_END: { value: [0x01A, 0x029, 0x00B, 0x00E] }, - MIN_ENCODED_CHARS: { value: 4 }, - MAX_ACCEPTABLE: { value: 2.0 }, - PADDING: { value: 1.5 }, - FORMAT: { value: "codabar", writeable: false } - }; - - CodabarReader.prototype = Object.create(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a"].prototype, properties); - CodabarReader.prototype.constructor = CodabarReader; - - CodabarReader.prototype._decode = function () { - var self = this, - result = [], - start, - decodedChar, - pattern, - nextStart, - end; - - this._counters = self._fillCounters(); - start = self._findStart(); - if (!start) { - return null; - } - nextStart = start.startCounter; - - do { - pattern = self._toPattern(nextStart); - if (pattern < 0) { - return null; - } - decodedChar = self._patternToChar(pattern); - if (decodedChar < 0) { - return null; - } - result.push(decodedChar); - nextStart += 8; - if (result.length > 1 && self._isStartEnd(pattern)) { - break; - } - } while (nextStart < self._counters.length); - - // verify end - if (result.length - 2 < self.MIN_ENCODED_CHARS || !self._isStartEnd(pattern)) { - return null; - } - - // verify end white space - if (!self._verifyWhitespace(start.startCounter, nextStart - 8)) { - return null; - } - - if (!self._validateResult(result, start.startCounter)) { - return null; - } - - nextStart = nextStart > self._counters.length ? self._counters.length : nextStart; - end = start.start + self._sumCounters(start.startCounter, nextStart - 8); - - return { - code: result.join(""), - start: start.start, - end: end, - startInfo: start, - decodedCodes: result - }; - }; - - CodabarReader.prototype._verifyWhitespace = function (startCounter, endCounter) { - if (startCounter - 1 <= 0 || this._counters[startCounter - 1] >= this._calculatePatternLength(startCounter) / 2.0) { - if (endCounter + 8 >= this._counters.length || this._counters[endCounter + 7] >= this._calculatePatternLength(endCounter) / 2.0) { - return true; - } - } - return false; - }; - - CodabarReader.prototype._calculatePatternLength = function (offset) { - var i, - sum = 0; - - for (i = offset; i < offset + 7; i++) { - sum += this._counters[i]; - } - - return sum; - }; - - CodabarReader.prototype._thresholdResultPattern = function (result, startCounter) { - var self = this, - categorization = { - space: { - narrow: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE }, - wide: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE } - }, - bar: { - narrow: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE }, - wide: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE } - } - }, - kind, - cat, - i, - j, - pos = startCounter, - pattern; - - for (i = 0; i < result.length; i++) { - pattern = self._charToPattern(result[i]); - for (j = 6; j >= 0; j--) { - kind = (j & 1) === 2 ? categorization.bar : categorization.space; - cat = (pattern & 1) === 1 ? kind.wide : kind.narrow; - cat.size += self._counters[pos + j]; - cat.counts++; - pattern >>= 1; - } - pos += 8; - } - - ["space", "bar"].forEach(function (key) { - var newkind = categorization[key]; - newkind.wide.min = Math.floor((newkind.narrow.size / newkind.narrow.counts + newkind.wide.size / newkind.wide.counts) / 2); - newkind.narrow.max = Math.ceil(newkind.wide.min); - newkind.wide.max = Math.ceil((newkind.wide.size * self.MAX_ACCEPTABLE + self.PADDING) / newkind.wide.counts); - }); - - return categorization; - }; - - CodabarReader.prototype._charToPattern = function (char) { - var self = this, - charCode = char.charCodeAt(0), - i; - - for (i = 0; i < self.ALPHABET.length; i++) { - if (self.ALPHABET[i] === charCode) { - return self.CHARACTER_ENCODINGS[i]; - } - } - return 0x0; - }; - - CodabarReader.prototype._validateResult = function (result, startCounter) { - var self = this, - thresholds = self._thresholdResultPattern(result, startCounter), - i, - j, - kind, - cat, - size, - pos = startCounter, - pattern; - - for (i = 0; i < result.length; i++) { - pattern = self._charToPattern(result[i]); - for (j = 6; j >= 0; j--) { - kind = (j & 1) === 0 ? thresholds.bar : thresholds.space; - cat = (pattern & 1) === 1 ? kind.wide : kind.narrow; - size = self._counters[pos + j]; - if (size < cat.min || size > cat.max) { - return false; - } - pattern >>= 1; - } - pos += 8; - } - return true; - }; - - CodabarReader.prototype._patternToChar = function (pattern) { - var i, - self = this; - - for (i = 0; i < self.CHARACTER_ENCODINGS.length; i++) { - if (self.CHARACTER_ENCODINGS[i] === pattern) { - return String.fromCharCode(self.ALPHABET[i]); - } - } - return -1; - }; - - CodabarReader.prototype._computeAlternatingThreshold = function (offset, end) { - var i, - min = Number.MAX_VALUE, - max = 0, - counter; - - for (i = offset; i < end; i += 2) { - counter = this._counters[i]; - if (counter > max) { - max = counter; - } - if (counter < min) { - min = counter; - } - } - - return (min + max) / 2.0 | 0; - }; - - CodabarReader.prototype._toPattern = function (offset) { - var numCounters = 7, - end = offset + numCounters, - barThreshold, - spaceThreshold, - bitmask = 1 << numCounters - 1, - pattern = 0, - i, - threshold; - - if (end > this._counters.length) { - return -1; - } - - barThreshold = this._computeAlternatingThreshold(offset, end); - spaceThreshold = this._computeAlternatingThreshold(offset + 1, end); - - for (i = 0; i < numCounters; i++) { - threshold = (i & 1) === 0 ? barThreshold : spaceThreshold; - if (this._counters[offset + i] > threshold) { - pattern |= bitmask; - } - bitmask >>= 1; - } - - return pattern; - }; - - CodabarReader.prototype._isStartEnd = function (pattern) { - var i; - - for (i = 0; i < this.START_END.length; i++) { - if (this.START_END[i] === pattern) { - return true; - } - } - return false; - }; - - CodabarReader.prototype._sumCounters = function (start, end) { - var i, - sum = 0; - - for (i = start; i < end; i++) { - sum += this._counters[i]; - } - return sum; - }; - - CodabarReader.prototype._findStart = function () { - var self = this, - i, - pattern, - start = self._nextUnset(self._row), - end; - - for (i = 1; i < this._counters.length; i++) { - pattern = self._toPattern(i); - if (pattern !== -1 && self._isStartEnd(pattern)) { - // TODO: Look for whitespace ahead - start += self._sumCounters(0, i); - end = start + self._sumCounters(i, i + 8); - return { - start: start, - end: end, - startCounter: i, - endCounter: i + 8 - }; - } - } - }; - - /* harmony default export */ exports["a"] = CodabarReader; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__code_39_reader__ = __webpack_require__(45); + + +function Code39VINReader() { + __WEBPACK_IMPORTED_MODULE_0__code_39_reader__["a" /* default */].call(this); +} + +var patterns = { + IOQ: /[IOQ]/g, + AZ09: /[A-Z0-9]{17}/ +}; + +Code39VINReader.prototype = Object.create(__WEBPACK_IMPORTED_MODULE_0__code_39_reader__["a" /* default */].prototype); +Code39VINReader.prototype.constructor = Code39VINReader; + +// Cribbed from: +// https://github.com/zxing/zxing/blob/master/core/src/main/java/com/google/zxing/client/result/VINResultParser.java +Code39VINReader.prototype._decode = function () { + var result = __WEBPACK_IMPORTED_MODULE_0__code_39_reader__["a" /* default */].prototype._decode.apply(this); + if (!result) { + return null; + } + + var code = result.code; + + if (!code) { + return null; + } + + code = code.replace(patterns.IOQ, ''); + + if (!code.match(patterns.AZ09)) { + if (true) { + console.log('Failed AZ09 pattern code:', code); + } + return null; + } + + if (!this._checkChecksum(code)) { + return null; + } + + result.code = code; + return result; +}; + +Code39VINReader.prototype._checkChecksum = function (code) { + // TODO + return !!code; +}; + +/* harmony default export */ __webpack_exports__["a"] = Code39VINReader; + +/***/ }), /* 95 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__barcode_reader__ = __webpack_require__(7); - - - function Code128Reader() { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a"].call(this); - } - - var properties = { - CODE_SHIFT: { value: 98 }, - CODE_C: { value: 99 }, - CODE_B: { value: 100 }, - CODE_A: { value: 101 }, - START_CODE_A: { value: 103 }, - START_CODE_B: { value: 104 }, - START_CODE_C: { value: 105 }, - STOP_CODE: { value: 106 }, - CODE_PATTERN: { value: [[2, 1, 2, 2, 2, 2], [2, 2, 2, 1, 2, 2], [2, 2, 2, 2, 2, 1], [1, 2, 1, 2, 2, 3], [1, 2, 1, 3, 2, 2], [1, 3, 1, 2, 2, 2], [1, 2, 2, 2, 1, 3], [1, 2, 2, 3, 1, 2], [1, 3, 2, 2, 1, 2], [2, 2, 1, 2, 1, 3], [2, 2, 1, 3, 1, 2], [2, 3, 1, 2, 1, 2], [1, 1, 2, 2, 3, 2], [1, 2, 2, 1, 3, 2], [1, 2, 2, 2, 3, 1], [1, 1, 3, 2, 2, 2], [1, 2, 3, 1, 2, 2], [1, 2, 3, 2, 2, 1], [2, 2, 3, 2, 1, 1], [2, 2, 1, 1, 3, 2], [2, 2, 1, 2, 3, 1], [2, 1, 3, 2, 1, 2], [2, 2, 3, 1, 1, 2], [3, 1, 2, 1, 3, 1], [3, 1, 1, 2, 2, 2], [3, 2, 1, 1, 2, 2], [3, 2, 1, 2, 2, 1], [3, 1, 2, 2, 1, 2], [3, 2, 2, 1, 1, 2], [3, 2, 2, 2, 1, 1], [2, 1, 2, 1, 2, 3], [2, 1, 2, 3, 2, 1], [2, 3, 2, 1, 2, 1], [1, 1, 1, 3, 2, 3], [1, 3, 1, 1, 2, 3], [1, 3, 1, 3, 2, 1], [1, 1, 2, 3, 1, 3], [1, 3, 2, 1, 1, 3], [1, 3, 2, 3, 1, 1], [2, 1, 1, 3, 1, 3], [2, 3, 1, 1, 1, 3], [2, 3, 1, 3, 1, 1], [1, 1, 2, 1, 3, 3], [1, 1, 2, 3, 3, 1], [1, 3, 2, 1, 3, 1], [1, 1, 3, 1, 2, 3], [1, 1, 3, 3, 2, 1], [1, 3, 3, 1, 2, 1], [3, 1, 3, 1, 2, 1], [2, 1, 1, 3, 3, 1], [2, 3, 1, 1, 3, 1], [2, 1, 3, 1, 1, 3], [2, 1, 3, 3, 1, 1], [2, 1, 3, 1, 3, 1], [3, 1, 1, 1, 2, 3], [3, 1, 1, 3, 2, 1], [3, 3, 1, 1, 2, 1], [3, 1, 2, 1, 1, 3], [3, 1, 2, 3, 1, 1], [3, 3, 2, 1, 1, 1], [3, 1, 4, 1, 1, 1], [2, 2, 1, 4, 1, 1], [4, 3, 1, 1, 1, 1], [1, 1, 1, 2, 2, 4], [1, 1, 1, 4, 2, 2], [1, 2, 1, 1, 2, 4], [1, 2, 1, 4, 2, 1], [1, 4, 1, 1, 2, 2], [1, 4, 1, 2, 2, 1], [1, 1, 2, 2, 1, 4], [1, 1, 2, 4, 1, 2], [1, 2, 2, 1, 1, 4], [1, 2, 2, 4, 1, 1], [1, 4, 2, 1, 1, 2], [1, 4, 2, 2, 1, 1], [2, 4, 1, 2, 1, 1], [2, 2, 1, 1, 1, 4], [4, 1, 3, 1, 1, 1], [2, 4, 1, 1, 1, 2], [1, 3, 4, 1, 1, 1], [1, 1, 1, 2, 4, 2], [1, 2, 1, 1, 4, 2], [1, 2, 1, 2, 4, 1], [1, 1, 4, 2, 1, 2], [1, 2, 4, 1, 1, 2], [1, 2, 4, 2, 1, 1], [4, 1, 1, 2, 1, 2], [4, 2, 1, 1, 1, 2], [4, 2, 1, 2, 1, 1], [2, 1, 2, 1, 4, 1], [2, 1, 4, 1, 2, 1], [4, 1, 2, 1, 2, 1], [1, 1, 1, 1, 4, 3], [1, 1, 1, 3, 4, 1], [1, 3, 1, 1, 4, 1], [1, 1, 4, 1, 1, 3], [1, 1, 4, 3, 1, 1], [4, 1, 1, 1, 1, 3], [4, 1, 1, 3, 1, 1], [1, 1, 3, 1, 4, 1], [1, 1, 4, 1, 3, 1], [3, 1, 1, 1, 4, 1], [4, 1, 1, 1, 3, 1], [2, 1, 1, 4, 1, 2], [2, 1, 1, 2, 1, 4], [2, 1, 1, 2, 3, 2], [2, 3, 3, 1, 1, 1, 2]] }, - SINGLE_CODE_ERROR: { value: 0.64 }, - AVG_CODE_ERROR: { value: 0.30 }, - FORMAT: { value: "code_128", writeable: false }, - MODULE_INDICES: { value: { bar: [0, 2, 4], space: [1, 3, 5] } } - }; - - Code128Reader.prototype = Object.create(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a"].prototype, properties); - Code128Reader.prototype.constructor = Code128Reader; - - Code128Reader.prototype._decodeCode = function (start, correction) { - var counter = [0, 0, 0, 0, 0, 0], - i, - self = this, - offset = start, - isWhite = !self._row[offset], - counterPos = 0, - bestMatch = { - error: Number.MAX_VALUE, - code: -1, - start: start, - end: start, - correction: { - bar: 1, - space: 1 - } - }, - code, - error; - - for (i = offset; i < self._row.length; i++) { - if (self._row[i] ^ isWhite) { - counter[counterPos]++; - } else { - if (counterPos === counter.length - 1) { - if (correction) { - self._correct(counter, correction); - } - for (code = 0; code < self.CODE_PATTERN.length; code++) { - error = self._matchPattern(counter, self.CODE_PATTERN[code]); - if (error < bestMatch.error) { - bestMatch.code = code; - bestMatch.error = error; - } - } - bestMatch.end = i; - if (bestMatch.code === -1 || bestMatch.error > self.AVG_CODE_ERROR) { - return null; - } - if (self.CODE_PATTERN[bestMatch.code]) { - bestMatch.correction.bar = calculateCorrection(self.CODE_PATTERN[bestMatch.code], counter, this.MODULE_INDICES.bar); - bestMatch.correction.space = calculateCorrection(self.CODE_PATTERN[bestMatch.code], counter, this.MODULE_INDICES.space); - } - return bestMatch; - } else { - counterPos++; - } - counter[counterPos] = 1; - isWhite = !isWhite; - } - } - return null; - }; - - Code128Reader.prototype._correct = function (counter, correction) { - this._correctBars(counter, correction.bar, this.MODULE_INDICES.bar); - this._correctBars(counter, correction.space, this.MODULE_INDICES.space); - }; - - Code128Reader.prototype._findStart = function () { - var counter = [0, 0, 0, 0, 0, 0], - i, - self = this, - offset = self._nextSet(self._row), - isWhite = false, - counterPos = 0, - bestMatch = { - error: Number.MAX_VALUE, - code: -1, - start: 0, - end: 0, - correction: { - bar: 1, - space: 1 - } - }, - code, - error, - j, - sum; - - for (i = offset; i < self._row.length; i++) { - if (self._row[i] ^ isWhite) { - counter[counterPos]++; - } else { - if (counterPos === counter.length - 1) { - sum = 0; - for (j = 0; j < counter.length; j++) { - sum += counter[j]; - } - for (code = self.START_CODE_A; code <= self.START_CODE_C; code++) { - error = self._matchPattern(counter, self.CODE_PATTERN[code]); - if (error < bestMatch.error) { - bestMatch.code = code; - bestMatch.error = error; - } - } - if (bestMatch.error < self.AVG_CODE_ERROR) { - bestMatch.start = i - sum; - bestMatch.end = i; - bestMatch.correction.bar = calculateCorrection(self.CODE_PATTERN[bestMatch.code], counter, this.MODULE_INDICES.bar); - bestMatch.correction.space = calculateCorrection(self.CODE_PATTERN[bestMatch.code], counter, this.MODULE_INDICES.space); - return bestMatch; - } - - for (j = 0; j < 4; j++) { - counter[j] = counter[j + 2]; - } - counter[4] = 0; - counter[5] = 0; - counterPos--; - } else { - counterPos++; - } - counter[counterPos] = 1; - isWhite = !isWhite; - } - } - return null; - }; - - Code128Reader.prototype._decode = function () { - var self = this, - startInfo = self._findStart(), - code = null, - done = false, - result = [], - multiplier = 0, - checksum = 0, - codeset, - rawResult = [], - decodedCodes = [], - shiftNext = false, - unshift, - removeLastCharacter = true; - - if (startInfo === null) { - return null; - } - code = { - code: startInfo.code, - start: startInfo.start, - end: startInfo.end, - correction: { - bar: startInfo.correction.bar, - space: startInfo.correction.space - } - }; - decodedCodes.push(code); - checksum = code.code; - switch (code.code) { - case self.START_CODE_A: - codeset = self.CODE_A; - break; - case self.START_CODE_B: - codeset = self.CODE_B; - break; - case self.START_CODE_C: - codeset = self.CODE_C; - break; - default: - return null; - } - - while (!done) { - unshift = shiftNext; - shiftNext = false; - code = self._decodeCode(code.end, code.correction); - if (code !== null) { - if (code.code !== self.STOP_CODE) { - removeLastCharacter = true; - } - - if (code.code !== self.STOP_CODE) { - rawResult.push(code.code); - multiplier++; - checksum += multiplier * code.code; - } - decodedCodes.push(code); - - switch (codeset) { - case self.CODE_A: - if (code.code < 64) { - result.push(String.fromCharCode(32 + code.code)); - } else if (code.code < 96) { - result.push(String.fromCharCode(code.code - 64)); - } else { - if (code.code !== self.STOP_CODE) { - removeLastCharacter = false; - } - switch (code.code) { - case self.CODE_SHIFT: - shiftNext = true; - codeset = self.CODE_B; - break; - case self.CODE_B: - codeset = self.CODE_B; - break; - case self.CODE_C: - codeset = self.CODE_C; - break; - case self.STOP_CODE: - done = true; - break; - } - } - break; - case self.CODE_B: - if (code.code < 96) { - result.push(String.fromCharCode(32 + code.code)); - } else { - if (code.code !== self.STOP_CODE) { - removeLastCharacter = false; - } - switch (code.code) { - case self.CODE_SHIFT: - shiftNext = true; - codeset = self.CODE_A; - break; - case self.CODE_A: - codeset = self.CODE_A; - break; - case self.CODE_C: - codeset = self.CODE_C; - break; - case self.STOP_CODE: - done = true; - break; - } - } - break; - case self.CODE_C: - if (code.code < 100) { - result.push(code.code < 10 ? "0" + code.code : code.code); - } else { - if (code.code !== self.STOP_CODE) { - removeLastCharacter = false; - } - switch (code.code) { - case self.CODE_A: - codeset = self.CODE_A; - break; - case self.CODE_B: - codeset = self.CODE_B; - break; - case self.STOP_CODE: - done = true; - break; - } - } - break; - } - } else { - done = true; - } - if (unshift) { - codeset = codeset === self.CODE_A ? self.CODE_B : self.CODE_A; - } - } - - if (code === null) { - return null; - } - - code.end = self._nextUnset(self._row, code.end); - if (!self._verifyTrailingWhitespace(code)) { - return null; - } - - checksum -= multiplier * rawResult[rawResult.length - 1]; - if (checksum % 103 !== rawResult[rawResult.length - 1]) { - return null; - } - - if (!result.length) { - return null; - } - - // remove last code from result (checksum) - if (removeLastCharacter) { - result.splice(result.length - 1, 1); - } - - return { - code: result.join(""), - start: startInfo.start, - end: code.end, - codeset: codeset, - startInfo: startInfo, - decodedCodes: decodedCodes, - endInfo: code - }; - }; - - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__barcode_reader__["a"].prototype._verifyTrailingWhitespace = function (endInfo) { - var self = this, - trailingWhitespaceEnd; - - trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start) / 2; - if (trailingWhitespaceEnd < self._row.length) { - if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { - return endInfo; - } - } - return null; - }; - - function calculateCorrection(expected, normalized, indices) { - var length = indices.length, - sumNormalized = 0, - sumExpected = 0; - - while (length--) { - sumExpected += expected[indices[length]]; - sumNormalized += normalized[indices[length]]; - } - return sumExpected / sumNormalized; - } - - /* harmony default export */ exports["a"] = Code128Reader; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ean_reader__ = __webpack_require__(5); + + +function EAN2Reader() { + __WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].call(this); +} + +var properties = { + FORMAT: { value: "ean_2", writeable: false } +}; + +EAN2Reader.prototype = Object.create(__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].prototype, properties); +EAN2Reader.prototype.constructor = EAN2Reader; + +EAN2Reader.prototype.decode = function (row, start) { + this._row = row; + var counters = [0, 0, 0, 0], + codeFrequency = 0, + i = 0, + offset = start, + end = this._row.length, + code, + result = [], + decodedCodes = []; + + for (i = 0; i < 2 && offset < end; i++) { + code = this._decodeCode(offset); + if (!code) { + return null; + } + decodedCodes.push(code); + result.push(code.code % 10); + if (code.code >= this.CODE_G_START) { + codeFrequency |= 1 << 1 - i; + } + if (i != 1) { + offset = this._nextSet(this._row, code.end); + offset = this._nextUnset(this._row, offset); + } + } + + if (result.length != 2 || parseInt(result.join("")) % 4 !== codeFrequency) { + return null; + } + return { + code: result.join(""), + decodedCodes: decodedCodes, + end: code.end + }; +}; + +/* harmony default export */ __webpack_exports__["a"] = EAN2Reader; + +/***/ }), /* 96 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__code_39_reader__ = __webpack_require__(45); - - - function Code39VINReader() { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__code_39_reader__["a"].call(this); - } - - var patterns = { - IOQ: /[IOQ]/g, - AZ09: /[A-Z0-9]{17}/ - }; - - Code39VINReader.prototype = Object.create(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__code_39_reader__["a"].prototype); - Code39VINReader.prototype.constructor = Code39VINReader; - - // Cribbed from: - // https://github.com/zxing/zxing/blob/master/core/src/main/java/com/google/zxing/client/result/VINResultParser.java - Code39VINReader.prototype._decode = function () { - var result = /* harmony import */__WEBPACK_IMPORTED_MODULE_0__code_39_reader__["a"].prototype._decode.apply(this); - if (!result) { - return null; - } - - var code = result.code; - - if (!code) { - return null; - } - - code = code.replace(patterns.IOQ, ''); - - if (!code.match(patterns.AZ09)) { - if (true) { - console.log('Failed AZ09 pattern code:', code); - } - return null; - } - - if (!this._checkChecksum(code)) { - return null; - } - - result.code = code; - return result; - }; - - Code39VINReader.prototype._checkChecksum = function (code) { - // TODO - return !!code; - }; - - /* harmony default export */ exports["a"] = Code39VINReader; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ean_reader__ = __webpack_require__(5); + + +function EAN5Reader() { + __WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].call(this); +} + +var properties = { + FORMAT: { value: "ean_5", writeable: false } +}; + +var CHECK_DIGIT_ENCODINGS = [24, 20, 18, 17, 12, 6, 3, 10, 9, 5]; + +EAN5Reader.prototype = Object.create(__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].prototype, properties); +EAN5Reader.prototype.constructor = EAN5Reader; + +EAN5Reader.prototype.decode = function (row, start) { + this._row = row; + var counters = [0, 0, 0, 0], + codeFrequency = 0, + i = 0, + offset = start, + end = this._row.length, + code, + result = [], + decodedCodes = []; + + for (i = 0; i < 5 && offset < end; i++) { + code = this._decodeCode(offset); + if (!code) { + return null; + } + decodedCodes.push(code); + result.push(code.code % 10); + if (code.code >= this.CODE_G_START) { + codeFrequency |= 1 << 4 - i; + } + if (i != 4) { + offset = this._nextSet(this._row, code.end); + offset = this._nextUnset(this._row, offset); + } + } + + if (result.length != 5) { + return null; + } + + if (extensionChecksum(result) !== determineCheckDigit(codeFrequency)) { + return null; + } + return { + code: result.join(""), + decodedCodes: decodedCodes, + end: code.end + }; +}; + +function determineCheckDigit(codeFrequency) { + var i; + for (i = 0; i < 10; i++) { + if (codeFrequency === CHECK_DIGIT_ENCODINGS[i]) { + return i; + } + } + return null; +} + +function extensionChecksum(result) { + var length = result.length, + sum = 0, + i; + + for (i = length - 2; i >= 0; i -= 2) { + sum += result[i]; + } + sum *= 3; + for (i = length - 1; i >= 0; i -= 2) { + sum += result[i]; + } + sum *= 3; + return sum % 10; +} + +/* harmony default export */ __webpack_exports__["a"] = EAN5Reader; + +/***/ }), /* 97 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ean_reader__ = __webpack_require__(4); - - - function EAN2Reader() { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].call(this); - } - - var properties = { - FORMAT: { value: "ean_2", writeable: false } - }; - - EAN2Reader.prototype = Object.create(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].prototype, properties); - EAN2Reader.prototype.constructor = EAN2Reader; - - EAN2Reader.prototype.decode = function (row, start) { - this._row = row; - var counters = [0, 0, 0, 0], - codeFrequency = 0, - i = 0, - offset = start, - end = this._row.length, - code, - result = [], - decodedCodes = []; - - for (i = 0; i < 2 && offset < end; i++) { - code = this._decodeCode(offset); - if (!code) { - return null; - } - decodedCodes.push(code); - result.push(code.code % 10); - if (code.code >= this.CODE_G_START) { - codeFrequency |= 1 << 1 - i; - } - if (i != 1) { - offset = this._nextSet(this._row, code.end); - offset = this._nextUnset(this._row, offset); - } - } - - if (result.length != 2 || parseInt(result.join("")) % 4 !== codeFrequency) { - return null; - } - return { - code: result.join(""), - decodedCodes: decodedCodes, - end: code.end - }; - }; - - /* harmony default export */ exports["a"] = EAN2Reader; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ean_reader__ = __webpack_require__(5); + + +function EAN8Reader(opts, supplements) { + __WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].call(this, opts, supplements); +} + +var properties = { + FORMAT: { value: "ean_8", writeable: false } +}; + +EAN8Reader.prototype = Object.create(__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].prototype, properties); +EAN8Reader.prototype.constructor = EAN8Reader; + +EAN8Reader.prototype._decodePayload = function (code, result, decodedCodes) { + var i, + self = this; + + for (i = 0; i < 4; i++) { + code = self._decodeCode(code.end, self.CODE_G_START); + if (!code) { + return null; + } + result.push(code.code); + decodedCodes.push(code); + } + + code = self._findPattern(self.MIDDLE_PATTERN, code.end, true, false); + if (code === null) { + return null; + } + decodedCodes.push(code); + + for (i = 0; i < 4; i++) { + code = self._decodeCode(code.end, self.CODE_G_START); + if (!code) { + return null; + } + decodedCodes.push(code); + result.push(code.code); + } + + return code; +}; + +/* harmony default export */ __webpack_exports__["a"] = EAN8Reader; + +/***/ }), /* 98 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ean_reader__ = __webpack_require__(4); - - - function EAN5Reader() { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].call(this); - } - - var properties = { - FORMAT: { value: "ean_5", writeable: false } - }; - - var CHECK_DIGIT_ENCODINGS = [24, 20, 18, 17, 12, 6, 3, 10, 9, 5]; - - EAN5Reader.prototype = Object.create(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].prototype, properties); - EAN5Reader.prototype.constructor = EAN5Reader; - - EAN5Reader.prototype.decode = function (row, start) { - this._row = row; - var counters = [0, 0, 0, 0], - codeFrequency = 0, - i = 0, - offset = start, - end = this._row.length, - code, - result = [], - decodedCodes = []; - - for (i = 0; i < 5 && offset < end; i++) { - code = this._decodeCode(offset); - if (!code) { - return null; - } - decodedCodes.push(code); - result.push(code.code % 10); - if (code.code >= this.CODE_G_START) { - codeFrequency |= 1 << 4 - i; - } - if (i != 4) { - offset = this._nextSet(this._row, code.end); - offset = this._nextUnset(this._row, offset); - } - } - - if (result.length != 5) { - return null; - } - - if (extensionChecksum(result) !== determineCheckDigit(codeFrequency)) { - return null; - } - return { - code: result.join(""), - decodedCodes: decodedCodes, - end: code.end - }; - }; - - function determineCheckDigit(codeFrequency) { - var i; - for (i = 0; i < 10; i++) { - if (codeFrequency === CHECK_DIGIT_ENCODINGS[i]) { - return i; - } - } - return null; - } - - function extensionChecksum(result) { - var length = result.length, - sum = 0, - i; - - for (i = length - 2; i >= 0; i -= 2) { - sum += result[i]; - } - sum *= 3; - for (i = length - 1; i >= 0; i -= 2) { - sum += result[i]; - } - sum *= 3; - return sum % 10; - } - - /* harmony default export */ exports["a"] = EAN5Reader; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_merge__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__barcode_reader__ = __webpack_require__(8); + + + + +function I2of5Reader(opts) { + opts = __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default()(getDefaulConfig(), opts); + __WEBPACK_IMPORTED_MODULE_1__barcode_reader__["a" /* default */].call(this, opts); + this.barSpaceRatio = [1, 1]; + if (opts.normalizeBarSpaceWidth) { + this.SINGLE_CODE_ERROR = 0.38; + this.AVG_CODE_ERROR = 0.09; + } +} + +function getDefaulConfig() { + var config = {}; + + Object.keys(I2of5Reader.CONFIG_KEYS).forEach(function (key) { + config[key] = I2of5Reader.CONFIG_KEYS[key].default; + }); + return config; +} + +var N = 1, + W = 3, + properties = { + START_PATTERN: { value: [N, N, N, N] }, + STOP_PATTERN: { value: [N, N, W] }, + CODE_PATTERN: { value: [[N, N, W, W, N], [W, N, N, N, W], [N, W, N, N, W], [W, W, N, N, N], [N, N, W, N, W], [W, N, W, N, N], [N, W, W, N, N], [N, N, N, W, W], [W, N, N, W, N], [N, W, N, W, N]] }, + SINGLE_CODE_ERROR: { value: 0.78, writable: true }, + AVG_CODE_ERROR: { value: 0.38, writable: true }, + MAX_CORRECTION_FACTOR: { value: 5 }, + FORMAT: { value: "i2of5" } +}; + +I2of5Reader.prototype = Object.create(__WEBPACK_IMPORTED_MODULE_1__barcode_reader__["a" /* default */].prototype, properties); +I2of5Reader.prototype.constructor = I2of5Reader; + +I2of5Reader.prototype._matchPattern = function (counter, code) { + if (this.config.normalizeBarSpaceWidth) { + var i, + counterSum = [0, 0], + codeSum = [0, 0], + correction = [0, 0], + correctionRatio = this.MAX_CORRECTION_FACTOR, + correctionRatioInverse = 1 / correctionRatio; + + for (i = 0; i < counter.length; i++) { + counterSum[i % 2] += counter[i]; + codeSum[i % 2] += code[i]; + } + correction[0] = codeSum[0] / counterSum[0]; + correction[1] = codeSum[1] / counterSum[1]; + + correction[0] = Math.max(Math.min(correction[0], correctionRatio), correctionRatioInverse); + correction[1] = Math.max(Math.min(correction[1], correctionRatio), correctionRatioInverse); + this.barSpaceRatio = correction; + for (i = 0; i < counter.length; i++) { + counter[i] *= this.barSpaceRatio[i % 2]; + } + } + return __WEBPACK_IMPORTED_MODULE_1__barcode_reader__["a" /* default */].prototype._matchPattern.call(this, counter, code); +}; + +I2of5Reader.prototype._findPattern = function (pattern, offset, isWhite, tryHarder) { + var counter = [], + self = this, + i, + counterPos = 0, + bestMatch = { + error: Number.MAX_VALUE, + code: -1, + start: 0, + end: 0 + }, + error, + j, + sum, + normalized, + epsilon = self.AVG_CODE_ERROR; + + isWhite = isWhite || false; + tryHarder = tryHarder || false; + + if (!offset) { + offset = self._nextSet(self._row); + } + + for (i = 0; i < pattern.length; i++) { + counter[i] = 0; + } + + for (i = offset; i < self._row.length; i++) { + if (self._row[i] ^ isWhite) { + counter[counterPos]++; + } else { + if (counterPos === counter.length - 1) { + sum = 0; + for (j = 0; j < counter.length; j++) { + sum += counter[j]; + } + error = self._matchPattern(counter, pattern); + if (error < epsilon) { + bestMatch.error = error; + bestMatch.start = i - sum; + bestMatch.end = i; + return bestMatch; + } + if (tryHarder) { + for (j = 0; j < counter.length - 2; j++) { + counter[j] = counter[j + 2]; + } + counter[counter.length - 2] = 0; + counter[counter.length - 1] = 0; + counterPos--; + } else { + return null; + } + } else { + counterPos++; + } + counter[counterPos] = 1; + isWhite = !isWhite; + } + } + return null; +}; + +I2of5Reader.prototype._findStart = function () { + var self = this, + leadingWhitespaceStart, + offset = self._nextSet(self._row), + startInfo, + narrowBarWidth = 1; + + while (!startInfo) { + startInfo = self._findPattern(self.START_PATTERN, offset, false, true); + if (!startInfo) { + return null; + } + narrowBarWidth = Math.floor((startInfo.end - startInfo.start) / 4); + leadingWhitespaceStart = startInfo.start - narrowBarWidth * 10; + if (leadingWhitespaceStart >= 0) { + if (self._matchRange(leadingWhitespaceStart, startInfo.start, 0)) { + return startInfo; + } + } + offset = startInfo.end; + startInfo = null; + } +}; + +I2of5Reader.prototype._verifyTrailingWhitespace = function (endInfo) { + var self = this, + trailingWhitespaceEnd; + + trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start) / 2; + if (trailingWhitespaceEnd < self._row.length) { + if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { + return endInfo; + } + } + return null; +}; + +I2of5Reader.prototype._findEnd = function () { + var self = this, + endInfo, + tmp; + + self._row.reverse(); + endInfo = self._findPattern(self.STOP_PATTERN); + self._row.reverse(); + + if (endInfo === null) { + return null; + } + + // reverse numbers + tmp = endInfo.start; + endInfo.start = self._row.length - endInfo.end; + endInfo.end = self._row.length - tmp; + + return endInfo !== null ? self._verifyTrailingWhitespace(endInfo) : null; +}; + +I2of5Reader.prototype._decodePair = function (counterPair) { + var i, + code, + codes = [], + self = this; + + for (i = 0; i < counterPair.length; i++) { + code = self._decodeCode(counterPair[i]); + if (!code) { + return null; + } + codes.push(code); + } + return codes; +}; + +I2of5Reader.prototype._decodeCode = function (counter) { + var j, + self = this, + sum = 0, + normalized, + error, + epsilon = self.AVG_CODE_ERROR, + code, + bestMatch = { + error: Number.MAX_VALUE, + code: -1, + start: 0, + end: 0 + }; + + for (j = 0; j < counter.length; j++) { + sum += counter[j]; + } + for (code = 0; code < self.CODE_PATTERN.length; code++) { + error = self._matchPattern(counter, self.CODE_PATTERN[code]); + if (error < bestMatch.error) { + bestMatch.code = code; + bestMatch.error = error; + } + } + if (bestMatch.error < epsilon) { + return bestMatch; + } +}; + +I2of5Reader.prototype._decodePayload = function (counters, result, decodedCodes) { + var i, + self = this, + pos = 0, + counterLength = counters.length, + counterPair = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], + codes; + + while (pos < counterLength) { + for (i = 0; i < 5; i++) { + counterPair[0][i] = counters[pos] * this.barSpaceRatio[0]; + counterPair[1][i] = counters[pos + 1] * this.barSpaceRatio[1]; + pos += 2; + } + codes = self._decodePair(counterPair); + if (!codes) { + return null; + } + for (i = 0; i < codes.length; i++) { + result.push(codes[i].code + ""); + decodedCodes.push(codes[i]); + } + } + return codes; +}; + +I2of5Reader.prototype._verifyCounterLength = function (counters) { + return counters.length % 10 === 0; +}; + +I2of5Reader.prototype._decode = function () { + var startInfo, + endInfo, + self = this, + code, + result = [], + decodedCodes = [], + counters; + + startInfo = self._findStart(); + if (!startInfo) { + return null; + } + decodedCodes.push(startInfo); + + endInfo = self._findEnd(); + if (!endInfo) { + return null; + } + + counters = self._fillCounters(startInfo.end, endInfo.start, false); + if (!self._verifyCounterLength(counters)) { + return null; + } + code = self._decodePayload(counters, result, decodedCodes); + if (!code) { + return null; + } + if (result.length % 2 !== 0 || result.length < 6) { + return null; + } + + decodedCodes.push(endInfo); + return { + code: result.join(""), + start: startInfo.start, + end: endInfo.end, + startInfo: startInfo, + decodedCodes: decodedCodes + }; +}; + +I2of5Reader.CONFIG_KEYS = { + normalizeBarSpaceWidth: { + 'type': 'boolean', + 'default': false, + 'description': 'If true, the reader tries to normalize the' + 'width-difference between bars and spaces' + } +}; + +/* harmony default export */ __webpack_exports__["a"] = I2of5Reader; + +/***/ }), /* 99 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ean_reader__ = __webpack_require__(4); - - - function EAN8Reader(opts, supplements) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].call(this, opts, supplements); - } - - var properties = { - FORMAT: { value: "ean_8", writeable: false } - }; - - EAN8Reader.prototype = Object.create(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].prototype, properties); - EAN8Reader.prototype.constructor = EAN8Reader; - - EAN8Reader.prototype._decodePayload = function (code, result, decodedCodes) { - var i, - self = this; - - for (i = 0; i < 4; i++) { - code = self._decodeCode(code.end, self.CODE_G_START); - if (!code) { - return null; - } - result.push(code.code); - decodedCodes.push(code); - } - - code = self._findPattern(self.MIDDLE_PATTERN, code.end, true, false); - if (code === null) { - return null; - } - decodedCodes.push(code); - - for (i = 0; i < 4; i++) { - code = self._decodeCode(code.end, self.CODE_G_START); - if (!code) { - return null; - } - decodedCodes.push(code); - result.push(code.code); - } - - return code; - }; - - /* harmony default export */ exports["a"] = EAN8Reader; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ean_reader__ = __webpack_require__(5); + + +function UPCEReader(opts, supplements) { + __WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].call(this, opts, supplements); +} + +var properties = { + CODE_FREQUENCY: { value: [[56, 52, 50, 49, 44, 38, 35, 42, 41, 37], [7, 11, 13, 14, 19, 25, 28, 21, 22, 26]] }, + STOP_PATTERN: { value: [1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7] }, + FORMAT: { value: "upc_e", writeable: false } +}; + +UPCEReader.prototype = Object.create(__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].prototype, properties); +UPCEReader.prototype.constructor = UPCEReader; + +UPCEReader.prototype._decodePayload = function (code, result, decodedCodes) { + var i, + self = this, + codeFrequency = 0x0; + + for (i = 0; i < 6; i++) { + code = self._decodeCode(code.end); + if (!code) { + return null; + } + if (code.code >= self.CODE_G_START) { + code.code = code.code - self.CODE_G_START; + codeFrequency |= 1 << 5 - i; + } + result.push(code.code); + decodedCodes.push(code); + } + if (!self._determineParity(codeFrequency, result)) { + return null; + } + + return code; +}; + +UPCEReader.prototype._determineParity = function (codeFrequency, result) { + var i, nrSystem; + + for (nrSystem = 0; nrSystem < this.CODE_FREQUENCY.length; nrSystem++) { + for (i = 0; i < this.CODE_FREQUENCY[nrSystem].length; i++) { + if (codeFrequency === this.CODE_FREQUENCY[nrSystem][i]) { + result.unshift(nrSystem); + result.push(i); + return true; + } + } + } + return false; +}; + +UPCEReader.prototype._convertToUPCA = function (result) { + var upca = [result[0]], + lastDigit = result[result.length - 2]; + + if (lastDigit <= 2) { + upca = upca.concat(result.slice(1, 3)).concat([lastDigit, 0, 0, 0, 0]).concat(result.slice(3, 6)); + } else if (lastDigit === 3) { + upca = upca.concat(result.slice(1, 4)).concat([0, 0, 0, 0, 0]).concat(result.slice(4, 6)); + } else if (lastDigit === 4) { + upca = upca.concat(result.slice(1, 5)).concat([0, 0, 0, 0, 0, result[5]]); + } else { + upca = upca.concat(result.slice(1, 6)).concat([0, 0, 0, 0, lastDigit]); + } + + upca.push(result[result.length - 1]); + return upca; +}; + +UPCEReader.prototype._checksum = function (result) { + return __WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].prototype._checksum.call(this, this._convertToUPCA(result)); +}; + +UPCEReader.prototype._findEnd = function (offset, isWhite) { + isWhite = true; + return __WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].prototype._findEnd.call(this, offset, isWhite); +}; + +UPCEReader.prototype._verifyTrailingWhitespace = function (endInfo) { + var self = this, + trailingWhitespaceEnd; + + trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start) / 2; + if (trailingWhitespaceEnd < self._row.length) { + if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { + return endInfo; + } + } +}; + +/* harmony default export */ __webpack_exports__["a"] = UPCEReader; + +/***/ }), /* 100 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge__ = __webpack_require__(15); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default = __WEBPACK_IMPORTED_MODULE_0_lodash_merge__ && __WEBPACK_IMPORTED_MODULE_0_lodash_merge__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_merge__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_merge__; } - /* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_0_lodash_merge___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default }); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__barcode_reader__ = __webpack_require__(7); - - - - - function I2of5Reader(opts) { - opts = /* harmony import */__WEBPACK_IMPORTED_MODULE_0_lodash_merge___default.a.bind()(getDefaulConfig(), opts); - /* harmony import */__WEBPACK_IMPORTED_MODULE_1__barcode_reader__["a"].call(this, opts); - this.barSpaceRatio = [1, 1]; - if (opts.normalizeBarSpaceWidth) { - this.SINGLE_CODE_ERROR = 0.38; - this.AVG_CODE_ERROR = 0.09; - } - } - - function getDefaulConfig() { - var config = {}; - - Object.keys(I2of5Reader.CONFIG_KEYS).forEach(function (key) { - config[key] = I2of5Reader.CONFIG_KEYS[key].default; - }); - return config; - } - - var N = 1, - W = 3, - properties = { - START_PATTERN: { value: [N, N, N, N] }, - STOP_PATTERN: { value: [N, N, W] }, - CODE_PATTERN: { value: [[N, N, W, W, N], [W, N, N, N, W], [N, W, N, N, W], [W, W, N, N, N], [N, N, W, N, W], [W, N, W, N, N], [N, W, W, N, N], [N, N, N, W, W], [W, N, N, W, N], [N, W, N, W, N]] }, - SINGLE_CODE_ERROR: { value: 0.78, writable: true }, - AVG_CODE_ERROR: { value: 0.38, writable: true }, - MAX_CORRECTION_FACTOR: { value: 5 }, - FORMAT: { value: "i2of5" } - }; - - I2of5Reader.prototype = Object.create(/* harmony import */__WEBPACK_IMPORTED_MODULE_1__barcode_reader__["a"].prototype, properties); - I2of5Reader.prototype.constructor = I2of5Reader; - - I2of5Reader.prototype._matchPattern = function (counter, code) { - if (this.config.normalizeBarSpaceWidth) { - var i, - counterSum = [0, 0], - codeSum = [0, 0], - correction = [0, 0], - correctionRatio = this.MAX_CORRECTION_FACTOR, - correctionRatioInverse = 1 / correctionRatio; - - for (i = 0; i < counter.length; i++) { - counterSum[i % 2] += counter[i]; - codeSum[i % 2] += code[i]; - } - correction[0] = codeSum[0] / counterSum[0]; - correction[1] = codeSum[1] / counterSum[1]; - - correction[0] = Math.max(Math.min(correction[0], correctionRatio), correctionRatioInverse); - correction[1] = Math.max(Math.min(correction[1], correctionRatio), correctionRatioInverse); - this.barSpaceRatio = correction; - for (i = 0; i < counter.length; i++) { - counter[i] *= this.barSpaceRatio[i % 2]; - } - } - return /* harmony import */__WEBPACK_IMPORTED_MODULE_1__barcode_reader__["a"].prototype._matchPattern.call(this, counter, code); - }; - - I2of5Reader.prototype._findPattern = function (pattern, offset, isWhite, tryHarder) { - var counter = [], - self = this, - i, - counterPos = 0, - bestMatch = { - error: Number.MAX_VALUE, - code: -1, - start: 0, - end: 0 - }, - error, - j, - sum, - normalized, - epsilon = self.AVG_CODE_ERROR; - - isWhite = isWhite || false; - tryHarder = tryHarder || false; - - if (!offset) { - offset = self._nextSet(self._row); - } - - for (i = 0; i < pattern.length; i++) { - counter[i] = 0; - } - - for (i = offset; i < self._row.length; i++) { - if (self._row[i] ^ isWhite) { - counter[counterPos]++; - } else { - if (counterPos === counter.length - 1) { - sum = 0; - for (j = 0; j < counter.length; j++) { - sum += counter[j]; - } - error = self._matchPattern(counter, pattern); - if (error < epsilon) { - bestMatch.error = error; - bestMatch.start = i - sum; - bestMatch.end = i; - return bestMatch; - } - if (tryHarder) { - for (j = 0; j < counter.length - 2; j++) { - counter[j] = counter[j + 2]; - } - counter[counter.length - 2] = 0; - counter[counter.length - 1] = 0; - counterPos--; - } else { - return null; - } - } else { - counterPos++; - } - counter[counterPos] = 1; - isWhite = !isWhite; - } - } - return null; - }; - - I2of5Reader.prototype._findStart = function () { - var self = this, - leadingWhitespaceStart, - offset = self._nextSet(self._row), - startInfo, - narrowBarWidth = 1; - - while (!startInfo) { - startInfo = self._findPattern(self.START_PATTERN, offset, false, true); - if (!startInfo) { - return null; - } - narrowBarWidth = Math.floor((startInfo.end - startInfo.start) / 4); - leadingWhitespaceStart = startInfo.start - narrowBarWidth * 10; - if (leadingWhitespaceStart >= 0) { - if (self._matchRange(leadingWhitespaceStart, startInfo.start, 0)) { - return startInfo; - } - } - offset = startInfo.end; - startInfo = null; - } - }; - - I2of5Reader.prototype._verifyTrailingWhitespace = function (endInfo) { - var self = this, - trailingWhitespaceEnd; - - trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start) / 2; - if (trailingWhitespaceEnd < self._row.length) { - if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { - return endInfo; - } - } - return null; - }; - - I2of5Reader.prototype._findEnd = function () { - var self = this, - endInfo, - tmp; - - self._row.reverse(); - endInfo = self._findPattern(self.STOP_PATTERN); - self._row.reverse(); - - if (endInfo === null) { - return null; - } - - // reverse numbers - tmp = endInfo.start; - endInfo.start = self._row.length - endInfo.end; - endInfo.end = self._row.length - tmp; - - return endInfo !== null ? self._verifyTrailingWhitespace(endInfo) : null; - }; - - I2of5Reader.prototype._decodePair = function (counterPair) { - var i, - code, - codes = [], - self = this; - - for (i = 0; i < counterPair.length; i++) { - code = self._decodeCode(counterPair[i]); - if (!code) { - return null; - } - codes.push(code); - } - return codes; - }; - - I2of5Reader.prototype._decodeCode = function (counter) { - var j, - self = this, - sum = 0, - normalized, - error, - epsilon = self.AVG_CODE_ERROR, - code, - bestMatch = { - error: Number.MAX_VALUE, - code: -1, - start: 0, - end: 0 - }; - - for (j = 0; j < counter.length; j++) { - sum += counter[j]; - } - for (code = 0; code < self.CODE_PATTERN.length; code++) { - error = self._matchPattern(counter, self.CODE_PATTERN[code]); - if (error < bestMatch.error) { - bestMatch.code = code; - bestMatch.error = error; - } - } - if (bestMatch.error < epsilon) { - return bestMatch; - } - }; - - I2of5Reader.prototype._decodePayload = function (counters, result, decodedCodes) { - var i, - self = this, - pos = 0, - counterLength = counters.length, - counterPair = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]], - codes; - - while (pos < counterLength) { - for (i = 0; i < 5; i++) { - counterPair[0][i] = counters[pos] * this.barSpaceRatio[0]; - counterPair[1][i] = counters[pos + 1] * this.barSpaceRatio[1]; - pos += 2; - } - codes = self._decodePair(counterPair); - if (!codes) { - return null; - } - for (i = 0; i < codes.length; i++) { - result.push(codes[i].code + ""); - decodedCodes.push(codes[i]); - } - } - return codes; - }; - - I2of5Reader.prototype._verifyCounterLength = function (counters) { - return counters.length % 10 === 0; - }; - - I2of5Reader.prototype._decode = function () { - var startInfo, - endInfo, - self = this, - code, - result = [], - decodedCodes = [], - counters; - - startInfo = self._findStart(); - if (!startInfo) { - return null; - } - decodedCodes.push(startInfo); - - endInfo = self._findEnd(); - if (!endInfo) { - return null; - } - - counters = self._fillCounters(startInfo.end, endInfo.start, false); - if (!self._verifyCounterLength(counters)) { - return null; - } - code = self._decodePayload(counters, result, decodedCodes); - if (!code) { - return null; - } - if (result.length % 2 !== 0 || result.length < 6) { - return null; - } - - decodedCodes.push(endInfo); - return { - code: result.join(""), - start: startInfo.start, - end: endInfo.end, - startInfo: startInfo, - decodedCodes: decodedCodes - }; - }; - - I2of5Reader.CONFIG_KEYS = { - normalizeBarSpaceWidth: { - 'type': 'boolean', - 'default': false, - 'description': 'If true, the reader tries to normalize the' + 'width-difference between bars and spaces' - } - }; - - /* harmony default export */ exports["a"] = I2of5Reader; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ean_reader__ = __webpack_require__(5); + + +function UPCReader(opts, supplements) { + __WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].call(this, opts, supplements); +} + +var properties = { + FORMAT: { value: "upc_a", writeable: false } +}; + +UPCReader.prototype = Object.create(__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].prototype, properties); +UPCReader.prototype.constructor = UPCReader; + +UPCReader.prototype._decode = function () { + var result = __WEBPACK_IMPORTED_MODULE_0__ean_reader__["a" /* default */].prototype._decode.call(this); + + if (result && result.code && result.code.length === 13 && result.code.charAt(0) === "0") { + result.code = result.code.substring(1); + return result; + } + return null; +}; + +/* harmony default export */ __webpack_exports__["a"] = UPCReader; + +/***/ }), /* 101 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ean_reader__ = __webpack_require__(4); - - - function UPCEReader(opts, supplements) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].call(this, opts, supplements); - } - - var properties = { - CODE_FREQUENCY: { value: [[56, 52, 50, 49, 44, 38, 35, 42, 41, 37], [7, 11, 13, 14, 19, 25, 28, 21, 22, 26]] }, - STOP_PATTERN: { value: [1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7] }, - FORMAT: { value: "upc_e", writeable: false } - }; - - UPCEReader.prototype = Object.create(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].prototype, properties); - UPCEReader.prototype.constructor = UPCEReader; - - UPCEReader.prototype._decodePayload = function (code, result, decodedCodes) { - var i, - self = this, - codeFrequency = 0x0; - - for (i = 0; i < 6; i++) { - code = self._decodeCode(code.end); - if (!code) { - return null; - } - if (code.code >= self.CODE_G_START) { - code.code = code.code - self.CODE_G_START; - codeFrequency |= 1 << 5 - i; - } - result.push(code.code); - decodedCodes.push(code); - } - if (!self._determineParity(codeFrequency, result)) { - return null; - } - - return code; - }; - - UPCEReader.prototype._determineParity = function (codeFrequency, result) { - var i, nrSystem; - - for (nrSystem = 0; nrSystem < this.CODE_FREQUENCY.length; nrSystem++) { - for (i = 0; i < this.CODE_FREQUENCY[nrSystem].length; i++) { - if (codeFrequency === this.CODE_FREQUENCY[nrSystem][i]) { - result.unshift(nrSystem); - result.push(i); - return true; - } - } - } - return false; - }; - - UPCEReader.prototype._convertToUPCA = function (result) { - var upca = [result[0]], - lastDigit = result[result.length - 2]; - - if (lastDigit <= 2) { - upca = upca.concat(result.slice(1, 3)).concat([lastDigit, 0, 0, 0, 0]).concat(result.slice(3, 6)); - } else if (lastDigit === 3) { - upca = upca.concat(result.slice(1, 4)).concat([0, 0, 0, 0, 0]).concat(result.slice(4, 6)); - } else if (lastDigit === 4) { - upca = upca.concat(result.slice(1, 5)).concat([0, 0, 0, 0, 0, result[5]]); - } else { - upca = upca.concat(result.slice(1, 6)).concat([0, 0, 0, 0, lastDigit]); - } - - upca.push(result[result.length - 1]); - return upca; - }; - - UPCEReader.prototype._checksum = function (result) { - return /* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].prototype._checksum.call(this, this._convertToUPCA(result)); - }; - - UPCEReader.prototype._findEnd = function (offset, isWhite) { - isWhite = true; - return /* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].prototype._findEnd.call(this, offset, isWhite); - }; - - UPCEReader.prototype._verifyTrailingWhitespace = function (endInfo) { - var self = this, - trailingWhitespaceEnd; - - trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start) / 2; - if (trailingWhitespaceEnd < self._row.length) { - if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) { - return endInfo; - } - } - }; - - /* harmony default export */ exports["a"] = UPCEReader; - -/***/ }, +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge__ = __webpack_require__(15); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_lodash_merge__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_image_wrapper__ = __webpack_require__(27); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__locator_barcode_locator__ = __webpack_require__(89); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decoder_barcode_decoder__ = __webpack_require__(81); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__common_events__ = __webpack_require__(76); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__input_camera_access__ = __webpack_require__(83); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__common_image_debug__ = __webpack_require__(7); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__analytics_result_collector__ = __webpack_require__(42); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__config_config__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_input_stream__ = __webpack_require__(88); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_frame_grabber__ = __webpack_require__(86); + + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + + + + + + + + + + + + +var vec2 = { + clone: __webpack_require__(9) +}; + +function createScanner() { + var _inputStream, + _framegrabber, + _stopped = true, + _canvasContainer = { + ctx: { + image: null + }, + dom: { + image: null + } + }, + _inputImageWrapper, + _boxSize, + _decoder, + _workerPool = [], + _onUIThread = true, + _resultCollector, + _config = {}, + _events = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_4__common_events__["a" /* default */])(), + _locator; + + function initializeData(imageWrapper) { + initBuffers(imageWrapper); + _decoder = __WEBPACK_IMPORTED_MODULE_3__decoder_barcode_decoder__["a" /* default */].create(_config.decoder, _inputImageWrapper); + } + + function initInputStream(cb) { + var video; + if (_config.inputStream.type === "VideoStream") { + video = document.createElement("video"); + _inputStream = __WEBPACK_IMPORTED_MODULE_9_input_stream__["a" /* default */].createVideoStream(video); + } else if (_config.inputStream.type === "ImageStream") { + _inputStream = __WEBPACK_IMPORTED_MODULE_9_input_stream__["a" /* default */].createImageStream(); + } else if (_config.inputStream.type === "LiveStream") { + var $viewport = getViewPort(); + if ($viewport) { + video = $viewport.querySelector("video"); + if (!video) { + video = document.createElement("video"); + $viewport.appendChild(video); + } + } + _inputStream = __WEBPACK_IMPORTED_MODULE_9_input_stream__["a" /* default */].createLiveStream(video); + __WEBPACK_IMPORTED_MODULE_5__input_camera_access__["a" /* default */].request(video, _config.inputStream.constraints).then(function () { + _inputStream.trigger("canrecord"); + }).catch(function (err) { + return cb(err); + }); + } + + _inputStream.setAttribute("preload", "auto"); + _inputStream.setInputStream(_config.inputStream); + _inputStream.addEventListener("canrecord", canRecord.bind(undefined, cb)); + } + + function getViewPort() { + var target = _config.inputStream.target; + // Check if target is already a DOM element + if (target && target.nodeName && target.nodeType === 1) { + return target; + } else { + // Use '#interactive.viewport' as a fallback selector (backwards compatibility) + var selector = typeof target === 'string' ? target : '#interactive.viewport'; + return document.querySelector(selector); + } + } + + function canRecord(cb) { + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__locator_barcode_locator__["a" /* checkImageConstraints */])(_inputStream, _config.locator); + initCanvas(_config); + _framegrabber = __WEBPACK_IMPORTED_MODULE_10_frame_grabber__["a" /* default */].create(_inputStream, _canvasContainer.dom.image); + + adjustWorkerPool(_config.numOfWorkers, function () { + if (_config.numOfWorkers === 0) { + initializeData(); + } + ready(cb); + }); + } + + function ready(cb) { + _inputStream.play(); + cb(); + } + + function initCanvas() { + if (typeof document !== "undefined") { + var $viewport = getViewPort(); + _canvasContainer.dom.image = document.querySelector("canvas.imgBuffer"); + if (!_canvasContainer.dom.image) { + _canvasContainer.dom.image = document.createElement("canvas"); + _canvasContainer.dom.image.className = "imgBuffer"; + if ($viewport && _config.inputStream.type === "ImageStream") { + $viewport.appendChild(_canvasContainer.dom.image); + } + } + _canvasContainer.ctx.image = _canvasContainer.dom.image.getContext("2d"); + _canvasContainer.dom.image.width = _inputStream.getCanvasSize().x; + _canvasContainer.dom.image.height = _inputStream.getCanvasSize().y; + } + } + + function initBuffers(imageWrapper) { + if (imageWrapper) { + _inputImageWrapper = imageWrapper; + } else { + _inputImageWrapper = new __WEBPACK_IMPORTED_MODULE_1__common_image_wrapper__["a" /* default */]({ + x: _inputStream.getWidth(), + y: _inputStream.getHeight() + }); + } + + if (true) { + console.log(_inputImageWrapper.size); + } + _boxSize = [vec2.clone([0, 0]), vec2.clone([0, _inputImageWrapper.size.y]), vec2.clone([_inputImageWrapper.size.x, _inputImageWrapper.size.y]), vec2.clone([_inputImageWrapper.size.x, 0])]; + _locator = __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_2__locator_barcode_locator__["b" /* default */])(_inputImageWrapper, _config.locator); + } + + function getBoundingBoxes() { + if (_config.locate) { + return _locator.locate(); + } else { + return [[vec2.clone(_boxSize[0]), vec2.clone(_boxSize[1]), vec2.clone(_boxSize[2]), vec2.clone(_boxSize[3])]]; + } + } + + function transformResult(result) { + var topRight = _inputStream.getTopRight(), + xOffset = topRight.x, + yOffset = topRight.y, + i; + + if (xOffset === 0 && yOffset === 0) { + return; + } + + if (result.barcodes) { + for (i = 0; i < result.barcodes.length; i++) { + transformResult(result.barcodes[i]); + } + } + + if (result.line && result.line.length === 2) { + moveLine(result.line); + } + + if (result.box) { + moveBox(result.box); + } + + if (result.boxes && result.boxes.length > 0) { + for (i = 0; i < result.boxes.length; i++) { + moveBox(result.boxes[i]); + } + } + + function moveBox(box) { + var corner = box.length; + + while (corner--) { + box[corner][0] += xOffset; + box[corner][1] += yOffset; + } + } + + function moveLine(line) { + line[0].x += xOffset; + line[0].y += yOffset; + line[1].x += xOffset; + line[1].y += yOffset; + } + } + + function addResult(result, imageData) { + if (!imageData || !_resultCollector) { + return; + } + + if (result.barcodes) { + result.barcodes.filter(function (barcode) { + return barcode.codeResult; + }).forEach(function (barcode) { + return addResult(barcode, imageData); + }); + } else if (result.codeResult) { + _resultCollector.addResult(imageData, _inputStream.getCanvasSize(), result.codeResult); + } + } + + function hasCodeResult(result) { + return result && (result.barcodes ? result.barcodes.some(function (barcode) { + return barcode.codeResult; + }) : result.codeResult); + } + + function publishResult(result, imageData) { + var resultToPublish = result; + + if (result && _onUIThread) { + transformResult(result); + addResult(result, imageData); + resultToPublish = result.barcodes || result; + } + + _events.publish("processed", resultToPublish); + if (hasCodeResult(result)) { + _events.publish("detected", resultToPublish); + } + } + + function locateAndDecode() { + var result, boxes; + + boxes = getBoundingBoxes(); + if (boxes) { + result = _decoder.decodeFromBoundingBoxes(boxes); + result = result || {}; + result.boxes = boxes; + publishResult(result, _inputImageWrapper.data); + } else { + publishResult(); + } + } + + function update() { + var availableWorker; + + if (_onUIThread) { + if (_workerPool.length > 0) { + availableWorker = _workerPool.filter(function (workerThread) { + return !workerThread.busy; + })[0]; + if (availableWorker) { + _framegrabber.attachData(availableWorker.imageData); + } else { + return; // all workers are busy + } + } else { + _framegrabber.attachData(_inputImageWrapper.data); + } + if (_framegrabber.grab()) { + if (availableWorker) { + availableWorker.busy = true; + availableWorker.worker.postMessage({ + cmd: 'process', + imageData: availableWorker.imageData + }, [availableWorker.imageData.buffer]); + } else { + locateAndDecode(); + } + } + } else { + locateAndDecode(); + } + } + + function startContinuousUpdate() { + var next = null, + delay = 1000 / (_config.frequency === 0 ? 60 : _config.frequency || 60); + + _stopped = false; + (function frame(timestamp) { + next = next || timestamp; + if (!_stopped) { + if (timestamp >= next) { + next += delay; + update(); + } + window.requestAnimFrame(frame); + } + })(performance.now()); + } + + function _start() { + if (_onUIThread && _config.inputStream.type === "LiveStream") { + startContinuousUpdate(); + } else { + update(); + } + } + + function initWorker(cb) { + var blobURL, + workerThread = { + worker: undefined, + imageData: new Uint8Array(_inputStream.getWidth() * _inputStream.getHeight()), + busy: true + }; + + blobURL = generateWorkerBlob(); + workerThread.worker = new Worker(blobURL); + + workerThread.worker.onmessage = function (e) { + if (e.data.event === 'initialized') { + URL.revokeObjectURL(blobURL); + workerThread.busy = false; + workerThread.imageData = new Uint8Array(e.data.imageData); + if (true) { + console.log("Worker initialized"); + } + return cb(workerThread); + } else if (e.data.event === 'processed') { + workerThread.imageData = new Uint8Array(e.data.imageData); + workerThread.busy = false; + publishResult(e.data.result, workerThread.imageData); + } else if (e.data.event === 'error') { + if (true) { + console.log("Worker error: " + e.data.message); + } + } + }; + + workerThread.worker.postMessage({ + cmd: 'init', + size: { x: _inputStream.getWidth(), y: _inputStream.getHeight() }, + imageData: workerThread.imageData, + config: configForWorker(_config) + }, [workerThread.imageData.buffer]); + } + + function configForWorker(config) { + return _extends({}, config, { + inputStream: _extends({}, config.inputStream, { + target: null + }) + }); + } + + function workerInterface(factory) { + /* eslint-disable no-undef*/ + if (factory) { + var Quagga = factory().default; + if (!Quagga) { + self.postMessage({ 'event': 'error', message: 'Quagga could not be created' }); + return; + } + } + var imageWrapper, + scanner = Quagga._worker.createScanner(); + + self.onmessage = function (e) { + if (e.data.cmd === 'init') { + var config = e.data.config; + config.numOfWorkers = 0; + imageWrapper = new Quagga.ImageWrapper({ + x: e.data.size.x, + y: e.data.size.y + }, new Uint8Array(e.data.imageData)); + scanner.init(config, ready, imageWrapper); + scanner.subscribe("processed", onProcessed); + } else if (e.data.cmd === 'process') { + imageWrapper.data = new Uint8Array(e.data.imageData); + scanner.start(); + } + }; + + function onProcessed(result) { + self.postMessage({ + 'event': 'processed', + imageData: imageWrapper.data, + result: result + }, [imageWrapper.data.buffer]); + } + + function ready() { + // eslint-disable-line + self.postMessage({ 'event': 'initialized', imageData: imageWrapper.data }, [imageWrapper.data.buffer]); + } + + /* eslint-enable */ + } + + function generateWorkerBlob() { + var blob, factorySource; + + /* jshint ignore:start */ + if (typeof __factorySource__ !== 'undefined') { + factorySource = __factorySource__; // eslint-disable-line no-undef + } + /* jshint ignore:end */ + + blob = new Blob(['(' + workerInterface.toString() + ')(' + factorySource + ');'], { type: 'text/javascript' }); + + return window.URL.createObjectURL(blob); + } + + function setReaders(readers) { + if (_decoder) { + _decoder.setReaders(readers); + } else if (_onUIThread && _workerPool.length > 0) { + _workerPool.forEach(function (workerThread) { + workerThread.worker.postMessage({ cmd: 'setReaders', readers: readers }); + }); + } + } + + function adjustWorkerPool(capacity, cb) { + var increaseBy = capacity - _workerPool.length; + if (increaseBy === 0) { + return cb && cb(); + } + if (increaseBy < 0) { + var workersToTerminate = _workerPool.slice(increaseBy); + workersToTerminate.forEach(function (workerThread) { + workerThread.worker.terminate(); + if (true) { + console.log("Worker terminated!"); + } + }); + _workerPool = _workerPool.slice(0, increaseBy); + return cb && cb(); + } else { + var workerInitialized = function workerInitialized(workerThread) { + _workerPool.push(workerThread); + if (_workerPool.length >= capacity) { + cb && cb(); + } + }; + + for (var i = 0; i < increaseBy; i++) { + initWorker(workerInitialized); + } + } + } + + return { + init: function init(config, cb, imageWrapper) { + _config = __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default()({}, __WEBPACK_IMPORTED_MODULE_8__config_config__["a" /* default */], config); + + if (imageWrapper) { + _onUIThread = false; + initializeData(imageWrapper); + return cb(); + } else { + initInputStream(cb); + } + }, + start: function start() { + _start(); + }, + isRunning: function isRunning() { + return !_stopped; + }, + stop: function stop() { + _stopped = true; + adjustWorkerPool(0); + if (_config.inputStream.type === "LiveStream") { + __WEBPACK_IMPORTED_MODULE_5__input_camera_access__["a" /* default */].release(); + } + _inputStream.clearEventHandlers(); + }, + pause: function pause() { + _stopped = true; + }, + subscribe: function subscribe(eventName, callback) { + _events.subscribe(eventName, callback); + }, + unsubscribe: function unsubscribe(eventName, callback) { + _events.unsubscribe(eventName, callback); + }, + + registerResultCollector: function registerResultCollector(resultCollector) { + if (resultCollector && typeof resultCollector.addResult === 'function') { + _resultCollector = resultCollector; + } + }, + decodeSingle: function decodeSingle(config, resultCallback) { + var _this = this; + + this.init(config, function () { + _events.once("processed", function (result) { + _this.stop(); + resultCallback.call(null, result); + }, true); + _start(); + }); + }, + canvas: _canvasContainer + }; +} + +/* harmony default export */ __webpack_exports__["a"] = createScanner; + +/***/ }), /* 102 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__ean_reader__ = __webpack_require__(4); - - - function UPCReader(opts, supplements) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].call(this, opts, supplements); - } - - var properties = { - FORMAT: { value: "upc_a", writeable: false } - }; - - UPCReader.prototype = Object.create(/* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].prototype, properties); - UPCReader.prototype.constructor = UPCReader; - - UPCReader.prototype._decode = function () { - var result = /* harmony import */__WEBPACK_IMPORTED_MODULE_0__ean_reader__["a"].prototype._decode.call(this); - - if (result && result.code && result.code.length === 13 && result.code.charAt(0) === "0") { - result.code = result.code.substring(1); - return result; - } - return null; - }; - - /* harmony default export */ exports["a"] = UPCReader; - -/***/ }, +/***/ (function(module, exports) { + +module.exports = copy + +/** + * Copy the values from one mat2 to another + * + * @alias mat2.copy + * @param {mat2} out the receiving matrix + * @param {mat2} a the source matrix + * @returns {mat2} out + */ +function copy(out, a) { + out[0] = a[0] + out[1] = a[1] + out[2] = a[2] + out[3] = a[3] + return out +} + + +/***/ }), /* 103 */ -/***/ function(module, exports, __webpack_require__) { - - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge__ = __webpack_require__(15); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default = __WEBPACK_IMPORTED_MODULE_0_lodash_merge__ && __WEBPACK_IMPORTED_MODULE_0_lodash_merge__.__esModule ? function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_merge__['default'] } : function() { return __WEBPACK_IMPORTED_MODULE_0_lodash_merge__; } - /* harmony import */ Object.defineProperty(__WEBPACK_IMPORTED_MODULE_0_lodash_merge___default, 'a', { get: __WEBPACK_IMPORTED_MODULE_0_lodash_merge___default }); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__common_image_wrapper__ = __webpack_require__(27); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__locator_barcode_locator__ = __webpack_require__(91); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__decoder_barcode_decoder__ = __webpack_require__(83); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__common_events__ = __webpack_require__(79); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__input_camera_access__ = __webpack_require__(85); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__common_image_debug__ = __webpack_require__(6); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7__analytics_result_collector__ = __webpack_require__(42); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__config_config__ = __webpack_require__(43); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_9_input_stream__ = __webpack_require__(90); - /* harmony import */ var __WEBPACK_IMPORTED_MODULE_10_frame_grabber__ = __webpack_require__(88); - - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - - - - - - - - - - - - var vec2 = { - clone: __webpack_require__(8) - }; - - function createScanner() { - var _inputStream, - _framegrabber, - _stopped = true, - _canvasContainer = { - ctx: { - image: null - }, - dom: { - image: null - } - }, - _inputImageWrapper, - _boxSize, - _decoder, - _workerPool = [], - _onUIThread = true, - _resultCollector, - _config = {}, - _events = /* harmony import */__WEBPACK_IMPORTED_MODULE_4__common_events__["a"].bind()(), - _locator; - - function initializeData(imageWrapper) { - initBuffers(imageWrapper); - _decoder = /* harmony import */__WEBPACK_IMPORTED_MODULE_3__decoder_barcode_decoder__["a"].create(_config.decoder, _inputImageWrapper); - } - - function initInputStream(cb) { - var video; - if (_config.inputStream.type === "VideoStream") { - video = document.createElement("video"); - _inputStream = /* harmony import */__WEBPACK_IMPORTED_MODULE_9_input_stream__["a"].createVideoStream(video); - } else if (_config.inputStream.type === "ImageStream") { - _inputStream = /* harmony import */__WEBPACK_IMPORTED_MODULE_9_input_stream__["a"].createImageStream(); - } else if (_config.inputStream.type === "LiveStream") { - var $viewport = getViewPort(); - if ($viewport) { - video = $viewport.querySelector("video"); - if (!video) { - video = document.createElement("video"); - $viewport.appendChild(video); - } - } - _inputStream = /* harmony import */__WEBPACK_IMPORTED_MODULE_9_input_stream__["a"].createLiveStream(video); - /* harmony import */__WEBPACK_IMPORTED_MODULE_5__input_camera_access__["a"].request(video, _config.inputStream.constraints).then(function () { - _inputStream.trigger("canrecord"); - }).catch(function (err) { - return cb(err); - }); - } - - _inputStream.setAttribute("preload", "auto"); - _inputStream.setInputStream(_config.inputStream); - _inputStream.addEventListener("canrecord", canRecord.bind(undefined, cb)); - } - - function getViewPort() { - var target = _config.inputStream.target; - // Check if target is already a DOM element - if (target && target.nodeName && target.nodeType === 1) { - return target; - } else { - // Use '#interactive.viewport' as a fallback selector (backwards compatibility) - var selector = typeof target === 'string' ? target : '#interactive.viewport'; - return document.querySelector(selector); - } - } - - function canRecord(cb) { - /* harmony import */__WEBPACK_IMPORTED_MODULE_2__locator_barcode_locator__["a"].bind()(_inputStream, _config.locator); - initCanvas(_config); - _framegrabber = /* harmony import */__WEBPACK_IMPORTED_MODULE_10_frame_grabber__["a"].create(_inputStream, _canvasContainer.dom.image); - - adjustWorkerPool(_config.numOfWorkers, function () { - if (_config.numOfWorkers === 0) { - initializeData(); - } - ready(cb); - }); - } - - function ready(cb) { - _inputStream.play(); - cb(); - } - - function initCanvas() { - if (typeof document !== "undefined") { - var $viewport = getViewPort(); - _canvasContainer.dom.image = document.querySelector("canvas.imgBuffer"); - if (!_canvasContainer.dom.image) { - _canvasContainer.dom.image = document.createElement("canvas"); - _canvasContainer.dom.image.className = "imgBuffer"; - if ($viewport && _config.inputStream.type === "ImageStream") { - $viewport.appendChild(_canvasContainer.dom.image); - } - } - _canvasContainer.ctx.image = _canvasContainer.dom.image.getContext("2d"); - _canvasContainer.dom.image.width = _inputStream.getCanvasSize().x; - _canvasContainer.dom.image.height = _inputStream.getCanvasSize().y; - } - } - - function initBuffers(imageWrapper) { - if (imageWrapper) { - _inputImageWrapper = imageWrapper; - } else { - _inputImageWrapper = new /* harmony import */__WEBPACK_IMPORTED_MODULE_1__common_image_wrapper__["a"]({ - x: _inputStream.getWidth(), - y: _inputStream.getHeight() - }); - } - - if (true) { - console.log(_inputImageWrapper.size); - } - _boxSize = [vec2.clone([0, 0]), vec2.clone([0, _inputImageWrapper.size.y]), vec2.clone([_inputImageWrapper.size.x, _inputImageWrapper.size.y]), vec2.clone([_inputImageWrapper.size.x, 0])]; - _locator = /* harmony import */__WEBPACK_IMPORTED_MODULE_2__locator_barcode_locator__["b"].bind()(_inputImageWrapper, _config.locator); - } - - function getBoundingBoxes() { - if (_config.locate) { - return _locator.locate(); - } else { - return [[vec2.clone(_boxSize[0]), vec2.clone(_boxSize[1]), vec2.clone(_boxSize[2]), vec2.clone(_boxSize[3])]]; - } - } - - function transformResult(result) { - var topRight = _inputStream.getTopRight(), - xOffset = topRight.x, - yOffset = topRight.y, - i; - - if (xOffset === 0 && yOffset === 0) { - return; - } - - if (result.barcodes) { - for (i = 0; i < result.barcodes.length; i++) { - transformResult(result.barcodes[i]); - } - } - - if (result.line && result.line.length === 2) { - moveLine(result.line); - } - - if (result.box) { - moveBox(result.box); - } - - if (result.boxes && result.boxes.length > 0) { - for (i = 0; i < result.boxes.length; i++) { - moveBox(result.boxes[i]); - } - } - - function moveBox(box) { - var corner = box.length; - - while (corner--) { - box[corner][0] += xOffset; - box[corner][1] += yOffset; - } - } - - function moveLine(line) { - line[0].x += xOffset; - line[0].y += yOffset; - line[1].x += xOffset; - line[1].y += yOffset; - } - } - - function addResult(result, imageData) { - if (!imageData || !_resultCollector) { - return; - } - - if (result.barcodes) { - result.barcodes.filter(function (barcode) { - return barcode.codeResult; - }).forEach(function (barcode) { - return addResult(barcode, imageData); - }); - } else if (result.codeResult) { - _resultCollector.addResult(imageData, _inputStream.getCanvasSize(), result.codeResult); - } - } - - function hasCodeResult(result) { - return result && (result.barcodes ? result.barcodes.some(function (barcode) { - return barcode.codeResult; - }) : result.codeResult); - } - - function publishResult(result, imageData) { - var resultToPublish = result; - - if (result && _onUIThread) { - transformResult(result); - addResult(result, imageData); - resultToPublish = result.barcodes || result; - } - - _events.publish("processed", resultToPublish); - if (hasCodeResult(result)) { - _events.publish("detected", resultToPublish); - } - } - - function locateAndDecode() { - var result, boxes; - - boxes = getBoundingBoxes(); - if (boxes) { - result = _decoder.decodeFromBoundingBoxes(boxes); - result = result || {}; - result.boxes = boxes; - publishResult(result, _inputImageWrapper.data); - } else { - publishResult(); - } - } - - function update() { - var availableWorker; - - if (_onUIThread) { - if (_workerPool.length > 0) { - availableWorker = _workerPool.filter(function (workerThread) { - return !workerThread.busy; - })[0]; - if (availableWorker) { - _framegrabber.attachData(availableWorker.imageData); - } else { - return; // all workers are busy - } - } else { - _framegrabber.attachData(_inputImageWrapper.data); - } - if (_framegrabber.grab()) { - if (availableWorker) { - availableWorker.busy = true; - availableWorker.worker.postMessage({ - cmd: 'process', - imageData: availableWorker.imageData - }, [availableWorker.imageData.buffer]); - } else { - locateAndDecode(); - } - } - } else { - locateAndDecode(); - } - } - - function startContinuousUpdate() { - var next = null, - delay = 1000 / (_config.frequency === 0 ? 60 : _config.frequency || 60); - - _stopped = false; - (function frame(timestamp) { - next = next || timestamp; - if (!_stopped) { - if (timestamp >= next) { - next += delay; - update(); - } - window.requestAnimFrame(frame); - } - })(performance.now()); - } - - function _start() { - if (_onUIThread && _config.inputStream.type === "LiveStream") { - startContinuousUpdate(); - } else { - update(); - } - } - - function initWorker(cb) { - var blobURL, - workerThread = { - worker: undefined, - imageData: new Uint8Array(_inputStream.getWidth() * _inputStream.getHeight()), - busy: true - }; - - blobURL = generateWorkerBlob(); - workerThread.worker = new Worker(blobURL); - - workerThread.worker.onmessage = function (e) { - if (e.data.event === 'initialized') { - URL.revokeObjectURL(blobURL); - workerThread.busy = false; - workerThread.imageData = new Uint8Array(e.data.imageData); - if (true) { - console.log("Worker initialized"); - } - return cb(workerThread); - } else if (e.data.event === 'processed') { - workerThread.imageData = new Uint8Array(e.data.imageData); - workerThread.busy = false; - publishResult(e.data.result, workerThread.imageData); - } else if (e.data.event === 'error') { - if (true) { - console.log("Worker error: " + e.data.message); - } - } - }; - - workerThread.worker.postMessage({ - cmd: 'init', - size: { x: _inputStream.getWidth(), y: _inputStream.getHeight() }, - imageData: workerThread.imageData, - config: configForWorker(_config) - }, [workerThread.imageData.buffer]); - } - - function configForWorker(config) { - return _extends({}, config, { - inputStream: _extends({}, config.inputStream, { - target: null - }) - }); - } - - function workerInterface(factory) { - /* eslint-disable no-undef*/ - if (factory) { - var Quagga = factory().default; - if (!Quagga) { - self.postMessage({ 'event': 'error', message: 'Quagga could not be created' }); - return; - } - } - var imageWrapper, - scanner = Quagga._worker.createScanner(); - - self.onmessage = function (e) { - if (e.data.cmd === 'init') { - var config = e.data.config; - config.numOfWorkers = 0; - imageWrapper = new Quagga.ImageWrapper({ - x: e.data.size.x, - y: e.data.size.y - }, new Uint8Array(e.data.imageData)); - scanner.init(config, ready, imageWrapper); - scanner.subscribe("processed", onProcessed); - } else if (e.data.cmd === 'process') { - imageWrapper.data = new Uint8Array(e.data.imageData); - scanner.start(); - } - }; - - function onProcessed(result) { - self.postMessage({ - 'event': 'processed', - imageData: imageWrapper.data, - result: result - }, [imageWrapper.data.buffer]); - } - - function ready() { - // eslint-disable-line - self.postMessage({ 'event': 'initialized', imageData: imageWrapper.data }, [imageWrapper.data.buffer]); - } - - /* eslint-enable */ - } - - function generateWorkerBlob() { - var blob, factorySource; - - /* jshint ignore:start */ - if (typeof __factorySource__ !== 'undefined') { - factorySource = __factorySource__; // eslint-disable-line no-undef - } - /* jshint ignore:end */ - - blob = new Blob(['(' + workerInterface.toString() + ')(' + factorySource + ');'], { type: 'text/javascript' }); - - return window.URL.createObjectURL(blob); - } - - function setReaders(readers) { - if (_decoder) { - _decoder.setReaders(readers); - } else if (_onUIThread && _workerPool.length > 0) { - _workerPool.forEach(function (workerThread) { - workerThread.worker.postMessage({ cmd: 'setReaders', readers: readers }); - }); - } - } - - function adjustWorkerPool(capacity, cb) { - var increaseBy = capacity - _workerPool.length; - if (increaseBy === 0) { - return cb && cb(); - } - if (increaseBy < 0) { - var workersToTerminate = _workerPool.slice(increaseBy); - workersToTerminate.forEach(function (workerThread) { - workerThread.worker.terminate(); - if (true) { - console.log("Worker terminated!"); - } - }); - _workerPool = _workerPool.slice(0, increaseBy); - return cb && cb(); - } else { - var workerInitialized = function workerInitialized(workerThread) { - _workerPool.push(workerThread); - if (_workerPool.length >= capacity) { - cb && cb(); - } - }; - - for (var i = 0; i < increaseBy; i++) { - initWorker(workerInitialized); - } - } - } - - return { - init: function init(config, cb, imageWrapper) { - _config = /* harmony import */__WEBPACK_IMPORTED_MODULE_0_lodash_merge___default.a.bind()({}, /* harmony import */__WEBPACK_IMPORTED_MODULE_8__config_config__["a"], config); - - if (imageWrapper) { - _onUIThread = false; - initializeData(imageWrapper); - return cb(); - } else { - initInputStream(cb); - } - }, - start: function start() { - _start(); - }, - isRunning: function isRunning() { - return !_stopped; - }, - stop: function stop() { - _stopped = true; - adjustWorkerPool(0); - if (_config.inputStream.type === "LiveStream") { - /* harmony import */__WEBPACK_IMPORTED_MODULE_5__input_camera_access__["a"].release(); - } - _inputStream.clearEventHandlers(); - }, - pause: function pause() { - _stopped = true; - }, - subscribe: function subscribe(eventName, callback) { - _events.subscribe(eventName, callback); - }, - unsubscribe: function unsubscribe(eventName, callback) { - _events.unsubscribe(eventName, callback); - }, - - registerResultCollector: function registerResultCollector(resultCollector) { - if (resultCollector && typeof resultCollector.addResult === 'function') { - _resultCollector = resultCollector; - } - }, - decodeSingle: function decodeSingle(config, resultCallback) { - var _this = this; - - this.init(config, function () { - _events.once("processed", function (result) { - _this.stop(); - resultCallback.call(null, result); - }, true); - _start(); - }); - }, - canvas: _canvasContainer - }; - } - - /* harmony default export */ exports["a"] = createScanner; - -/***/ }, +/***/ (function(module, exports) { + +module.exports = create + +/** + * Creates a new identity mat2 + * + * @alias mat2.create + * @returns {mat2} a new 2x2 matrix + */ +function create() { + var out = new Float32Array(4) + out[0] = 1 + out[1] = 0 + out[2] = 0 + out[3] = 1 + return out +} + + +/***/ }), /* 104 */ -/***/ function(module, exports, __webpack_require__) { - - module.e = copy - - /** - * Copy the values from one mat2 to another - * - * @alias mat2.copy - * @param {mat2} out the receiving matrix - * @param {mat2} a the source matrix - * @returns {mat2} out - */ - function copy(out, a) { - out[0] = a[0] - out[1] = a[1] - out[2] = a[2] - out[3] = a[3] - return out - } - - -/***/ }, +/***/ (function(module, exports) { + +module.exports = invert + +/** + * Inverts a mat2 + * + * @alias mat2.invert + * @param {mat2} out the receiving matrix + * @param {mat2} a the source matrix + * @returns {mat2} out + */ +function invert(out, a) { + var a0 = a[0] + var a1 = a[1] + var a2 = a[2] + var a3 = a[3] + var det = a0 * a3 - a2 * a1 + + if (!det) return null + det = 1.0 / det + + out[0] = a3 * det + out[1] = -a1 * det + out[2] = -a2 * det + out[3] = a0 * det + + return out +} + + +/***/ }), /* 105 */ -/***/ function(module, exports, __webpack_require__) { - - module.e = create - - /** - * Creates a new identity mat2 - * - * @alias mat2.create - * @returns {mat2} a new 2x2 matrix - */ - function create() { - var out = new Float32Array(4) - out[0] = 1 - out[1] = 0 - out[2] = 0 - out[3] = 1 - return out - } - - -/***/ }, +/***/ (function(module, exports) { + +module.exports = scale + +/** + * Scales a vec2 by a scalar number + * + * @param {vec2} out the receiving vector + * @param {vec2} a the vector to scale + * @param {Number} b amount to scale the vector by + * @returns {vec2} out + */ +function scale(out, a, b) { + out[0] = a[0] * b + out[1] = a[1] * b + return out +} + +/***/ }), /* 106 */ -/***/ function(module, exports, __webpack_require__) { - - module.e = invert - - /** - * Inverts a mat2 - * - * @alias mat2.invert - * @param {mat2} out the receiving matrix - * @param {mat2} a the source matrix - * @returns {mat2} out - */ - function invert(out, a) { - var a0 = a[0] - var a1 = a[1] - var a2 = a[2] - var a3 = a[3] - var det = a0 * a3 - a2 * a1 - - if (!det) return null - det = 1.0 / det - - out[0] = a3 * det - out[1] = -a1 * det - out[2] = -a2 * det - out[3] = a0 * det - - return out - } - - -/***/ }, +/***/ (function(module, exports) { + +module.exports = transformMat2 + +/** + * Transforms the vec2 with a mat2 + * + * @param {vec2} out the receiving vector + * @param {vec2} a the vector to transform + * @param {mat2} m matrix to transform with + * @returns {vec2} out + */ +function transformMat2(out, a, m) { + var x = a[0], + y = a[1] + out[0] = m[0] * x + m[2] * y + out[1] = m[1] * x + m[3] * y + return out +} + +/***/ }), /* 107 */ -/***/ function(module, exports, __webpack_require__) { - - module.e = scale - - /** - * Scales a vec2 by a scalar number - * - * @param {vec2} out the receiving vector - * @param {vec2} a the vector to scale - * @param {Number} b amount to scale the vector by - * @returns {vec2} out - */ - function scale(out, a, b) { - out[0] = a[0] * b - out[1] = a[1] * b - return out - } - -/***/ }, +/***/ (function(module, exports) { + +module.exports = clone; + +/** + * Creates a new vec3 initialized with values from an existing vector + * + * @param {vec3} a vector to clone + * @returns {vec3} a new 3D vector + */ +function clone(a) { + var out = new Float32Array(3) + out[0] = a[0] + out[1] = a[1] + out[2] = a[2] + return out +} + +/***/ }), /* 108 */ -/***/ function(module, exports, __webpack_require__) { - - module.e = transformMat2 - - /** - * Transforms the vec2 with a mat2 - * - * @param {vec2} out the receiving vector - * @param {vec2} a the vector to transform - * @param {mat2} m matrix to transform with - * @returns {vec2} out - */ - function transformMat2(out, a, m) { - var x = a[0], - y = a[1] - out[0] = m[0] * x + m[2] * y - out[1] = m[1] * x + m[3] * y - return out - } - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(3), + root = __webpack_require__(1); + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'); + +module.exports = DataView; + + +/***/ }), /* 109 */ -/***/ function(module, exports, __webpack_require__) { - - module.e = clone; - - /** - * Creates a new vec3 initialized with values from an existing vector - * - * @param {vec3} a vector to clone - * @returns {vec3} a new 3D vector - */ - function clone(a) { - var out = new Float32Array(3) - out[0] = a[0] - out[1] = a[1] - out[2] = a[2] - return out - } - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var hashClear = __webpack_require__(159), + hashDelete = __webpack_require__(160), + hashGet = __webpack_require__(161), + hashHas = __webpack_require__(162), + hashSet = __webpack_require__(163); + +/** + * 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; + +module.exports = Hash; + + +/***/ }), /* 110 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(3), + root = __webpack_require__(1); + +/* Built-in method references that are verified to be native. */ +var Promise = getNative(root, 'Promise'); - var getNative = __webpack_require__(5), - root = __webpack_require__(3); - - /* Built-in method references that are verified to be native. */ - var DataView = getNative(root, 'DataView'); - - module.e = DataView; +module.exports = Promise; -/***/ }, +/***/ }), /* 111 */ -/***/ function(module, exports, __webpack_require__) { - - var hashClear = __webpack_require__(160), - hashDelete = __webpack_require__(161), - hashGet = __webpack_require__(162), - hashHas = __webpack_require__(163), - hashSet = __webpack_require__(164); - - /** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Hash(entries) { - var index = -1, - length = entries ? entries.length : 0; - - 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; - - module.e = Hash; - - -/***/ }, -/* 112 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { - var getNative = __webpack_require__(5), - root = __webpack_require__(3); - - /* Built-in method references that are verified to be native. */ - var Promise = getNative(root, 'Promise'); - - module.e = Promise; +var getNative = __webpack_require__(3), + root = __webpack_require__(1); +/* Built-in method references that are verified to be native. */ +var Set = getNative(root, 'Set'); -/***/ }, -/* 113 */ -/***/ function(module, exports, __webpack_require__) { +module.exports = Set; - var getNative = __webpack_require__(5), - root = __webpack_require__(3); - - /* Built-in method references that are verified to be native. */ - var Set = getNative(root, 'Set'); - - module.e = Set; +/***/ }), +/* 112 */ +/***/ (function(module, exports, __webpack_require__) { + +var MapCache = __webpack_require__(29), + setCacheAdd = __webpack_require__(185), + setCacheHas = __webpack_require__(186); + +/** + * + * 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; + +module.exports = SetCache; + + +/***/ }), +/* 113 */ +/***/ (function(module, exports, __webpack_require__) { -/***/ }, -/* 114 */ -/***/ function(module, exports, __webpack_require__) { - - var MapCache = __webpack_require__(29), - setCacheAdd = __webpack_require__(184), - setCacheHas = __webpack_require__(185); - - /** - * - * 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 ? values.length : 0; - - 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; - - module.e = SetCache; - - -/***/ }, -/* 115 */ -/***/ function(module, exports, __webpack_require__) { +var getNative = __webpack_require__(3), + root = __webpack_require__(1); - var getNative = __webpack_require__(5), - root = __webpack_require__(3); - - /* Built-in method references that are verified to be native. */ - var WeakMap = getNative(root, 'WeakMap'); - - module.e = WeakMap; +/* Built-in method references that are verified to be native. */ +var WeakMap = getNative(root, 'WeakMap'); +module.exports = WeakMap; -/***/ }, + +/***/ }), +/* 114 */ +/***/ (function(module, exports) { + +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +module.exports = apply; + + +/***/ }), +/* 115 */ +/***/ (function(module, exports) { + +/** + * 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; +} + +module.exports = arrayFilter; + + +/***/ }), /* 116 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Adds the key-value `pair` to `map`. - * - * @private - * @param {Object} map The map to modify. - * @param {Array} pair The key-value pair to add. - * @returns {Object} Returns `map`. - */ - function addMapEntry(map, pair) { - // Don't return `map.set` because it's not chainable in IE 11. - map.set(pair[0], pair[1]); - return map; - } - - module.e = addMapEntry; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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; +} + +module.exports = arraySome; + + +/***/ }), /* 117 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Adds `value` to `set`. - * - * @private - * @param {Object} set The set to modify. - * @param {*} value The value to add. - * @returns {Object} Returns `set`. - */ - function addSetEntry(set, value) { - // Don't return `set.add` because it's not chainable in IE 11. - set.add(value); - return set; - } - - module.e = addSetEntry; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(2); + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +module.exports = baseCreate; + + +/***/ }), /* 118 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - - module.e = apply; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var arrayPush = __webpack_require__(31), + isFlattenable = __webpack_require__(165); + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +module.exports = baseFlatten; + + +/***/ }), /* 119 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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 ? array.length : 0, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - module.e = arrayMap; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var createBaseFor = __webpack_require__(148); + +/** + * 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(); + +module.exports = baseFor; + + +/***/ }), /* 120 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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 ? array.length : 0; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } - - module.e = arraySome; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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); +} + +module.exports = baseHasIn; + + +/***/ }), /* 121 */ -/***/ function(module, exports, __webpack_require__) { - - var copyObject = __webpack_require__(32), - keys = __webpack_require__(14); - - /** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } - - module.e = baseAssign; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(6), + isObjectLike = __webpack_require__(4); + +/** `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(value) && baseGetTag(value) == argsTag; +} + +module.exports = baseIsArguments; + + +/***/ }), /* 122 */ -/***/ function(module, exports, __webpack_require__) { - - var Stack = __webpack_require__(18), - arrayEach = __webpack_require__(48), - assignValue = __webpack_require__(52), - baseAssign = __webpack_require__(121), - cloneBuffer = __webpack_require__(142), - copyArray = __webpack_require__(61), - copySymbols = __webpack_require__(149), - getAllKeys = __webpack_require__(154), - getTag = __webpack_require__(35), - initCloneArray = __webpack_require__(165), - initCloneByTag = __webpack_require__(166), - initCloneObject = __webpack_require__(167), - isArray = __webpack_require__(0), - isBuffer = __webpack_require__(71), - isHostObject = __webpack_require__(22), - isObject = __webpack_require__(2), - keys = __webpack_require__(14); - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - 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 supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = - cloneableTags[boolTag] = cloneableTags[dateTag] = - cloneableTags[float32Tag] = cloneableTags[float64Tag] = - cloneableTags[int8Tag] = cloneableTags[int16Tag] = - cloneableTags[int32Tag] = cloneableTags[mapTag] = - cloneableTags[numberTag] = cloneableTags[objectTag] = - cloneableTags[regexpTag] = cloneableTags[setTag] = - cloneableTags[stringTag] = cloneableTags[symbolTag] = - cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[weakMapTag] = false; - - /** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @param {boolean} [isFull] Specify a clone including symbols. - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, isDeep, isFull, customizer, key, object, stack) { - var result; - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - if (isHostObject(value)) { - return object ? value : {}; - } - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, baseClone, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (!isArr) { - var props = isFull ? getAllKeys(value) : keys(value); - } - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); - }); - return result; - } - - module.e = baseClone; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var Stack = __webpack_require__(30), + equalArrays = __webpack_require__(58), + equalByTag = __webpack_require__(149), + equalObjects = __webpack_require__(150), + getTag = __webpack_require__(61), + isArray = __webpack_require__(0), + isBuffer = __webpack_require__(24), + isTypedArray = __webpack_require__(25); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.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(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.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); +} + +module.exports = baseIsEqualDeep; + + +/***/ }), /* 123 */ -/***/ function(module, exports, __webpack_require__) { - - var isObject = __webpack_require__(2); - - /** Built-in value references. */ - var objectCreate = Object.create; - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} prototype The object to inherit from. - * @returns {Object} Returns the new object. - */ - function baseCreate(proto) { - return isObject(proto) ? objectCreate(proto) : {}; - } - - module.e = baseCreate; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var Stack = __webpack_require__(30), + baseIsEqual = __webpack_require__(53); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 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 | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +module.exports = baseIsMatch; + + +/***/ }), /* 124 */ -/***/ function(module, exports, __webpack_require__) { - - var arrayPush = __webpack_require__(30), - isFlattenable = __webpack_require__(168); - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - module.e = baseFlatten; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var isFunction = __webpack_require__(37), + isMasked = __webpack_require__(168), + isObject = __webpack_require__(2), + toSource = __webpack_require__(67); + +/** + * 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 = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).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(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +module.exports = baseIsNative; + + +/***/ }), /* 125 */ -/***/ function(module, exports, __webpack_require__) { - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** - * The base implementation of `getTag`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - return objectToString.call(value); - } - - module.e = baseGetTag; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(6), + isLength = __webpack_require__(38), + isObjectLike = __webpack_require__(4); + +/** `Object#toString` result references. */ +var argsTag = '[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] = 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(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +module.exports = baseIsTypedArray; + + +/***/ }), /* 126 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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); - } - - module.e = baseHasIn; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(2), + isPrototype = __webpack_require__(22), + nativeKeysIn = __webpack_require__(182); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` 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 baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = baseKeysIn; + + +/***/ }), /* 127 */ -/***/ function(module, exports, __webpack_require__) { - - var Stack = __webpack_require__(18), - equalArrays = __webpack_require__(62), - equalByTag = __webpack_require__(152), - equalObjects = __webpack_require__(153), - getTag = __webpack_require__(35), - isArray = __webpack_require__(0), - isHostObject = __webpack_require__(22), - isTypedArray = __webpack_require__(41); - - /** Used to compose bitmasks for comparison styles. */ - var PARTIAL_COMPARE_FLAG = 2; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.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 {Function} equalFunc The function to determine equivalents of values. - * @param {Function} [customizer] The function to customize comparisons. - * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = getTag(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = getTag(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag && !isHostObject(object), - othIsObj = othTag == objectTag && !isHostObject(other), - isSameTag = objTag == othTag; - - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) - : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); - } - if (!(bitmask & PARTIAL_COMPARE_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.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, customizer, bitmask, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, equalFunc, customizer, bitmask, stack); - } - - module.e = baseIsEqualDeep; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseIsMatch = __webpack_require__(123), + getMatchData = __webpack_require__(154), + matchesStrictComparable = __webpack_require__(63); + +/** + * 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); + }; +} + +module.exports = baseMatches; + + +/***/ }), /* 128 */ -/***/ function(module, exports, __webpack_require__) { - - var Stack = __webpack_require__(18), - baseIsEqual = __webpack_require__(55); - - /** Used to compose bitmasks for comparison styles. */ - var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 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, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) - : result - )) { - return false; - } - } - } - return true; - } - - module.e = baseIsMatch; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseIsEqual = __webpack_require__(53), + get = __webpack_require__(197), + hasIn = __webpack_require__(68), + isKey = __webpack_require__(35), + isStrictComparable = __webpack_require__(62), + matchesStrictComparable = __webpack_require__(63), + toKey = __webpack_require__(11); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 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(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; +} + +module.exports = baseMatchesProperty; + + +/***/ }), /* 129 */ -/***/ function(module, exports, __webpack_require__) { - - var isFunction = __webpack_require__(38), - isHostObject = __webpack_require__(22), - isMasked = __webpack_require__(171), - isObject = __webpack_require__(2), - toSource = __webpack_require__(69); - - /** - * 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 = Function.prototype, - objectProto = Object.prototype; - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).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(value) || isMasked(value)) { - return false; - } - var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - - module.e = baseIsNative; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var Stack = __webpack_require__(30), + assignMergeValue = __webpack_require__(50), + baseFor = __webpack_require__(119), + baseMergeDeep = __webpack_require__(130), + isObject = __webpack_require__(2), + keysIn = __webpack_require__(40); + +/** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + if (isObject(srcValue)) { + stack || (stack = new Stack); + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(object[key], srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); +} + +module.exports = baseMerge; + + +/***/ }), /* 130 */ -/***/ function(module, exports, __webpack_require__) { - - var isLength = __webpack_require__(39), - isObjectLike = __webpack_require__(13); - - /** `Object#toString` result references. */ - var argsTag = '[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] = 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; - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** - * 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(value) && - isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; - } - - module.e = baseIsTypedArray; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var assignMergeValue = __webpack_require__(50), + cloneBuffer = __webpack_require__(142), + cloneTypedArray = __webpack_require__(143), + copyArray = __webpack_require__(144), + initCloneObject = __webpack_require__(164), + isArguments = __webpack_require__(13), + isArray = __webpack_require__(0), + isArrayLikeObject = __webpack_require__(198), + isBuffer = __webpack_require__(24), + isFunction = __webpack_require__(37), + isObject = __webpack_require__(2), + isPlainObject = __webpack_require__(200), + isTypedArray = __webpack_require__(25), + toPlainObject = __webpack_require__(207); + +/** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ +function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = object[key], + srcValue = source[key], + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); +} + +module.exports = baseMergeDeep; + + +/***/ }), /* 131 */ -/***/ function(module, exports, __webpack_require__) { - - var isPrototype = __webpack_require__(24), - nativeKeys = __webpack_require__(67); - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.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.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; - } - - module.e = baseKeys; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var basePickBy = __webpack_require__(56), + hasIn = __webpack_require__(68); + +/** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ +function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); +} + +module.exports = basePick; + + +/***/ }), /* 132 */ -/***/ function(module, exports, __webpack_require__) { - - var baseIsMatch = __webpack_require__(128), - getMatchData = __webpack_require__(156), - matchesStrictComparable = __webpack_require__(66); - - /** - * 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); - }; - } - - module.e = baseMatches; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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]; + }; +} + +module.exports = baseProperty; + + +/***/ }), /* 133 */ -/***/ function(module, exports, __webpack_require__) { - - var baseIsEqual = __webpack_require__(55), - get = __webpack_require__(192), - hasIn = __webpack_require__(193), - isKey = __webpack_require__(23), - isStrictComparable = __webpack_require__(64), - matchesStrictComparable = __webpack_require__(66), - toKey = __webpack_require__(9); - - /** Used to compose bitmasks for comparison styles. */ - var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 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(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); - }; - } - - module.e = baseMatchesProperty; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseGet = __webpack_require__(33); + +/** + * 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); + }; +} + +module.exports = basePropertyDeep; + + +/***/ }), /* 134 */ -/***/ function(module, exports, __webpack_require__) { - - var Stack = __webpack_require__(18), - arrayEach = __webpack_require__(48), - assignMergeValue = __webpack_require__(51), - baseKeysIn = __webpack_require__(57), - baseMergeDeep = __webpack_require__(135), - isArray = __webpack_require__(0), - isObject = __webpack_require__(2), - isTypedArray = __webpack_require__(41); - - /** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - if (!(isArray(source) || isTypedArray(source))) { - var props = baseKeysIn(source); - } - arrayEach(props || source, function(srcValue, key) { - if (props) { - key = srcValue; - srcValue = source[key]; - } - if (isObject(srcValue)) { - stack || (stack = new Stack); - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(object[key], srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }); - } - - module.e = baseMerge; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var identity = __webpack_require__(36), + overRest = __webpack_require__(65), + setToString = __webpack_require__(66); + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); +} + +module.exports = baseRest; + + +/***/ }), /* 135 */ -/***/ function(module, exports, __webpack_require__) { - - var assignMergeValue = __webpack_require__(51), - baseClone = __webpack_require__(122), - copyArray = __webpack_require__(61), - isArguments = __webpack_require__(11), - isArray = __webpack_require__(0), - isArrayLikeObject = __webpack_require__(70), - isFunction = __webpack_require__(38), - isObject = __webpack_require__(2), - isPlainObject = __webpack_require__(196), - isTypedArray = __webpack_require__(41), - toPlainObject = __webpack_require__(203); - - /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = object[key], - srcValue = source[key], - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - newValue = srcValue; - if (isArray(srcValue) || isTypedArray(srcValue)) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else { - isCommon = false; - newValue = baseClone(srcValue, true); - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { - isCommon = false; - newValue = baseClone(srcValue, true); - } - else { - newValue = objValue; - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); - } - - module.e = baseMergeDeep; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var assignValue = __webpack_require__(51), + castPath = __webpack_require__(19), + isIndex = __webpack_require__(21), + isObject = __webpack_require__(2), + toKey = __webpack_require__(11); + +/** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; +} + +module.exports = baseSet; + + +/***/ }), /* 136 */ -/***/ function(module, exports, __webpack_require__) { - - var basePickBy = __webpack_require__(58); - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} props The property identifiers to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, props) { - object = Object(object); - return basePickBy(object, props, function(value, key) { - return key in object; - }); - } - - module.e = basePick; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var constant = __webpack_require__(195), + defineProperty = __webpack_require__(57), + identity = __webpack_require__(36); + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); +}; + +module.exports = baseSetToString; + + +/***/ }), /* 137 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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]; - }; - } - - module.e = baseProperty; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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; +} + +module.exports = baseTimes; + + +/***/ }), /* 138 */ -/***/ function(module, exports, __webpack_require__) { - - var baseGet = __webpack_require__(53); - - /** - * 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); - }; - } - - module.e = basePropertyDeep; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(10), + arrayMap = __webpack_require__(49), + isArray = __webpack_require__(0), + isSymbol = __webpack_require__(39); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.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(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = baseToString; + + +/***/ }), /* 139 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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; - } - - module.e = baseTimes; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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); + }; +} + +module.exports = baseUnary; + + +/***/ }), /* 140 */ -/***/ function(module, exports, __webpack_require__) { - - var Symbol = __webpack_require__(19), - isSymbol = __webpack_require__(40); - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0; - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.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 (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - module.e = baseToString; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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); +} + +module.exports = cacheHas; + + +/***/ }), /* 141 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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); - }; - } - - module.e = baseUnary; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var Uint8Array = __webpack_require__(47); + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; +} + +module.exports = cloneArrayBuffer; + + +/***/ }), /* 142 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var result = new buffer.constructor(buffer.length); - buffer.copy(result); - return result; - } - - module.e = cloneBuffer; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(1); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == '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, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +module.exports = cloneBuffer; + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(41)(module))) + +/***/ }), /* 143 */ -/***/ function(module, exports, __webpack_require__) { - - var cloneArrayBuffer = __webpack_require__(31); - - /** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } - - module.e = cloneDataView; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var cloneArrayBuffer = __webpack_require__(141); + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +module.exports = cloneTypedArray; + + +/***/ }), /* 144 */ -/***/ function(module, exports, __webpack_require__) { - - var addMapEntry = __webpack_require__(116), - arrayReduce = __webpack_require__(50), - mapToArray = __webpack_require__(65); - - /** - * Creates a clone of `map`. - * - * @private - * @param {Object} map The map to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned map. - */ - function cloneMap(map, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map); - return arrayReduce(array, addMapEntry, new map.constructor); - } - - module.e = cloneMap; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +module.exports = copyArray; + + +/***/ }), /* 145 */ -/***/ function(module, exports, __webpack_require__) { - - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; - - /** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ - function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; - } - - module.e = cloneRegExp; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var assignValue = __webpack_require__(51), + baseAssignValue = __webpack_require__(32); + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; +} + +module.exports = copyObject; + + +/***/ }), /* 146 */ -/***/ function(module, exports, __webpack_require__) { - - var addSetEntry = __webpack_require__(117), - arrayReduce = __webpack_require__(50), - setToArray = __webpack_require__(68); - - /** - * Creates a clone of `set`. - * - * @private - * @param {Object} set The set to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned set. - */ - function cloneSet(set, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set); - return arrayReduce(array, addSetEntry, new set.constructor); - } - - module.e = cloneSet; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var root = __webpack_require__(1); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; + + +/***/ }), /* 147 */ -/***/ function(module, exports, __webpack_require__) { - - var Symbol = __webpack_require__(19); - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - - /** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ - function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; - } - - module.e = cloneSymbol; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseRest = __webpack_require__(134), + isIterateeCall = __webpack_require__(166); + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +module.exports = createAssigner; + + +/***/ }), /* 148 */ -/***/ function(module, exports, __webpack_require__) { - - var cloneArrayBuffer = __webpack_require__(31); - - /** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } - - module.e = cloneTypedArray; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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; + }; +} + +module.exports = createBaseFor; + + +/***/ }), /* 149 */ -/***/ function(module, exports, __webpack_require__) { - - var copyObject = __webpack_require__(32), - getSymbols = __webpack_require__(34); - - /** - * Copies own symbol properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } - - module.e = copySymbols; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(10), + Uint8Array = __webpack_require__(47), + eq = __webpack_require__(12), + equalArrays = __webpack_require__(58), + mapToArray = __webpack_require__(179), + setToArray = __webpack_require__(187); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[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: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // 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: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + 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; + + // 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; +} + +module.exports = equalByTag; + + +/***/ }), /* 150 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { + +var getAllKeys = __webpack_require__(152); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.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, + 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.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + 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; +} + +module.exports = equalObjects; + + +/***/ }), +/* 151 */ +/***/ (function(module, exports, __webpack_require__) { - var root = __webpack_require__(3); - - /** Used to detect overreaching core-js shims. */ - var coreJsData = root['__core-js_shared__']; - - module.e = coreJsData; +var flatten = __webpack_require__(196), + overRest = __webpack_require__(65), + setToString = __webpack_require__(66); +/** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); +} -/***/ }, -/* 151 */ -/***/ function(module, exports, __webpack_require__) { - - var baseRest = __webpack_require__(59), - isIterateeCall = __webpack_require__(169); - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - module.e = createAssigner; - - -/***/ }, +module.exports = flatRest; + + +/***/ }), /* 152 */ -/***/ function(module, exports, __webpack_require__) { - - var Symbol = __webpack_require__(19), - Uint8Array = __webpack_require__(47), - eq = __webpack_require__(10), - equalArrays = __webpack_require__(62), - mapToArray = __webpack_require__(65), - setToArray = __webpack_require__(68); - - /** Used to compose bitmasks for comparison styles. */ - var UNORDERED_COMPARE_FLAG = 1, - PARTIAL_COMPARE_FLAG = 2; - - /** `Object#toString` result references. */ - var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[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 {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @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, equalFunc, customizer, bitmask, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // 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: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & PARTIAL_COMPARE_FLAG; - 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 |= UNORDERED_COMPARE_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; - } - - module.e = equalByTag; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseGetAllKeys = __webpack_require__(52), + getSymbols = __webpack_require__(60), + keys = __webpack_require__(69); + +/** + * 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, getSymbols); +} + +module.exports = getAllKeys; + + +/***/ }), /* 153 */ -/***/ function(module, exports, __webpack_require__) { - - var keys = __webpack_require__(14); - - /** Used to compose bitmasks for comparison styles. */ - var PARTIAL_COMPARE_FLAG = 2; - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.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 {Function} equalFunc The function to determine equivalents of values. - * @param {Function} customizer The function to customize comparisons. - * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` - * for more details. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { - var isPartial = bitmask & PARTIAL_COMPARE_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(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.call(other, key))) { - return false; - } - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked && stack.get(other)) { - return stacked == other; - } - 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, customizer, bitmask, 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; - } - - module.e = equalObjects; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseGetAllKeys = __webpack_require__(52), + getSymbolsIn = __webpack_require__(156), + keysIn = __webpack_require__(40); + +/** + * Creates an array of own and inherited 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 getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); +} + +module.exports = getAllKeysIn; + + +/***/ }), /* 154 */ -/***/ function(module, exports, __webpack_require__) { - - var baseGetAllKeys = __webpack_require__(54), - getSymbols = __webpack_require__(34), - keys = __webpack_require__(14); - - /** - * 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, getSymbols); - } - - module.e = getAllKeys; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var isStrictComparable = __webpack_require__(62), + keys = __webpack_require__(69); + +/** + * 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(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; +} + +module.exports = getMatchData; + + +/***/ }), /* 155 */ -/***/ function(module, exports, __webpack_require__) { - - var baseGetAllKeys = __webpack_require__(54), - getSymbolsIn = __webpack_require__(157), - keysIn = __webpack_require__(72); - - /** - * Creates an array of own and inherited 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 getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } - - module.e = getAllKeysIn; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(10); + +/** 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; +} + +module.exports = getRawTag; + + +/***/ }), /* 156 */ -/***/ function(module, exports, __webpack_require__) { - - var isStrictComparable = __webpack_require__(64), - keys = __webpack_require__(14); - - /** - * 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(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; - } - - module.e = getMatchData; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var arrayPush = __webpack_require__(31), + getPrototype = __webpack_require__(34), + getSymbols = __webpack_require__(60), + stubArray = __webpack_require__(71); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; +}; + +module.exports = getSymbolsIn; + + +/***/ }), /* 157 */ -/***/ function(module, exports, __webpack_require__) { - - var arrayPush = __webpack_require__(30), - getPrototype = __webpack_require__(33), - getSymbols = __webpack_require__(34), - stubArray = __webpack_require__(74); - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeGetSymbols = Object.getOwnPropertySymbols; - - /** - * Creates an array of the own and inherited enumerable symbol properties - * of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; - }; - - module.e = getSymbolsIn; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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]; +} + +module.exports = getValue; + + +/***/ }), /* 158 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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]; - } - - module.e = getValue; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var castPath = __webpack_require__(19), + isArguments = __webpack_require__(13), + isArray = __webpack_require__(0), + isIndex = __webpack_require__(21), + isLength = __webpack_require__(38), + toKey = __webpack_require__(11); + +/** + * 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(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); +} + +module.exports = hasPath; + + +/***/ }), /* 159 */ -/***/ function(module, exports, __webpack_require__) { - - var castPath = __webpack_require__(60), - isArguments = __webpack_require__(11), - isArray = __webpack_require__(0), - isIndex = __webpack_require__(36), - isKey = __webpack_require__(23), - isLength = __webpack_require__(39), - toKey = __webpack_require__(9); - - /** - * 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 = isKey(path, object) ? [path] : castPath(path); - - var result, - index = -1, - length = path.length; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result) { - return result; - } - var length = object ? object.length : 0; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); - } - - module.e = hasPath; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(23); + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +module.exports = hashClear; + + +/***/ }), /* 160 */ -/***/ function(module, exports, __webpack_require__) { - - var nativeCreate = __webpack_require__(25); - - /** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - } - - module.e = hashClear; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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; +} + +module.exports = hashDelete; + + +/***/ }), /* 161 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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) { - return this.has(key) && delete this.__data__[key]; - } - - module.e = hashDelete; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(23); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.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.call(data, key) ? data[key] : undefined; +} + +module.exports = hashGet; + + +/***/ }), /* 162 */ -/***/ function(module, exports, __webpack_require__) { - - var nativeCreate = __webpack_require__(25); - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__'; - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.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.call(data, key) ? data[key] : undefined; - } - - module.e = hashGet; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(23); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.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.call(data, key); +} + +module.exports = hashHas; + + +/***/ }), /* 163 */ -/***/ function(module, exports, __webpack_require__) { - - var nativeCreate = __webpack_require__(25); - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.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.call(data, key); - } - - module.e = hashHas; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(23); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__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 : value; + return this; +} + +module.exports = hashSet; + + +/***/ }), /* 164 */ -/***/ function(module, exports, __webpack_require__) { - - var nativeCreate = __webpack_require__(25); - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__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__; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; - } - - module.e = hashSet; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseCreate = __webpack_require__(117), + getPrototype = __webpack_require__(34), + isPrototype = __webpack_require__(22); + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; +} + +module.exports = initCloneObject; + + +/***/ }), /* 165 */ -/***/ function(module, exports, __webpack_require__) { - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ - function initCloneArray(array) { - var length = array.length, - result = array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } - - module.e = initCloneArray; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(10), + isArguments = __webpack_require__(13), + isArray = __webpack_require__(0); + +/** Built-in value references. */ +var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +module.exports = isFlattenable; + + +/***/ }), /* 166 */ -/***/ function(module, exports, __webpack_require__) { - - var cloneArrayBuffer = __webpack_require__(31), - cloneDataView = __webpack_require__(143), - cloneMap = __webpack_require__(144), - cloneRegExp = __webpack_require__(145), - cloneSet = __webpack_require__(146), - cloneSymbol = __webpack_require__(147), - cloneTypedArray = __webpack_require__(148); - - /** `Object#toString` result references. */ - var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - - 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]'; - - /** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneByTag(object, tag, cloneFunc, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); - - case mapTag: - return cloneMap(object, isDeep, cloneFunc); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return cloneSet(object, isDeep, cloneFunc); - - case symbolTag: - return cloneSymbol(object); - } - } - - module.e = initCloneByTag; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var eq = __webpack_require__(12), + isArrayLike = __webpack_require__(14), + isIndex = __webpack_require__(21), + isObject = __webpack_require__(2); + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; +} + +module.exports = isIterateeCall; + + +/***/ }), /* 167 */ -/***/ function(module, exports, __webpack_require__) { - - var baseCreate = __webpack_require__(123), - getPrototype = __webpack_require__(33), - isPrototype = __webpack_require__(24); - - /** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; - } - - module.e = initCloneObject; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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); +} + +module.exports = isKeyable; + + +/***/ }), /* 168 */ -/***/ function(module, exports, __webpack_require__) { - - var Symbol = __webpack_require__(19), - isArguments = __webpack_require__(11), - isArray = __webpack_require__(0); - - /** Built-in value references. */ - var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); - } - - module.e = isFlattenable; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var coreJsData = __webpack_require__(146); + +/** 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); +} + +module.exports = isMasked; + + +/***/ }), /* 169 */ -/***/ function(module, exports, __webpack_require__) { - - var eq = __webpack_require__(10), - isArrayLike = __webpack_require__(12), - isIndex = __webpack_require__(36), - isObject = __webpack_require__(2); - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } - - module.e = isIterateeCall; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +module.exports = listCacheClear; + + +/***/ }), /* 170 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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); - } - - module.e = isKeyable; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(18); + +/** 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; +} + +module.exports = listCacheDelete; + + +/***/ }), /* 171 */ -/***/ function(module, exports, __webpack_require__) { - - var coreJsData = __webpack_require__(150); - - /** 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); - } - - module.e = isMasked; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(18); + +/** + * 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]; +} + +module.exports = listCacheGet; + + +/***/ }), /* 172 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ - function listCacheClear() { - this.__data__ = []; - } - - module.e = listCacheClear; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(18); + +/** + * 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; +} + +module.exports = listCacheHas; + + +/***/ }), /* 173 */ -/***/ function(module, exports, __webpack_require__) { - - var assocIndexOf = __webpack_require__(20); - - /** 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); - } - return true; - } - - module.e = listCacheDelete; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(18); + +/** + * 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; +} + +module.exports = listCacheSet; + + +/***/ }), /* 174 */ -/***/ function(module, exports, __webpack_require__) { - - var assocIndexOf = __webpack_require__(20); - - /** - * 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]; - } - - module.e = listCacheGet; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var Hash = __webpack_require__(109), + ListCache = __webpack_require__(17), + Map = __webpack_require__(28); + +/** + * 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 + }; +} + +module.exports = mapCacheClear; + + +/***/ }), /* 175 */ -/***/ function(module, exports, __webpack_require__) { - - var assocIndexOf = __webpack_require__(20); - - /** - * 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; - } - - module.e = listCacheHas; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(20); + +/** + * 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; +} + +module.exports = mapCacheDelete; + + +/***/ }), /* 176 */ -/***/ function(module, exports, __webpack_require__) { - - var assocIndexOf = __webpack_require__(20); - - /** - * 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) { - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; - } - - module.e = listCacheSet; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(20); + +/** + * 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); +} + +module.exports = mapCacheGet; + + +/***/ }), /* 177 */ -/***/ function(module, exports, __webpack_require__) { - - var Hash = __webpack_require__(111), - ListCache = __webpack_require__(17), - Map = __webpack_require__(28); - - /** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ - function mapCacheClear() { - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; - } - - module.e = mapCacheClear; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(20); + +/** + * 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); +} + +module.exports = mapCacheHas; + + +/***/ }), /* 178 */ -/***/ function(module, exports, __webpack_require__) { - - var getMapData = __webpack_require__(21); - - /** - * 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) { - return getMapData(this, key)['delete'](key); - } - - module.e = mapCacheDelete; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(20); + +/** + * 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; +} + +module.exports = mapCacheSet; + + +/***/ }), /* 179 */ -/***/ function(module, exports, __webpack_require__) { - - var getMapData = __webpack_require__(21); - - /** - * 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); - } - - module.e = mapCacheGet; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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; +} + +module.exports = mapToArray; + + +/***/ }), /* 180 */ -/***/ function(module, exports, __webpack_require__) { - - var getMapData = __webpack_require__(21); - - /** - * 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); - } - - module.e = mapCacheHas; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var memoize = __webpack_require__(201); + +/** 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(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +module.exports = memoizeCapped; + + +/***/ }), /* 181 */ -/***/ function(module, exports, __webpack_require__) { - - var getMapData = __webpack_require__(21); - - /** - * 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) { - getMapData(this, key).set(key, value); - return this; - } - - module.e = mapCacheSet; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var overArg = __webpack_require__(64); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +module.exports = nativeKeys; + + +/***/ }), /* 182 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - module.e = nativeKeysIn; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +module.exports = nativeKeysIn; + + +/***/ }), /* 183 */ -/***/ function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(63); - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == '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 { - return freeProcess && freeProcess.binding('util'); - } catch (e) {} - }()); - - module.e = nodeUtil; - - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(75)(module))) - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(59); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == '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 { + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +module.exports = nodeUtil; + +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(41)(module))) + +/***/ }), /* 184 */ -/***/ function(module, exports, __webpack_require__) { - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__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); - return this; - } - - module.e = setCacheAdd; - - -/***/ }, +/***/ (function(module, exports) { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.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.call(value); +} + +module.exports = objectToString; + + +/***/ }), /* 185 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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); - } - - module.e = setCacheHas; - - -/***/ }, +/***/ (function(module, exports) { + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__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); + return this; +} + +module.exports = setCacheAdd; + + +/***/ }), /* 186 */ -/***/ function(module, exports, __webpack_require__) { - - var ListCache = __webpack_require__(17); - - /** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ - function stackClear() { - this.__data__ = new ListCache; - } - - module.e = stackClear; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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); +} + +module.exports = setCacheHas; + + +/***/ }), /* 187 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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) { - return this.__data__['delete'](key); - } - - module.e = stackDelete; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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; +} + +module.exports = setToArray; + + +/***/ }), /* 188 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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); - } - - module.e = stackGet; - - -/***/ }, +/***/ (function(module, exports) { + +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +module.exports = shortOut; + + +/***/ }), /* 189 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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); - } - - module.e = stackHas; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var ListCache = __webpack_require__(17); + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache; + this.size = 0; +} + +module.exports = stackClear; + + +/***/ }), /* 190 */ -/***/ function(module, exports, __webpack_require__) { - - var ListCache = __webpack_require__(17), - Map = __webpack_require__(28), - MapCache = __webpack_require__(29); - - /** 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 cache = this.__data__; - if (cache instanceof ListCache) { - var pairs = cache.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - return this; - } - cache = this.__data__ = new MapCache(pairs); - } - cache.set(key, value); - return this; - } - - module.e = stackSet; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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; +} + +module.exports = stackDelete; + + +/***/ }), /* 191 */ -/***/ function(module, exports, __webpack_require__) { - - var memoize = __webpack_require__(197), - toString = __webpack_require__(204); - - /** Used to match property names within property paths. */ - var reLeadingDot = /^\./, - 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 = memoize(function(string) { - string = toString(string); - - var result = []; - if (reLeadingDot.test(string)) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - }); - - module.e = stringToPath; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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); +} + +module.exports = stackGet; + + +/***/ }), /* 192 */ -/***/ function(module, exports, __webpack_require__) { - - var baseGet = __webpack_require__(53); - - /** - * 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; - } - - module.e = get; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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); +} + +module.exports = stackHas; + + +/***/ }), /* 193 */ -/***/ function(module, exports, __webpack_require__) { - - var baseHasIn = __webpack_require__(126), - hasPath = __webpack_require__(159); - - /** - * 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); - } - - module.e = hasIn; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var ListCache = __webpack_require__(17), + Map = __webpack_require__(28), + MapCache = __webpack_require__(29); + +/** 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; +} + +module.exports = stackSet; + + +/***/ }), /* 194 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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; - } - - module.e = identity; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var memoizeCapped = __webpack_require__(180); + +/** Used to match property names within property paths. */ +var reLeadingDot = /^\./, + 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 (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +module.exports = stringToPath; + + +/***/ }), /* 195 */ -/***/ function(module, exports, __webpack_require__) { - - var getTag = __webpack_require__(35), - isArguments = __webpack_require__(11), - isArray = __webpack_require__(0), - isArrayLike = __webpack_require__(12), - isBuffer = __webpack_require__(71), - isPrototype = __webpack_require__(24), - nativeKeys = __webpack_require__(67); - - /** `Object#toString` result references. */ - var mapTag = '[object Map]', - setTag = '[object Set]'; - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Built-in value references. */ - var propertyIsEnumerable = objectProto.propertyIsEnumerable; - - /** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ - var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || - typeof value.splice == 'function' || isBuffer(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (nonEnumShadows || isPrototype(value)) { - return !nativeKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; - } - - module.e = isEmpty; - - -/***/ }, +/***/ (function(module, exports) { + +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +module.exports = constant; + + +/***/ }), /* 196 */ -/***/ function(module, exports, __webpack_require__) { - - var getPrototype = __webpack_require__(33), - isHostObject = __webpack_require__(22), - isObjectLike = __webpack_require__(13); - - /** `Object#toString` result references. */ - var objectTag = '[object Object]'; - - /** Used for built-in method references. */ - var funcProto = Function.prototype, - objectProto = Object.prototype; - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object); - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var objectToString = objectProto.toString; - - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - if (!isObjectLike(value) || - objectToString.call(value) != objectTag || isHostObject(value)) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return (typeof Ctor == 'function' && - Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); - } - - module.e = isPlainObject; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseFlatten = __webpack_require__(118); + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; +} + +module.exports = flatten; + + +/***/ }), /* 197 */ -/***/ function(module, exports, __webpack_require__) { - - var MapCache = __webpack_require__(29); - - /** Used as the `TypeError` message for "Functions" methods. */ - 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 `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 && 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); - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; - } - - // Assign cache to `_.memoize`. - memoize.Cache = MapCache; - - module.e = memoize; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseGet = __webpack_require__(33); + +/** + * 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; +} + +module.exports = get; + + +/***/ }), /* 198 */ -/***/ function(module, exports, __webpack_require__) { - - /** Used as the `TypeError` message for "Functions" methods. */ - var FUNC_ERROR_TEXT = 'Expected a function'; - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - switch (args.length) { - case 0: return !predicate.call(this); - case 1: return !predicate.call(this, args[0]); - case 2: return !predicate.call(this, args[0], args[1]); - case 3: return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; - } - - module.e = negate; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var isArrayLike = __webpack_require__(14), + isObjectLike = __webpack_require__(4); + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +module.exports = isArrayLikeObject; + + +/***/ }), /* 199 */ -/***/ function(module, exports, __webpack_require__) { - - var baseIteratee = __webpack_require__(56), - negate = __webpack_require__(198), - pickBy = __webpack_require__(200); - - /** - * The opposite of `_.pickBy`; this method creates an object composed of - * the own and inherited enumerable string keyed properties of `object` that - * `predicate` doesn't return truthy for. The predicate is invoked with two - * arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omitBy(object, _.isNumber); - * // => { 'b': '2' } - */ - function omitBy(object, predicate) { - return pickBy(object, negate(baseIteratee(predicate))); - } - - module.e = omitBy; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseKeys = __webpack_require__(55), + getTag = __webpack_require__(61), + isArguments = __webpack_require__(13), + isArray = __webpack_require__(0), + isArrayLike = __webpack_require__(14), + isBuffer = __webpack_require__(24), + isPrototype = __webpack_require__(22), + isTypedArray = __webpack_require__(25); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; +} + +module.exports = isEmpty; + + +/***/ }), /* 200 */ -/***/ function(module, exports, __webpack_require__) { - - var baseIteratee = __webpack_require__(56), - basePickBy = __webpack_require__(58), - getAllKeysIn = __webpack_require__(155); - - /** - * Creates an object composed of the `object` properties `predicate` returns - * truthy for. The predicate is invoked with two arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pickBy(object, _.isNumber); - * // => { 'a': 1, 'c': 3 } - */ - function pickBy(object, predicate) { - return object == null ? {} : basePickBy(object, getAllKeysIn(object), baseIteratee(predicate)); - } - - module.e = pickBy; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(6), + getPrototype = __webpack_require__(34), + isObjectLike = __webpack_require__(4); + +/** `Object#toString` result references. */ +var objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to infer the `Object` constructor. */ +var objectCtorString = funcToString.call(Object); + +/** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ +function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; +} + +module.exports = isPlainObject; + + +/***/ }), /* 201 */ -/***/ function(module, exports, __webpack_require__) { - - var baseProperty = __webpack_require__(137), - basePropertyDeep = __webpack_require__(138), - isKey = __webpack_require__(23), - toKey = __webpack_require__(9); - - /** - * 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); - } - - module.e = property; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var MapCache = __webpack_require__(29); + +/** 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; + +module.exports = memoize; + + +/***/ }), /* 202 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * 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; - } - - module.e = stubFalse; - - -/***/ }, +/***/ (function(module, exports) { + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ +function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; +} + +module.exports = negate; + + +/***/ }), /* 203 */ -/***/ function(module, exports, __webpack_require__) { - - var copyObject = __webpack_require__(32), - keysIn = __webpack_require__(72); - - /** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - - module.e = toPlainObject; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseIteratee = __webpack_require__(54), + negate = __webpack_require__(202), + pickBy = __webpack_require__(204); + +/** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ +function omitBy(object, predicate) { + return pickBy(object, negate(baseIteratee(predicate))); +} + +module.exports = omitBy; + + +/***/ }), /* 204 */ -/***/ function(module, exports, __webpack_require__) { - - var baseToString = __webpack_require__(140); - - /** - * 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 process. - * @returns {string} Returns the string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } - - module.e = toString; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var arrayMap = __webpack_require__(49), + baseIteratee = __webpack_require__(54), + basePickBy = __webpack_require__(56), + getAllKeysIn = __webpack_require__(153); + +/** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ +function pickBy(object, predicate) { + if (object == null) { + return {}; + } + var props = arrayMap(getAllKeysIn(object), function(prop) { + return [prop]; + }); + predicate = baseIteratee(predicate); + return basePickBy(object, props, function(value, path) { + return predicate(value, path[0]); + }); +} + +module.exports = pickBy; + + +/***/ }), /* 205 */ -/***/ function(module, exports, __webpack_require__) { - - /* eslint-env node */ - 'use strict'; - - // SDP helpers. - var SDPUtils = {}; - - // Generate an alphanumeric identifier for cname or mids. - // TODO: use UUIDs instead? https://gist.github.com/jed/982883 - SDPUtils.generateIdentifier = function() { - return Math.random().toString(36).substr(2, 10); - }; - - // The RTCP CNAME used by all peerconnections from the same JS. - SDPUtils.localCName = SDPUtils.generateIdentifier(); - - // Splits SDP into lines, dealing with both CRLF and LF. - SDPUtils.splitLines = function(blob) { - return blob.trim().split('\n').map(function(line) { - return line.trim(); - }); - }; - // Splits SDP into sessionpart and mediasections. Ensures CRLF. - SDPUtils.splitSections = function(blob) { - var parts = blob.split('\nm='); - return parts.map(function(part, index) { - return (index > 0 ? 'm=' + part : part).trim() + '\r\n'; - }); - }; - - // Returns lines that start with a certain prefix. - SDPUtils.matchPrefix = function(blob, prefix) { - return SDPUtils.splitLines(blob).filter(function(line) { - return line.indexOf(prefix) === 0; - }); - }; - - // Parses an ICE candidate line. Sample input: - // candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8 - // rport 55996" - SDPUtils.parseCandidate = function(line) { - var parts; - // Parse both variants. - if (line.indexOf('a=candidate:') === 0) { - parts = line.substring(12).split(' '); - } else { - parts = line.substring(10).split(' '); - } - - var candidate = { - foundation: parts[0], - component: parts[1], - protocol: parts[2].toLowerCase(), - priority: parseInt(parts[3], 10), - ip: parts[4], - port: parseInt(parts[5], 10), - // skip parts[6] == 'typ' - type: parts[7] - }; - - for (var i = 8; i < parts.length; i += 2) { - switch (parts[i]) { - case 'raddr': - candidate.relatedAddress = parts[i + 1]; - break; - case 'rport': - candidate.relatedPort = parseInt(parts[i + 1], 10); - break; - case 'tcptype': - candidate.tcpType = parts[i + 1]; - break; - default: // Unknown extensions are silently ignored. - break; - } - } - return candidate; - }; - - // Translates a candidate object into SDP candidate attribute. - SDPUtils.writeCandidate = function(candidate) { - var sdp = []; - sdp.push(candidate.foundation); - sdp.push(candidate.component); - sdp.push(candidate.protocol.toUpperCase()); - sdp.push(candidate.priority); - sdp.push(candidate.ip); - sdp.push(candidate.port); - - var type = candidate.type; - sdp.push('typ'); - sdp.push(type); - if (type !== 'host' && candidate.relatedAddress && - candidate.relatedPort) { - sdp.push('raddr'); - sdp.push(candidate.relatedAddress); // was: relAddr - sdp.push('rport'); - sdp.push(candidate.relatedPort); // was: relPort - } - if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') { - sdp.push('tcptype'); - sdp.push(candidate.tcpType); - } - return 'candidate:' + sdp.join(' '); - }; - - // Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input: - // a=rtpmap:111 opus/48000/2 - SDPUtils.parseRtpMap = function(line) { - var parts = line.substr(9).split(' '); - var parsed = { - payloadType: parseInt(parts.shift(), 10) // was: id - }; - - parts = parts[0].split('/'); - - parsed.name = parts[0]; - parsed.clockRate = parseInt(parts[1], 10); // was: clockrate - // was: channels - parsed.numChannels = parts.length === 3 ? parseInt(parts[2], 10) : 1; - return parsed; - }; - - // Generate an a=rtpmap line from RTCRtpCodecCapability or - // RTCRtpCodecParameters. - SDPUtils.writeRtpMap = function(codec) { - var pt = codec.payloadType; - if (codec.preferredPayloadType !== undefined) { - pt = codec.preferredPayloadType; - } - return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + - (codec.numChannels !== 1 ? '/' + codec.numChannels : '') + '\r\n'; - }; - - // Parses an a=extmap line (headerextension from RFC 5285). Sample input: - // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset - SDPUtils.parseExtmap = function(line) { - var parts = line.substr(9).split(' '); - return { - id: parseInt(parts[0], 10), - uri: parts[1] - }; - }; - - // Generates a=extmap line from RTCRtpHeaderExtensionParameters or - // RTCRtpHeaderExtension. - SDPUtils.writeExtmap = function(headerExtension) { - return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + - ' ' + headerExtension.uri + '\r\n'; - }; - - // Parses an ftmp line, returns dictionary. Sample input: - // a=fmtp:96 vbr=on;cng=on - // Also deals with vbr=on; cng=on - SDPUtils.parseFmtp = function(line) { - var parsed = {}; - var kv; - var parts = line.substr(line.indexOf(' ') + 1).split(';'); - for (var j = 0; j < parts.length; j++) { - kv = parts[j].trim().split('='); - parsed[kv[0].trim()] = kv[1]; - } - return parsed; - }; - - // Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters. - SDPUtils.writeFmtp = function(codec) { - var line = ''; - var pt = codec.payloadType; - if (codec.preferredPayloadType !== undefined) { - pt = codec.preferredPayloadType; - } - if (codec.parameters && Object.keys(codec.parameters).length) { - var params = []; - Object.keys(codec.parameters).forEach(function(param) { - params.push(param + '=' + codec.parameters[param]); - }); - line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\r\n'; - } - return line; - }; - - // Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input: - // a=rtcp-fb:98 nack rpsi - SDPUtils.parseRtcpFb = function(line) { - var parts = line.substr(line.indexOf(' ') + 1).split(' '); - return { - type: parts.shift(), - parameter: parts.join(' ') - }; - }; - // Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters. - SDPUtils.writeRtcpFb = function(codec) { - var lines = ''; - var pt = codec.payloadType; - if (codec.preferredPayloadType !== undefined) { - pt = codec.preferredPayloadType; - } - if (codec.rtcpFeedback && codec.rtcpFeedback.length) { - // FIXME: special handling for trr-int? - codec.rtcpFeedback.forEach(function(fb) { - lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + - (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + - '\r\n'; - }); - } - return lines; - }; - - // Parses an RFC 5576 ssrc media attribute. Sample input: - // a=ssrc:3735928559 cname:something - SDPUtils.parseSsrcMedia = function(line) { - var sp = line.indexOf(' '); - var parts = { - ssrc: parseInt(line.substr(7, sp - 7), 10) - }; - var colon = line.indexOf(':', sp); - if (colon > -1) { - parts.attribute = line.substr(sp + 1, colon - sp - 1); - parts.value = line.substr(colon + 1); - } else { - parts.attribute = line.substr(sp + 1); - } - return parts; - }; - - // Extracts DTLS parameters from SDP media section or sessionpart. - // FIXME: for consistency with other functions this should only - // get the fingerprint line as input. See also getIceParameters. - SDPUtils.getDtlsParameters = function(mediaSection, sessionpart) { - var lines = SDPUtils.splitLines(mediaSection); - // Search in session part, too. - lines = lines.concat(SDPUtils.splitLines(sessionpart)); - var fpLine = lines.filter(function(line) { - return line.indexOf('a=fingerprint:') === 0; - })[0].substr(14); - // Note: a=setup line is ignored since we use the 'auto' role. - var dtlsParameters = { - role: 'auto', - fingerprints: [{ - algorithm: fpLine.split(' ')[0], - value: fpLine.split(' ')[1] - }] - }; - return dtlsParameters; - }; - - // Serializes DTLS parameters to SDP. - SDPUtils.writeDtlsParameters = function(params, setupType) { - var sdp = 'a=setup:' + setupType + '\r\n'; - params.fingerprints.forEach(function(fp) { - sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\r\n'; - }); - return sdp; - }; - // Parses ICE information from SDP media section or sessionpart. - // FIXME: for consistency with other functions this should only - // get the ice-ufrag and ice-pwd lines as input. - SDPUtils.getIceParameters = function(mediaSection, sessionpart) { - var lines = SDPUtils.splitLines(mediaSection); - // Search in session part, too. - lines = lines.concat(SDPUtils.splitLines(sessionpart)); - var iceParameters = { - usernameFragment: lines.filter(function(line) { - return line.indexOf('a=ice-ufrag:') === 0; - })[0].substr(12), - password: lines.filter(function(line) { - return line.indexOf('a=ice-pwd:') === 0; - })[0].substr(10) - }; - return iceParameters; - }; - - // Serializes ICE parameters to SDP. - SDPUtils.writeIceParameters = function(params) { - return 'a=ice-ufrag:' + params.usernameFragment + '\r\n' + - 'a=ice-pwd:' + params.password + '\r\n'; - }; - - // Parses the SDP media section and returns RTCRtpParameters. - SDPUtils.parseRtpParameters = function(mediaSection) { - var description = { - codecs: [], - headerExtensions: [], - fecMechanisms: [], - rtcp: [] - }; - var lines = SDPUtils.splitLines(mediaSection); - var mline = lines[0].split(' '); - for (var i = 3; i < mline.length; i++) { // find all codecs from mline[3..] - var pt = mline[i]; - var rtpmapline = SDPUtils.matchPrefix( - mediaSection, 'a=rtpmap:' + pt + ' ')[0]; - if (rtpmapline) { - var codec = SDPUtils.parseRtpMap(rtpmapline); - var fmtps = SDPUtils.matchPrefix( - mediaSection, 'a=fmtp:' + pt + ' '); - // Only the first a=fmtp: is considered. - codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {}; - codec.rtcpFeedback = SDPUtils.matchPrefix( - mediaSection, 'a=rtcp-fb:' + pt + ' ') - .map(SDPUtils.parseRtcpFb); - description.codecs.push(codec); - // parse FEC mechanisms from rtpmap lines. - switch (codec.name.toUpperCase()) { - case 'RED': - case 'ULPFEC': - description.fecMechanisms.push(codec.name.toUpperCase()); - break; - default: // only RED and ULPFEC are recognized as FEC mechanisms. - break; - } - } - } - SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function(line) { - description.headerExtensions.push(SDPUtils.parseExtmap(line)); - }); - // FIXME: parse rtcp. - return description; - }; - - // Generates parts of the SDP media section describing the capabilities / - // parameters. - SDPUtils.writeRtpDescription = function(kind, caps) { - var sdp = ''; - - // Build the mline. - sdp += 'm=' + kind + ' '; - sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs. - sdp += ' UDP/TLS/RTP/SAVPF '; - sdp += caps.codecs.map(function(codec) { - if (codec.preferredPayloadType !== undefined) { - return codec.preferredPayloadType; - } - return codec.payloadType; - }).join(' ') + '\r\n'; - - sdp += 'c=IN IP4 0.0.0.0\r\n'; - sdp += 'a=rtcp:9 IN IP4 0.0.0.0\r\n'; - - // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb. - caps.codecs.forEach(function(codec) { - sdp += SDPUtils.writeRtpMap(codec); - sdp += SDPUtils.writeFmtp(codec); - sdp += SDPUtils.writeRtcpFb(codec); - }); - // FIXME: add headerExtensions, fecMechanismş and rtcp. - sdp += 'a=rtcp-mux\r\n'; - return sdp; - }; - - // Parses the SDP media section and returns an array of - // RTCRtpEncodingParameters. - SDPUtils.parseRtpEncodingParameters = function(mediaSection) { - var encodingParameters = []; - var description = SDPUtils.parseRtpParameters(mediaSection); - var hasRed = description.fecMechanisms.indexOf('RED') !== -1; - var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1; - - // filter a=ssrc:... cname:, ignore PlanB-msid - var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') - .map(function(line) { - return SDPUtils.parseSsrcMedia(line); - }) - .filter(function(parts) { - return parts.attribute === 'cname'; - }); - var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc; - var secondarySsrc; - - var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID') - .map(function(line) { - var parts = line.split(' '); - parts.shift(); - return parts.map(function(part) { - return parseInt(part, 10); - }); - }); - if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) { - secondarySsrc = flows[0][1]; - } - - description.codecs.forEach(function(codec) { - if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) { - var encParam = { - ssrc: primarySsrc, - codecPayloadType: parseInt(codec.parameters.apt, 10), - rtx: { - payloadType: codec.payloadType, - ssrc: secondarySsrc - } - }; - encodingParameters.push(encParam); - if (hasRed) { - encParam = JSON.parse(JSON.stringify(encParam)); - encParam.fec = { - ssrc: secondarySsrc, - mechanism: hasUlpfec ? 'red+ulpfec' : 'red' - }; - encodingParameters.push(encParam); - } - } - }); - if (encodingParameters.length === 0 && primarySsrc) { - encodingParameters.push({ - ssrc: primarySsrc - }); - } - - // we support both b=AS and b=TIAS but interpret AS as TIAS. - var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b='); - if (bandwidth.length) { - if (bandwidth[0].indexOf('b=TIAS:') === 0) { - bandwidth = parseInt(bandwidth[0].substr(7), 10); - } else if (bandwidth[0].indexOf('b=AS:') === 0) { - bandwidth = parseInt(bandwidth[0].substr(5), 10); - } - encodingParameters.forEach(function(params) { - params.maxBitrate = bandwidth; - }); - } - return encodingParameters; - }; - - SDPUtils.writeSessionBoilerplate = function() { - // FIXME: sess-id should be an NTP timestamp. - return 'v=0\r\n' + - 'o=thisisadapterortc 8169639915646943137 2 IN IP4 127.0.0.1\r\n' + - 's=-\r\n' + - 't=0 0\r\n'; - }; - - SDPUtils.writeMediaSection = function(transceiver, caps, type, stream) { - var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps); - - // Map ICE parameters (ufrag, pwd) to SDP. - sdp += SDPUtils.writeIceParameters( - transceiver.iceGatherer.getLocalParameters()); - - // Map DTLS parameters to SDP. - sdp += SDPUtils.writeDtlsParameters( - transceiver.dtlsTransport.getLocalParameters(), - type === 'offer' ? 'actpass' : 'active'); - - sdp += 'a=mid:' + transceiver.mid + '\r\n'; - - if (transceiver.rtpSender && transceiver.rtpReceiver) { - sdp += 'a=sendrecv\r\n'; - } else if (transceiver.rtpSender) { - sdp += 'a=sendonly\r\n'; - } else if (transceiver.rtpReceiver) { - sdp += 'a=recvonly\r\n'; - } else { - sdp += 'a=inactive\r\n'; - } - - // FIXME: for RTX there might be multiple SSRCs. Not implemented in Edge yet. - if (transceiver.rtpSender) { - var msid = 'msid:' + stream.id + ' ' + - transceiver.rtpSender.track.id + '\r\n'; - sdp += 'a=' + msid; - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + - ' ' + msid; - } - // FIXME: this should be written by writeRtpDescription. - sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc + - ' cname:' + SDPUtils.localCName + '\r\n'; - return sdp; - }; - - // Gets the direction from the mediaSection or the sessionpart. - SDPUtils.getDirection = function(mediaSection, sessionpart) { - // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv. - var lines = SDPUtils.splitLines(mediaSection); - for (var i = 0; i < lines.length; i++) { - switch (lines[i]) { - case 'a=sendrecv': - case 'a=sendonly': - case 'a=recvonly': - case 'a=inactive': - return lines[i].substr(2); - default: - // FIXME: What should happen here? - } - } - if (sessionpart) { - return SDPUtils.getDirection(sessionpart); - } - return 'sendrecv'; - }; - - // Expose public methods. - module.e = SDPUtils; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseProperty = __webpack_require__(132), + basePropertyDeep = __webpack_require__(133), + isKey = __webpack_require__(35), + toKey = __webpack_require__(11); + +/** + * 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); +} + +module.exports = property; + + +/***/ }), /* 206 */ -/***/ function(module, exports, __webpack_require__) { - - /* - * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ - /* eslint-env node */ - - 'use strict'; - - // Shimming starts here. - (function() { - // Utils. - var logging = __webpack_require__(1).log; - var browserDetails = __webpack_require__(1).browserDetails; - // Export to the adapter global object visible in the browser. - module.e.browserDetails = browserDetails; - module.e.extractVersion = __webpack_require__(1).extractVersion; - module.e.disableLog = __webpack_require__(1).disableLog; - - // Uncomment the line below if you want logging to occur, including logging - // for the switch statement below. Can also be turned on in the browser via - // adapter.disableLog(false), but then logging from the switch statement below - // will not appear. - // require('./utils').disableLog(false); - - // Browser shims. - var chromeShim = __webpack_require__(207) || null; - var edgeShim = __webpack_require__(209) || null; - var firefoxShim = __webpack_require__(211) || null; - var safariShim = __webpack_require__(213) || null; - - // Shim browser if found. - switch (browserDetails.browser) { - case 'opera': // fallthrough as it uses chrome shims - case 'chrome': - if (!chromeShim || !chromeShim.shimPeerConnection) { - logging('Chrome shim is not included in this adapter release.'); - return; - } - logging('adapter.js shimming chrome.'); - // Export to the adapter global object visible in the browser. - module.e.browserShim = chromeShim; - - chromeShim.shimGetUserMedia(); - chromeShim.shimMediaStream(); - chromeShim.shimSourceObject(); - chromeShim.shimPeerConnection(); - chromeShim.shimOnTrack(); - break; - case 'firefox': - if (!firefoxShim || !firefoxShim.shimPeerConnection) { - logging('Firefox shim is not included in this adapter release.'); - return; - } - logging('adapter.js shimming firefox.'); - // Export to the adapter global object visible in the browser. - module.e.browserShim = firefoxShim; - - firefoxShim.shimGetUserMedia(); - firefoxShim.shimSourceObject(); - firefoxShim.shimPeerConnection(); - firefoxShim.shimOnTrack(); - break; - case 'edge': - if (!edgeShim || !edgeShim.shimPeerConnection) { - logging('MS edge shim is not included in this adapter release.'); - return; - } - logging('adapter.js shimming edge.'); - // Export to the adapter global object visible in the browser. - module.e.browserShim = edgeShim; - - edgeShim.shimGetUserMedia(); - edgeShim.shimPeerConnection(); - break; - case 'safari': - if (!safariShim) { - logging('Safari shim is not included in this adapter release.'); - return; - } - logging('adapter.js shimming safari.'); - // Export to the adapter global object visible in the browser. - module.e.browserShim = safariShim; - - safariShim.shimGetUserMedia(); - break; - default: - logging('Unsupported browser!'); - } - })(); - - -/***/ }, +/***/ (function(module, exports) { + +/** + * 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; +} + +module.exports = stubFalse; + + +/***/ }), /* 207 */ -/***/ function(module, exports, __webpack_require__) { - - - /* - * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ - /* eslint-env node */ - 'use strict'; - var logging = __webpack_require__(1).log; - var browserDetails = __webpack_require__(1).browserDetails; - - var chromeShim = { - shimMediaStream: function() { - window.MediaStream = window.MediaStream || window.webkitMediaStream; - }, - - shimOnTrack: function() { - if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in - window.RTCPeerConnection.prototype)) { - Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', { - get: function() { - return this._ontrack; - }, - set: function(f) { - var self = this; - if (this._ontrack) { - this.removeEventListener('track', this._ontrack); - this.removeEventListener('addstream', this._ontrackpoly); - } - this.addEventListener('track', this._ontrack = f); - this.addEventListener('addstream', this._ontrackpoly = function(e) { - // onaddstream does not fire when a track is added to an existing - // stream. But stream.onaddtrack is implemented so we use that. - e.stream.addEventListener('addtrack', function(te) { - var event = new Event('track'); - event.track = te.track; - event.receiver = {track: te.track}; - event.streams = [e.stream]; - self.dispatchEvent(event); - }); - e.stream.getTracks().forEach(function(track) { - var event = new Event('track'); - event.track = track; - event.receiver = {track: track}; - event.streams = [e.stream]; - this.dispatchEvent(event); - }.bind(this)); - }.bind(this)); - } - }); - } - }, - - shimSourceObject: function() { - if (typeof window === 'object') { - if (window.HTMLMediaElement && - !('srcObject' in window.HTMLMediaElement.prototype)) { - // Shim the srcObject property, once, when HTMLMediaElement is found. - Object.defineProperty(window.HTMLMediaElement.prototype, 'srcObject', { - get: function() { - return this._srcObject; - }, - set: function(stream) { - var self = this; - // Use _srcObject as a private property for this shim - this._srcObject = stream; - if (this.src) { - URL.revokeObjectURL(this.src); - } - - if (!stream) { - this.src = ''; - return; - } - this.src = URL.createObjectURL(stream); - // We need to recreate the blob url when a track is added or - // removed. Doing it manually since we want to avoid a recursion. - stream.addEventListener('addtrack', function() { - if (self.src) { - URL.revokeObjectURL(self.src); - } - self.src = URL.createObjectURL(stream); - }); - stream.addEventListener('removetrack', function() { - if (self.src) { - URL.revokeObjectURL(self.src); - } - self.src = URL.createObjectURL(stream); - }); - } - }); - } - } - }, - - shimPeerConnection: function() { - // The RTCPeerConnection object. - window.RTCPeerConnection = function(pcConfig, pcConstraints) { - // Translate iceTransportPolicy to iceTransports, - // see https://code.google.com/p/webrtc/issues/detail?id=4869 - logging('PeerConnection'); - if (pcConfig && pcConfig.iceTransportPolicy) { - pcConfig.iceTransports = pcConfig.iceTransportPolicy; - } - - var pc = new webkitRTCPeerConnection(pcConfig, pcConstraints); - var origGetStats = pc.getStats.bind(pc); - pc.getStats = function(selector, successCallback, errorCallback) { - var self = this; - var args = arguments; - - // If selector is a function then we are in the old style stats so just - // pass back the original getStats format to avoid breaking old users. - if (arguments.length > 0 && typeof selector === 'function') { - return origGetStats(selector, successCallback); - } - - var fixChromeStats_ = function(response) { - var standardReport = {}; - var reports = response.result(); - reports.forEach(function(report) { - var standardStats = { - id: report.id, - timestamp: report.timestamp, - type: report.type - }; - report.names().forEach(function(name) { - standardStats[name] = report.stat(name); - }); - standardReport[standardStats.id] = standardStats; - }); - - return standardReport; - }; - - // shim getStats with maplike support - var makeMapStats = function(stats, legacyStats) { - var map = new Map(Object.keys(stats).map(function(key) { - return[key, stats[key]]; - })); - legacyStats = legacyStats || stats; - Object.keys(legacyStats).forEach(function(key) { - map[key] = legacyStats[key]; - }); - return map; - }; - - if (arguments.length >= 2) { - var successCallbackWrapper_ = function(response) { - args[1](makeMapStats(fixChromeStats_(response))); - }; - - return origGetStats.apply(this, [successCallbackWrapper_, - arguments[0]]); - } - - // promise-support - return new Promise(function(resolve, reject) { - if (args.length === 1 && typeof selector === 'object') { - origGetStats.apply(self, [ - function(response) { - resolve(makeMapStats(fixChromeStats_(response))); - }, reject]); - } else { - // Preserve legacy chrome stats only on legacy access of stats obj - origGetStats.apply(self, [ - function(response) { - resolve(makeMapStats(fixChromeStats_(response), - response.result())); - }, reject]); - } - }).then(successCallback, errorCallback); - }; - - return pc; - }; - window.RTCPeerConnection.prototype = webkitRTCPeerConnection.prototype; - - // wrap static methods. Currently just generateCertificate. - if (webkitRTCPeerConnection.generateCertificate) { - Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', { - get: function() { - return webkitRTCPeerConnection.generateCertificate; - } - }); - } - - ['createOffer', 'createAnswer'].forEach(function(method) { - var nativeMethod = webkitRTCPeerConnection.prototype[method]; - webkitRTCPeerConnection.prototype[method] = function() { - var self = this; - if (arguments.length < 1 || (arguments.length === 1 && - typeof arguments[0] === 'object')) { - var opts = arguments.length === 1 ? arguments[0] : undefined; - return new Promise(function(resolve, reject) { - nativeMethod.apply(self, [resolve, reject, opts]); - }); - } - return nativeMethod.apply(this, arguments); - }; - }); - - // add promise support -- natively available in Chrome 51 - if (browserDetails.version < 51) { - ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'] - .forEach(function(method) { - var nativeMethod = webkitRTCPeerConnection.prototype[method]; - webkitRTCPeerConnection.prototype[method] = function() { - var args = arguments; - var self = this; - var promise = new Promise(function(resolve, reject) { - nativeMethod.apply(self, [args[0], resolve, reject]); - }); - if (args.length < 2) { - return promise; - } - return promise.then(function() { - args[1].apply(null, []); - }, - function(err) { - if (args.length >= 3) { - args[2].apply(null, [err]); - } - }); - }; - }); - } - - // shim implicit creation of RTCSessionDescription/RTCIceCandidate - ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'] - .forEach(function(method) { - var nativeMethod = webkitRTCPeerConnection.prototype[method]; - webkitRTCPeerConnection.prototype[method] = function() { - arguments[0] = new ((method === 'addIceCandidate') ? - RTCIceCandidate : RTCSessionDescription)(arguments[0]); - return nativeMethod.apply(this, arguments); - }; - }); - - // support for addIceCandidate(null) - var nativeAddIceCandidate = - RTCPeerConnection.prototype.addIceCandidate; - RTCPeerConnection.prototype.addIceCandidate = function() { - return arguments[0] === null ? Promise.resolve() - : nativeAddIceCandidate.apply(this, arguments); - }; - } - }; - - - // Expose public methods. - module.e = { - shimMediaStream: chromeShim.shimMediaStream, - shimOnTrack: chromeShim.shimOnTrack, - shimSourceObject: chromeShim.shimSourceObject, - shimPeerConnection: chromeShim.shimPeerConnection, - shimGetUserMedia: __webpack_require__(208) - }; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var copyObject = __webpack_require__(145), + keysIn = __webpack_require__(40); + +/** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ +function toPlainObject(value) { + return copyObject(value, keysIn(value)); +} + +module.exports = toPlainObject; + + +/***/ }), /* 208 */ -/***/ function(module, exports, __webpack_require__) { - - /* - * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ - /* eslint-env node */ - 'use strict'; - var logging = __webpack_require__(1).log; - - // Expose public methods. - module.e = function() { - var constraintsToChrome_ = function(c) { - if (typeof c !== 'object' || c.mandatory || c.optional) { - return c; - } - var cc = {}; - Object.keys(c).forEach(function(key) { - if (key === 'require' || key === 'advanced' || key === 'mediaSource') { - return; - } - var r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]}; - if (r.exact !== undefined && typeof r.exact === 'number') { - r.min = r.max = r.exact; - } - var oldname_ = function(prefix, name) { - if (prefix) { - return prefix + name.charAt(0).toUpperCase() + name.slice(1); - } - return (name === 'deviceId') ? 'sourceId' : name; - }; - if (r.ideal !== undefined) { - cc.optional = cc.optional || []; - var oc = {}; - if (typeof r.ideal === 'number') { - oc[oldname_('min', key)] = r.ideal; - cc.optional.push(oc); - oc = {}; - oc[oldname_('max', key)] = r.ideal; - cc.optional.push(oc); - } else { - oc[oldname_('', key)] = r.ideal; - cc.optional.push(oc); - } - } - if (r.exact !== undefined && typeof r.exact !== 'number') { - cc.mandatory = cc.mandatory || {}; - cc.mandatory[oldname_('', key)] = r.exact; - } else { - ['min', 'max'].forEach(function(mix) { - if (r[mix] !== undefined) { - cc.mandatory = cc.mandatory || {}; - cc.mandatory[oldname_(mix, key)] = r[mix]; - } - }); - } - }); - if (c.advanced) { - cc.optional = (cc.optional || []).concat(c.advanced); - } - return cc; - }; - - var shimConstraints_ = function(constraints, func) { - constraints = JSON.parse(JSON.stringify(constraints)); - if (constraints && constraints.audio) { - constraints.audio = constraintsToChrome_(constraints.audio); - } - if (constraints && typeof constraints.video === 'object') { - // Shim facingMode for mobile, where it defaults to "user". - var face = constraints.video.facingMode; - face = face && ((typeof face === 'object') ? face : {ideal: face}); - - if ((face && (face.exact === 'user' || face.exact === 'environment' || - face.ideal === 'user' || face.ideal === 'environment')) && - !(navigator.mediaDevices.getSupportedConstraints && - navigator.mediaDevices.getSupportedConstraints().facingMode)) { - delete constraints.video.facingMode; - if (face.exact === 'environment' || face.ideal === 'environment') { - // Look for "back" in label, or use last cam (typically back cam). - return navigator.mediaDevices.enumerateDevices() - .then(function(devices) { - devices = devices.filter(function(d) { - return d.kind === 'videoinput'; - }); - var back = devices.find(function(d) { - return d.label.toLowerCase().indexOf('back') !== -1; - }) || (devices.length && devices[devices.length - 1]); - if (back) { - constraints.video.deviceId = face.exact ? {exact: back.deviceId} : - {ideal: back.deviceId}; - } - constraints.video = constraintsToChrome_(constraints.video); - logging('chrome: ' + JSON.stringify(constraints)); - return func(constraints); - }); - } - } - constraints.video = constraintsToChrome_(constraints.video); - } - logging('chrome: ' + JSON.stringify(constraints)); - return func(constraints); - }; - - var shimError_ = function(e) { - return { - name: { - PermissionDeniedError: 'NotAllowedError', - ConstraintNotSatisfiedError: 'OverconstrainedError' - }[e.name] || e.name, - message: e.message, - constraint: e.constraintName, - toString: function() { - return this.name + (this.message && ': ') + this.message; - } - }; - }; - - var getUserMedia_ = function(constraints, onSuccess, onError) { - shimConstraints_(constraints, function(c) { - navigator.webkitGetUserMedia(c, onSuccess, function(e) { - onError(shimError_(e)); - }); - }); - }; - - navigator.getUserMedia = getUserMedia_; - - // Returns the result of getUserMedia as a Promise. - var getUserMediaPromise_ = function(constraints) { - return new Promise(function(resolve, reject) { - navigator.getUserMedia(constraints, resolve, reject); - }); - }; - - if (!navigator.mediaDevices) { - navigator.mediaDevices = { - getUserMedia: getUserMediaPromise_, - enumerateDevices: function() { - return new Promise(function(resolve) { - var kinds = {audio: 'audioinput', video: 'videoinput'}; - return MediaStreamTrack.getSources(function(devices) { - resolve(devices.map(function(device) { - return {label: device.label, - kind: kinds[device.kind], - deviceId: device.id, - groupId: ''}; - })); - }); - }); - } - }; - } - - // A shim for getUserMedia method on the mediaDevices object. - // TODO(KaptenJansson) remove once implemented in Chrome stable. - if (!navigator.mediaDevices.getUserMedia) { - navigator.mediaDevices.getUserMedia = function(constraints) { - return getUserMediaPromise_(constraints); - }; - } else { - // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia - // function which returns a Promise, it does not accept spec-style - // constraints. - var origGetUserMedia = navigator.mediaDevices.getUserMedia. - bind(navigator.mediaDevices); - navigator.mediaDevices.getUserMedia = function(cs) { - return shimConstraints_(cs, function(c) { - return origGetUserMedia(c).catch(function(e) { - return Promise.reject(shimError_(e)); - }); - }); - }; - } - - // Dummy devicechange event methods. - // TODO(KaptenJansson) remove once implemented in Chrome stable. - if (typeof navigator.mediaDevices.addEventListener === 'undefined') { - navigator.mediaDevices.addEventListener = function() { - logging('Dummy mediaDevices.addEventListener called.'); - }; - } - if (typeof navigator.mediaDevices.removeEventListener === 'undefined') { - navigator.mediaDevices.removeEventListener = function() { - logging('Dummy mediaDevices.removeEventListener called.'); - }; - } - }; - - -/***/ }, +/***/ (function(module, exports, __webpack_require__) { + +var baseToString = __webpack_require__(138); + +/** + * 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); +} + +module.exports = toString; + + +/***/ }), /* 209 */ -/***/ function(module, exports, __webpack_require__) { - - /* - * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ - /* eslint-env node */ - 'use strict'; - - var SDPUtils = __webpack_require__(205); - var browserDetails = __webpack_require__(1).browserDetails; - - var edgeShim = { - shimPeerConnection: function() { - if (window.RTCIceGatherer) { - // ORTC defines an RTCIceCandidate object but no constructor. - // Not implemented in Edge. - if (!window.RTCIceCandidate) { - window.RTCIceCandidate = function(args) { - return args; - }; - } - // ORTC does not have a session description object but - // other browsers (i.e. Chrome) that will support both PC and ORTC - // in the future might have this defined already. - if (!window.RTCSessionDescription) { - window.RTCSessionDescription = function(args) { - return args; - }; - } - } - - window.RTCPeerConnection = function(config) { - var self = this; - - var _eventTarget = document.createDocumentFragment(); - ['addEventListener', 'removeEventListener', 'dispatchEvent'] - .forEach(function(method) { - self[method] = _eventTarget[method].bind(_eventTarget); - }); - - this.onicecandidate = null; - this.onaddstream = null; - this.ontrack = null; - this.onremovestream = null; - this.onsignalingstatechange = null; - this.oniceconnectionstatechange = null; - this.onnegotiationneeded = null; - this.ondatachannel = null; - - this.localStreams = []; - this.remoteStreams = []; - this.getLocalStreams = function() { - return self.localStreams; - }; - this.getRemoteStreams = function() { - return self.remoteStreams; - }; - - this.localDescription = new RTCSessionDescription({ - type: '', - sdp: '' - }); - this.remoteDescription = new RTCSessionDescription({ - type: '', - sdp: '' - }); - this.signalingState = 'stable'; - this.iceConnectionState = 'new'; - this.iceGatheringState = 'new'; - - this.iceOptions = { - gatherPolicy: 'all', - iceServers: [] - }; - if (config && config.iceTransportPolicy) { - switch (config.iceTransportPolicy) { - case 'all': - case 'relay': - this.iceOptions.gatherPolicy = config.iceTransportPolicy; - break; - case 'none': - // FIXME: remove once implementation and spec have added this. - throw new TypeError('iceTransportPolicy "none" not supported'); - default: - // don't set iceTransportPolicy. - break; - } - } - this.usingBundle = config && config.bundlePolicy === 'max-bundle'; - - if (config && config.iceServers) { - // Edge does not like - // 1) stun: - // 2) turn: that does not have all of turn:host:port?transport=udp - // 3) turn: with ipv6 addresses - var iceServers = JSON.parse(JSON.stringify(config.iceServers)); - this.iceOptions.iceServers = iceServers.filter(function(server) { - if (server && server.urls) { - var urls = server.urls; - if (typeof urls === 'string') { - urls = [urls]; - } - urls = urls.filter(function(url) { - return (url.indexOf('turn:') === 0 && - url.indexOf('transport=udp') !== -1 && - url.indexOf('turn:[') === -1) || - (url.indexOf('stun:') === 0 && - browserDetails.version >= 14393); - })[0]; - return !!urls; - } - return false; - }); - } - - // per-track iceGathers, iceTransports, dtlsTransports, rtpSenders, ... - // everything that is needed to describe a SDP m-line. - this.transceivers = []; - - // since the iceGatherer is currently created in createOffer but we - // must not emit candidates until after setLocalDescription we buffer - // them in this array. - this._localIceCandidatesBuffer = []; - }; - - window.RTCPeerConnection.prototype._emitBufferedCandidates = function() { - var self = this; - var sections = SDPUtils.splitSections(self.localDescription.sdp); - // FIXME: need to apply ice candidates in a way which is async but - // in-order - this._localIceCandidatesBuffer.forEach(function(event) { - var end = !event.candidate || Object.keys(event.candidate).length === 0; - if (end) { - for (var j = 1; j < sections.length; j++) { - if (sections[j].indexOf('\r\na=end-of-candidates\r\n') === -1) { - sections[j] += 'a=end-of-candidates\r\n'; - } - } - } else if (event.candidate.candidate.indexOf('typ endOfCandidates') - === -1) { - sections[event.candidate.sdpMLineIndex + 1] += - 'a=' + event.candidate.candidate + '\r\n'; - } - self.localDescription.sdp = sections.join(''); - self.dispatchEvent(event); - if (self.onicecandidate !== null) { - self.onicecandidate(event); - } - if (!event.candidate && self.iceGatheringState !== 'complete') { - var complete = self.transceivers.every(function(transceiver) { - return transceiver.iceGatherer && - transceiver.iceGatherer.state === 'completed'; - }); - if (complete) { - self.iceGatheringState = 'complete'; - } - } - }); - this._localIceCandidatesBuffer = []; - }; - - window.RTCPeerConnection.prototype.addStream = function(stream) { - // Clone is necessary for local demos mostly, attaching directly - // to two different senders does not work (build 10547). - this.localStreams.push(stream.clone()); - this._maybeFireNegotiationNeeded(); - }; - - window.RTCPeerConnection.prototype.removeStream = function(stream) { - var idx = this.localStreams.indexOf(stream); - if (idx > -1) { - this.localStreams.splice(idx, 1); - this._maybeFireNegotiationNeeded(); - } - }; - - window.RTCPeerConnection.prototype.getSenders = function() { - return this.transceivers.filter(function(transceiver) { - return !!transceiver.rtpSender; - }) - .map(function(transceiver) { - return transceiver.rtpSender; - }); - }; - - window.RTCPeerConnection.prototype.getReceivers = function() { - return this.transceivers.filter(function(transceiver) { - return !!transceiver.rtpReceiver; - }) - .map(function(transceiver) { - return transceiver.rtpReceiver; - }); - }; - - // Determines the intersection of local and remote capabilities. - window.RTCPeerConnection.prototype._getCommonCapabilities = - function(localCapabilities, remoteCapabilities) { - var commonCapabilities = { - codecs: [], - headerExtensions: [], - fecMechanisms: [] - }; - localCapabilities.codecs.forEach(function(lCodec) { - for (var i = 0; i < remoteCapabilities.codecs.length; i++) { - var rCodec = remoteCapabilities.codecs[i]; - if (lCodec.name.toLowerCase() === rCodec.name.toLowerCase() && - lCodec.clockRate === rCodec.clockRate && - lCodec.numChannels === rCodec.numChannels) { - // push rCodec so we reply with offerer payload type - commonCapabilities.codecs.push(rCodec); - - // determine common feedback mechanisms - rCodec.rtcpFeedback = rCodec.rtcpFeedback.filter(function(fb) { - for (var j = 0; j < lCodec.rtcpFeedback.length; j++) { - if (lCodec.rtcpFeedback[j].type === fb.type && - lCodec.rtcpFeedback[j].parameter === fb.parameter) { - return true; - } - } - return false; - }); - // FIXME: also need to determine .parameters - // see https://github.com/openpeer/ortc/issues/569 - break; - } - } - }); - - localCapabilities.headerExtensions - .forEach(function(lHeaderExtension) { - for (var i = 0; i < remoteCapabilities.headerExtensions.length; - i++) { - var rHeaderExtension = remoteCapabilities.headerExtensions[i]; - if (lHeaderExtension.uri === rHeaderExtension.uri) { - commonCapabilities.headerExtensions.push(rHeaderExtension); - break; - } - } - }); - - // FIXME: fecMechanisms - return commonCapabilities; - }; - - // Create ICE gatherer, ICE transport and DTLS transport. - window.RTCPeerConnection.prototype._createIceAndDtlsTransports = - function(mid, sdpMLineIndex) { - var self = this; - var iceGatherer = new RTCIceGatherer(self.iceOptions); - var iceTransport = new RTCIceTransport(iceGatherer); - iceGatherer.onlocalcandidate = function(evt) { - var event = new Event('icecandidate'); - event.candidate = {sdpMid: mid, sdpMLineIndex: sdpMLineIndex}; - - var cand = evt.candidate; - var end = !cand || Object.keys(cand).length === 0; - // Edge emits an empty object for RTCIceCandidateComplete‥ - if (end) { - // polyfill since RTCIceGatherer.state is not implemented in - // Edge 10547 yet. - if (iceGatherer.state === undefined) { - iceGatherer.state = 'completed'; - } - - // Emit a candidate with type endOfCandidates to make the samples - // work. Edge requires addIceCandidate with this empty candidate - // to start checking. The real solution is to signal - // end-of-candidates to the other side when getting the null - // candidate but some apps (like the samples) don't do that. - event.candidate.candidate = - 'candidate:1 1 udp 1 0.0.0.0 9 typ endOfCandidates'; - } else { - // RTCIceCandidate doesn't have a component, needs to be added - cand.component = iceTransport.component === 'RTCP' ? 2 : 1; - event.candidate.candidate = SDPUtils.writeCandidate(cand); - } - - // update local description. - var sections = SDPUtils.splitSections(self.localDescription.sdp); - if (event.candidate.candidate.indexOf('typ endOfCandidates') - === -1) { - sections[event.candidate.sdpMLineIndex + 1] += - 'a=' + event.candidate.candidate + '\r\n'; - } else { - sections[event.candidate.sdpMLineIndex + 1] += - 'a=end-of-candidates\r\n'; - } - self.localDescription.sdp = sections.join(''); - - var complete = self.transceivers.every(function(transceiver) { - return transceiver.iceGatherer && - transceiver.iceGatherer.state === 'completed'; - }); - - // Emit candidate if localDescription is set. - // Also emits null candidate when all gatherers are complete. - switch (self.iceGatheringState) { - case 'new': - self._localIceCandidatesBuffer.push(event); - if (end && complete) { - self._localIceCandidatesBuffer.push( - new Event('icecandidate')); - } - break; - case 'gathering': - self._emitBufferedCandidates(); - self.dispatchEvent(event); - if (self.onicecandidate !== null) { - self.onicecandidate(event); - } - if (complete) { - self.dispatchEvent(new Event('icecandidate')); - if (self.onicecandidate !== null) { - self.onicecandidate(new Event('icecandidate')); - } - self.iceGatheringState = 'complete'; - } - break; - case 'complete': - // should not happen... currently! - break; - default: // no-op. - break; - } - }; - iceTransport.onicestatechange = function() { - self._updateConnectionState(); - }; - - var dtlsTransport = new RTCDtlsTransport(iceTransport); - dtlsTransport.ondtlsstatechange = function() { - self._updateConnectionState(); - }; - dtlsTransport.onerror = function() { - // onerror does not set state to failed by itself. - dtlsTransport.state = 'failed'; - self._updateConnectionState(); - }; - - return { - iceGatherer: iceGatherer, - iceTransport: iceTransport, - dtlsTransport: dtlsTransport - }; - }; - - // Start the RTP Sender and Receiver for a transceiver. - window.RTCPeerConnection.prototype._transceive = function(transceiver, - send, recv) { - var params = this._getCommonCapabilities(transceiver.localCapabilities, - transceiver.remoteCapabilities); - if (send && transceiver.rtpSender) { - params.encodings = transceiver.sendEncodingParameters; - params.rtcp = { - cname: SDPUtils.localCName - }; - if (transceiver.recvEncodingParameters.length) { - params.rtcp.ssrc = transceiver.recvEncodingParameters[0].ssrc; - } - transceiver.rtpSender.send(params); - } - if (recv && transceiver.rtpReceiver) { - params.encodings = transceiver.recvEncodingParameters; - params.rtcp = { - cname: transceiver.cname - }; - if (transceiver.sendEncodingParameters.length) { - params.rtcp.ssrc = transceiver.sendEncodingParameters[0].ssrc; - } - transceiver.rtpReceiver.receive(params); - } - }; - - window.RTCPeerConnection.prototype.setLocalDescription = - function(description) { - var self = this; - var sections; - var sessionpart; - if (description.type === 'offer') { - // FIXME: What was the purpose of this empty if statement? - // if (!this._pendingOffer) { - // } else { - if (this._pendingOffer) { - // VERY limited support for SDP munging. Limited to: - // * changing the order of codecs - sections = SDPUtils.splitSections(description.sdp); - sessionpart = sections.shift(); - sections.forEach(function(mediaSection, sdpMLineIndex) { - var caps = SDPUtils.parseRtpParameters(mediaSection); - self._pendingOffer[sdpMLineIndex].localCapabilities = caps; - }); - this.transceivers = this._pendingOffer; - delete this._pendingOffer; - } - } else if (description.type === 'answer') { - sections = SDPUtils.splitSections(self.remoteDescription.sdp); - sessionpart = sections.shift(); - var isIceLite = SDPUtils.matchPrefix(sessionpart, - 'a=ice-lite').length > 0; - sections.forEach(function(mediaSection, sdpMLineIndex) { - var transceiver = self.transceivers[sdpMLineIndex]; - var iceGatherer = transceiver.iceGatherer; - var iceTransport = transceiver.iceTransport; - var dtlsTransport = transceiver.dtlsTransport; - var localCapabilities = transceiver.localCapabilities; - var remoteCapabilities = transceiver.remoteCapabilities; - var rejected = mediaSection.split('\n', 1)[0] - .split(' ', 2)[1] === '0'; - - if (!rejected) { - var remoteIceParameters = SDPUtils.getIceParameters( - mediaSection, sessionpart); - if (isIceLite) { - var cands = SDPUtils.matchPrefix(mediaSection, 'a=candidate:') - .map(function(cand) { - return SDPUtils.parseCandidate(cand); - }) - .filter(function(cand) { - return cand.component === '1'; - }); - // ice-lite only includes host candidates in the SDP so we can - // use setRemoteCandidates (which implies an - // RTCIceCandidateComplete) - if (cands.length) { - iceTransport.setRemoteCandidates(cands); - } - } - var remoteDtlsParameters = SDPUtils.getDtlsParameters( - mediaSection, sessionpart); - if (isIceLite) { - remoteDtlsParameters.role = 'server'; - } - - if (!self.usingBundle || sdpMLineIndex === 0) { - iceTransport.start(iceGatherer, remoteIceParameters, - isIceLite ? 'controlling' : 'controlled'); - dtlsTransport.start(remoteDtlsParameters); - } - - // Calculate intersection of capabilities. - var params = self._getCommonCapabilities(localCapabilities, - remoteCapabilities); - - // Start the RTCRtpSender. The RTCRtpReceiver for this - // transceiver has already been started in setRemoteDescription. - self._transceive(transceiver, - params.codecs.length > 0, - false); - } - }); - } - - this.localDescription = { - type: description.type, - sdp: description.sdp - }; - switch (description.type) { - case 'offer': - this._updateSignalingState('have-local-offer'); - break; - case 'answer': - this._updateSignalingState('stable'); - break; - default: - throw new TypeError('unsupported type "' + description.type + - '"'); - } - - // If a success callback was provided, emit ICE candidates after it - // has been executed. Otherwise, emit callback after the Promise is - // resolved. - var hasCallback = arguments.length > 1 && - typeof arguments[1] === 'function'; - if (hasCallback) { - var cb = arguments[1]; - window.setTimeout(function() { - cb(); - if (self.iceGatheringState === 'new') { - self.iceGatheringState = 'gathering'; - } - self._emitBufferedCandidates(); - }, 0); - } - var p = Promise.resolve(); - p.then(function() { - if (!hasCallback) { - if (self.iceGatheringState === 'new') { - self.iceGatheringState = 'gathering'; - } - // Usually candidates will be emitted earlier. - window.setTimeout(self._emitBufferedCandidates.bind(self), 500); - } - }); - return p; - }; - - window.RTCPeerConnection.prototype.setRemoteDescription = - function(description) { - var self = this; - var stream = new MediaStream(); - var receiverList = []; - var sections = SDPUtils.splitSections(description.sdp); - var sessionpart = sections.shift(); - var isIceLite = SDPUtils.matchPrefix(sessionpart, - 'a=ice-lite').length > 0; - this.usingBundle = SDPUtils.matchPrefix(sessionpart, - 'a=group:BUNDLE ').length > 0; - sections.forEach(function(mediaSection, sdpMLineIndex) { - var lines = SDPUtils.splitLines(mediaSection); - var mline = lines[0].substr(2).split(' '); - var kind = mline[0]; - var rejected = mline[1] === '0'; - var direction = SDPUtils.getDirection(mediaSection, sessionpart); - - var transceiver; - var iceGatherer; - var iceTransport; - var dtlsTransport; - var rtpSender; - var rtpReceiver; - var sendEncodingParameters; - var recvEncodingParameters; - var localCapabilities; - - var track; - // FIXME: ensure the mediaSection has rtcp-mux set. - var remoteCapabilities = SDPUtils.parseRtpParameters(mediaSection); - var remoteIceParameters; - var remoteDtlsParameters; - if (!rejected) { - remoteIceParameters = SDPUtils.getIceParameters(mediaSection, - sessionpart); - remoteDtlsParameters = SDPUtils.getDtlsParameters(mediaSection, - sessionpart); - remoteDtlsParameters.role = 'client'; - } - recvEncodingParameters = - SDPUtils.parseRtpEncodingParameters(mediaSection); - - var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:'); - if (mid.length) { - mid = mid[0].substr(6); - } else { - mid = SDPUtils.generateIdentifier(); - } - - var cname; - // Gets the first SSRC. Note that with RTX there might be multiple - // SSRCs. - var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:') - .map(function(line) { - return SDPUtils.parseSsrcMedia(line); - }) - .filter(function(obj) { - return obj.attribute === 'cname'; - })[0]; - if (remoteSsrc) { - cname = remoteSsrc.value; - } - - var isComplete = SDPUtils.matchPrefix(mediaSection, - 'a=end-of-candidates', sessionpart).length > 0; - var cands = SDPUtils.matchPrefix(mediaSection, 'a=candidate:') - .map(function(cand) { - return SDPUtils.parseCandidate(cand); - }) - .filter(function(cand) { - return cand.component === '1'; - }); - if (description.type === 'offer' && !rejected) { - var transports = self.usingBundle && sdpMLineIndex > 0 ? { - iceGatherer: self.transceivers[0].iceGatherer, - iceTransport: self.transceivers[0].iceTransport, - dtlsTransport: self.transceivers[0].dtlsTransport - } : self._createIceAndDtlsTransports(mid, sdpMLineIndex); - - if (isComplete) { - transports.iceTransport.setRemoteCandidates(cands); - } - - localCapabilities = RTCRtpReceiver.getCapabilities(kind); - sendEncodingParameters = [{ - ssrc: (2 * sdpMLineIndex + 2) * 1001 - }]; - - rtpReceiver = new RTCRtpReceiver(transports.dtlsTransport, kind); - - track = rtpReceiver.track; - receiverList.push([track, rtpReceiver]); - // FIXME: not correct when there are multiple streams but that is - // not currently supported in this shim. - stream.addTrack(track); - - // FIXME: look at direction. - if (self.localStreams.length > 0 && - self.localStreams[0].getTracks().length >= sdpMLineIndex) { - var localTrack; - if (kind === 'audio') { - localTrack = self.localStreams[0].getAudioTracks()[0]; - } else if (kind === 'video') { - localTrack = self.localStreams[0].getVideoTracks()[0]; - } - if (localTrack) { - rtpSender = new RTCRtpSender(localTrack, - transports.dtlsTransport); - } - } - - self.transceivers[sdpMLineIndex] = { - iceGatherer: transports.iceGatherer, - iceTransport: transports.iceTransport, - dtlsTransport: transports.dtlsTransport, - localCapabilities: localCapabilities, - remoteCapabilities: remoteCapabilities, - rtpSender: rtpSender, - rtpReceiver: rtpReceiver, - kind: kind, - mid: mid, - cname: cname, - sendEncodingParameters: sendEncodingParameters, - recvEncodingParameters: recvEncodingParameters - }; - // Start the RTCRtpReceiver now. The RTPSender is started in - // setLocalDescription. - self._transceive(self.transceivers[sdpMLineIndex], - false, - direction === 'sendrecv' || direction === 'sendonly'); - } else if (description.type === 'answer' && !rejected) { - transceiver = self.transceivers[sdpMLineIndex]; - iceGatherer = transceiver.iceGatherer; - iceTransport = transceiver.iceTransport; - dtlsTransport = transceiver.dtlsTransport; - rtpSender = transceiver.rtpSender; - rtpReceiver = transceiver.rtpReceiver; - sendEncodingParameters = transceiver.sendEncodingParameters; - localCapabilities = transceiver.localCapabilities; - - self.transceivers[sdpMLineIndex].recvEncodingParameters = - recvEncodingParameters; - self.transceivers[sdpMLineIndex].remoteCapabilities = - remoteCapabilities; - self.transceivers[sdpMLineIndex].cname = cname; - - if ((isIceLite || isComplete) && cands.length) { - iceTransport.setRemoteCandidates(cands); - } - if (!self.usingBundle || sdpMLineIndex === 0) { - iceTransport.start(iceGatherer, remoteIceParameters, - 'controlling'); - dtlsTransport.start(remoteDtlsParameters); - } - - self._transceive(transceiver, - direction === 'sendrecv' || direction === 'recvonly', - direction === 'sendrecv' || direction === 'sendonly'); - - if (rtpReceiver && - (direction === 'sendrecv' || direction === 'sendonly')) { - track = rtpReceiver.track; - receiverList.push([track, rtpReceiver]); - stream.addTrack(track); - } else { - // FIXME: actually the receiver should be created later. - delete transceiver.rtpReceiver; - } - } - }); - - this.remoteDescription = { - type: description.type, - sdp: description.sdp - }; - switch (description.type) { - case 'offer': - this._updateSignalingState('have-remote-offer'); - break; - case 'answer': - this._updateSignalingState('stable'); - break; - default: - throw new TypeError('unsupported type "' + description.type + - '"'); - } - if (stream.getTracks().length) { - self.remoteStreams.push(stream); - window.setTimeout(function() { - var event = new Event('addstream'); - event.stream = stream; - self.dispatchEvent(event); - if (self.onaddstream !== null) { - window.setTimeout(function() { - self.onaddstream(event); - }, 0); - } - - receiverList.forEach(function(item) { - var track = item[0]; - var receiver = item[1]; - var trackEvent = new Event('track'); - trackEvent.track = track; - trackEvent.receiver = receiver; - trackEvent.streams = [stream]; - self.dispatchEvent(event); - if (self.ontrack !== null) { - window.setTimeout(function() { - self.ontrack(trackEvent); - }, 0); - } - }); - }, 0); - } - if (arguments.length > 1 && typeof arguments[1] === 'function') { - window.setTimeout(arguments[1], 0); - } - return Promise.resolve(); - }; - - window.RTCPeerConnection.prototype.close = function() { - this.transceivers.forEach(function(transceiver) { - /* not yet - if (transceiver.iceGatherer) { - transceiver.iceGatherer.close(); - } - */ - if (transceiver.iceTransport) { - transceiver.iceTransport.stop(); - } - if (transceiver.dtlsTransport) { - transceiver.dtlsTransport.stop(); - } - if (transceiver.rtpSender) { - transceiver.rtpSender.stop(); - } - if (transceiver.rtpReceiver) { - transceiver.rtpReceiver.stop(); - } - }); - // FIXME: clean up tracks, local streams, remote streams, etc - this._updateSignalingState('closed'); - }; - - // Update the signaling state. - window.RTCPeerConnection.prototype._updateSignalingState = - function(newState) { - this.signalingState = newState; - var event = new Event('signalingstatechange'); - this.dispatchEvent(event); - if (this.onsignalingstatechange !== null) { - this.onsignalingstatechange(event); - } - }; - - // Determine whether to fire the negotiationneeded event. - window.RTCPeerConnection.prototype._maybeFireNegotiationNeeded = - function() { - // Fire away (for now). - var event = new Event('negotiationneeded'); - this.dispatchEvent(event); - if (this.onnegotiationneeded !== null) { - this.onnegotiationneeded(event); - } - }; - - // Update the connection state. - window.RTCPeerConnection.prototype._updateConnectionState = function() { - var self = this; - var newState; - var states = { - 'new': 0, - closed: 0, - connecting: 0, - checking: 0, - connected: 0, - completed: 0, - failed: 0 - }; - this.transceivers.forEach(function(transceiver) { - states[transceiver.iceTransport.state]++; - states[transceiver.dtlsTransport.state]++; - }); - // ICETransport.completed and connected are the same for this purpose. - states.connected += states.completed; - - newState = 'new'; - if (states.failed > 0) { - newState = 'failed'; - } else if (states.connecting > 0 || states.checking > 0) { - newState = 'connecting'; - } else if (states.disconnected > 0) { - newState = 'disconnected'; - } else if (states.new > 0) { - newState = 'new'; - } else if (states.connected > 0 || states.completed > 0) { - newState = 'connected'; - } - - if (newState !== self.iceConnectionState) { - self.iceConnectionState = newState; - var event = new Event('iceconnectionstatechange'); - this.dispatchEvent(event); - if (this.oniceconnectionstatechange !== null) { - this.oniceconnectionstatechange(event); - } - } - }; - - window.RTCPeerConnection.prototype.createOffer = function() { - var self = this; - if (this._pendingOffer) { - throw new Error('createOffer called while there is a pending offer.'); - } - var offerOptions; - if (arguments.length === 1 && typeof arguments[0] !== 'function') { - offerOptions = arguments[0]; - } else if (arguments.length === 3) { - offerOptions = arguments[2]; - } - - var tracks = []; - var numAudioTracks = 0; - var numVideoTracks = 0; - // Default to sendrecv. - if (this.localStreams.length) { - numAudioTracks = this.localStreams[0].getAudioTracks().length; - numVideoTracks = this.localStreams[0].getVideoTracks().length; - } - // Determine number of audio and video tracks we need to send/recv. - if (offerOptions) { - // Reject Chrome legacy constraints. - if (offerOptions.mandatory || offerOptions.optional) { - throw new TypeError( - 'Legacy mandatory/optional constraints not supported.'); - } - if (offerOptions.offerToReceiveAudio !== undefined) { - numAudioTracks = offerOptions.offerToReceiveAudio; - } - if (offerOptions.offerToReceiveVideo !== undefined) { - numVideoTracks = offerOptions.offerToReceiveVideo; - } - } - if (this.localStreams.length) { - // Push local streams. - this.localStreams[0].getTracks().forEach(function(track) { - tracks.push({ - kind: track.kind, - track: track, - wantReceive: track.kind === 'audio' ? - numAudioTracks > 0 : numVideoTracks > 0 - }); - if (track.kind === 'audio') { - numAudioTracks--; - } else if (track.kind === 'video') { - numVideoTracks--; - } - }); - } - // Create M-lines for recvonly streams. - while (numAudioTracks > 0 || numVideoTracks > 0) { - if (numAudioTracks > 0) { - tracks.push({ - kind: 'audio', - wantReceive: true - }); - numAudioTracks--; - } - if (numVideoTracks > 0) { - tracks.push({ - kind: 'video', - wantReceive: true - }); - numVideoTracks--; - } - } - - var sdp = SDPUtils.writeSessionBoilerplate(); - var transceivers = []; - tracks.forEach(function(mline, sdpMLineIndex) { - // For each track, create an ice gatherer, ice transport, - // dtls transport, potentially rtpsender and rtpreceiver. - var track = mline.track; - var kind = mline.kind; - var mid = SDPUtils.generateIdentifier(); - - var transports = self.usingBundle && sdpMLineIndex > 0 ? { - iceGatherer: transceivers[0].iceGatherer, - iceTransport: transceivers[0].iceTransport, - dtlsTransport: transceivers[0].dtlsTransport - } : self._createIceAndDtlsTransports(mid, sdpMLineIndex); - - var localCapabilities = RTCRtpSender.getCapabilities(kind); - var rtpSender; - var rtpReceiver; - - // generate an ssrc now, to be used later in rtpSender.send - var sendEncodingParameters = [{ - ssrc: (2 * sdpMLineIndex + 1) * 1001 - }]; - if (track) { - rtpSender = new RTCRtpSender(track, transports.dtlsTransport); - } - - if (mline.wantReceive) { - rtpReceiver = new RTCRtpReceiver(transports.dtlsTransport, kind); - } - - transceivers[sdpMLineIndex] = { - iceGatherer: transports.iceGatherer, - iceTransport: transports.iceTransport, - dtlsTransport: transports.dtlsTransport, - localCapabilities: localCapabilities, - remoteCapabilities: null, - rtpSender: rtpSender, - rtpReceiver: rtpReceiver, - kind: kind, - mid: mid, - sendEncodingParameters: sendEncodingParameters, - recvEncodingParameters: null - }; - }); - if (this.usingBundle) { - sdp += 'a=group:BUNDLE ' + transceivers.map(function(t) { - return t.mid; - }).join(' ') + '\r\n'; - } - tracks.forEach(function(mline, sdpMLineIndex) { - var transceiver = transceivers[sdpMLineIndex]; - sdp += SDPUtils.writeMediaSection(transceiver, - transceiver.localCapabilities, 'offer', self.localStreams[0]); - }); - - this._pendingOffer = transceivers; - var desc = new RTCSessionDescription({ - type: 'offer', - sdp: sdp - }); - if (arguments.length && typeof arguments[0] === 'function') { - window.setTimeout(arguments[0], 0, desc); - } - return Promise.resolve(desc); - }; - - window.RTCPeerConnection.prototype.createAnswer = function() { - var self = this; - - var sdp = SDPUtils.writeSessionBoilerplate(); - if (this.usingBundle) { - sdp += 'a=group:BUNDLE ' + this.transceivers.map(function(t) { - return t.mid; - }).join(' ') + '\r\n'; - } - this.transceivers.forEach(function(transceiver) { - // Calculate intersection of capabilities. - var commonCapabilities = self._getCommonCapabilities( - transceiver.localCapabilities, - transceiver.remoteCapabilities); - - sdp += SDPUtils.writeMediaSection(transceiver, commonCapabilities, - 'answer', self.localStreams[0]); - }); - - var desc = new RTCSessionDescription({ - type: 'answer', - sdp: sdp - }); - if (arguments.length && typeof arguments[0] === 'function') { - window.setTimeout(arguments[0], 0, desc); - } - return Promise.resolve(desc); - }; - - window.RTCPeerConnection.prototype.addIceCandidate = function(candidate) { - if (candidate === null) { - this.transceivers.forEach(function(transceiver) { - transceiver.iceTransport.addRemoteCandidate({}); - }); - } else { - var mLineIndex = candidate.sdpMLineIndex; - if (candidate.sdpMid) { - for (var i = 0; i < this.transceivers.length; i++) { - if (this.transceivers[i].mid === candidate.sdpMid) { - mLineIndex = i; - break; - } - } - } - var transceiver = this.transceivers[mLineIndex]; - if (transceiver) { - var cand = Object.keys(candidate.candidate).length > 0 ? - SDPUtils.parseCandidate(candidate.candidate) : {}; - // Ignore Chrome's invalid candidates since Edge does not like them. - if (cand.protocol === 'tcp' && (cand.port === 0 || cand.port === 9)) { - return; - } - // Ignore RTCP candidates, we assume RTCP-MUX. - if (cand.component !== '1') { - return; - } - // A dirty hack to make samples work. - if (cand.type === 'endOfCandidates') { - cand = {}; - } - transceiver.iceTransport.addRemoteCandidate(cand); - - // update the remoteDescription. - var sections = SDPUtils.splitSections(this.remoteDescription.sdp); - sections[mLineIndex + 1] += (cand.type ? candidate.candidate.trim() - : 'a=end-of-candidates') + '\r\n'; - this.remoteDescription.sdp = sections.join(''); - } - } - if (arguments.length > 1 && typeof arguments[1] === 'function') { - window.setTimeout(arguments[1], 0); - } - return Promise.resolve(); - }; - - window.RTCPeerConnection.prototype.getStats = function() { - var promises = []; - this.transceivers.forEach(function(transceiver) { - ['rtpSender', 'rtpReceiver', 'iceGatherer', 'iceTransport', - 'dtlsTransport'].forEach(function(method) { - if (transceiver[method]) { - promises.push(transceiver[method].getStats()); - } - }); - }); - var cb = arguments.length > 1 && typeof arguments[1] === 'function' && - arguments[1]; - return new Promise(function(resolve) { - // shim getStats with maplike support - var results = new Map(); - Promise.all(promises).then(function(res) { - res.forEach(function(result) { - Object.keys(result).forEach(function(id) { - results.set(id, result[id]); - results[id] = result[id]; - }); - }); - if (cb) { - window.setTimeout(cb, 0, results); - } - resolve(results); - }); - }); - }; - } - }; - - // Expose public methods. - module.e = { - shimPeerConnection: edgeShim.shimPeerConnection, - shimGetUserMedia: __webpack_require__(210) - }; - - -/***/ }, -/* 210 */ -/***/ function(module, exports, __webpack_require__) { - - /* - * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ - /* eslint-env node */ - 'use strict'; - - // Expose public methods. - module.e = function() { - var shimError_ = function(e) { - return { - name: {PermissionDeniedError: 'NotAllowedError'}[e.name] || e.name, - message: e.message, - constraint: e.constraint, - toString: function() { - return this.name; - } - }; - }; - - // getUserMedia error shim. - var origGetUserMedia = navigator.mediaDevices.getUserMedia. - bind(navigator.mediaDevices); - navigator.mediaDevices.getUserMedia = function(c) { - return origGetUserMedia(c).catch(function(e) { - return Promise.reject(shimError_(e)); - }); - }; - }; - - -/***/ }, -/* 211 */ -/***/ function(module, exports, __webpack_require__) { - - /* - * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ - /* eslint-env node */ - 'use strict'; - - var browserDetails = __webpack_require__(1).browserDetails; - - var firefoxShim = { - shimOnTrack: function() { - if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in - window.RTCPeerConnection.prototype)) { - Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', { - get: function() { - return this._ontrack; - }, - set: function(f) { - if (this._ontrack) { - this.removeEventListener('track', this._ontrack); - this.removeEventListener('addstream', this._ontrackpoly); - } - this.addEventListener('track', this._ontrack = f); - this.addEventListener('addstream', this._ontrackpoly = function(e) { - e.stream.getTracks().forEach(function(track) { - var event = new Event('track'); - event.track = track; - event.receiver = {track: track}; - event.streams = [e.stream]; - this.dispatchEvent(event); - }.bind(this)); - }.bind(this)); - } - }); - } - }, - - shimSourceObject: function() { - // Firefox has supported mozSrcObject since FF22, unprefixed in 42. - if (typeof window === 'object') { - if (window.HTMLMediaElement && - !('srcObject' in window.HTMLMediaElement.prototype)) { - // Shim the srcObject property, once, when HTMLMediaElement is found. - Object.defineProperty(window.HTMLMediaElement.prototype, 'srcObject', { - get: function() { - return this.mozSrcObject; - }, - set: function(stream) { - this.mozSrcObject = stream; - } - }); - } - } - }, - - shimPeerConnection: function() { - if (typeof window !== 'object' || !(window.RTCPeerConnection || - window.mozRTCPeerConnection)) { - return; // probably media.peerconnection.enabled=false in about:config - } - // The RTCPeerConnection object. - if (!window.RTCPeerConnection) { - window.RTCPeerConnection = function(pcConfig, pcConstraints) { - if (browserDetails.version < 38) { - // .urls is not supported in FF < 38. - // create RTCIceServers with a single url. - if (pcConfig && pcConfig.iceServers) { - var newIceServers = []; - for (var i = 0; i < pcConfig.iceServers.length; i++) { - var server = pcConfig.iceServers[i]; - if (server.hasOwnProperty('urls')) { - for (var j = 0; j < server.urls.length; j++) { - var newServer = { - url: server.urls[j] - }; - if (server.urls[j].indexOf('turn') === 0) { - newServer.username = server.username; - newServer.credential = server.credential; - } - newIceServers.push(newServer); - } - } else { - newIceServers.push(pcConfig.iceServers[i]); - } - } - pcConfig.iceServers = newIceServers; - } - } - return new mozRTCPeerConnection(pcConfig, pcConstraints); - }; - window.RTCPeerConnection.prototype = mozRTCPeerConnection.prototype; - - // wrap static methods. Currently just generateCertificate. - if (mozRTCPeerConnection.generateCertificate) { - Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', { - get: function() { - return mozRTCPeerConnection.generateCertificate; - } - }); - } - - window.RTCSessionDescription = mozRTCSessionDescription; - window.RTCIceCandidate = mozRTCIceCandidate; - } - - // shim away need for obsolete RTCIceCandidate/RTCSessionDescription. - ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'] - .forEach(function(method) { - var nativeMethod = RTCPeerConnection.prototype[method]; - RTCPeerConnection.prototype[method] = function() { - arguments[0] = new ((method === 'addIceCandidate') ? - RTCIceCandidate : RTCSessionDescription)(arguments[0]); - return nativeMethod.apply(this, arguments); - }; - }); - - // support for addIceCandidate(null) - var nativeAddIceCandidate = - RTCPeerConnection.prototype.addIceCandidate; - RTCPeerConnection.prototype.addIceCandidate = function() { - return arguments[0] === null ? Promise.resolve() - : nativeAddIceCandidate.apply(this, arguments); - }; - - // shim getStats with maplike support - var makeMapStats = function(stats) { - var map = new Map(); - Object.keys(stats).forEach(function(key) { - map.set(key, stats[key]); - map[key] = stats[key]; - }); - return map; - }; - - var nativeGetStats = RTCPeerConnection.prototype.getStats; - RTCPeerConnection.prototype.getStats = function(selector, onSucc, onErr) { - return nativeGetStats.apply(this, [selector || null]) - .then(function(stats) { - return makeMapStats(stats); - }) - .then(onSucc, onErr); - }; - } - }; - - // Expose public methods. - module.e = { - shimOnTrack: firefoxShim.shimOnTrack, - shimSourceObject: firefoxShim.shimSourceObject, - shimPeerConnection: firefoxShim.shimPeerConnection, - shimGetUserMedia: __webpack_require__(212) - }; - - -/***/ }, -/* 212 */ -/***/ function(module, exports, __webpack_require__) { - - /* - * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ - /* eslint-env node */ - 'use strict'; - - var logging = __webpack_require__(1).log; - var browserDetails = __webpack_require__(1).browserDetails; - - // Expose public methods. - module.e = function() { - var shimError_ = function(e) { - return { - name: { - SecurityError: 'NotAllowedError', - PermissionDeniedError: 'NotAllowedError' - }[e.name] || e.name, - message: { - 'The operation is insecure.': 'The request is not allowed by the ' + - 'user agent or the platform in the current context.' - }[e.message] || e.message, - constraint: e.constraint, - toString: function() { - return this.name + (this.message && ': ') + this.message; - } - }; - }; - - // getUserMedia constraints shim. - var getUserMedia_ = function(constraints, onSuccess, onError) { - var constraintsToFF37_ = function(c) { - if (typeof c !== 'object' || c.require) { - return c; - } - var require = []; - Object.keys(c).forEach(function(key) { - if (key === 'require' || key === 'advanced' || key === 'mediaSource') { - return; - } - var r = c[key] = (typeof c[key] === 'object') ? - c[key] : {ideal: c[key]}; - if (r.min !== undefined || - r.max !== undefined || r.exact !== undefined) { - require.push(key); - } - if (r.exact !== undefined) { - if (typeof r.exact === 'number') { - r. min = r.max = r.exact; - } else { - c[key] = r.exact; - } - delete r.exact; - } - if (r.ideal !== undefined) { - c.advanced = c.advanced || []; - var oc = {}; - if (typeof r.ideal === 'number') { - oc[key] = {min: r.ideal, max: r.ideal}; - } else { - oc[key] = r.ideal; - } - c.advanced.push(oc); - delete r.ideal; - if (!Object.keys(r).length) { - delete c[key]; - } - } - }); - if (require.length) { - c.require = require; - } - return c; - }; - constraints = JSON.parse(JSON.stringify(constraints)); - if (browserDetails.version < 38) { - logging('spec: ' + JSON.stringify(constraints)); - if (constraints.audio) { - constraints.audio = constraintsToFF37_(constraints.audio); - } - if (constraints.video) { - constraints.video = constraintsToFF37_(constraints.video); - } - logging('ff37: ' + JSON.stringify(constraints)); - } - return navigator.mozGetUserMedia(constraints, onSuccess, function(e) { - onError(shimError_(e)); - }); - }; - - // Returns the result of getUserMedia as a Promise. - var getUserMediaPromise_ = function(constraints) { - return new Promise(function(resolve, reject) { - getUserMedia_(constraints, resolve, reject); - }); - }; - - // Shim for mediaDevices on older versions. - if (!navigator.mediaDevices) { - navigator.mediaDevices = {getUserMedia: getUserMediaPromise_, - addEventListener: function() { }, - removeEventListener: function() { } - }; - } - navigator.mediaDevices.enumerateDevices = - navigator.mediaDevices.enumerateDevices || function() { - return new Promise(function(resolve) { - var infos = [ - {kind: 'audioinput', deviceId: 'default', label: '', groupId: ''}, - {kind: 'videoinput', deviceId: 'default', label: '', groupId: ''} - ]; - resolve(infos); - }); - }; - - if (browserDetails.version < 41) { - // Work around http://bugzil.la/1169665 - var orgEnumerateDevices = - navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices); - navigator.mediaDevices.enumerateDevices = function() { - return orgEnumerateDevices().then(undefined, function(e) { - if (e.name === 'NotFoundError') { - return []; - } - throw e; - }); - }; - } - if (browserDetails.version < 49) { - var origGetUserMedia = navigator.mediaDevices.getUserMedia. - bind(navigator.mediaDevices); - navigator.mediaDevices.getUserMedia = function(c) { - return origGetUserMedia(c).catch(function(e) { - return Promise.reject(shimError_(e)); - }); - }; - } - navigator.getUserMedia = function(constraints, onSuccess, onError) { - if (browserDetails.version < 44) { - return getUserMedia_(constraints, onSuccess, onError); - } - // Replace Firefox 44+'s deprecation warning with unprefixed version. - console.warn('navigator.getUserMedia has been replaced by ' + - 'navigator.mediaDevices.getUserMedia'); - navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError); - }; - }; - - -/***/ }, -/* 213 */ -/***/ function(module, exports, __webpack_require__) { - - /* - * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. - */ - 'use strict'; - var safariShim = { - // TODO: DrAlex, should be here, double check against LayoutTests - // shimOnTrack: function() { }, - - // TODO: once the back-end for the mac port is done, add. - // TODO: check for webkitGTK+ - // shimPeerConnection: function() { }, - - shimGetUserMedia: function() { - navigator.getUserMedia = navigator.webkitGetUserMedia; - } - }; - - // Expose public methods. - module.e = { - shimGetUserMedia: safariShim.shimGetUserMedia - // TODO - // shimOnTrack: safariShim.shimOnTrack, - // shimPeerConnection: safariShim.shimPeerConnection - }; - - -/***/ }, -/* 214 */ -/***/ function(module, exports, __webpack_require__) { - - module.e = __webpack_require__(76); - - -/***/ } +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(73); + + +/***/ }) /******/ ]) }); ; diff --git a/dist/quagga.js.map b/dist/quagga.js.map index c31f496..9087094 100644 --- a/dist/quagga.js.map +++ b/dist/quagga.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/myModuleDefinition","webpack:///webpack/bootstrap 359c9115c443d4a39234","webpack:///./~/lodash/isArray.js","webpack:///./~/webrtc-adapter/src/js/utils.js","webpack:///./~/lodash/isObject.js","webpack:///./~/lodash/_root.js","webpack:///./src/reader/ean_reader.js","webpack:///./~/lodash/_getNative.js","webpack:///./src/common/image_debug.js","webpack:///./src/reader/barcode_reader.js","webpack:///./~/gl-vec2/clone.js","webpack:///./~/lodash/_toKey.js","webpack:///./~/lodash/eq.js","webpack:///./~/lodash/isArguments.js","webpack:///./~/lodash/isArrayLike.js","webpack:///./~/lodash/isObjectLike.js","webpack:///./~/lodash/keys.js","webpack:///./~/lodash/merge.js","webpack:///./src/common/array_helper.js","webpack:///./~/lodash/_ListCache.js","webpack:///./~/lodash/_Stack.js","webpack:///./~/lodash/_Symbol.js","webpack:///./~/lodash/_assocIndexOf.js","webpack:///./~/lodash/_getMapData.js","webpack:///./~/lodash/_isHostObject.js","webpack:///./~/lodash/_isKey.js","webpack:///./~/lodash/_isPrototype.js","webpack:///./~/lodash/_nativeCreate.js","webpack:///./src/common/cv_utils.js","webpack:///./src/common/image_wrapper.js","webpack:///./~/lodash/_Map.js","webpack:///./~/lodash/_MapCache.js","webpack:///./~/lodash/_arrayPush.js","webpack:///./~/lodash/_cloneArrayBuffer.js","webpack:///./~/lodash/_copyObject.js","webpack:///./~/lodash/_getPrototype.js","webpack:///./~/lodash/_getSymbols.js","webpack:///./~/lodash/_getTag.js","webpack:///./~/lodash/_isIndex.js","webpack:///./~/lodash/_overArg.js","webpack:///./~/lodash/isFunction.js","webpack:///./~/lodash/isLength.js","webpack:///./~/lodash/isSymbol.js","webpack:///./~/lodash/isTypedArray.js","webpack:///./src/analytics/result_collector.js","webpack:///./src/config/config.js","webpack:///./src/locator/tracer.js","webpack:///./src/reader/code_39_reader.js","webpack:///./~/gl-vec2/dot.js","webpack:///./~/lodash/_Uint8Array.js","webpack:///./~/lodash/_arrayEach.js","webpack:///./~/lodash/_arrayLikeKeys.js","webpack:///./~/lodash/_arrayReduce.js","webpack:///./~/lodash/_assignMergeValue.js","webpack:///./~/lodash/_assignValue.js","webpack:///./~/lodash/_baseGet.js","webpack:///./~/lodash/_baseGetAllKeys.js","webpack:///./~/lodash/_baseIsEqual.js","webpack:///./~/lodash/_baseIteratee.js","webpack:///./~/lodash/_baseKeysIn.js","webpack:///./~/lodash/_basePickBy.js","webpack:///./~/lodash/_baseRest.js","webpack:///./~/lodash/_castPath.js","webpack:///./~/lodash/_copyArray.js","webpack:///./~/lodash/_equalArrays.js","webpack:///./~/lodash/_freeGlobal.js","webpack:///./~/lodash/_isStrictComparable.js","webpack:///./~/lodash/_mapToArray.js","webpack:///./~/lodash/_matchesStrictComparable.js","webpack:///./~/lodash/_nativeKeys.js","webpack:///./~/lodash/_setToArray.js","webpack:///./~/lodash/_toSource.js","webpack:///./~/lodash/isArrayLikeObject.js","webpack:///./~/lodash/isBuffer.js","webpack:///./~/lodash/keysIn.js","webpack:///./~/lodash/pick.js","webpack:///./~/lodash/stubArray.js","webpack:///(webpack)/buildin/module.js","webpack:///./src/quagga.js","webpack:///./src/common/cluster.js","webpack:///./src/common/dom_helper.js","webpack:///./src/common/events.js","webpack:///./src/common/subImage.js","webpack:///./src/common/typedefs.js","webpack:///./src/config/config.dev.js","webpack:///./src/decoder/barcode_decoder.js","webpack:///./src/decoder/bresenham.js","webpack:///./src/input/camera_access.js","webpack:///./src/input/config_factory.js","webpack:///./src/input/exif_helper.js","webpack:///./src/input/frame_grabber.js","webpack:///./src/input/image_loader.js","webpack:///./src/input/input_stream.js","webpack:///./src/locator/barcode_locator.js","webpack:///./src/locator/rasterizer.js","webpack:///./src/locator/skeletonizer.js","webpack:///./src/reader/codabar_reader.js","webpack:///./src/reader/code_128_reader.js","webpack:///./src/reader/code_39_vin_reader.js","webpack:///./src/reader/ean_2_reader.js","webpack:///./src/reader/ean_5_reader.js","webpack:///./src/reader/ean_8_reader.js","webpack:///./src/reader/i2of5_reader.js","webpack:///./src/reader/upc_e_reader.js","webpack:///./src/reader/upc_reader.js","webpack:///./src/scanner.js","webpack:///./~/gl-mat2/copy.js","webpack:///./~/gl-mat2/create.js","webpack:///./~/gl-mat2/invert.js","webpack:///./~/gl-vec2/scale.js","webpack:///./~/gl-vec2/transformMat2.js","webpack:///./~/gl-vec3/clone.js","webpack:///./~/lodash/_DataView.js","webpack:///./~/lodash/_Hash.js","webpack:///./~/lodash/_Promise.js","webpack:///./~/lodash/_Set.js","webpack:///./~/lodash/_SetCache.js","webpack:///./~/lodash/_WeakMap.js","webpack:///./~/lodash/_addMapEntry.js","webpack:///./~/lodash/_addSetEntry.js","webpack:///./~/lodash/_apply.js","webpack:///./~/lodash/_arrayMap.js","webpack:///./~/lodash/_arraySome.js","webpack:///./~/lodash/_baseAssign.js","webpack:///./~/lodash/_baseClone.js","webpack:///./~/lodash/_baseCreate.js","webpack:///./~/lodash/_baseFlatten.js","webpack:///./~/lodash/_baseGetTag.js","webpack:///./~/lodash/_baseHasIn.js","webpack:///./~/lodash/_baseIsEqualDeep.js","webpack:///./~/lodash/_baseIsMatch.js","webpack:///./~/lodash/_baseIsNative.js","webpack:///./~/lodash/_baseIsTypedArray.js","webpack:///./~/lodash/_baseKeys.js","webpack:///./~/lodash/_baseMatches.js","webpack:///./~/lodash/_baseMatchesProperty.js","webpack:///./~/lodash/_baseMerge.js","webpack:///./~/lodash/_baseMergeDeep.js","webpack:///./~/lodash/_basePick.js","webpack:///./~/lodash/_baseProperty.js","webpack:///./~/lodash/_basePropertyDeep.js","webpack:///./~/lodash/_baseTimes.js","webpack:///./~/lodash/_baseToString.js","webpack:///./~/lodash/_baseUnary.js","webpack:///./~/lodash/_cloneBuffer.js","webpack:///./~/lodash/_cloneDataView.js","webpack:///./~/lodash/_cloneMap.js","webpack:///./~/lodash/_cloneRegExp.js","webpack:///./~/lodash/_cloneSet.js","webpack:///./~/lodash/_cloneSymbol.js","webpack:///./~/lodash/_cloneTypedArray.js","webpack:///./~/lodash/_copySymbols.js","webpack:///./~/lodash/_coreJsData.js","webpack:///./~/lodash/_createAssigner.js","webpack:///./~/lodash/_equalByTag.js","webpack:///./~/lodash/_equalObjects.js","webpack:///./~/lodash/_getAllKeys.js","webpack:///./~/lodash/_getAllKeysIn.js","webpack:///./~/lodash/_getMatchData.js","webpack:///./~/lodash/_getSymbolsIn.js","webpack:///./~/lodash/_getValue.js","webpack:///./~/lodash/_hasPath.js","webpack:///./~/lodash/_hashClear.js","webpack:///./~/lodash/_hashDelete.js","webpack:///./~/lodash/_hashGet.js","webpack:///./~/lodash/_hashHas.js","webpack:///./~/lodash/_hashSet.js","webpack:///./~/lodash/_initCloneArray.js","webpack:///./~/lodash/_initCloneByTag.js","webpack:///./~/lodash/_initCloneObject.js","webpack:///./~/lodash/_isFlattenable.js","webpack:///./~/lodash/_isIterateeCall.js","webpack:///./~/lodash/_isKeyable.js","webpack:///./~/lodash/_isMasked.js","webpack:///./~/lodash/_listCacheClear.js","webpack:///./~/lodash/_listCacheDelete.js","webpack:///./~/lodash/_listCacheGet.js","webpack:///./~/lodash/_listCacheHas.js","webpack:///./~/lodash/_listCacheSet.js","webpack:///./~/lodash/_mapCacheClear.js","webpack:///./~/lodash/_mapCacheDelete.js","webpack:///./~/lodash/_mapCacheGet.js","webpack:///./~/lodash/_mapCacheHas.js","webpack:///./~/lodash/_mapCacheSet.js","webpack:///./~/lodash/_nativeKeysIn.js","webpack:///./~/lodash/_nodeUtil.js","webpack:///./~/lodash/_setCacheAdd.js","webpack:///./~/lodash/_setCacheHas.js","webpack:///./~/lodash/_stackClear.js","webpack:///./~/lodash/_stackDelete.js","webpack:///./~/lodash/_stackGet.js","webpack:///./~/lodash/_stackHas.js","webpack:///./~/lodash/_stackSet.js","webpack:///./~/lodash/_stringToPath.js","webpack:///./~/lodash/get.js","webpack:///./~/lodash/hasIn.js","webpack:///./~/lodash/identity.js","webpack:///./~/lodash/isEmpty.js","webpack:///./~/lodash/isPlainObject.js","webpack:///./~/lodash/memoize.js","webpack:///./~/lodash/negate.js","webpack:///./~/lodash/omitBy.js","webpack:///./~/lodash/pickBy.js","webpack:///./~/lodash/property.js","webpack:///./~/lodash/stubFalse.js","webpack:///./~/lodash/toPlainObject.js","webpack:///./~/lodash/toString.js","webpack:///./~/sdp/sdp.js","webpack:///./~/webrtc-adapter/src/js/adapter_core.js","webpack:///./~/webrtc-adapter/src/js/chrome/chrome_shim.js","webpack:///./~/webrtc-adapter/src/js/chrome/getusermedia.js","webpack:///./~/webrtc-adapter/src/js/edge/edge_shim.js","webpack:///./~/webrtc-adapter/src/js/edge/getusermedia.js","webpack:///./~/webrtc-adapter/src/js/firefox/firefox_shim.js","webpack:///./~/webrtc-adapter/src/js/firefox/getusermedia.js","webpack:///./~/webrtc-adapter/src/js/safari/safari_shim.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACRA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAS;AACT;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,cAAa,QAAQ;AACrB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;AACA;;AAEA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;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D8C;AAErD,gBAAW;AAF0C,EAAzD;;AAKA,eAAc,SAAd,GAA0B;AACtB,cAAS,CADa;AAEtB,cAAS,CAAC;AAFY,EAA1B;;AAKA,eAAc,SAAd,GAA0B;AACtB,6BAAwB,2BADF;AAEtB,4BAAuB,0BAFD;AAGtB,+BAA0B;AAHJ,EAA1B;;AAMA,eAAc,WAAd,GAA4B,EAA5B;;AAEA,6CAAe,aAAf,C;;;;;;ACvNA;;AAEA;AACA;AACA;AACA,YAAW,KAAK;AAChB,cAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;ACbA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA,kBAAiB;AACjB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpCA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA,8BAA6B,kBAAkB,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7CA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AAC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P;AACH;AA7EU,EAAf,C;;;;;;ACAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACzBA;;AAEA;AACA;;AAEA;;;;;;;ACLA;;AAEA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC5BA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACjBA;;AAEA;AACA;;AAEA;;;;;;;;;gtCCLA;AACA;AACA,KAAM,OAAO;AACT,YAAO,oBAAQ,CAAR;AADE,EAAb;AAGA,KAAM,OAAO;AACT,YAAO,oBAAQ,GAAR;AADE,EAAb;;AAIA;;;;;AAKO,UAAS,QAAT,CAAkB,CAAlB,EAAqB,CAArB,EA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,IAAuB,OAAO,CAAP,CAAvB;AACA,cAAK,SAAS,CAAT,GAAa,CAAlB,IAAuB,OAAO,CAAP,CAAvB;AACA,cAAK,SAAS,CAAT,GAAa,CAAlB,IAAuB,GAAvB;AACH;AACD,SAAI,YAAJ,CAAiB,KAAjB,EAAwB,KAAK,CAA7B,EAAgC,KAAK,CAArC;AACH,EAtBD;;AAwBA,6CAAe,YAAf,C;;;;;;AC5VA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACNA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;;AAEA;AACA;AACA;AACA;AACA,YAAW,YAAY;AACvB,cAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,YAAW,OAAO,WAAW;AAC7B,YAAW,SAAS;AACpB,cAAa,OAAO;AACpB;AACA;AACA,yBAAwB;;AAExB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;AC9BA;;AAEA;AACA;;AAEA;;;;;;;ACLA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;;AAEA;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrBA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACdA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClCA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrCA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;AC1BA;;AAEA,UAAS,QAAT,CAAkB,UAAlB,EAA8B,IAA9B,EAAoC;AAChC,SAAI,IAAJ,EAAU;AACN,gB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AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC1BA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,aAAa;AACxB,cAAa,EAAE;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,EAAE;AACb,YAAW,SAAS;AACpB,YAAW,QAAQ;AACnB;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7BA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC9BA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChCA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACzBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClCA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;;;;;;;ACdA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClFA;AACA;;AAEA;;;;;;;;ACHA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACdA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;;AAEA;AACA;;AAEA;;;;;;;ACLA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;;;;;;ACjBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;;;;;;;ACzBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChCA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACrCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,qBAAqB;AAChC,cAAa,OAAO;AACpB;AACA;AACA,kBAAiB;AACjB;AACA;AACA,WAAU;AACV;AACA;AACA,6BAA4B;AAC5B,EAAC;;AAED;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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AL;AACA,oCAAe,IAAf,CAAoB,IAApB,EAA0B,MAA1B;AACH,kBAHD,EAGG,IAHH;AAIA;AACH,cAND;AAOH,UAhDE;AAiDH,iBAAQ;AAjDL,MAAP;AAmDH;;AAED,6CAAe,aAAf,C;;;;;;AC3fA;;AAEA;AACA;AACA;AACA;AACA,YAAW,KAAK;AAChB,YAAW,KAAK;AAChB,cAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChBA;;AAEA;AACA;AACA;AACA;AACA,cAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA,YAAW,KAAK;AAChB,YAAW,KAAK;AAChB,cAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC1BA;;AAEA;AACA;AACA;AACA,YAAW,KAAK;AAChB,YAAW,KAAK;AAChB,YAAW,OAAO;AAClB,cAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA,E;;;;;;ACdA;;AAEA;AACA;AACA;AACA,YAAW,KAAK;AAChB,YAAW,KAAK;AAChB,YAAW,KAAK;AAChB,cAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;AChBA;;AAEA;AACA;AACA;AACA,YAAW,KAAK;AAChB,cAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;;;;;ACdA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACNA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACNA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACNA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC1BA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACNA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACdA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,EAAE;AACb,YAAW,MAAM;AACjB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACtBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA0C;AAC1C;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;;;;;;;AC1IA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB,YAAW,QAAQ;AACnB,YAAW,MAAM;AACjB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;ACrBA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,aAAa;AACxB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjFA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,MAAM;AACjB,YAAW,SAAS;AACpB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7DA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qCAAoC;;AAEpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/CA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7BA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;;;;;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjFA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;;;;;;AClBA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;;AAEA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC9BA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClBA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClBA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO,WAAW;AAC7B,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;;AAEA;AACA;;AAEA;;;;;;;ACLA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;;;;;;;ACpCA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChHA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,YAAW,OAAO;AAClB;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACzFA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;;;;;;;AChBA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;ACvBA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACzBA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,aAAa;AACxB,YAAW,SAAS;AACpB,cAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACdA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7BA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACtBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,MAAM;AACjB,cAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,YAAW,QAAQ;AACnB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;AC/EA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,YAAW,EAAE;AACb,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7BA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACdA;;AAEA;AACA;AACA;AACA;AACA,EAAC;;AAED;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACXA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;;;;;;;ACjCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;AClBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;;;;;;;ACxBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH,EAAC;;AAED;;;;;;;;ACrBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,cAAa,MAAM;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA,EAAC;;AAED;;;;;;;AC9BA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,aAAa;AACxB,YAAW,EAAE;AACb,cAAa,EAAE;AACf;AACA;AACA,kBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,aAAa;AACxB,cAAa,QAAQ;AACrB;AACA;AACA,2BAA0B,gBAAgB,SAAS,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,EAAE;AACf;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,kDAAiD,eAAe;;AAEhE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC9EA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,YAAW,SAAS;AACpB,cAAa,SAAS;AACtB;AACA;AACA,kBAAiB;AACjB,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACxEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,SAAS;AACpB,cAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvCA;AACA;AACA;;AAEA;AACA,+BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,cAAa,OAAO;AACpB;AACA;AACA,kBAAiB;AACjB;AACA;AACA,WAAU;AACV;AACA;AACA;AACA;;AAEA;;;;;;;AC5BA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,OAAO;AAClB,YAAW,SAAS;AACpB,cAAa,OAAO;AACpB;AACA;AACA,kBAAiB;AACjB;AACA;AACA,WAAU;AACV;AACA;AACA,6BAA4B;AAC5B;;AAEA;;;;;;;AC1BA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,aAAa;AACxB,cAAa,SAAS;AACtB;AACA;AACA;AACA,OAAM,OAAO,SAAS,EAAE;AACxB,OAAM,OAAO,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,SAAS;AACtB,WAAU;AACV;AACA,cAAa,SAAS;AACtB,WAAU;AACV;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW,EAAE;AACb,cAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3BA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAuC;AACvC;AACA,qCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,6CAA4C;AAC5C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAoB;AACpB,2BAA0B;AAC1B;AACA;AACA;AACA,0DAAyD;AACzD,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,kDAAiD;AACjD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB,kBAAkB,OAAO;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL,IAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA,IAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,kBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC1eA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,EAAC;;;;;;;;AC1FD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAgC;AAChC;AACA;AACA,cAAa;AACb;AACA;AACA;AACA,iCAAgC;AAChC;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,UAAS;AACT;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,YAAW;;AAEX;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf,YAAW;AACX;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,UAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,MAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA,YAAW;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACnQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAuD;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA2D,YAAY;;AAEvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA,cAAa;AACb;AACA,0DAAyD,qBAAqB;AAC9E,0DAAyD;AACzD;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,QAAO;AACP,MAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB;AACA;AACA,uBAAsB;AACtB;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,IAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC5LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,qBAAqB;AAC9C;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,sCAAsC;AACjE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kCAAiC,gCAAgC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA,gCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;;AAEb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA;AACA,oBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA,kBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA,gBAAe;;AAEf;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe;;AAEf;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA,YAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAmB;AACnB;AACA,gBAAe;AACf,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA,YAAW;AACX;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAO;;AAEP;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,yDAAwD;AACxD,UAAS;AACT,QAAO;AACP;AACA;AACA,0BAAyB,8BAA8B;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA;AACA;AACA;AACA,UAAS;AACT,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;AC9hCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAa,yCAAyC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAgC;AAChC;AACA;AACA,cAAa;AACb,YAAW;AACX;AACA,QAAO;AACP;AACA,IAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,IAAG;;AAEH;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA2B,gCAAgC;AAC3D;AACA;AACA,gCAA+B,wBAAwB;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;;AAET;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AC1JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAsB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAuB;AACvB,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,+BAA8B;AAC9B,qCAAoC,EAAE;AACtC,wCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,cAAa,gEAAgE;AAC7E,cAAa;AACb;AACA;AACA,UAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA8B,EAAE;;AAEhC;AACA;AACA,sCAAqC,EAAE;;AAEvC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA","file":"quagga.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(factory.toString()).default;\n\telse if(typeof exports === 'object')\n\t\texports[\"Quagga\"] = factory(factory.toString()).default;\n\telse\n\t\troot[\"Quagga\"] = factory(factory.toString()).default;\n})(this, function(__factorySource__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/myModuleDefinition\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].e;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\te: {},\n \t\t\ti: moduleId,\n \t\t\tl: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.e, module, module.e, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.e;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 214);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 359c9115c443d4a39234\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isArray.js\n ** module id = 0\n ** module chunks = 0\n **/","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\n\nvar logDisabled_ = true;\n\n// Utility methods.\nvar utils = {\n disableLog: function(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return (bool) ? 'adapter.js logging disabled' :\n 'adapter.js logging enabled';\n },\n\n log: function() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n },\n\n /**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\n extractVersion: function(uastring, expr, pos) {\n var match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n },\n\n /**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\n detectBrowser: function() {\n // Returned result object.\n var result = {};\n result.browser = null;\n result.version = null;\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a browser.';\n return result;\n }\n\n // Firefox.\n if (navigator.mozGetUserMedia) {\n result.browser = 'firefox';\n result.version = this.extractVersion(navigator.userAgent,\n /Firefox\\/([0-9]+)\\./, 1);\n\n // all webkit-based browsers\n } else if (navigator.webkitGetUserMedia) {\n // Chrome, Chromium, Webview, Opera, all use the chrome shim for now\n if (window.webkitRTCPeerConnection) {\n result.browser = 'chrome';\n result.version = this.extractVersion(navigator.userAgent,\n /Chrom(e|ium)\\/([0-9]+)\\./, 2);\n\n // Safari or unknown webkit-based\n // for the time being Safari has support for MediaStreams but not webRTC\n } else {\n // Safari UA substrings of interest for reference:\n // - webkit version: AppleWebKit/602.1.25 (also used in Op,Cr)\n // - safari UI version: Version/9.0.3 (unique to Safari)\n // - safari UI webkit version: Safari/601.4.4 (also used in Op,Cr)\n //\n // if the webkit version and safari UI webkit versions are equals,\n // ... this is a stable version.\n //\n // only the internal webkit version is important today to know if\n // media streams are supported\n //\n if (navigator.userAgent.match(/Version\\/(\\d+).(\\d+)/)) {\n result.browser = 'safari';\n result.version = this.extractVersion(navigator.userAgent,\n /AppleWebKit\\/([0-9]+)\\./, 1);\n\n // unknown webkit-based browser\n } else {\n result.browser = 'Unsupported webkit-based browser ' +\n 'with GUM support but no WebRTC support.';\n return result;\n }\n }\n\n // Edge.\n } else if (navigator.mediaDevices &&\n navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/)) {\n result.browser = 'edge';\n result.version = this.extractVersion(navigator.userAgent,\n /Edge\\/(\\d+).(\\d+)$/, 2);\n\n // Default fallthrough: not supported.\n } else {\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n return result;\n }\n};\n\n// Export.\nmodule.exports = {\n log: utils.log,\n disableLog: utils.disableLog,\n browserDetails: utils.detectBrowser(),\n extractVersion: utils.extractVersion\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/webrtc-adapter/src/js/utils.js\n ** module id = 1\n ** module chunks = 0\n **/","/**\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 && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isObject.js\n ** module id = 2\n ** module chunks = 0\n **/","var freeGlobal = require('./_freeGlobal');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_root.js\n ** module id = 3\n ** module chunks = 0\n **/","import BarcodeReader from './barcode_reader';\r\nimport {merge} from 'lodash';\r\n\r\nfunction EANReader(opts, supplements) {\r\n opts = merge(getDefaulConfig(), opts);\r\n BarcodeReader.call(this, opts, supplements);\r\n}\r\n\r\nfunction getDefaulConfig() {\r\n var config = {};\r\n\r\n Object.keys(EANReader.CONFIG_KEYS).forEach(function(key) {\r\n config[key] = EANReader.CONFIG_KEYS[key].default;\r\n });\r\n return config;\r\n}\r\n\r\nvar properties = {\r\n CODE_L_START: {value: 0},\r\n CODE_G_START: {value: 10},\r\n START_PATTERN: {value: [1, 1, 1]},\r\n STOP_PATTERN: {value: [1, 1, 1]},\r\n MIDDLE_PATTERN: {value: [1, 1, 1, 1, 1]},\r\n EXTENSION_START_PATTERN: {value: [1, 1, 2]},\r\n CODE_PATTERN: {value: [\r\n [3, 2, 1, 1],\r\n [2, 2, 2, 1],\r\n [2, 1, 2, 2],\r\n [1, 4, 1, 1],\r\n [1, 1, 3, 2],\r\n [1, 2, 3, 1],\r\n [1, 1, 1, 4],\r\n [1, 3, 1, 2],\r\n [1, 2, 1, 3],\r\n [3, 1, 1, 2],\r\n [1, 1, 2, 3],\r\n [1, 2, 2, 2],\r\n [2, 2, 1, 2],\r\n [1, 1, 4, 1],\r\n [2, 3, 1, 1],\r\n [1, 3, 2, 1],\r\n [4, 1, 1, 1],\r\n [2, 1, 3, 1],\r\n [3, 1, 2, 1],\r\n [2, 1, 1, 3]\r\n ]},\r\n CODE_FREQUENCY: {value: [0, 11, 13, 14, 19, 25, 28, 21, 22, 26]},\r\n SINGLE_CODE_ERROR: {value: 0.70},\r\n AVG_CODE_ERROR: {value: 0.48},\r\n FORMAT: {value: \"ean_13\", writeable: false}\r\n};\r\n\r\nEANReader.prototype = Object.create(BarcodeReader.prototype, properties);\r\nEANReader.prototype.constructor = EANReader;\r\n\r\nEANReader.prototype._decodeCode = function(start, coderange) {\r\n var counter = [0, 0, 0, 0],\r\n i,\r\n self = this,\r\n offset = start,\r\n isWhite = !self._row[offset],\r\n counterPos = 0,\r\n bestMatch = {\r\n error: Number.MAX_VALUE,\r\n code: -1,\r\n start: start,\r\n end: start\r\n },\r\n code,\r\n error;\r\n\r\n if (!coderange) {\r\n coderange = self.CODE_PATTERN.length;\r\n }\r\n\r\n for ( i = offset; i < self._row.length; i++) {\r\n if (self._row[i] ^ isWhite) {\r\n counter[counterPos]++;\r\n } else {\r\n if (counterPos === counter.length - 1) {\r\n for (code = 0; code < coderange; code++) {\r\n error = self._matchPattern(counter, self.CODE_PATTERN[code]);\r\n if (error < bestMatch.error) {\r\n bestMatch.code = code;\r\n bestMatch.error = error;\r\n }\r\n }\r\n bestMatch.end = i;\r\n if (bestMatch.error > self.AVG_CODE_ERROR) {\r\n return null;\r\n }\r\n return bestMatch;\r\n } else {\r\n counterPos++;\r\n }\r\n counter[counterPos] = 1;\r\n isWhite = !isWhite;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nEANReader.prototype._findPattern = function(pattern, offset, isWhite, tryHarder, epsilon) {\r\n var counter = [],\r\n self = this,\r\n i,\r\n counterPos = 0,\r\n bestMatch = {\r\n error: Number.MAX_VALUE,\r\n code: -1,\r\n start: 0,\r\n end: 0\r\n },\r\n error,\r\n j,\r\n sum;\r\n\r\n if (!offset) {\r\n offset = self._nextSet(self._row);\r\n }\r\n\r\n if (isWhite === undefined) {\r\n isWhite = false;\r\n }\r\n\r\n if (tryHarder === undefined) {\r\n tryHarder = true;\r\n }\r\n\r\n if ( epsilon === undefined) {\r\n epsilon = self.AVG_CODE_ERROR;\r\n }\r\n\r\n for ( i = 0; i < pattern.length; i++) {\r\n counter[i] = 0;\r\n }\r\n\r\n for ( i = offset; i < self._row.length; i++) {\r\n if (self._row[i] ^ isWhite) {\r\n counter[counterPos]++;\r\n } else {\r\n if (counterPos === counter.length - 1) {\r\n sum = 0;\r\n for ( j = 0; j < counter.length; j++) {\r\n sum += counter[j];\r\n }\r\n error = self._matchPattern(counter, pattern);\r\n\r\n if (error < epsilon) {\r\n bestMatch.error = error;\r\n bestMatch.start = i - sum;\r\n bestMatch.end = i;\r\n return bestMatch;\r\n }\r\n if (tryHarder) {\r\n for ( j = 0; j < counter.length - 2; j++) {\r\n counter[j] = counter[j + 2];\r\n }\r\n counter[counter.length - 2] = 0;\r\n counter[counter.length - 1] = 0;\r\n counterPos--;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n counterPos++;\r\n }\r\n counter[counterPos] = 1;\r\n isWhite = !isWhite;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nEANReader.prototype._findStart = function() {\r\n var self = this,\r\n leadingWhitespaceStart,\r\n offset = self._nextSet(self._row),\r\n startInfo;\r\n\r\n while (!startInfo) {\r\n startInfo = self._findPattern(self.START_PATTERN, offset);\r\n if (!startInfo) {\r\n return null;\r\n }\r\n leadingWhitespaceStart = startInfo.start - (startInfo.end - startInfo.start);\r\n if (leadingWhitespaceStart >= 0) {\r\n if (self._matchRange(leadingWhitespaceStart, startInfo.start, 0)) {\r\n return startInfo;\r\n }\r\n }\r\n offset = startInfo.end;\r\n startInfo = null;\r\n }\r\n};\r\n\r\nEANReader.prototype._verifyTrailingWhitespace = function(endInfo) {\r\n var self = this,\r\n trailingWhitespaceEnd;\r\n\r\n trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start);\r\n if (trailingWhitespaceEnd < self._row.length) {\r\n if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {\r\n return endInfo;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nEANReader.prototype._findEnd = function(offset, isWhite) {\r\n var self = this,\r\n endInfo = self._findPattern(self.STOP_PATTERN, offset, isWhite, false);\r\n\r\n return endInfo !== null ? self._verifyTrailingWhitespace(endInfo) : null;\r\n};\r\n\r\nEANReader.prototype._calculateFirstDigit = function(codeFrequency) {\r\n var i,\r\n self = this;\r\n\r\n for ( i = 0; i < self.CODE_FREQUENCY.length; i++) {\r\n if (codeFrequency === self.CODE_FREQUENCY[i]) {\r\n return i;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nEANReader.prototype._decodePayload = function(code, result, decodedCodes) {\r\n var i,\r\n self = this,\r\n codeFrequency = 0x0,\r\n firstDigit;\r\n\r\n for ( i = 0; i < 6; i++) {\r\n code = self._decodeCode(code.end);\r\n if (!code) {\r\n return null;\r\n }\r\n if (code.code >= self.CODE_G_START) {\r\n code.code = code.code - self.CODE_G_START;\r\n codeFrequency |= 1 << (5 - i);\r\n } else {\r\n codeFrequency |= 0 << (5 - i);\r\n }\r\n result.push(code.code);\r\n decodedCodes.push(code);\r\n }\r\n\r\n firstDigit = self._calculateFirstDigit(codeFrequency);\r\n if (firstDigit === null) {\r\n return null;\r\n }\r\n result.unshift(firstDigit);\r\n\r\n code = self._findPattern(self.MIDDLE_PATTERN, code.end, true, false);\r\n if (code === null) {\r\n return null;\r\n }\r\n decodedCodes.push(code);\r\n\r\n for ( i = 0; i < 6; i++) {\r\n code = self._decodeCode(code.end, self.CODE_G_START);\r\n if (!code) {\r\n return null;\r\n }\r\n decodedCodes.push(code);\r\n result.push(code.code);\r\n }\r\n\r\n return code;\r\n};\r\n\r\nEANReader.prototype._decode = function() {\r\n var startInfo,\r\n self = this,\r\n code,\r\n result = [],\r\n decodedCodes = [],\r\n resultInfo = {};\r\n\r\n startInfo = self._findStart();\r\n if (!startInfo) {\r\n return null;\r\n }\r\n code = {\r\n code: startInfo.code,\r\n start: startInfo.start,\r\n end: startInfo.end\r\n };\r\n decodedCodes.push(code);\r\n code = self._decodePayload(code, result, decodedCodes);\r\n if (!code) {\r\n return null;\r\n }\r\n code = self._findEnd(code.end, false);\r\n if (!code){\r\n return null;\r\n }\r\n\r\n decodedCodes.push(code);\r\n\r\n // Checksum\r\n if (!self._checksum(result)) {\r\n return null;\r\n }\r\n\r\n if (this.supplements.length > 0) {\r\n let ext = this._decodeExtensions(code.end);\r\n if (!ext) {\r\n return null;\r\n }\r\n let lastCode = ext.decodedCodes[ext.decodedCodes.length-1],\r\n endInfo = {\r\n start: lastCode.start + (((lastCode.end - lastCode.start) / 2) | 0),\r\n end: lastCode.end\r\n };\r\n if(!self._verifyTrailingWhitespace(endInfo)) {\r\n return null;\r\n }\r\n resultInfo = {\r\n supplement: ext,\r\n code: result.join(\"\") + ext.code\r\n }\r\n }\r\n\r\n return {\r\n code: result.join(\"\"),\r\n start: startInfo.start,\r\n end: code.end,\r\n codeset: \"\",\r\n startInfo: startInfo,\r\n decodedCodes: decodedCodes,\r\n ...resultInfo\r\n };\r\n};\r\n\r\nEANReader.prototype._decodeExtensions = function(offset) {\r\n var i,\r\n start = this._nextSet(this._row, offset),\r\n startInfo = this._findPattern(this.EXTENSION_START_PATTERN, start, false, false),\r\n result;\r\n\r\n if (startInfo === null) {\r\n return null;\r\n }\r\n\r\n for (i = 0; i < this.supplements.length; i++) {\r\n result = this.supplements[i].decode(this._row, startInfo.end);\r\n if (result !== null) {\r\n return {\r\n code: result.code,\r\n start,\r\n startInfo,\r\n end: result.end,\r\n codeset: \"\",\r\n decodedCodes: result.decodedCodes\r\n }\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nEANReader.prototype._checksum = function(result) {\r\n var sum = 0, i;\r\n\r\n for ( i = result.length - 2; i >= 0; i -= 2) {\r\n sum += result[i];\r\n }\r\n sum *= 3;\r\n for ( i = result.length - 1; i >= 0; i -= 2) {\r\n sum += result[i];\r\n }\r\n return sum % 10 === 0;\r\n};\r\n\r\nEANReader.CONFIG_KEYS = {\r\n supplements: {\r\n 'type': 'arrayOf(string)',\r\n 'default': [],\r\n 'description': 'Allowed extensions to be decoded (2 and/or 5)'\r\n }\r\n};\r\n\r\nexport default (EANReader);\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/reader/ean_reader.js\n **/","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_getNative.js\n ** module id = 5\n ** module chunks = 0\n **/","export default {\r\n drawRect: function(pos, size, ctx, style){\r\n ctx.strokeStyle = style.color;\r\n ctx.fillStyle = style.color;\r\n ctx.lineWidth = 1;\r\n ctx.beginPath();\r\n ctx.strokeRect(pos.x, pos.y, size.x, size.y);\r\n },\r\n drawPath: function(path, def, ctx, style) {\r\n ctx.strokeStyle = style.color;\r\n ctx.fillStyle = style.color;\r\n ctx.lineWidth = style.lineWidth;\r\n ctx.beginPath();\r\n ctx.moveTo(path[0][def.x], path[0][def.y]);\r\n for (var j = 1; j < path.length; j++) {\r\n ctx.lineTo(path[j][def.x], path[j][def.y]);\r\n }\r\n ctx.closePath();\r\n ctx.stroke();\r\n },\r\n drawImage: function(imageData, size, ctx) {\r\n var canvasData = ctx.getImageData(0, 0, size.x, size.y),\r\n data = canvasData.data,\r\n imageDataPos = imageData.length,\r\n canvasDataPos = data.length,\r\n value;\r\n\r\n if (canvasDataPos / imageDataPos !== 4) {\r\n return false;\r\n }\r\n while (imageDataPos--){\r\n value = imageData[imageDataPos];\r\n data[--canvasDataPos] = 255;\r\n data[--canvasDataPos] = value;\r\n data[--canvasDataPos] = value;\r\n data[--canvasDataPos] = value;\r\n }\r\n ctx.putImageData(canvasData, 0, 0);\r\n return true;\r\n }\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/image_debug.js\n **/","function BarcodeReader(config, supplements) {\r\n this._row = [];\r\n this.config = config || {};\r\n this.supplements = supplements;\r\n return this;\r\n}\r\n\r\nBarcodeReader.prototype._nextUnset = function(line, start) {\r\n var i;\r\n\r\n if (start === undefined) {\r\n start = 0;\r\n }\r\n for (i = start; i < line.length; i++) {\r\n if (!line[i]) {\r\n return i;\r\n }\r\n }\r\n return line.length;\r\n};\r\n\r\nBarcodeReader.prototype._matchPattern = function(counter, code, maxSingleError) {\r\n var i,\r\n error = 0,\r\n singleError = 0,\r\n sum = 0,\r\n modulo = 0,\r\n barWidth,\r\n count,\r\n scaled;\r\n\r\n maxSingleError = maxSingleError || this.SINGLE_CODE_ERROR || 1;\r\n\r\n for (i = 0; i < counter.length; i++) {\r\n sum += counter[i];\r\n modulo += code[i];\r\n }\r\n if (sum < modulo) {\r\n return Number.MAX_VALUE;\r\n }\r\n barWidth = sum / modulo;\r\n maxSingleError *= barWidth;\r\n\r\n for (i = 0; i < counter.length; i++) {\r\n count = counter[i];\r\n scaled = code[i] * barWidth;\r\n singleError = Math.abs(count - scaled) / scaled;\r\n if (singleError > maxSingleError) {\r\n return Number.MAX_VALUE;\r\n }\r\n error += singleError;\r\n }\r\n return error / modulo;\r\n};\r\n\r\nBarcodeReader.prototype._nextSet = function(line, offset) {\r\n var i;\r\n\r\n offset = offset || 0;\r\n for (i = offset; i < line.length; i++) {\r\n if (line[i]) {\r\n return i;\r\n }\r\n }\r\n return line.length;\r\n};\r\n\r\nBarcodeReader.prototype._correctBars = function(counter, correction, indices) {\r\n var length = indices.length,\r\n tmp = 0;\r\n while(length--) {\r\n tmp = counter[indices[length]] * (1 - ((1 - correction) / 2));\r\n if (tmp > 1) {\r\n counter[indices[length]] = tmp;\r\n }\r\n }\r\n}\r\n\r\nBarcodeReader.prototype._matchTrace = function(cmpCounter, epsilon) {\r\n var counter = [],\r\n i,\r\n self = this,\r\n offset = self._nextSet(self._row),\r\n isWhite = !self._row[offset],\r\n counterPos = 0,\r\n bestMatch = {\r\n error: Number.MAX_VALUE,\r\n code: -1,\r\n start: 0\r\n },\r\n error;\r\n\r\n if (cmpCounter) {\r\n for ( i = 0; i < cmpCounter.length; i++) {\r\n counter.push(0);\r\n }\r\n for ( i = offset; i < self._row.length; i++) {\r\n if (self._row[i] ^ isWhite) {\r\n counter[counterPos]++;\r\n } else {\r\n if (counterPos === counter.length - 1) {\r\n error = self._matchPattern(counter, cmpCounter);\r\n\r\n if (error < epsilon) {\r\n bestMatch.start = i - offset;\r\n bestMatch.end = i;\r\n bestMatch.counter = counter;\r\n return bestMatch;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n counterPos++;\r\n }\r\n counter[counterPos] = 1;\r\n isWhite = !isWhite;\r\n }\r\n }\r\n } else {\r\n counter.push(0);\r\n for ( i = offset; i < self._row.length; i++) {\r\n if (self._row[i] ^ isWhite) {\r\n counter[counterPos]++;\r\n } else {\r\n counterPos++;\r\n counter.push(0);\r\n counter[counterPos] = 1;\r\n isWhite = !isWhite;\r\n }\r\n }\r\n }\r\n\r\n // if cmpCounter was not given\r\n bestMatch.start = offset;\r\n bestMatch.end = self._row.length - 1;\r\n bestMatch.counter = counter;\r\n return bestMatch;\r\n};\r\n\r\nBarcodeReader.prototype.decodePattern = function(pattern) {\r\n var self = this,\r\n result;\r\n\r\n self._row = pattern;\r\n result = self._decode();\r\n if (result === null) {\r\n self._row.reverse();\r\n result = self._decode();\r\n if (result) {\r\n result.direction = BarcodeReader.DIRECTION.REVERSE;\r\n result.start = self._row.length - result.start;\r\n result.end = self._row.length - result.end;\r\n }\r\n } else {\r\n result.direction = BarcodeReader.DIRECTION.FORWARD;\r\n }\r\n if (result) {\r\n result.format = self.FORMAT;\r\n }\r\n return result;\r\n};\r\n\r\nBarcodeReader.prototype._matchRange = function(start, end, value) {\r\n var i;\r\n\r\n start = start < 0 ? 0 : start;\r\n for (i = start; i < end; i++) {\r\n if (this._row[i] !== value) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n};\r\n\r\nBarcodeReader.prototype._fillCounters = function(offset, end, isWhite) {\r\n var self = this,\r\n counterPos = 0,\r\n i,\r\n counters = [];\r\n\r\n isWhite = (typeof isWhite !== 'undefined') ? isWhite : true;\r\n offset = (typeof offset !== 'undefined') ? offset : self._nextUnset(self._row);\r\n end = end || self._row.length;\r\n\r\n counters[counterPos] = 0;\r\n for (i = offset; i < end; i++) {\r\n if (self._row[i] ^ isWhite) {\r\n counters[counterPos]++;\r\n } else {\r\n counterPos++;\r\n counters[counterPos] = 1;\r\n isWhite = !isWhite;\r\n }\r\n }\r\n return counters;\r\n};\r\n\r\nObject.defineProperty(BarcodeReader.prototype, \"FORMAT\", {\r\n value: 'unknown',\r\n writeable: false\r\n});\r\n\r\nBarcodeReader.DIRECTION = {\r\n FORWARD: 1,\r\n REVERSE: -1\r\n};\r\n\r\nBarcodeReader.Exception = {\r\n StartNotFoundException: \"Start-Info was not found!\",\r\n CodeNotFoundException: \"Code could not be found!\",\r\n PatternNotFoundException: \"Pattern could not be found!\"\r\n};\r\n\r\nBarcodeReader.CONFIG_KEYS = {};\r\n\r\nexport default BarcodeReader;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/reader/barcode_reader.js\n **/","module.exports = clone\n\n/**\n * Creates a new vec2 initialized with values from an existing vector\n *\n * @param {vec2} a vector to clone\n * @returns {vec2} a new 2D vector\n */\nfunction clone(a) {\n var out = new Float32Array(2)\n out[0] = a[0]\n out[1] = a[1]\n return out\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gl-vec2/clone.js\n ** module id = 8\n ** module chunks = 0\n **/","var isSymbol = require('./isSymbol');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_toKey.js\n ** module id = 9\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/eq.js\n ** module id = 10\n ** module chunks = 0\n **/","var isArrayLikeObject = require('./isArrayLikeObject');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\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 objectToString = objectProto.toString;\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 */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\nmodule.exports = isArguments;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isArguments.js\n ** module id = 11\n ** module chunks = 0\n **/","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isArrayLike.js\n ** module id = 12\n ** module chunks = 0\n **/","/**\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 && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isObjectLike.js\n ** module id = 13\n ** module chunks = 0\n **/","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/keys.js\n ** module id = 14\n ** module chunks = 0\n **/","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/merge.js\n ** module id = 15\n ** module chunks = 0\n **/","export default {\r\n init: function(arr, val) {\r\n var l = arr.length;\r\n while (l--) {\r\n arr[l] = val;\r\n }\r\n },\r\n\r\n /**\r\n * Shuffles the content of an array\r\n * @return {Array} the array itself shuffled\r\n */\r\n shuffle: function(arr) {\r\n var i = arr.length - 1, j, x;\r\n for (i; i >= 0; i--) {\r\n j = Math.floor(Math.random() * i);\r\n x = arr[i];\r\n arr[i] = arr[j];\r\n arr[j] = x;\r\n }\r\n return arr;\r\n },\r\n\r\n toPointList: function(arr) {\r\n var i, j, row = [], rows = [];\r\n for ( i = 0; i < arr.length; i++) {\r\n row = [];\r\n for ( j = 0; j < arr[i].length; j++) {\r\n row[j] = arr[i][j];\r\n }\r\n rows[i] = \"[\" + row.join(\",\") + \"]\";\r\n }\r\n return \"[\" + rows.join(\",\\r\\n\") + \"]\";\r\n },\r\n\r\n /**\r\n * returns the elements which's score is bigger than the threshold\r\n * @return {Array} the reduced array\r\n */\r\n threshold: function(arr, threshold, scoreFunc) {\r\n var i, queue = [];\r\n for ( i = 0; i < arr.length; i++) {\r\n if (scoreFunc.apply(arr, [arr[i]]) >= threshold) {\r\n queue.push(arr[i]);\r\n }\r\n }\r\n return queue;\r\n },\r\n\r\n maxIndex: function(arr) {\r\n var i, max = 0;\r\n for ( i = 0; i < arr.length; i++) {\r\n if (arr[i] > arr[max]) {\r\n max = i;\r\n }\r\n }\r\n return max;\r\n },\r\n\r\n max: function(arr) {\r\n var i, max = 0;\r\n for ( i = 0; i < arr.length; i++) {\r\n if (arr[i] > max) {\r\n max = arr[i];\r\n }\r\n }\r\n return max;\r\n },\r\n\r\n sum: function(arr) {\r\n var length = arr.length,\r\n sum = 0;\r\n\r\n while (length--) {\r\n sum += arr[length];\r\n }\r\n return sum;\r\n }\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/array_helper.js\n **/","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\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 ? entries.length : 0;\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_ListCache.js\n ** module id = 17\n ** module chunks = 0\n **/","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\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 this.__data__ = new ListCache(entries);\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_Stack.js\n ** module id = 18\n ** module chunks = 0\n **/","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_Symbol.js\n ** module id = 19\n ** module chunks = 0\n **/","var eq = require('./eq');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_assocIndexOf.js\n ** module id = 20\n ** module chunks = 0\n **/","var isKeyable = require('./_isKeyable');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_getMapData.js\n ** module id = 21\n ** module chunks = 0\n **/","/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\nmodule.exports = isHostObject;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_isHostObject.js\n ** module id = 22\n ** module chunks = 0\n **/","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_isKey.js\n ** module id = 23\n ** module chunks = 0\n **/","/** 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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_isPrototype.js\n ** module id = 24\n ** module chunks = 0\n **/","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_nativeCreate.js\n ** module id = 25\n ** module chunks = 0\n **/","import Cluster2 from './cluster';\r\nimport ArrayHelper from './array_helper';\r\nconst vec2 = {\r\n clone: require('gl-vec2/clone')\r\n};\r\nconst vec3 = {\r\n clone: require('gl-vec3/clone')\r\n};\r\n\r\n/**\r\n * @param x x-coordinate\r\n * @param y y-coordinate\r\n * @return ImageReference {x,y} Coordinate\r\n */\r\nexport function imageRef(x, y) {\r\n var that = {\r\n x: x,\r\n y: y,\r\n toVec2: function() {\r\n return vec2.clone([this.x, this.y]);\r\n },\r\n toVec3: function() {\r\n return vec3.clone([this.x, this.y, 1]);\r\n },\r\n round: function() {\r\n this.x = this.x > 0.0 ? Math.floor(this.x + 0.5) : Math.floor(this.x - 0.5);\r\n this.y = this.y > 0.0 ? Math.floor(this.y + 0.5) : Math.floor(this.y - 0.5);\r\n return this;\r\n }\r\n };\r\n return that;\r\n};\r\n\r\n/**\r\n * Computes an integral image of a given grayscale image.\r\n * @param imageDataContainer {ImageDataContainer} the image to be integrated\r\n */\r\nexport function computeIntegralImage2(imageWrapper, integralWrapper) {\r\n var imageData = imageWrapper.data;\r\n var width = imageWrapper.size.x;\r\n var height = imageWrapper.size.y;\r\n var integralImageData = integralWrapper.data;\r\n var sum = 0, posA = 0, posB = 0, posC = 0, posD = 0, x, y;\r\n\r\n // sum up first column\r\n posB = width;\r\n sum = 0;\r\n for ( y = 1; y < height; y++) {\r\n sum += imageData[posA];\r\n integralImageData[posB] += sum;\r\n posA += width;\r\n posB += width;\r\n }\r\n\r\n posA = 0;\r\n posB = 1;\r\n sum = 0;\r\n for ( x = 1; x < width; x++) {\r\n sum += imageData[posA];\r\n integralImageData[posB] += sum;\r\n posA++;\r\n posB++;\r\n }\r\n\r\n for ( y = 1; y < height; y++) {\r\n posA = y * width + 1;\r\n posB = (y - 1) * width + 1;\r\n posC = y * width;\r\n posD = (y - 1) * width;\r\n for ( x = 1; x < width; x++) {\r\n integralImageData[posA] +=\r\n imageData[posA] + integralImageData[posB] + integralImageData[posC] - integralImageData[posD];\r\n posA++;\r\n posB++;\r\n posC++;\r\n posD++;\r\n }\r\n }\r\n};\r\n\r\nexport function computeIntegralImage(imageWrapper, integralWrapper) {\r\n var imageData = imageWrapper.data;\r\n var width = imageWrapper.size.x;\r\n var height = imageWrapper.size.y;\r\n var integralImageData = integralWrapper.data;\r\n var sum = 0;\r\n\r\n // sum up first row\r\n for (var i = 0; i < width; i++) {\r\n sum += imageData[i];\r\n integralImageData[i] = sum;\r\n }\r\n\r\n for (var v = 1; v < height; v++) {\r\n sum = 0;\r\n for (var u = 0; u < width; u++) {\r\n sum += imageData[v * width + u];\r\n integralImageData[((v) * width) + u] = sum + integralImageData[(v - 1) * width + u];\r\n }\r\n }\r\n};\r\n\r\nexport function thresholdImage(imageWrapper, threshold, targetWrapper) {\r\n if (!targetWrapper) {\r\n targetWrapper = imageWrapper;\r\n }\r\n var imageData = imageWrapper.data, length = imageData.length, targetData = targetWrapper.data;\r\n\r\n while (length--) {\r\n targetData[length] = imageData[length] < threshold ? 1 : 0;\r\n }\r\n};\r\n\r\nexport function computeHistogram(imageWrapper, bitsPerPixel) {\r\n if (!bitsPerPixel) {\r\n bitsPerPixel = 8;\r\n }\r\n var imageData = imageWrapper.data,\r\n length = imageData.length,\r\n bitShift = 8 - bitsPerPixel,\r\n bucketCnt = 1 << bitsPerPixel,\r\n hist = new Int32Array(bucketCnt);\r\n\r\n while (length--) {\r\n hist[imageData[length] >> bitShift]++;\r\n }\r\n return hist;\r\n};\r\n\r\nexport function sharpenLine(line) {\r\n var i,\r\n length = line.length,\r\n left = line[0],\r\n center = line[1],\r\n right;\r\n\r\n for (i = 1; i < length - 1; i++) {\r\n right = line[i + 1];\r\n // -1 4 -1 kernel\r\n line[i - 1] = (((center * 2) - left - right)) & 255;\r\n left = center;\r\n center = right;\r\n }\r\n return line;\r\n};\r\n\r\nexport function determineOtsuThreshold(imageWrapper, bitsPerPixel) {\r\n if (!bitsPerPixel) {\r\n bitsPerPixel = 8;\r\n }\r\n var hist,\r\n threshold,\r\n bitShift = 8 - bitsPerPixel;\r\n\r\n function px(init, end) {\r\n var sum = 0, i;\r\n for ( i = init; i <= end; i++) {\r\n sum += hist[i];\r\n }\r\n return sum;\r\n }\r\n\r\n function mx(init, end) {\r\n var i, sum = 0;\r\n\r\n for ( i = init; i <= end; i++) {\r\n sum += i * hist[i];\r\n }\r\n\r\n return sum;\r\n }\r\n\r\n function determineThreshold() {\r\n var vet = [0], p1, p2, p12, k, m1, m2, m12,\r\n max = (1 << bitsPerPixel) - 1;\r\n\r\n hist = computeHistogram(imageWrapper, bitsPerPixel);\r\n for ( k = 1; k < max; k++) {\r\n p1 = px(0, k);\r\n p2 = px(k + 1, max);\r\n p12 = p1 * p2;\r\n if (p12 === 0) {\r\n p12 = 1;\r\n }\r\n m1 = mx(0, k) * p2;\r\n m2 = mx(k + 1, max) * p1;\r\n m12 = m1 - m2;\r\n vet[k] = m12 * m12 / p12;\r\n }\r\n return ArrayHelper.maxIndex(vet);\r\n }\r\n\r\n threshold = determineThreshold();\r\n return threshold << bitShift;\r\n};\r\n\r\nexport function otsuThreshold(imageWrapper, targetWrapper) {\r\n var threshold = determineOtsuThreshold(imageWrapper);\r\n\r\n thresholdImage(imageWrapper, threshold, targetWrapper);\r\n return threshold;\r\n};\r\n\r\n// local thresholding\r\nexport function computeBinaryImage(imageWrapper, integralWrapper, targetWrapper) {\r\n computeIntegralImage(imageWrapper, integralWrapper);\r\n\r\n if (!targetWrapper) {\r\n targetWrapper = imageWrapper;\r\n }\r\n var imageData = imageWrapper.data;\r\n var targetData = targetWrapper.data;\r\n var width = imageWrapper.size.x;\r\n var height = imageWrapper.size.y;\r\n var integralImageData = integralWrapper.data;\r\n var sum = 0, v, u, kernel = 3, A, B, C, D, avg, size = (kernel * 2 + 1) * (kernel * 2 + 1);\r\n\r\n // clear out top & bottom-border\r\n for ( v = 0; v <= kernel; v++) {\r\n for ( u = 0; u < width; u++) {\r\n targetData[((v) * width) + u] = 0;\r\n targetData[(((height - 1) - v) * width) + u] = 0;\r\n }\r\n }\r\n\r\n // clear out left & right border\r\n for ( v = kernel; v < height - kernel; v++) {\r\n for ( u = 0; u <= kernel; u++) {\r\n targetData[((v) * width) + u] = 0;\r\n targetData[((v) * width) + (width - 1 - u)] = 0;\r\n }\r\n }\r\n\r\n for ( v = kernel + 1; v < height - kernel - 1; v++) {\r\n for ( u = kernel + 1; u < width - kernel; u++) {\r\n A = integralImageData[(v - kernel - 1) * width + (u - kernel - 1)];\r\n B = integralImageData[(v - kernel - 1) * width + (u + kernel)];\r\n C = integralImageData[(v + kernel) * width + (u - kernel - 1)];\r\n D = integralImageData[(v + kernel) * width + (u + kernel)];\r\n sum = D - C - B + A;\r\n avg = sum / (size);\r\n targetData[v * width + u] = imageData[v * width + u] > (avg + 5) ? 0 : 1;\r\n }\r\n }\r\n};\r\n\r\nexport function cluster(points, threshold, property) {\r\n var i, k, cluster, point, clusters = [];\r\n\r\n if (!property) {\r\n property = \"rad\";\r\n }\r\n\r\n function addToCluster(newPoint) {\r\n var found = false;\r\n for ( k = 0; k < clusters.length; k++) {\r\n cluster = clusters[k];\r\n if (cluster.fits(newPoint)) {\r\n cluster.add(newPoint);\r\n found = true;\r\n }\r\n }\r\n return found;\r\n }\r\n\r\n // iterate over each cloud\r\n for ( i = 0; i < points.length; i++) {\r\n point = Cluster2.createPoint(points[i], i, property);\r\n if (!addToCluster(point)) {\r\n clusters.push(Cluster2.create(point, threshold));\r\n }\r\n }\r\n return clusters;\r\n};\r\n\r\nexport const Tracer = {\r\n trace: function(points, vec) {\r\n var iteration, maxIterations = 10, top = [], result = [], centerPos = 0, currentPos = 0;\r\n\r\n function trace(idx, forward) {\r\n var from, to, toIdx, predictedPos, thresholdX = 1, thresholdY = Math.abs(vec[1] / 10), found = false;\r\n\r\n function match(pos, predicted) {\r\n if (pos.x > (predicted.x - thresholdX)\r\n && pos.x < (predicted.x + thresholdX)\r\n && pos.y > (predicted.y - thresholdY)\r\n && pos.y < (predicted.y + thresholdY)) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n // check if the next index is within the vec specifications\r\n // if not, check as long as the threshold is met\r\n\r\n from = points[idx];\r\n if (forward) {\r\n predictedPos = {\r\n x: from.x + vec[0],\r\n y: from.y + vec[1]\r\n };\r\n } else {\r\n predictedPos = {\r\n x: from.x - vec[0],\r\n y: from.y - vec[1]\r\n };\r\n }\r\n\r\n toIdx = forward ? idx + 1 : idx - 1;\r\n to = points[toIdx];\r\n while (to && ( found = match(to, predictedPos)) !== true && (Math.abs(to.y - from.y) < vec[1])) {\r\n toIdx = forward ? toIdx + 1 : toIdx - 1;\r\n to = points[toIdx];\r\n }\r\n\r\n return found ? toIdx : null;\r\n }\r\n\r\n for ( iteration = 0; iteration < maxIterations; iteration++) {\r\n // randomly select point to start with\r\n centerPos = Math.floor(Math.random() * points.length);\r\n\r\n // trace forward\r\n top = [];\r\n currentPos = centerPos;\r\n top.push(points[currentPos]);\r\n while (( currentPos = trace(currentPos, true)) !== null) {\r\n top.push(points[currentPos]);\r\n }\r\n if (centerPos > 0) {\r\n currentPos = centerPos;\r\n while (( currentPos = trace(currentPos, false)) !== null) {\r\n top.push(points[currentPos]);\r\n }\r\n }\r\n\r\n if (top.length > result.length) {\r\n result = top;\r\n }\r\n }\r\n return result;\r\n }\r\n};\r\n\r\nexport const DILATE = 1;\r\nexport const ERODE = 2;\r\n\r\nexport function dilate(inImageWrapper, outImageWrapper) {\r\n var v,\r\n u,\r\n inImageData = inImageWrapper.data,\r\n outImageData = outImageWrapper.data,\r\n height = inImageWrapper.size.y,\r\n width = inImageWrapper.size.x,\r\n sum,\r\n yStart1,\r\n yStart2,\r\n xStart1,\r\n xStart2;\r\n\r\n for ( v = 1; v < height - 1; v++) {\r\n for ( u = 1; u < width - 1; u++) {\r\n yStart1 = v - 1;\r\n yStart2 = v + 1;\r\n xStart1 = u - 1;\r\n xStart2 = u + 1;\r\n sum = inImageData[yStart1 * width + xStart1] + inImageData[yStart1 * width + xStart2] +\r\n inImageData[v * width + u] +\r\n inImageData[yStart2 * width + xStart1] + inImageData[yStart2 * width + xStart2];\r\n outImageData[v * width + u] = sum > 0 ? 1 : 0;\r\n }\r\n }\r\n};\r\n\r\nexport function erode(inImageWrapper, outImageWrapper) {\r\n var v,\r\n u,\r\n inImageData = inImageWrapper.data,\r\n outImageData = outImageWrapper.data,\r\n height = inImageWrapper.size.y,\r\n width = inImageWrapper.size.x,\r\n sum,\r\n yStart1,\r\n yStart2,\r\n xStart1,\r\n xStart2;\r\n\r\n for ( v = 1; v < height - 1; v++) {\r\n for ( u = 1; u < width - 1; u++) {\r\n yStart1 = v - 1;\r\n yStart2 = v + 1;\r\n xStart1 = u - 1;\r\n xStart2 = u + 1;\r\n sum = inImageData[yStart1 * width + xStart1] + inImageData[yStart1 * width + xStart2] +\r\n inImageData[v * width + u] +\r\n inImageData[yStart2 * width + xStart1] + inImageData[yStart2 * width + xStart2];\r\n outImageData[v * width + u] = sum === 5 ? 1 : 0;\r\n }\r\n }\r\n};\r\n\r\nexport function subtract(aImageWrapper, bImageWrapper, resultImageWrapper) {\r\n if (!resultImageWrapper) {\r\n resultImageWrapper = aImageWrapper;\r\n }\r\n var length = aImageWrapper.data.length,\r\n aImageData = aImageWrapper.data,\r\n bImageData = bImageWrapper.data,\r\n cImageData = resultImageWrapper.data;\r\n\r\n while (length--) {\r\n cImageData[length] = aImageData[length] - bImageData[length];\r\n }\r\n};\r\n\r\nexport function bitwiseOr(aImageWrapper, bImageWrapper, resultImageWrapper) {\r\n if (!resultImageWrapper) {\r\n resultImageWrapper = aImageWrapper;\r\n }\r\n var length = aImageWrapper.data.length,\r\n aImageData = aImageWrapper.data,\r\n bImageData = bImageWrapper.data,\r\n cImageData = resultImageWrapper.data;\r\n\r\n while (length--) {\r\n cImageData[length] = aImageData[length] || bImageData[length];\r\n }\r\n};\r\n\r\nexport function countNonZero(imageWrapper) {\r\n var length = imageWrapper.data.length, data = imageWrapper.data, sum = 0;\r\n\r\n while (length--) {\r\n sum += data[length];\r\n }\r\n return sum;\r\n};\r\n\r\nexport function topGeneric(list, top, scoreFunc) {\r\n var i, minIdx = 0, min = 0, queue = [], score, hit, pos;\r\n\r\n for ( i = 0; i < top; i++) {\r\n queue[i] = {\r\n score: 0,\r\n item: null\r\n };\r\n }\r\n\r\n for ( i = 0; i < list.length; i++) {\r\n score = scoreFunc.apply(this, [list[i]]);\r\n if (score > min) {\r\n hit = queue[minIdx];\r\n hit.score = score;\r\n hit.item = list[i];\r\n min = Number.MAX_VALUE;\r\n for ( pos = 0; pos < top; pos++) {\r\n if (queue[pos].score < min) {\r\n min = queue[pos].score;\r\n minIdx = pos;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return queue;\r\n};\r\n\r\nexport function grayArrayFromImage(htmlImage, offsetX, ctx, array) {\r\n ctx.drawImage(htmlImage, offsetX, 0, htmlImage.width, htmlImage.height);\r\n var ctxData = ctx.getImageData(offsetX, 0, htmlImage.width, htmlImage.height).data;\r\n computeGray(ctxData, array);\r\n};\r\n\r\nexport function grayArrayFromContext(ctx, size, offset, array) {\r\n var ctxData = ctx.getImageData(offset.x, offset.y, size.x, size.y).data;\r\n computeGray(ctxData, array);\r\n};\r\n\r\nexport function grayAndHalfSampleFromCanvasData(canvasData, size, outArray) {\r\n var topRowIdx = 0;\r\n var bottomRowIdx = size.x;\r\n var endIdx = Math.floor(canvasData.length / 4);\r\n var outWidth = size.x / 2;\r\n var outImgIdx = 0;\r\n var inWidth = size.x;\r\n var i;\r\n\r\n while (bottomRowIdx < endIdx) {\r\n for ( i = 0; i < outWidth; i++) {\r\n outArray[outImgIdx] = Math.floor((\r\n (0.299 * canvasData[topRowIdx * 4 + 0] +\r\n 0.587 * canvasData[topRowIdx * 4 + 1] +\r\n 0.114 * canvasData[topRowIdx * 4 + 2]) +\r\n (0.299 * canvasData[(topRowIdx + 1) * 4 + 0] +\r\n 0.587 * canvasData[(topRowIdx + 1) * 4 + 1] +\r\n 0.114 * canvasData[(topRowIdx + 1) * 4 + 2]) +\r\n (0.299 * canvasData[(bottomRowIdx) * 4 + 0] +\r\n 0.587 * canvasData[(bottomRowIdx) * 4 + 1] +\r\n 0.114 * canvasData[(bottomRowIdx) * 4 + 2]) +\r\n (0.299 * canvasData[(bottomRowIdx + 1) * 4 + 0] +\r\n 0.587 * canvasData[(bottomRowIdx + 1) * 4 + 1] +\r\n 0.114 * canvasData[(bottomRowIdx + 1) * 4 + 2])) / 4);\r\n outImgIdx++;\r\n topRowIdx = topRowIdx + 2;\r\n bottomRowIdx = bottomRowIdx + 2;\r\n }\r\n topRowIdx = topRowIdx + inWidth;\r\n bottomRowIdx = bottomRowIdx + inWidth;\r\n }\r\n};\r\n\r\nexport function computeGray(imageData, outArray, config) {\r\n var l = (imageData.length / 4) | 0,\r\n i,\r\n singleChannel = config && config.singleChannel === true;\r\n\r\n if (singleChannel) {\r\n for (i = 0; i < l; i++) {\r\n outArray[i] = imageData[i * 4 + 0];\r\n }\r\n } else {\r\n for (i = 0; i < l; i++) {\r\n outArray[i] = Math.floor(\r\n 0.299 * imageData[i * 4 + 0] + 0.587 * imageData[i * 4 + 1] + 0.114 * imageData[i * 4 + 2]);\r\n }\r\n }\r\n};\r\n\r\nexport function loadImageArray(src, callback, canvas) {\r\n if (!canvas) {\r\n canvas = document.createElement('canvas');\r\n }\r\n var img = new Image();\r\n img.callback = callback;\r\n img.onload = function() {\r\n canvas.width = this.width;\r\n canvas.height = this.height;\r\n var ctx = canvas.getContext('2d');\r\n ctx.drawImage(this, 0, 0);\r\n var array = new Uint8Array(this.width * this.height);\r\n ctx.drawImage(this, 0, 0);\r\n var data = ctx.getImageData(0, 0, this.width, this.height).data;\r\n computeGray(data, array);\r\n this.callback(array, {\r\n x: this.width,\r\n y: this.height\r\n }, this);\r\n };\r\n img.src = src;\r\n};\r\n\r\n/**\r\n * @param inImg {ImageWrapper} input image to be sampled\r\n * @param outImg {ImageWrapper} to be stored in\r\n */\r\nexport function halfSample(inImgWrapper, outImgWrapper) {\r\n var inImg = inImgWrapper.data;\r\n var inWidth = inImgWrapper.size.x;\r\n var outImg = outImgWrapper.data;\r\n var topRowIdx = 0;\r\n var bottomRowIdx = inWidth;\r\n var endIdx = inImg.length;\r\n var outWidth = inWidth / 2;\r\n var outImgIdx = 0;\r\n while (bottomRowIdx < endIdx) {\r\n for (var i = 0; i < outWidth; i++) {\r\n outImg[outImgIdx] = Math.floor(\r\n (inImg[topRowIdx] + inImg[topRowIdx + 1] + inImg[bottomRowIdx] + inImg[bottomRowIdx + 1]) / 4);\r\n outImgIdx++;\r\n topRowIdx = topRowIdx + 2;\r\n bottomRowIdx = bottomRowIdx + 2;\r\n }\r\n topRowIdx = topRowIdx + inWidth;\r\n bottomRowIdx = bottomRowIdx + inWidth;\r\n }\r\n};\r\n\r\nexport function hsv2rgb(hsv, rgb) {\r\n var h = hsv[0],\r\n s = hsv[1],\r\n v = hsv[2],\r\n c = v * s,\r\n x = c * (1 - Math.abs((h / 60) % 2 - 1)),\r\n m = v - c,\r\n r = 0,\r\n g = 0,\r\n b = 0;\r\n\r\n rgb = rgb || [0, 0, 0];\r\n\r\n if (h < 60) {\r\n r = c;\r\n g = x;\r\n } else if (h < 120) {\r\n r = x;\r\n g = c;\r\n } else if (h < 180) {\r\n g = c;\r\n b = x;\r\n } else if (h < 240) {\r\n g = x;\r\n b = c;\r\n } else if (h < 300) {\r\n r = x;\r\n b = c;\r\n } else if (h < 360) {\r\n r = c;\r\n b = x;\r\n }\r\n rgb[0] = ((r + m) * 255) | 0;\r\n rgb[1] = ((g + m) * 255) | 0;\r\n rgb[2] = ((b + m) * 255) | 0;\r\n return rgb;\r\n};\r\n\r\nexport function _computeDivisors(n) {\r\n var largeDivisors = [],\r\n divisors = [],\r\n i;\r\n\r\n for (i = 1; i < Math.sqrt(n) + 1; i++) {\r\n if (n % i === 0) {\r\n divisors.push(i);\r\n if (i !== n / i) {\r\n largeDivisors.unshift(Math.floor(n / i));\r\n }\r\n }\r\n }\r\n return divisors.concat(largeDivisors);\r\n};\r\n\r\nfunction _computeIntersection(arr1, arr2) {\r\n var i = 0,\r\n j = 0,\r\n result = [];\r\n\r\n while (i < arr1.length && j < arr2.length) {\r\n if (arr1[i] === arr2[j]) {\r\n result.push(arr1[i]);\r\n i++;\r\n j++;\r\n } else if (arr1[i] > arr2[j]) {\r\n j++;\r\n } else {\r\n i++;\r\n }\r\n }\r\n return result;\r\n};\r\n\r\nexport function calculatePatchSize(patchSize, imgSize) {\r\n var divisorsX = _computeDivisors(imgSize.x),\r\n divisorsY = _computeDivisors(imgSize.y),\r\n wideSide = Math.max(imgSize.x, imgSize.y),\r\n common = _computeIntersection(divisorsX, divisorsY),\r\n nrOfPatchesList = [8, 10, 15, 20, 32, 60, 80],\r\n nrOfPatchesMap = {\r\n \"x-small\": 5,\r\n \"small\": 4,\r\n \"medium\": 3,\r\n \"large\": 2,\r\n \"x-large\": 1\r\n },\r\n nrOfPatchesIdx = nrOfPatchesMap[patchSize] || nrOfPatchesMap.medium,\r\n nrOfPatches = nrOfPatchesList[nrOfPatchesIdx],\r\n desiredPatchSize = Math.floor(wideSide / nrOfPatches),\r\n optimalPatchSize;\r\n\r\n function findPatchSizeForDivisors(divisors) {\r\n var i = 0,\r\n found = divisors[Math.floor(divisors.length / 2)];\r\n\r\n while (i < (divisors.length - 1) && divisors[i] < desiredPatchSize) {\r\n i++;\r\n }\r\n if (i > 0) {\r\n if (Math.abs(divisors[i] - desiredPatchSize) > Math.abs(divisors[i - 1] - desiredPatchSize)) {\r\n found = divisors[i - 1];\r\n } else {\r\n found = divisors[i];\r\n }\r\n }\r\n if (desiredPatchSize / found < nrOfPatchesList[nrOfPatchesIdx + 1] / nrOfPatchesList[nrOfPatchesIdx] &&\r\n desiredPatchSize / found > nrOfPatchesList[nrOfPatchesIdx - 1] / nrOfPatchesList[nrOfPatchesIdx] ) {\r\n return {x: found, y: found};\r\n }\r\n return null;\r\n }\r\n\r\n optimalPatchSize = findPatchSizeForDivisors(common);\r\n if (!optimalPatchSize) {\r\n optimalPatchSize = findPatchSizeForDivisors(_computeDivisors(wideSide));\r\n if (!optimalPatchSize) {\r\n optimalPatchSize = findPatchSizeForDivisors((_computeDivisors(desiredPatchSize * nrOfPatches)));\r\n }\r\n }\r\n return optimalPatchSize;\r\n};\r\n\r\nexport function _parseCSSDimensionValues(value) {\r\n var dimension = {\r\n value: parseFloat(value),\r\n unit: value.indexOf(\"%\") === value.length - 1 ? \"%\" : \"%\"\r\n };\r\n\r\n return dimension;\r\n};\r\n\r\nexport const _dimensionsConverters = {\r\n top: function(dimension, context) {\r\n if (dimension.unit === \"%\") {\r\n return Math.floor(context.height * (dimension.value / 100));\r\n }\r\n },\r\n right: function(dimension, context) {\r\n if (dimension.unit === \"%\") {\r\n return Math.floor(context.width - (context.width * (dimension.value / 100)));\r\n }\r\n },\r\n bottom: function(dimension, context) {\r\n if (dimension.unit === \"%\") {\r\n return Math.floor(context.height - (context.height * (dimension.value / 100)));\r\n }\r\n },\r\n left: function(dimension, context) {\r\n if (dimension.unit === \"%\") {\r\n return Math.floor(context.width * (dimension.value / 100));\r\n }\r\n }\r\n};\r\n\r\nexport function computeImageArea(inputWidth, inputHeight, area) {\r\n var context = {width: inputWidth, height: inputHeight};\r\n\r\n var parsedArea = Object.keys(area).reduce(function(result, key) {\r\n var value = area[key],\r\n parsed = _parseCSSDimensionValues(value),\r\n calculated = _dimensionsConverters[key](parsed, context);\r\n\r\n result[key] = calculated;\r\n return result;\r\n }, {});\r\n\r\n return {\r\n sx: parsedArea.left,\r\n sy: parsedArea.top,\r\n sw: parsedArea.right - parsedArea.left,\r\n sh: parsedArea.bottom - parsedArea.top\r\n };\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/cv_utils.js\n **/","import SubImage from './subImage';\r\nimport {hsv2rgb} from '../common/cv_utils';\r\nimport ArrayHelper from '../common/array_helper';\r\nconst vec2 = {\r\n clone: require('gl-vec2/clone'),\r\n};\r\n\r\n/**\r\n * Represents a basic image combining the data and size.\r\n * In addition, some methods for manipulation are contained.\r\n * @param size {x,y} The size of the image in pixel\r\n * @param data {Array} If given, a flat array containing the pixel data\r\n * @param ArrayType {Type} If given, the desired DataType of the Array (may be typed/non-typed)\r\n * @param initialize {Boolean} Indicating if the array should be initialized on creation.\r\n * @returns {ImageWrapper}\r\n */\r\nfunction ImageWrapper(size, data, ArrayType, initialize) {\r\n if (!data) {\r\n if (ArrayType) {\r\n this.data = new ArrayType(size.x * size.y);\r\n if (ArrayType === Array && initialize) {\r\n ArrayHelper.init(this.data, 0);\r\n }\r\n } else {\r\n this.data = new Uint8Array(size.x * size.y);\r\n if (Uint8Array === Array && initialize) {\r\n ArrayHelper.init(this.data, 0);\r\n }\r\n }\r\n } else {\r\n this.data = data;\r\n }\r\n this.size = size;\r\n}\r\n\r\n/**\r\n * tests if a position is within the image with a given offset\r\n * @param imgRef {x, y} The location to test\r\n * @param border Number the padding value in pixel\r\n * @returns {Boolean} true if location inside the image's border, false otherwise\r\n * @see cvd/image.h\r\n */\r\nImageWrapper.prototype.inImageWithBorder = function(imgRef, border) {\r\n return (imgRef.x >= border)\r\n && (imgRef.y >= border)\r\n && (imgRef.x < (this.size.x - border))\r\n && (imgRef.y < (this.size.y - border));\r\n};\r\n\r\n/**\r\n * Performs bilinear sampling\r\n * @param inImg Image to extract sample from\r\n * @param x the x-coordinate\r\n * @param y the y-coordinate\r\n * @returns the sampled value\r\n * @see cvd/vision.h\r\n */\r\nImageWrapper.sample = function(inImg, x, y) {\r\n var lx = Math.floor(x);\r\n var ly = Math.floor(y);\r\n var w = inImg.size.x;\r\n var base = ly * inImg.size.x + lx;\r\n var a = inImg.data[base + 0];\r\n var b = inImg.data[base + 1];\r\n var c = inImg.data[base + w];\r\n var d = inImg.data[base + w + 1];\r\n var e = a - b;\r\n x -= lx;\r\n y -= ly;\r\n\r\n var result = Math.floor(x * (y * (e - c + d) - e) + y * (c - a) + a);\r\n return result;\r\n};\r\n\r\n/**\r\n * Initializes a given array. Sets each element to zero.\r\n * @param array {Array} The array to initialize\r\n */\r\nImageWrapper.clearArray = function(array) {\r\n var l = array.length;\r\n while (l--) {\r\n array[l] = 0;\r\n }\r\n};\r\n\r\n/**\r\n * Creates a {SubImage} from the current image ({this}).\r\n * @param from {ImageRef} The position where to start the {SubImage} from. (top-left corner)\r\n * @param size {ImageRef} The size of the resulting image\r\n * @returns {SubImage} A shared part of the original image\r\n */\r\nImageWrapper.prototype.subImage = function(from, size) {\r\n return new SubImage(from, size, this);\r\n};\r\n\r\n/**\r\n * Creates an {ImageWrapper) and copies the needed underlying image-data area\r\n * @param imageWrapper {ImageWrapper} The target {ImageWrapper} where the data should be copied\r\n * @param from {ImageRef} The location where to copy from (top-left location)\r\n */\r\nImageWrapper.prototype.subImageAsCopy = function(imageWrapper, from) {\r\n var sizeY = imageWrapper.size.y, sizeX = imageWrapper.size.x;\r\n var x, y;\r\n for ( x = 0; x < sizeX; x++) {\r\n for ( y = 0; y < sizeY; y++) {\r\n imageWrapper.data[y * sizeX + x] = this.data[(from.y + y) * this.size.x + from.x + x];\r\n }\r\n }\r\n};\r\n\r\nImageWrapper.prototype.copyTo = function(imageWrapper) {\r\n var length = this.data.length, srcData = this.data, dstData = imageWrapper.data;\r\n\r\n while (length--) {\r\n dstData[length] = srcData[length];\r\n }\r\n};\r\n\r\n/**\r\n * Retrieves a given pixel position from the image\r\n * @param x {Number} The x-position\r\n * @param y {Number} The y-position\r\n * @returns {Number} The grayscale value at the pixel-position\r\n */\r\nImageWrapper.prototype.get = function(x, y) {\r\n return this.data[y * this.size.x + x];\r\n};\r\n\r\n/**\r\n * Retrieves a given pixel position from the image\r\n * @param x {Number} The x-position\r\n * @param y {Number} The y-position\r\n * @returns {Number} The grayscale value at the pixel-position\r\n */\r\nImageWrapper.prototype.getSafe = function(x, y) {\r\n var i;\r\n\r\n if (!this.indexMapping) {\r\n this.indexMapping = {\r\n x: [],\r\n y: []\r\n };\r\n for (i = 0; i < this.size.x; i++) {\r\n this.indexMapping.x[i] = i;\r\n this.indexMapping.x[i + this.size.x] = i;\r\n }\r\n for (i = 0; i < this.size.y; i++) {\r\n this.indexMapping.y[i] = i;\r\n this.indexMapping.y[i + this.size.y] = i;\r\n }\r\n }\r\n return this.data[(this.indexMapping.y[y + this.size.y]) * this.size.x + this.indexMapping.x[x + this.size.x]];\r\n};\r\n\r\n/**\r\n * Sets a given pixel position in the image\r\n * @param x {Number} The x-position\r\n * @param y {Number} The y-position\r\n * @param value {Number} The grayscale value to set\r\n * @returns {ImageWrapper} The Image itself (for possible chaining)\r\n */\r\nImageWrapper.prototype.set = function(x, y, value) {\r\n this.data[y * this.size.x + x] = value;\r\n return this;\r\n};\r\n\r\n/**\r\n * Sets the border of the image (1 pixel) to zero\r\n */\r\nImageWrapper.prototype.zeroBorder = function() {\r\n var i, width = this.size.x, height = this.size.y, data = this.data;\r\n for ( i = 0; i < width; i++) {\r\n data[i] = data[(height - 1) * width + i] = 0;\r\n }\r\n for ( i = 1; i < height - 1; i++) {\r\n data[i * width] = data[i * width + (width - 1)] = 0;\r\n }\r\n};\r\n\r\n/**\r\n * Inverts a binary image in place\r\n */\r\nImageWrapper.prototype.invert = function() {\r\n var data = this.data, length = data.length;\r\n\r\n while (length--) {\r\n data[length] = data[length] ? 0 : 1;\r\n }\r\n};\r\n\r\nImageWrapper.prototype.convolve = function(kernel) {\r\n var x, y, kx, ky, kSize = (kernel.length / 2) | 0, accu = 0;\r\n for ( y = 0; y < this.size.y; y++) {\r\n for ( x = 0; x < this.size.x; x++) {\r\n accu = 0;\r\n for ( ky = -kSize; ky <= kSize; ky++) {\r\n for ( kx = -kSize; kx <= kSize; kx++) {\r\n accu += kernel[ky + kSize][kx + kSize] * this.getSafe(x + kx, y + ky);\r\n }\r\n }\r\n this.data[y * this.size.x + x] = accu;\r\n }\r\n }\r\n};\r\n\r\nImageWrapper.prototype.moments = function(labelcount) {\r\n var data = this.data,\r\n x,\r\n y,\r\n height = this.size.y,\r\n width = this.size.x,\r\n val,\r\n ysq,\r\n labelsum = [],\r\n i,\r\n label,\r\n mu11,\r\n mu02,\r\n mu20,\r\n x_,\r\n y_,\r\n tmp,\r\n result = [],\r\n PI = Math.PI,\r\n PI_4 = PI / 4;\r\n\r\n if (labelcount <= 0) {\r\n return result;\r\n }\r\n\r\n for ( i = 0; i < labelcount; i++) {\r\n labelsum[i] = {\r\n m00: 0,\r\n m01: 0,\r\n m10: 0,\r\n m11: 0,\r\n m02: 0,\r\n m20: 0,\r\n theta: 0,\r\n rad: 0\r\n };\r\n }\r\n\r\n for ( y = 0; y < height; y++) {\r\n ysq = y * y;\r\n for ( x = 0; x < width; x++) {\r\n val = data[y * width + x];\r\n if (val > 0) {\r\n label = labelsum[val - 1];\r\n label.m00 += 1;\r\n label.m01 += y;\r\n label.m10 += x;\r\n label.m11 += x * y;\r\n label.m02 += ysq;\r\n label.m20 += x * x;\r\n }\r\n }\r\n }\r\n\r\n for ( i = 0; i < labelcount; i++) {\r\n label = labelsum[i];\r\n if (!isNaN(label.m00) && label.m00 !== 0) {\r\n x_ = label.m10 / label.m00;\r\n y_ = label.m01 / label.m00;\r\n mu11 = label.m11 / label.m00 - x_ * y_;\r\n mu02 = label.m02 / label.m00 - y_ * y_;\r\n mu20 = label.m20 / label.m00 - x_ * x_;\r\n tmp = (mu02 - mu20) / (2 * mu11);\r\n tmp = 0.5 * Math.atan(tmp) + (mu11 >= 0 ? PI_4 : -PI_4 ) + PI;\r\n label.theta = (tmp * 180 / PI + 90) % 180 - 90;\r\n if (label.theta < 0) {\r\n label.theta += 180;\r\n }\r\n label.rad = tmp > PI ? tmp - PI : tmp;\r\n label.vec = vec2.clone([Math.cos(tmp), Math.sin(tmp)]);\r\n result.push(label);\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Displays the {ImageWrapper} in a given canvas\r\n * @param canvas {Canvas} The canvas element to write to\r\n * @param scale {Number} Scale which is applied to each pixel-value\r\n */\r\nImageWrapper.prototype.show = function(canvas, scale) {\r\n var ctx,\r\n frame,\r\n data,\r\n current,\r\n pixel,\r\n x,\r\n y;\r\n\r\n if (!scale) {\r\n scale = 1.0;\r\n }\r\n ctx = canvas.getContext('2d');\r\n canvas.width = this.size.x;\r\n canvas.height = this.size.y;\r\n frame = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n data = frame.data;\r\n current = 0;\r\n for (y = 0; y < this.size.y; y++) {\r\n for (x = 0; x < this.size.x; x++) {\r\n pixel = y * this.size.x + x;\r\n current = this.get(x, y) * scale;\r\n data[pixel * 4 + 0] = current;\r\n data[pixel * 4 + 1] = current;\r\n data[pixel * 4 + 2] = current;\r\n data[pixel * 4 + 3] = 255;\r\n }\r\n }\r\n //frame.data = data;\r\n ctx.putImageData(frame, 0, 0);\r\n};\r\n\r\n/**\r\n * Displays the {SubImage} in a given canvas\r\n * @param canvas {Canvas} The canvas element to write to\r\n * @param scale {Number} Scale which is applied to each pixel-value\r\n */\r\nImageWrapper.prototype.overlay = function(canvas, scale, from) {\r\n if (!scale || scale < 0 || scale > 360) {\r\n scale = 360;\r\n }\r\n var hsv = [0, 1, 1];\r\n var rgb = [0, 0, 0];\r\n var whiteRgb = [255, 255, 255];\r\n var blackRgb = [0, 0, 0];\r\n var result = [];\r\n var ctx = canvas.getContext('2d');\r\n var frame = ctx.getImageData(from.x, from.y, this.size.x, this.size.y);\r\n var data = frame.data;\r\n var length = this.data.length;\r\n while (length--) {\r\n hsv[0] = this.data[length] * scale;\r\n result = hsv[0] <= 0 ? whiteRgb : hsv[0] >= 360 ? blackRgb : hsv2rgb(hsv, rgb);\r\n data[length * 4 + 0] = result[0];\r\n data[length * 4 + 1] = result[1];\r\n data[length * 4 + 2] = result[2];\r\n data[length * 4 + 3] = 255;\r\n }\r\n ctx.putImageData(frame, from.x, from.y);\r\n};\r\n\r\nexport default ImageWrapper;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/image_wrapper.js\n **/","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_Map.js\n ** module id = 28\n ** module chunks = 0\n **/","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\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 ? entries.length : 0;\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_MapCache.js\n ** module id = 29\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_arrayPush.js\n ** module id = 30\n ** module chunks = 0\n **/","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_cloneArrayBuffer.js\n ** module id = 31\n ** module chunks = 0\n **/","var assignValue = require('./_assignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n assignValue(object, key, newValue === undefined ? source[key] : newValue);\n }\n return object;\n}\n\nmodule.exports = copyObject;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_copyObject.js\n ** module id = 32\n ** module chunks = 0\n **/","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_getPrototype.js\n ** module id = 33\n ** module chunks = 0\n **/","var overArg = require('./_overArg'),\n stubArray = require('./stubArray');\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 symbol properties 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 ? overArg(nativeGetSymbols, Object) : stubArray;\n\nmodule.exports = getSymbols;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_getSymbols.js\n ** module id = 34\n ** module chunks = 0\n **/","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\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 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 objectToString = objectProto.toString;\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,\n// for data views in Edge < 14, and promises in Node.js.\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 = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_getTag.js\n ** module id = 35\n ** module chunks = 0\n **/","/** 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 length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_isIndex.js\n ** module id = 36\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_overArg.js\n ** module id = 37\n ** module chunks = 0\n **/","var isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** 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 objectToString = objectProto.toString;\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 // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\nmodule.exports = isFunction;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isFunction.js\n ** module id = 38\n ** module chunks = 0\n **/","/** 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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isLength.js\n ** module id = 39\n ** module chunks = 0\n **/","var isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** 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 objectToString = objectProto.toString;\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) && objectToString.call(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isSymbol.js\n ** module id = 40\n ** module chunks = 0\n **/","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isTypedArray.js\n ** module id = 41\n ** module chunks = 0\n **/","import ImageDebug from '../common/image_debug';\r\n\r\nfunction contains(codeResult, list) {\r\n if (list) {\r\n return list.some(function (item) {\r\n return Object.keys(item).every(function (key) {\r\n return item[key] === codeResult[key];\r\n });\r\n });\r\n }\r\n return false;\r\n}\r\n\r\nfunction passesFilter(codeResult, filter) {\r\n if (typeof filter === 'function') {\r\n return filter(codeResult);\r\n }\r\n return true;\r\n}\r\n\r\nexport default {\r\n create: function(config) {\r\n var canvas = document.createElement(\"canvas\"),\r\n ctx = canvas.getContext(\"2d\"),\r\n results = [],\r\n capacity = config.capacity || 20,\r\n capture = config.capture === true;\r\n\r\n function matchesConstraints(codeResult) {\r\n return capacity\r\n && codeResult\r\n && !contains(codeResult, config.blacklist)\r\n && passesFilter(codeResult, config.filter);\r\n }\r\n\r\n return {\r\n addResult: function(data, imageSize, codeResult) {\r\n var result = {};\r\n\r\n if (matchesConstraints(codeResult)) {\r\n capacity--;\r\n result.codeResult = codeResult;\r\n if (capture) {\r\n canvas.width = imageSize.x;\r\n canvas.height = imageSize.y;\r\n ImageDebug.drawImage(data, imageSize, ctx);\r\n result.frame = canvas.toDataURL();\r\n }\r\n results.push(result);\r\n }\r\n },\r\n getResults: function() {\r\n return results;\r\n }\r\n };\r\n }\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/analytics/result_collector.js\n **/","let config;\r\n\r\nif (ENV.development){\r\n config = require('./config.dev.js');\r\n} else if (ENV.node) {\r\n config = require('./config.node.js');\r\n} else {\r\n config = require('./config.prod.js');\r\n}\r\n\r\nexport default config;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/config/config.js\n **/","/**\r\n * http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization\r\n */\r\nvar Tracer = {\r\n searchDirections: [[0, 1], [1, 1], [1, 0], [1, -1], [0, -1], [-1, -1], [-1, 0], [-1, 1]],\r\n create: function(imageWrapper, labelWrapper) {\r\n var imageData = imageWrapper.data,\r\n labelData = labelWrapper.data,\r\n searchDirections = this.searchDirections,\r\n width = imageWrapper.size.x,\r\n pos;\r\n\r\n function trace(current, color, label, edgelabel) {\r\n var i,\r\n y,\r\n x;\r\n\r\n for ( i = 0; i < 7; i++) {\r\n y = current.cy + searchDirections[current.dir][0];\r\n x = current.cx + searchDirections[current.dir][1];\r\n pos = y * width + x;\r\n if ((imageData[pos] === color) && ((labelData[pos] === 0) || (labelData[pos] === label))) {\r\n labelData[pos] = label;\r\n current.cy = y;\r\n current.cx = x;\r\n return true;\r\n } else {\r\n if (labelData[pos] === 0) {\r\n labelData[pos] = edgelabel;\r\n }\r\n current.dir = (current.dir + 1) % 8;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n function vertex2D(x, y, dir) {\r\n return {\r\n dir: dir,\r\n x: x,\r\n y: y,\r\n next: null,\r\n prev: null\r\n };\r\n }\r\n\r\n function contourTracing(sy, sx, label, color, edgelabel) {\r\n var Fv = null,\r\n Cv,\r\n P,\r\n ldir,\r\n current = {\r\n cx: sx,\r\n cy: sy,\r\n dir: 0\r\n };\r\n\r\n if (trace(current, color, label, edgelabel)) {\r\n Fv = vertex2D(sx, sy, current.dir);\r\n Cv = Fv;\r\n ldir = current.dir;\r\n P = vertex2D(current.cx, current.cy, 0);\r\n P.prev = Cv;\r\n Cv.next = P;\r\n P.next = null;\r\n Cv = P;\r\n do {\r\n current.dir = (current.dir + 6) % 8;\r\n trace(current, color, label, edgelabel);\r\n if (ldir !== current.dir) {\r\n Cv.dir = current.dir;\r\n P = vertex2D(current.cx, current.cy, 0);\r\n P.prev = Cv;\r\n Cv.next = P;\r\n P.next = null;\r\n Cv = P;\r\n } else {\r\n Cv.dir = ldir;\r\n Cv.x = current.cx;\r\n Cv.y = current.cy;\r\n }\r\n ldir = current.dir;\r\n } while (current.cx !== sx || current.cy !== sy);\r\n Fv.prev = Cv.prev;\r\n Cv.prev.next = Fv;\r\n }\r\n return Fv;\r\n }\r\n\r\n return {\r\n trace: function(current, color, label, edgelabel) {\r\n return trace(current, color, label, edgelabel);\r\n },\r\n contourTracing: function(sy, sx, label, color, edgelabel) {\r\n return contourTracing(sy, sx, label, color, edgelabel);\r\n }\r\n };\r\n }\r\n};\r\n\r\nexport default (Tracer);\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/locator/tracer.js\n **/","import BarcodeReader from './barcode_reader';\r\nimport ArrayHelper from '../common/array_helper';\r\n\r\nfunction Code39Reader() {\r\n BarcodeReader.call(this);\r\n}\r\n\r\nvar properties = {\r\n ALPHABETH_STRING: {value: \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%\"},\r\n ALPHABET: {value: [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,\r\n 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 45, 46, 32, 42, 36, 47, 43, 37]},\r\n CHARACTER_ENCODINGS: {value: [0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064, 0x109, 0x049,\r\n 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C, 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106,\r\n 0x046, 0x016, 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x094, 0x0A8, 0x0A2, 0x08A, 0x02A\r\n ]},\r\n ASTERISK: {value: 0x094},\r\n FORMAT: {value: \"code_39\", writeable: false}\r\n};\r\n\r\nCode39Reader.prototype = Object.create(BarcodeReader.prototype, properties);\r\nCode39Reader.prototype.constructor = Code39Reader;\r\n\r\nCode39Reader.prototype._toCounters = function(start, counter) {\r\n var self = this,\r\n numCounters = counter.length,\r\n end = self._row.length,\r\n isWhite = !self._row[start],\r\n i,\r\n counterPos = 0;\r\n\r\n ArrayHelper.init(counter, 0);\r\n\r\n for ( i = start; i < end; i++) {\r\n if (self._row[i] ^ isWhite) {\r\n counter[counterPos]++;\r\n } else {\r\n counterPos++;\r\n if (counterPos === numCounters) {\r\n break;\r\n } else {\r\n counter[counterPos] = 1;\r\n isWhite = !isWhite;\r\n }\r\n }\r\n }\r\n\r\n return counter;\r\n};\r\n\r\nCode39Reader.prototype._decode = function() {\r\n var self = this,\r\n counters = [0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n result = [],\r\n start = self._findStart(),\r\n decodedChar,\r\n lastStart,\r\n pattern,\r\n nextStart;\r\n\r\n if (!start) {\r\n return null;\r\n }\r\n nextStart = self._nextSet(self._row, start.end);\r\n\r\n do {\r\n counters = self._toCounters(nextStart, counters);\r\n pattern = self._toPattern(counters);\r\n if (pattern < 0) {\r\n return null;\r\n }\r\n decodedChar = self._patternToChar(pattern);\r\n if (decodedChar < 0){\r\n return null;\r\n }\r\n result.push(decodedChar);\r\n lastStart = nextStart;\r\n nextStart += ArrayHelper.sum(counters);\r\n nextStart = self._nextSet(self._row, nextStart);\r\n } while (decodedChar !== '*');\r\n result.pop();\r\n\r\n if (!result.length) {\r\n return null;\r\n }\r\n\r\n if (!self._verifyTrailingWhitespace(lastStart, nextStart, counters)) {\r\n return null;\r\n }\r\n\r\n return {\r\n code: result.join(\"\"),\r\n start: start.start,\r\n end: nextStart,\r\n startInfo: start,\r\n decodedCodes: result\r\n };\r\n};\r\n\r\nCode39Reader.prototype._verifyTrailingWhitespace = function(lastStart, nextStart, counters) {\r\n var trailingWhitespaceEnd,\r\n patternSize = ArrayHelper.sum(counters);\r\n\r\n trailingWhitespaceEnd = nextStart - lastStart - patternSize;\r\n if ((trailingWhitespaceEnd * 3) >= patternSize) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nCode39Reader.prototype._patternToChar = function(pattern) {\r\n var i,\r\n self = this;\r\n\r\n for (i = 0; i < self.CHARACTER_ENCODINGS.length; i++) {\r\n if (self.CHARACTER_ENCODINGS[i] === pattern) {\r\n return String.fromCharCode(self.ALPHABET[i]);\r\n }\r\n }\r\n return -1;\r\n};\r\n\r\nCode39Reader.prototype._findNextWidth = function(counters, current) {\r\n var i,\r\n minWidth = Number.MAX_VALUE;\r\n\r\n for (i = 0; i < counters.length; i++) {\r\n if (counters[i] < minWidth && counters[i] > current) {\r\n minWidth = counters[i];\r\n }\r\n }\r\n\r\n return minWidth;\r\n};\r\n\r\nCode39Reader.prototype._toPattern = function(counters) {\r\n var numCounters = counters.length,\r\n maxNarrowWidth = 0,\r\n numWideBars = numCounters,\r\n wideBarWidth = 0,\r\n self = this,\r\n pattern,\r\n i;\r\n\r\n while (numWideBars > 3) {\r\n maxNarrowWidth = self._findNextWidth(counters, maxNarrowWidth);\r\n numWideBars = 0;\r\n pattern = 0;\r\n for (i = 0; i < numCounters; i++) {\r\n if (counters[i] > maxNarrowWidth) {\r\n pattern |= 1 << (numCounters - 1 - i);\r\n numWideBars++;\r\n wideBarWidth += counters[i];\r\n }\r\n }\r\n\r\n if (numWideBars === 3) {\r\n for (i = 0; i < numCounters && numWideBars > 0; i++) {\r\n if (counters[i] > maxNarrowWidth) {\r\n numWideBars--;\r\n if ((counters[i] * 2) >= wideBarWidth) {\r\n return -1;\r\n }\r\n }\r\n }\r\n return pattern;\r\n }\r\n }\r\n return -1;\r\n};\r\n\r\nCode39Reader.prototype._findStart = function() {\r\n var self = this,\r\n offset = self._nextSet(self._row),\r\n patternStart = offset,\r\n counter = [0, 0, 0, 0, 0, 0, 0, 0, 0],\r\n counterPos = 0,\r\n isWhite = false,\r\n i,\r\n j,\r\n whiteSpaceMustStart;\r\n\r\n for ( i = offset; i < self._row.length; i++) {\r\n if (self._row[i] ^ isWhite) {\r\n counter[counterPos]++;\r\n } else {\r\n if (counterPos === counter.length - 1) {\r\n // find start pattern\r\n if (self._toPattern(counter) === self.ASTERISK) {\r\n whiteSpaceMustStart = Math.floor(Math.max(0, patternStart - ((i - patternStart) / 4)));\r\n if (self._matchRange(whiteSpaceMustStart, patternStart, 0)) {\r\n return {\r\n start: patternStart,\r\n end: i\r\n };\r\n }\r\n }\r\n\r\n patternStart += counter[0] + counter[1];\r\n for ( j = 0; j < 7; j++) {\r\n counter[j] = counter[j + 2];\r\n }\r\n counter[7] = 0;\r\n counter[8] = 0;\r\n counterPos--;\r\n } else {\r\n counterPos++;\r\n }\r\n counter[counterPos] = 1;\r\n isWhite = !isWhite;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexport default Code39Reader;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/reader/code_39_reader.js\n **/","module.exports = dot\n\n/**\n * Calculates the dot product of two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} dot product of a and b\n */\nfunction dot(a, b) {\n return a[0] * b[0] + a[1] * b[1]\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gl-vec2/dot.js\n ** module id = 46\n ** module chunks = 0\n **/","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_Uint8Array.js\n ** module id = 47\n ** module chunks = 0\n **/","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee 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 `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_arrayEach.js\n ** module id = 48\n ** module chunks = 0\n **/","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex');\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 // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_arrayLikeKeys.js\n ** module id = 49\n ** module chunks = 0\n **/","/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\nmodule.exports = arrayReduce;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_arrayReduce.js\n ** module id = 50\n ** module chunks = 0\n **/","var eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (typeof key == 'number' && value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\nmodule.exports = assignMergeValue;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_assignMergeValue.js\n ** module id = 51\n ** module chunks = 0\n **/","var eq = require('./eq');\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 * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\n\nmodule.exports = assignValue;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_assignValue.js\n ** module id = 52\n ** module chunks = 0\n **/","var castPath = require('./_castPath'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\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 = isKey(path, object) ? [path] : castPath(path);\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseGet.js\n ** module id = 53\n ** module chunks = 0\n **/","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseGetAllKeys.js\n ** module id = 54\n ** module chunks = 0\n **/","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObject = require('./isObject'),\n isObjectLike = require('./isObjectLike');\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 {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\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, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\nmodule.exports = baseIsEqual;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseIsEqual.js\n ** module id = 55\n ** module chunks = 0\n **/","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseIteratee.js\n ** module id = 56\n ** module chunks = 0\n **/","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\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 `_.keysIn` 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 baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseKeysIn.js\n ** module id = 57\n ** module chunks = 0\n **/","/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} props The property identifiers to pick from.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, props, predicate) {\n var index = -1,\n length = props.length,\n result = {};\n\n while (++index < length) {\n var key = props[index],\n value = object[key];\n\n if (predicate(value, key)) {\n result[key] = value;\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_basePickBy.js\n ** module id = 58\n ** module chunks = 0\n **/","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = array;\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = baseRest;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseRest.js\n ** module id = 59\n ** module chunks = 0\n **/","var isArray = require('./isArray'),\n stringToPath = require('./_stringToPath');\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 * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\nmodule.exports = castPath;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_castPath.js\n ** module id = 60\n ** module chunks = 0\n **/","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_copyArray.js\n ** module id = 61\n ** module chunks = 0\n **/","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome');\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_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 {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\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, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & UNORDERED_COMPARE_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 (!seen.has(othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n return seen.add(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, 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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_equalArrays.js\n ** module id = 62\n ** module chunks = 0\n **/","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_freeGlobal.js\n ** module id = 63\n ** module chunks = 0\n **/","var isObject = require('./isObject');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_isStrictComparable.js\n ** module id = 64\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_mapToArray.js\n ** module id = 65\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_matchesStrictComparable.js\n ** module id = 66\n ** module chunks = 0\n **/","var overArg = require('./_overArg');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_nativeKeys.js\n ** module id = 67\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_setToArray.js\n ** module id = 68\n ** module chunks = 0\n **/","/** 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 process.\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_toSource.js\n ** module id = 69\n ** module chunks = 0\n **/","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an 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 an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isArrayLikeObject.js\n ** module id = 70\n ** module chunks = 0\n **/","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && 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\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isBuffer.js\n ** module id = 71\n ** module chunks = 0\n **/","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\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 * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/keysIn.js\n ** module id = 72\n ** module chunks = 0\n **/","var arrayMap = require('./_arrayMap'),\n baseFlatten = require('./_baseFlatten'),\n basePick = require('./_basePick'),\n baseRest = require('./_baseRest'),\n toKey = require('./_toKey');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [props] The property identifiers to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = baseRest(function(object, props) {\n return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey));\n});\n\nmodule.exports = pick;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/pick.js\n ** module id = 73\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/stubArray.js\n ** module id = 74\n ** module chunks = 0\n **/","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tObject.defineProperty(module, \"exports\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tconfigurable: false,\r\n\t\t\tget: function() { return module.e; },\r\n\t\t\tset: function(v) { return module.e = v; }\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tconfigurable: false,\r\n\t\t\tget: function() { return module.l; }\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tconfigurable: false,\r\n\t\t\tget: function() { return module.i; }\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** (webpack)/buildin/module.js\n ** module id = 75\n ** module chunks = 0\n **/","import './common/typedefs';\r\nimport 'webrtc-adapter';\r\nimport createScanner from './scanner';\r\nimport ImageWrapper from './common/image_wrapper';\r\nimport ImageDebug from './common/image_debug';\r\nimport ResultCollector from './analytics/result_collector';\r\nimport Config from './config/config';\r\nimport {merge} from 'lodash';\r\nimport {createConfigFromSource} from './input/config_factory';\r\n\r\nfunction fromConfig(config) {\r\n const scanner = createScanner();\r\n let pendingStart = null;\r\n let initialized = false;\r\n return {\r\n addEventListener(eventType, cb) {\r\n scanner.subscribe(eventType, cb);\r\n return this;\r\n },\r\n removeEventListener(eventType, cb) {\r\n scanner.unsubscribe(eventType, cb);\r\n return this;\r\n },\r\n start() {\r\n if (scanner.isRunning()) {\r\n return Promise.resolve(true);\r\n }\r\n if (pendingStart) {\r\n return pendingStart;\r\n }\r\n if (initialized) {\r\n scanner.start();\r\n return Promise.resolve(true);\r\n }\r\n pendingStart = new Promise((resolve, reject) => {\r\n scanner.init(config, (error) => {\r\n if (error) {\r\n console.log(error);\r\n reject(error);\r\n }\r\n initialized = true;\r\n scanner.start();\r\n resolve();\r\n pendingStart = null;\r\n });\r\n });\r\n return pendingStart;\r\n },\r\n stop() {\r\n scanner.stop();\r\n initialized = false;\r\n return this;\r\n },\r\n toPromise() {\r\n if (config.inputStream.type === 'LiveStream'\r\n || config.inputStream.type === 'VideoStream') {\r\n let cancelRequested = false;\r\n return {\r\n cancel() {\r\n cancelRequested = true;\r\n },\r\n promise: new Promise((resolve, reject) => {\r\n function onProcessed(result) {\r\n if (result && result.codeResult && result.codeResult.code) {\r\n scanner.stop();\r\n scanner.unsubscribe(\"processed\", onProcessed);\r\n resolve(result);\r\n }\r\n if (cancelRequested) {\r\n scanner.stop();\r\n scanner.unsubscribe(\"processed\", onProcessed);\r\n reject(\"cancelled!\");\r\n }\r\n }\r\n scanner.subscribe(\"processed\", onProcessed);\r\n this.start();\r\n })\r\n };\r\n } else {\r\n return new Promise((resolve, reject) => {\r\n scanner.decodeSingle(config, (result) => {\r\n if (result && result.codeResult && result.codeResult.code) {\r\n return resolve(result);\r\n }\r\n return reject(result);\r\n });\r\n });\r\n }\r\n },\r\n registerResultCollector(resultCollector) {\r\n scanner.registerResultCollector(resultCollector);\r\n },\r\n getCanvas() {\r\n return scanner.canvas.dom.image;\r\n },\r\n };\r\n}\r\n\r\nfunction fromSource(config, source, inputConfig = {}) {\r\n config = createConfigFromSource(config, inputConfig, source);\r\n return fromConfig(config);\r\n}\r\n\r\nfunction setConfig(configuration = {}, key, config = {}) {\r\n var mergedConfig = merge({}, configuration, {[key]: config});\r\n return createApi(mergedConfig);\r\n}\r\n\r\nfunction createApi(configuration = Config) {\r\n return {\r\n fromSource(src, inputConfig) {\r\n return fromSource(configuration, src, inputConfig);\r\n },\r\n fromConfig(conf) {\r\n return fromConfig(merge({}, configuration, conf));\r\n },\r\n decoder(conf) {\r\n return setConfig(configuration, \"decoder\", conf);\r\n },\r\n locator(conf) {\r\n return setConfig(configuration, \"locator\", conf);\r\n },\r\n throttle(timeInMs) {\r\n return setConfig(configuration, \"frequency\", 1000 / parseInt(timeInMs));\r\n },\r\n config(conf) {\r\n return createApi(merge({}, configuration, conf));\r\n },\r\n ImageWrapper,\r\n ImageDebug,\r\n ResultCollector,\r\n _worker: {\r\n createScanner\r\n }\r\n };\r\n}\r\nexport default createApi();\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/quagga.js\n **/","const vec2 = {\r\n clone: require('gl-vec2/clone'),\r\n dot: require('gl-vec2/dot')\r\n};\r\n\r\n/**\r\n * Creates a cluster for grouping similar orientations of datapoints\r\n */\r\nexport default {\r\n create: function(point, threshold) {\r\n var points = [],\r\n center = {\r\n rad: 0,\r\n vec: vec2.clone([0, 0])\r\n },\r\n pointMap = {};\r\n\r\n function init() {\r\n add(point);\r\n updateCenter();\r\n }\r\n\r\n function add(pointToAdd) {\r\n pointMap[pointToAdd.id] = pointToAdd;\r\n points.push(pointToAdd);\r\n }\r\n\r\n function updateCenter() {\r\n var i, sum = 0;\r\n for ( i = 0; i < points.length; i++) {\r\n sum += points[i].rad;\r\n }\r\n center.rad = sum / points.length;\r\n center.vec = vec2.clone([Math.cos(center.rad), Math.sin(center.rad)]);\r\n }\r\n\r\n init();\r\n\r\n return {\r\n add: function(pointToAdd) {\r\n if (!pointMap[pointToAdd.id]) {\r\n add(pointToAdd);\r\n updateCenter();\r\n }\r\n },\r\n fits: function(otherPoint) {\r\n // check cosine similarity to center-angle\r\n var similarity = Math.abs(vec2.dot(otherPoint.point.vec, center.vec));\r\n if (similarity > threshold) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n getPoints: function() {\r\n return points;\r\n },\r\n getCenter: function() {\r\n return center;\r\n }\r\n };\r\n },\r\n createPoint: function(newPoint, id, property) {\r\n return {\r\n rad: newPoint[property],\r\n point: newPoint,\r\n id: id\r\n };\r\n }\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/cluster.js\n **/","const hasWindow = typeof window !== 'undefined';\r\nconst windowRef = hasWindow ? window : {};\r\n\r\nconst windowObjects = [\r\n \"MediaStream\",\r\n \"HTMLImageElement\",\r\n \"HTMLVideoElement\",\r\n \"HTMLCanvasElement\",\r\n \"FileList\",\r\n \"File\",\r\n \"URL\"\r\n];\r\n\r\nconst DOMHelper = windowObjects.reduce((result, obj) => {\r\n return {\r\n ...result,\r\n [obj]: obj in windowRef ? windowRef[obj] : () => {}\r\n };\r\n}, {});\r\n\r\nDOMHelper.setObject = (key, value) => {\r\n DOMHelper[key] = value;\r\n};\r\n\r\nexport default DOMHelper;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/dom_helper.js\n **/","export default function createEventedElement() {\r\n var events = {};\r\n\r\n function getEvent(eventName) {\r\n if (!events[eventName]) {\r\n events[eventName] = {\r\n subscribers: []\r\n };\r\n }\r\n return events[eventName];\r\n }\r\n\r\n function clearEvents(){\r\n events = {};\r\n }\r\n\r\n function publishSubscription(subscription, data) {\r\n if (subscription.async) {\r\n setTimeout(function() {\r\n subscription.callback(data);\r\n }, 4);\r\n } else {\r\n subscription.callback(data);\r\n }\r\n }\r\n\r\n function subscribe(event, callback, async) {\r\n var subscription;\r\n\r\n if ( typeof callback === \"function\") {\r\n subscription = {\r\n callback: callback,\r\n async: async\r\n };\r\n } else {\r\n subscription = callback;\r\n if (!subscription.callback) {\r\n throw \"Callback was not specified on options\";\r\n }\r\n }\r\n\r\n getEvent(event).subscribers.push(subscription);\r\n }\r\n\r\n return {\r\n subscribe: function(event, callback, async) {\r\n return subscribe(event, callback, async);\r\n },\r\n publish: function(eventName, data) {\r\n var event = getEvent(eventName),\r\n subscribers = event.subscribers;\r\n\r\n // Publish one-time subscriptions\r\n subscribers.filter(function(subscriber) {\r\n return !!subscriber.once;\r\n }).forEach((subscriber) => {\r\n publishSubscription(subscriber, data);\r\n });\r\n\r\n // remove them from the subscriber\r\n event.subscribers = subscribers.filter(function(subscriber) {\r\n return !subscriber.once;\r\n });\r\n\r\n // publish the rest\r\n event.subscribers.forEach((subscriber) => {\r\n publishSubscription(subscriber, data);\r\n });\r\n },\r\n once: function(event, callback, async) {\r\n subscribe(event, {\r\n callback: callback,\r\n async: async,\r\n once: true\r\n });\r\n },\r\n unsubscribe: function(eventName, callback) {\r\n var event;\r\n\r\n if (eventName) {\r\n event = getEvent(eventName);\r\n if (event && callback) {\r\n event.subscribers = event.subscribers.filter(function(subscriber){\r\n return subscriber.callback !== callback;\r\n });\r\n } else {\r\n event.subscribers = [];\r\n }\r\n } else {\r\n clearEvents();\r\n }\r\n }\r\n };\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/events.js\n **/","/**\r\n * Construct representing a part of another {ImageWrapper}. Shares data\r\n * between the parent and the child.\r\n * @param from {ImageRef} The position where to start the {SubImage} from. (top-left corner)\r\n * @param size {ImageRef} The size of the resulting image\r\n * @param I {ImageWrapper} The {ImageWrapper} to share from\r\n * @returns {SubImage} A shared part of the original image\r\n */\r\nfunction SubImage(from, size, I) {\r\n if (!I) {\r\n I = {\r\n data: null,\r\n size: size\r\n };\r\n }\r\n this.data = I.data;\r\n this.originalSize = I.size;\r\n this.I = I;\r\n\r\n this.from = from;\r\n this.size = size;\r\n}\r\n\r\n/**\r\n * Displays the {SubImage} in a given canvas\r\n * @param canvas {Canvas} The canvas element to write to\r\n * @param scale {Number} Scale which is applied to each pixel-value\r\n */\r\nSubImage.prototype.show = function(canvas, scale) {\r\n var ctx,\r\n frame,\r\n data,\r\n current,\r\n y,\r\n x,\r\n pixel;\r\n\r\n if (!scale) {\r\n scale = 1.0;\r\n }\r\n ctx = canvas.getContext('2d');\r\n canvas.width = this.size.x;\r\n canvas.height = this.size.y;\r\n frame = ctx.getImageData(0, 0, canvas.width, canvas.height);\r\n data = frame.data;\r\n current = 0;\r\n for (y = 0; y < this.size.y; y++) {\r\n for (x = 0; x < this.size.x; x++) {\r\n pixel = y * this.size.x + x;\r\n current = this.get(x, y) * scale;\r\n data[pixel * 4 + 0] = current;\r\n data[pixel * 4 + 1] = current;\r\n data[pixel * 4 + 2] = current;\r\n data[pixel * 4 + 3] = 255;\r\n }\r\n }\r\n frame.data = data;\r\n ctx.putImageData(frame, 0, 0);\r\n};\r\n\r\n/**\r\n * Retrieves a given pixel position from the {SubImage}\r\n * @param x {Number} The x-position\r\n * @param y {Number} The y-position\r\n * @returns {Number} The grayscale value at the pixel-position\r\n */\r\nSubImage.prototype.get = function(x, y) {\r\n return this.data[(this.from.y + y) * this.originalSize.x + this.from.x + x];\r\n};\r\n\r\n/**\r\n * Updates the underlying data from a given {ImageWrapper}\r\n * @param image {ImageWrapper} The updated image\r\n */\r\nSubImage.prototype.updateData = function(image) {\r\n this.originalSize = image.size;\r\n this.data = image.data;\r\n};\r\n\r\n/**\r\n * Updates the position of the shared area\r\n * @param from {x,y} The new location\r\n * @returns {SubImage} returns {this} for possible chaining\r\n */\r\nSubImage.prototype.updateFrom = function(from) {\r\n this.from = from;\r\n return this;\r\n};\r\n\r\nexport default (SubImage);\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/subImage.js\n **/","/*\r\n * typedefs.js\r\n * Normalizes browser-specific prefixes\r\n */\r\n\r\nif (typeof window !== 'undefined') {\r\n window.requestAnimFrame = (function () {\r\n return window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n window.oRequestAnimationFrame ||\r\n window.msRequestAnimationFrame ||\r\n function (/* function FrameRequestCallback */ callback) {\r\n window.setTimeout(callback, 1000 / 60);\r\n };\r\n })();\r\n}\r\nMath.imul = Math.imul || function(a, b) {\r\n var ah = (a >>> 16) & 0xffff,\r\n al = a & 0xffff,\r\n bh = (b >>> 16) & 0xffff,\r\n bl = b & 0xffff;\r\n // the shift by 0 fixes the sign on the high part\r\n // the final |0 converts the unsigned value into a signed value\r\n return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0) | 0);\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/common/typedefs.js\n **/","module.exports = {\r\n inputStream: {\r\n name: \"Live\",\r\n type: \"LiveStream\",\r\n constraints: {\r\n width: 640,\r\n height: 480,\r\n // aspectRatio: 640/480, // optional\r\n facingMode: \"environment\", // or user\r\n // deviceId: \"38745983457387598375983759834\"\r\n },\r\n area: {\r\n top: \"0%\",\r\n right: \"0%\",\r\n left: \"0%\",\r\n bottom: \"0%\"\r\n },\r\n singleChannel: false // true: only the red color-channel is read\r\n },\r\n locate: true,\r\n numOfWorkers: 2,\r\n decoder: {\r\n readers: [\r\n 'code_128_reader'\r\n ],\r\n debug: {\r\n drawBoundingBox: false,\r\n showFrequency: false,\r\n drawScanline: false,\r\n showPattern: false\r\n }\r\n },\r\n locator: {\r\n halfSample: true,\r\n patchSize: \"medium\", // x-small, small, medium, large, x-large\r\n debug: {\r\n showCanvas: false,\r\n showPatches: false,\r\n showFoundPatches: false,\r\n showSkeleton: false,\r\n showLabels: false,\r\n showPatchLabels: false,\r\n showRemainingPatchLabels: false,\r\n boxFromPatches: {\r\n showTransformed: false,\r\n showTransformedBox: false,\r\n showBB: false\r\n }\r\n }\r\n }\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/config/config.dev.js\n **/","import Bresenham from './bresenham';\r\nimport ImageDebug from '../common/image_debug';\r\nimport Code128Reader from '../reader/code_128_reader';\r\nimport EANReader from '../reader/ean_reader';\r\nimport Code39Reader from '../reader/code_39_reader';\r\nimport Code39VINReader from '../reader/code_39_vin_reader';\r\nimport CodabarReader from '../reader/codabar_reader';\r\nimport UPCReader from '../reader/upc_reader';\r\nimport EAN8Reader from '../reader/ean_8_reader';\r\nimport EAN2Reader from '../reader/ean_2_reader';\r\nimport EAN5Reader from '../reader/ean_5_reader';\r\nimport UPCEReader from '../reader/upc_e_reader';\r\nimport I2of5Reader from '../reader/i2of5_reader';\r\n\r\nconst READERS = {\r\n code_128_reader: Code128Reader,\r\n ean_reader: EANReader,\r\n ean_5_reader: EAN5Reader,\r\n ean_2_reader: EAN2Reader,\r\n ean_8_reader: EAN8Reader,\r\n code_39_reader: Code39Reader,\r\n code_39_vin_reader: Code39VINReader,\r\n codabar_reader: CodabarReader,\r\n upc_reader: UPCReader,\r\n upc_e_reader: UPCEReader,\r\n i2of5_reader: I2of5Reader\r\n};\r\nexport default {\r\n create: function(config, inputImageWrapper) {\r\n var _canvas = {\r\n ctx: {\r\n frequency: null,\r\n pattern: null,\r\n overlay: null\r\n },\r\n dom: {\r\n frequency: null,\r\n pattern: null,\r\n overlay: null\r\n }\r\n },\r\n _barcodeReaders = [];\r\n\r\n initCanvas();\r\n initReaders();\r\n initConfig();\r\n\r\n function initCanvas() {\r\n if (ENV.development && typeof document !== 'undefined') {\r\n var $debug = document.querySelector(\"#debug.detection\");\r\n _canvas.dom.frequency = document.querySelector(\"canvas.frequency\");\r\n if (!_canvas.dom.frequency) {\r\n _canvas.dom.frequency = document.createElement(\"canvas\");\r\n _canvas.dom.frequency.className = \"frequency\";\r\n if ($debug) {\r\n $debug.appendChild(_canvas.dom.frequency);\r\n }\r\n }\r\n _canvas.ctx.frequency = _canvas.dom.frequency.getContext(\"2d\");\r\n\r\n _canvas.dom.pattern = document.querySelector(\"canvas.patternBuffer\");\r\n if (!_canvas.dom.pattern) {\r\n _canvas.dom.pattern = document.createElement(\"canvas\");\r\n _canvas.dom.pattern.className = \"patternBuffer\";\r\n if ($debug) {\r\n $debug.appendChild(_canvas.dom.pattern);\r\n }\r\n }\r\n _canvas.ctx.pattern = _canvas.dom.pattern.getContext(\"2d\");\r\n\r\n if ($debug) {\r\n _canvas.dom.overlay = document.querySelector(\"canvas.drawingBuffer\");\r\n if (!_canvas.dom.overlay) {\r\n _canvas.dom.overlay = document.createElement(\"canvas\");\r\n _canvas.dom.overlay.className = \"drawingBuffer\";\r\n $debug.appendChild(_canvas.dom.overlay);\r\n }\r\n _canvas.ctx.overlay = _canvas.dom.overlay.getContext(\"2d\");\r\n }\r\n }\r\n }\r\n\r\n function initReaders() {\r\n config.readers.forEach(function(readerConfig) {\r\n var reader,\r\n configuration = {},\r\n supplements = [];\r\n\r\n if (typeof readerConfig === 'object') {\r\n reader = readerConfig.format;\r\n configuration = readerConfig.config;\r\n } else if (typeof readerConfig === 'string') {\r\n reader = readerConfig;\r\n }\r\n if (ENV.development) {\r\n console.log(\"Before registering reader: \", reader);\r\n }\r\n if (configuration.supplements) {\r\n supplements = configuration\r\n .supplements.map((supplement) => {\r\n return new READERS[supplement]();\r\n });\r\n }\r\n _barcodeReaders.push(new READERS[reader](configuration, supplements));\r\n });\r\n if (ENV.development) {\r\n console.log(\"Registered Readers: \" + _barcodeReaders\r\n .map((reader) => JSON.stringify({format: reader.FORMAT, config: reader.config}))\r\n .join(', '));\r\n }\r\n }\r\n\r\n function initConfig() {\r\n if (ENV.development && typeof document !== 'undefined') {\r\n var i,\r\n vis = [{\r\n node: _canvas.dom.frequency,\r\n prop: config.debug.showFrequency\r\n }, {\r\n node: _canvas.dom.pattern,\r\n prop: config.debug.showPattern\r\n }];\r\n\r\n for (i = 0; i < vis.length; i++) {\r\n if (vis[i].prop === true) {\r\n vis[i].node.style.display = \"block\";\r\n } else {\r\n vis[i].node.style.display = \"none\";\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * extend the line on both ends\r\n * @param {Array} line\r\n * @param {Number} angle\r\n */\r\n function getExtendedLine(line, angle, ext) {\r\n function extendLine(amount) {\r\n var extension = {\r\n y: amount * Math.sin(angle),\r\n x: amount * Math.cos(angle)\r\n };\r\n\r\n line[0].y -= extension.y;\r\n line[0].x -= extension.x;\r\n line[1].y += extension.y;\r\n line[1].x += extension.x;\r\n }\r\n\r\n // check if inside image\r\n extendLine(ext);\r\n while (ext > 1 && (!inputImageWrapper.inImageWithBorder(line[0], 0)\r\n || !inputImageWrapper.inImageWithBorder(line[1], 0))) {\r\n ext -= Math.ceil(ext / 2);\r\n extendLine(-ext);\r\n }\r\n return line;\r\n }\r\n\r\n function getLine(box) {\r\n return [{\r\n x: (box[1][0] - box[0][0]) / 2 + box[0][0],\r\n y: (box[1][1] - box[0][1]) / 2 + box[0][1]\r\n }, {\r\n x: (box[3][0] - box[2][0]) / 2 + box[2][0],\r\n y: (box[3][1] - box[2][1]) / 2 + box[2][1]\r\n }];\r\n }\r\n\r\n function tryDecode(line) {\r\n var result = null,\r\n i,\r\n barcodeLine = Bresenham.getBarcodeLine(inputImageWrapper, line[0], line[1]);\r\n\r\n if (ENV.development && config.debug.showFrequency) {\r\n ImageDebug.drawPath(line, {x: 'x', y: 'y'}, _canvas.ctx.overlay, {color: 'red', lineWidth: 3});\r\n Bresenham.debug.printFrequency(barcodeLine.line, _canvas.dom.frequency);\r\n }\r\n\r\n Bresenham.toBinaryLine(barcodeLine);\r\n\r\n if (ENV.development && config.debug.showPattern) {\r\n Bresenham.debug.printPattern(barcodeLine.line, _canvas.dom.pattern);\r\n }\r\n\r\n for ( i = 0; i < _barcodeReaders.length && result === null; i++) {\r\n result = _barcodeReaders[i].decodePattern(barcodeLine.line);\r\n }\r\n if (result === null){\r\n return null;\r\n }\r\n return {\r\n codeResult: result,\r\n barcodeLine: barcodeLine\r\n };\r\n }\r\n\r\n /**\r\n * This method slices the given area apart and tries to detect a barcode-pattern\r\n * for each slice. It returns the decoded barcode, or null if nothing was found\r\n * @param {Array} box\r\n * @param {Array} line\r\n * @param {Number} lineAngle\r\n */\r\n function tryDecodeBruteForce(box, line, lineAngle) {\r\n var sideLength = Math.sqrt(Math.pow(box[1][0] - box[0][0], 2) + Math.pow((box[1][1] - box[0][1]), 2)),\r\n i,\r\n slices = 16,\r\n result = null,\r\n dir,\r\n extension,\r\n xdir = Math.sin(lineAngle),\r\n ydir = Math.cos(lineAngle);\r\n\r\n for ( i = 1; i < slices && result === null; i++) {\r\n // move line perpendicular to angle\r\n dir = sideLength / slices * i * (i % 2 === 0 ? -1 : 1);\r\n extension = {\r\n y: dir * xdir,\r\n x: dir * ydir\r\n };\r\n line[0].y += extension.x;\r\n line[0].x -= extension.y;\r\n line[1].y += extension.x;\r\n line[1].x -= extension.y;\r\n\r\n result = tryDecode(line);\r\n }\r\n return result;\r\n }\r\n\r\n function getLineLength(line) {\r\n return Math.sqrt(\r\n Math.pow(Math.abs(line[1].y - line[0].y), 2) +\r\n Math.pow(Math.abs(line[1].x - line[0].x), 2));\r\n }\r\n\r\n /**\r\n * With the help of the configured readers (Code128 or EAN) this function tries to detect a\r\n * valid barcode pattern within the given area.\r\n * @param {Object} box The area to search in\r\n * @returns {Object} the result {codeResult, line, angle, pattern, threshold}\r\n */\r\n function decodeFromBoundingBox(box) {\r\n var line,\r\n lineAngle,\r\n ctx = _canvas.ctx.overlay,\r\n result,\r\n lineLength;\r\n\r\n if (ENV.development) {\r\n if (config.debug.drawBoundingBox && ctx) {\r\n ImageDebug.drawPath(box, {x: 0, y: 1}, ctx, {color: \"blue\", lineWidth: 2});\r\n }\r\n }\r\n\r\n line = getLine(box);\r\n lineLength = getLineLength(line);\r\n lineAngle = Math.atan2(line[1].y - line[0].y, line[1].x - line[0].x);\r\n line = getExtendedLine(line, lineAngle, Math.floor(lineLength * 0.1));\r\n if (line === null){\r\n return null;\r\n }\r\n\r\n result = tryDecode(line);\r\n if (result === null) {\r\n result = tryDecodeBruteForce(box, line, lineAngle);\r\n }\r\n\r\n if (result === null) {\r\n return null;\r\n }\r\n\r\n if (ENV.development && result && config.debug.drawScanline && ctx) {\r\n ImageDebug.drawPath(line, {x: 'x', y: 'y'}, ctx, {color: 'red', lineWidth: 3});\r\n }\r\n\r\n return {\r\n codeResult: result.codeResult,\r\n line: line,\r\n angle: lineAngle,\r\n pattern: result.barcodeLine.line,\r\n threshold: result.barcodeLine.threshold\r\n };\r\n }\r\n\r\n return {\r\n decodeFromBoundingBox: function(box) {\r\n return decodeFromBoundingBox(box);\r\n },\r\n decodeFromBoundingBoxes: function(boxes) {\r\n var i, result,\r\n barcodes = [],\r\n multiple = config.multiple;\r\n\r\n for ( i = 0; i < boxes.length; i++) {\r\n const box = boxes[i];\r\n result = decodeFromBoundingBox(box) || {};\r\n result.box = box;\r\n\r\n if (multiple) {\r\n barcodes.push(result);\r\n } else if (result.codeResult) {\r\n return result;\r\n }\r\n }\r\n\r\n if (multiple) {\r\n return {\r\n barcodes\r\n };\r\n }\r\n },\r\n setReaders: function(readers) {\r\n config.readers = readers;\r\n _barcodeReaders.length = 0;\r\n initReaders();\r\n }\r\n };\r\n }\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/decoder/barcode_decoder.js\n **/","var Bresenham = {};\r\n\r\nvar Slope = {\r\n DIR: {\r\n UP: 1,\r\n DOWN: -1\r\n }\r\n};\r\n/**\r\n * Scans a line of the given image from point p1 to p2 and returns a result object containing\r\n * gray-scale values (0-255) of the underlying pixels in addition to the min\r\n * and max values.\r\n * @param {Object} imageWrapper\r\n * @param {Object} p1 The start point {x,y}\r\n * @param {Object} p2 The end point {x,y}\r\n * @returns {line, min, max}\r\n */\r\nBresenham.getBarcodeLine = function(imageWrapper, p1, p2) {\r\n var x0 = p1.x | 0,\r\n y0 = p1.y | 0,\r\n x1 = p2.x | 0,\r\n y1 = p2.y | 0,\r\n steep = Math.abs(y1 - y0) > Math.abs(x1 - x0),\r\n deltax,\r\n deltay,\r\n error,\r\n ystep,\r\n y,\r\n tmp,\r\n x,\r\n line = [],\r\n imageData = imageWrapper.data,\r\n width = imageWrapper.size.x,\r\n sum = 0,\r\n val,\r\n min = 255,\r\n max = 0;\r\n\r\n function read(a, b) {\r\n val = imageData[b * width + a];\r\n sum += val;\r\n min = val < min ? val : min;\r\n max = val > max ? val : max;\r\n line.push(val);\r\n }\r\n\r\n if (steep) {\r\n tmp = x0;\r\n x0 = y0;\r\n y0 = tmp;\r\n\r\n tmp = x1;\r\n x1 = y1;\r\n y1 = tmp;\r\n }\r\n if (x0 > x1) {\r\n tmp = x0;\r\n x0 = x1;\r\n x1 = tmp;\r\n\r\n tmp = y0;\r\n y0 = y1;\r\n y1 = tmp;\r\n }\r\n deltax = x1 - x0;\r\n deltay = Math.abs(y1 - y0);\r\n error = (deltax / 2) | 0;\r\n y = y0;\r\n ystep = y0 < y1 ? 1 : -1;\r\n for ( x = x0; x < x1; x++) {\r\n if (steep){\r\n read(y, x);\r\n } else {\r\n read(x, y);\r\n }\r\n error = error - deltay;\r\n if (error < 0) {\r\n y = y + ystep;\r\n error = error + deltax;\r\n }\r\n }\r\n\r\n return {\r\n line: line,\r\n min: min,\r\n max: max\r\n };\r\n};\r\n\r\n/**\r\n * Converts the result from getBarcodeLine into a binary representation\r\n * also considering the frequency and slope of the signal for more robust results\r\n * @param {Object} result {line, min, max}\r\n */\r\nBresenham.toBinaryLine = function(result) {\r\n var min = result.min,\r\n max = result.max,\r\n line = result.line,\r\n slope,\r\n slope2,\r\n center = min + (max - min) / 2,\r\n extrema = [],\r\n currentDir,\r\n dir,\r\n threshold = (max - min) / 12,\r\n rThreshold = -threshold,\r\n i,\r\n j;\r\n\r\n // 1. find extrema\r\n currentDir = line[0] > center ? Slope.DIR.UP : Slope.DIR.DOWN;\r\n extrema.push({\r\n pos: 0,\r\n val: line[0]\r\n });\r\n for ( i = 0; i < line.length - 2; i++) {\r\n slope = (line[i + 1] - line[i]);\r\n slope2 = (line[i + 2] - line[i + 1]);\r\n if ((slope + slope2) < rThreshold && line[i + 1] < (center * 1.5)) {\r\n dir = Slope.DIR.DOWN;\r\n } else if ((slope + slope2) > threshold && line[i + 1] > (center * 0.5)) {\r\n dir = Slope.DIR.UP;\r\n } else {\r\n dir = currentDir;\r\n }\r\n\r\n if (currentDir !== dir) {\r\n extrema.push({\r\n pos: i,\r\n val: line[i]\r\n });\r\n currentDir = dir;\r\n }\r\n }\r\n extrema.push({\r\n pos: line.length,\r\n val: line[line.length - 1]\r\n });\r\n\r\n for ( j = extrema[0].pos; j < extrema[1].pos; j++) {\r\n line[j] = line[j] > center ? 0 : 1;\r\n }\r\n\r\n // iterate over extrema and convert to binary based on avg between minmax\r\n for ( i = 1; i < extrema.length - 1; i++) {\r\n if (extrema[i + 1].val > extrema[i].val) {\r\n threshold = (extrema[i].val + ((extrema[i + 1].val - extrema[i].val) / 3) * 2) | 0;\r\n } else {\r\n threshold = (extrema[i + 1].val + ((extrema[i].val - extrema[i + 1].val) / 3)) | 0;\r\n }\r\n\r\n for ( j = extrema[i].pos; j < extrema[i + 1].pos; j++) {\r\n line[j] = line[j] > threshold ? 0 : 1;\r\n }\r\n }\r\n\r\n return {\r\n line: line,\r\n threshold: threshold\r\n };\r\n};\r\n\r\n/**\r\n * Used for development only\r\n */\r\nBresenham.debug = {\r\n printFrequency: function(line, canvas) {\r\n var i,\r\n ctx = canvas.getContext(\"2d\");\r\n canvas.width = line.length;\r\n canvas.height = 256;\r\n\r\n ctx.beginPath();\r\n ctx.strokeStyle = \"blue\";\r\n for ( i = 0; i < line.length; i++) {\r\n ctx.moveTo(i, 255);\r\n ctx.lineTo(i, 255 - line[i]);\r\n }\r\n ctx.stroke();\r\n ctx.closePath();\r\n },\r\n\r\n printPattern: function(line, canvas) {\r\n var ctx = canvas.getContext(\"2d\"), i;\r\n\r\n canvas.width = line.length;\r\n ctx.fillColor = \"black\";\r\n for ( i = 0; i < line.length; i++) {\r\n if (line[i] === 1) {\r\n ctx.fillRect(i, 0, 1, 100);\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport default Bresenham;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/decoder/bresenham.js\n **/","import {pick} from 'lodash';\r\n\r\nvar streamRef;\r\n\r\nfunction waitForVideo(video) {\r\n return new Promise((resolve, reject) => {\r\n let attempts = 10;\r\n\r\n function checkVideo() {\r\n if (attempts > 0) {\r\n if (video.videoWidth > 0 && video.videoHeight > 0) {\r\n if (ENV.development) {\r\n console.log(video.videoWidth + \"px x \" + video.videoHeight + \"px\");\r\n }\r\n resolve();\r\n } else {\r\n window.setTimeout(checkVideo, 500);\r\n }\r\n } else {\r\n reject('Unable to play video stream. Is webcam working?');\r\n }\r\n attempts--;\r\n }\r\n checkVideo();\r\n });\r\n}\r\n\r\n/**\r\n * Tries to attach the camera-stream to a given video-element\r\n * and calls the callback function when the content is ready\r\n * @param {Object} constraints\r\n * @param {Object} video\r\n */\r\nfunction initCamera(video, constraints) {\r\n if (navigator.mediaDevices\r\n && typeof navigator.mediaDevices.getUserMedia === 'function') {\r\n return navigator.mediaDevices\r\n .getUserMedia(constraints)\r\n .then((stream) => {\r\n return new Promise((resolve) => {\r\n streamRef = stream;\r\n video.setAttribute(\"autoplay\", 'true');\r\n video.srcObject = stream;\r\n video.addEventListener('loadedmetadata', () => {\r\n video.play();\r\n resolve();\r\n });\r\n });\r\n })\r\n .then(waitForVideo.bind(null, video));\r\n }\r\n return Promise.reject(new Error('getUserMedia is not defined'));\r\n}\r\n\r\nfunction deprecatedConstraints(videoConstraints) {\r\n const normalized = pick(videoConstraints, [\"width\", \"height\", \"facingMode\",\r\n \"aspectRatio\", \"deviceId\"]);\r\n\r\n if (typeof videoConstraints.minAspectRatio !== 'undefined' &&\r\n videoConstraints.minAspectRatio > 0) {\r\n normalized.aspectRatio = videoConstraints.minAspectRatio;\r\n console.log(\"WARNING: Constraint 'minAspectRatio' is deprecated; Use 'aspectRatio' instead\");\r\n }\r\n if (typeof videoConstraints.facing !== 'undefined') {\r\n normalized.facingMode = videoConstraints.facing;\r\n console.log(\"WARNING: Constraint 'facing' is deprecated. Use 'facingMode' instead'\");\r\n }\r\n return normalized;\r\n}\r\n\r\nfunction pickConstraints(videoConstraints) {\r\n return {\r\n audio: false,\r\n video: deprecatedConstraints(videoConstraints)\r\n };\r\n}\r\n\r\nexport default {\r\n request: function(video, videoConstraints) {\r\n return initCamera(video, pickConstraints(videoConstraints));\r\n },\r\n release: function() {\r\n var tracks = streamRef && streamRef.getVideoTracks();\r\n if (tracks && tracks.length) {\r\n tracks[0].stop();\r\n }\r\n streamRef = null;\r\n }\r\n};\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/input/camera_access.js\n **/","import {merge, pick, omitBy, isEmpty} from 'lodash';\r\n\r\nimport DOMHelper from '../common/dom_helper';\r\n\r\nconst isDataURL = {regex: /^\\s*data:([a-z]+\\/[a-z0-9\\-\\+]+(;[a-z\\-]+\\=[a-z0-9\\-]+)?)?(;base64)?,[a-z0-9\\!\\$\\&\\'\\,\\(\\)\\*\\+\\,\\;\\=\\-\\.\\_\\~\\:\\@\\/\\?\\%\\s]*\\s*$/i}, // eslint-disable-line max-len\r\n isBlobURL = {regex: /^\\s*blob:(.*)$/i},\r\n isMediaURL = {regex: /^(?:(?:http[s]?|ftp):\\/)?\\/?(?:(?:[^:\\/\\s]+)(?:(?:\\/\\w+)*\\/))?([\\w\\-]+\\.([^#?\\s]+))(?:.*)?(?:#[\\w\\-]+)?$/i}, // eslint-disable-line max-len\r\n isImageExt = {regex: /(jpe?g|png|gif|tiff)(?:\\s+|$)/i},\r\n isVideoExt = {regex: /(webm|ogg|mp4|m4v)/i};\r\n\r\nexport function createConfigFromSource(config, sourceConfig, source) {\r\n if (source instanceof DOMHelper.MediaStream) {\r\n return createConfigForStream(config, sourceConfig, {srcObject: source});\r\n } else if (source instanceof DOMHelper.HTMLImageElement) {\r\n throw new Error('Source \"HTMLImageElement\": not yet supported');\r\n // return createConfigForImage(config, inputConfig, {image: source});\r\n } else if (source instanceof DOMHelper.HTMLVideoElement) {\r\n throw new Error('Source \"HTMLVideoElement\": not yet supported');\r\n // return createConfigForVideo(config, inputConfig, {video: source});\r\n } else if (source instanceof DOMHelper.HTMLCanvasElement) {\r\n return createConfigForCanvas(config, sourceConfig, {canvas: source});\r\n } else if (source instanceof DOMHelper.FileList) {\r\n if (source.length > 0) {\r\n return createConfigForFile(config, sourceConfig, source[0]);\r\n }\r\n } else if (source instanceof DOMHelper.File) {\r\n return createConfigForFile(config, sourceConfig, source);\r\n } else if (typeof source === 'string') {\r\n return createConfigForString(config, sourceConfig, source);\r\n } else if (typeof source === 'object'\r\n && (typeof source.constraints !== 'undefined'\r\n || typeof source.area !== 'undefined')) {\r\n return createConfigForLiveStream(config, source);\r\n } else {\r\n throw new Error(\"No source given!\");\r\n }\r\n}\r\n\r\nfunction createConfigForImage(config, source, inputConfig = {}) {\r\n const staticImageConfig = {\r\n inputStream: merge({\r\n type: \"ImageStream\",\r\n sequence: false,\r\n size: 800\r\n }, source),\r\n numOfWorkers: (ENV.development && config.debug) ? 0 : 1\r\n };\r\n return merge(\r\n config,\r\n staticImageConfig,\r\n {numOfWorkers: typeof config.numOfWorkers === 'number' && config.numOfWorkers > 0 ? 1 : 0},\r\n {inputStream: omitBy(pick(config.inputStream, ['size']), isEmpty)},\r\n {inputStream: inputConfig});\r\n}\r\n\r\nfunction createConfigForMimeType(config, inputConfig, {src, mime}) {\r\n const [, type] = mime.match(/^(video|image)\\/(.*)$/i) || [];\r\n if (type === 'video') {\r\n return createConfigForVideo(config, {src}, inputConfig);\r\n } else if (type === 'image') {\r\n return createConfigForImage(config, {src}, inputConfig);\r\n }\r\n throw new Error(`Source with mimetype: \"${type}\" not supported`);\r\n}\r\n\r\nfunction createConfigForFile(config, inputConfig, file) {\r\n const src = DOMHelper.URL.createObjectURL(file);\r\n return createConfigForMimeType(config, inputConfig, {\r\n src,\r\n mime: file.type\r\n });\r\n}\r\n\r\nfunction createConfigForString(config, inputConfig = {}, source) {\r\n const [, mime] = source.match(isDataURL.regex) || [];\r\n if (mime) {\r\n return createConfigForMimeType(config, inputConfig, {src: source, mime});\r\n }\r\n const blobURL = source.match(isBlobURL.regex);\r\n if (blobURL) {\r\n throw new Error(`Source \"objectURL\": not supported`);\r\n }\r\n const [, , ext] = source.match(isMediaURL.regex) || [];\r\n if (ext) {\r\n return createConfigForMediaExtension(config, inputConfig, {src: source, ext});\r\n }\r\n throw new Error(`Source \"${source}\": not recognized`);\r\n}\r\n\r\nfunction createConfigForMediaExtension(config, inputConfig, {src, ext}) {\r\n if (ext.match(isImageExt.regex)) {\r\n return createConfigForImage(config, {src}, inputConfig);\r\n } else if (ext.match(isVideoExt.regex)) {\r\n return createConfigForVideo(config, {src}, inputConfig);\r\n }\r\n throw new Error(`Source \"MediaString\": not recognized`);\r\n}\r\n\r\nfunction createConfigForCanvas (config, {canvas}, inputConfig = {}) {\r\n // TODO: adjust stream & frame-grabber\r\n // once/continous\r\n throw new Error('Source \"Canvas\": not implemented!');\r\n}\r\n\r\nfunction createConfigForVideo (config, source, inputConfig = {}) {\r\n return merge({},\r\n config,\r\n {\r\n inputStream: merge({\r\n type: \"VideoStream\"\r\n }, source)\r\n }, {\r\n inputStream: inputConfig\r\n });\r\n}\r\n\r\nfunction createConfigForStream(config, {srcObject}, inputConfig = {}) {\r\n // TODO: attach to element\r\n // wait for the video to be ready (dimensions known)\r\n throw new Error('Source \"MediaStream\": not implemented!');\r\n}\r\n\r\nfunction createConfigForLiveStream(config, inputConfig = {}) {\r\n return merge({},\r\n config,\r\n {\r\n inputStream: {\r\n type: \"LiveStream\",\r\n constraints: {\r\n width: 640,\r\n height: 480,\r\n facingMode: \"environment\"\r\n }\r\n }\r\n }, {\r\n inputStream: inputConfig\r\n });\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/input/config_factory.js\n **/","// Scraped from https://github.com/exif-js/exif-js\r\n\r\nconst ExifTags = {0x0112: \"orientation\"};\r\nexport const AvailableTags = Object.keys(ExifTags).map(key => ExifTags[key]);\r\n\r\nexport function findTagsInObjectURL(src, tags = AvailableTags) {\r\n if (/^blob\\:/i.test(src)) {\r\n return objectURLToBlob(src)\r\n .then(readToBuffer)\r\n .then(buffer => findTagsInBuffer(buffer, tags));\r\n }\r\n return Promise.resolve(null);\r\n}\r\n\r\nexport function base64ToArrayBuffer(dataUrl) {\r\n const base64 = dataUrl.replace(/^data\\:([^\\;]+)\\;base64,/gmi, ''),\r\n binary = atob(base64),\r\n len = binary.length,\r\n buffer = new ArrayBuffer(len),\r\n view = new Uint8Array(buffer);\r\n\r\n for (let i = 0; i < len; i++) {\r\n view[i] = binary.charCodeAt(i);\r\n }\r\n return buffer;\r\n}\r\n\r\nfunction readToBuffer(blob) {\r\n return new Promise(resolve => {\r\n const fileReader = new FileReader();\r\n fileReader.onload = function(e) {\r\n return resolve(e.target.result);\r\n };\r\n fileReader.readAsArrayBuffer(blob);\r\n });\r\n}\r\n\r\nfunction objectURLToBlob(url) {\r\n return new Promise((resolve, reject) => {\r\n const http = new XMLHttpRequest();\r\n http.open(\"GET\", url, true);\r\n http.responseType = \"blob\";\r\n http.onreadystatechange = function () {\r\n if (http.readyState === XMLHttpRequest.DONE && (http.status === 200 || http.status === 0)) {\r\n resolve(this.response);\r\n }\r\n };\r\n http.onerror = reject;\r\n http.send();\r\n });\r\n}\r\n\r\nexport function findTagsInBuffer(file, selectedTags = AvailableTags) {\r\n const dataView = new DataView(file),\r\n length = file.byteLength,\r\n exifTags = selectedTags.reduce((result, selectedTag) => {\r\n const exifTag = Object.keys(ExifTags).filter(tag => ExifTags[tag] === selectedTag)[0];\r\n if (exifTag) {\r\n result[exifTag] = selectedTag;\r\n }\r\n return result;\r\n }, {});\r\n let offset = 2,\r\n marker;\r\n\r\n if ((dataView.getUint8(0) !== 0xFF) || (dataView.getUint8(1) !== 0xD8)) {\r\n return false;\r\n }\r\n\r\n while (offset < length) {\r\n if (dataView.getUint8(offset) !== 0xFF) {\r\n return false;\r\n }\r\n\r\n marker = dataView.getUint8(offset + 1);\r\n if (marker === 0xE1) {\r\n return readEXIFData(dataView, offset + 4, exifTags);\r\n } else {\r\n offset += 2 + dataView.getUint16(offset + 2);\r\n }\r\n }\r\n}\r\n\r\nfunction readEXIFData(file, start, exifTags) {\r\n if (getStringFromBuffer(file, start, 4) !== \"Exif\") {\r\n return false;\r\n }\r\n\r\n const tiffOffset = start + 6;\r\n let bigEnd,\r\n tags;\r\n\r\n if (file.getUint16(tiffOffset) === 0x4949) {\r\n bigEnd = false;\r\n } else if (file.getUint16(tiffOffset) === 0x4D4D) {\r\n bigEnd = true;\r\n } else {\r\n return false;\r\n }\r\n\r\n if (file.getUint16(tiffOffset + 2, !bigEnd) !== 0x002A) {\r\n return false;\r\n }\r\n\r\n const firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd);\r\n if (firstIFDOffset < 0x00000008) {\r\n return false;\r\n }\r\n\r\n tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, exifTags, bigEnd);\r\n return tags;\r\n}\r\n\r\nfunction readTags(file, tiffStart, dirStart, strings, bigEnd) {\r\n const entries = file.getUint16(dirStart, !bigEnd),\r\n tags = {};\r\n\r\n for (let i = 0; i < entries; i++) {\r\n const entryOffset = dirStart + i * 12 + 2,\r\n tag = strings[file.getUint16(entryOffset, !bigEnd)];\r\n if (tag) {\r\n tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd);\r\n }\r\n }\r\n return tags;\r\n}\r\n\r\nfunction readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd) {\r\n const type = file.getUint16(entryOffset + 2, !bigEnd),\r\n numValues = file.getUint32(entryOffset + 4, !bigEnd);\r\n\r\n switch (type) {\r\n case 3:\r\n if (numValues === 1) {\r\n return file.getUint16(entryOffset + 8, !bigEnd);\r\n }\r\n }\r\n}\r\n\r\nfunction getStringFromBuffer(buffer, start, length) {\r\n let outstr = \"\";\r\n for (let n = start; n < start + length; n++) {\r\n outstr += String.fromCharCode(buffer.getUint8(n));\r\n }\r\n return outstr;\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/input/exif_helper.js\n **/","import {\r\n imageRef,\r\n grayAndHalfSampleFromCanvasData,\r\n computeGray\r\n} from '../common/cv_utils';\r\n\r\nconst TO_RADIANS = Math.PI / 180;\r\n\r\nfunction adjustCanvasSize(canvas, targetSize) {\r\n if (canvas.width !== targetSize.x) {\r\n if (ENV.development) {\r\n console.log(\"WARNING: canvas-size needs to be adjusted\");\r\n }\r\n canvas.width = targetSize.x;\r\n }\r\n if (canvas.height !== targetSize.y) {\r\n if (ENV.development) {\r\n console.log(\"WARNING: canvas-size needs to be adjusted\");\r\n }\r\n canvas.height = targetSize.y;\r\n }\r\n}\r\n\r\nvar FrameGrabber = {};\r\n\r\nFrameGrabber.create = function(inputStream, canvas) {\r\n var _that = {},\r\n _streamConfig = inputStream.getConfig(),\r\n _video_size = imageRef(inputStream.getRealWidth(), inputStream.getRealHeight()),\r\n _canvasSize = inputStream.getCanvasSize(),\r\n _size = imageRef(inputStream.getWidth(), inputStream.getHeight()),\r\n topRight = inputStream.getTopRight(),\r\n _sx = topRight.x,\r\n _sy = topRight.y,\r\n _canvas,\r\n _ctx = null,\r\n _data = null;\r\n\r\n _canvas = canvas ? canvas : document.createElement(\"canvas\");\r\n _canvas.width = _canvasSize.x;\r\n _canvas.height = _canvasSize.y;\r\n _ctx = _canvas.getContext(\"2d\");\r\n _data = new Uint8Array(_size.x * _size.y);\r\n if (ENV.development) {\r\n console.log(\"FrameGrabber\", JSON.stringify({\r\n size: _size,\r\n topRight: topRight,\r\n videoSize: _video_size,\r\n canvasSize: _canvasSize\r\n }));\r\n }\r\n\r\n /**\r\n * Uses the given array as frame-buffer\r\n */\r\n _that.attachData = function(data) {\r\n _data = data;\r\n };\r\n\r\n /**\r\n * Returns the used frame-buffer\r\n */\r\n _that.getData = function() {\r\n return _data;\r\n };\r\n\r\n /**\r\n * Fetches a frame from the input-stream and puts into the frame-buffer.\r\n * The image-data is converted to gray-scale and then half-sampled if configured.\r\n */\r\n _that.grab = function() {\r\n var doHalfSample = _streamConfig.halfSample,\r\n frame = inputStream.getFrame(),\r\n drawable = frame,\r\n drawAngle = 0,\r\n ctxData;\r\n if (drawable) {\r\n adjustCanvasSize(_canvas, _canvasSize);\r\n if (_streamConfig.type === 'ImageStream') {\r\n drawable = frame.img;\r\n if (frame.tags && frame.tags.orientation) {\r\n switch (frame.tags.orientation) {\r\n case 6:\r\n drawAngle = 90 * TO_RADIANS;\r\n break;\r\n case 8:\r\n drawAngle = -90 * TO_RADIANS;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (drawAngle !== 0) {\r\n _ctx.translate(_canvasSize.x / 2, _canvasSize.y / 2);\r\n _ctx.rotate(drawAngle);\r\n _ctx.drawImage(drawable, -_canvasSize.y / 2, -_canvasSize.x / 2, _canvasSize.y, _canvasSize.x);\r\n _ctx.rotate(-drawAngle);\r\n _ctx.translate(-_canvasSize.x / 2, -_canvasSize.y / 2);\r\n } else {\r\n _ctx.drawImage(drawable, 0, 0, _canvasSize.x, _canvasSize.y);\r\n }\r\n\r\n ctxData = _ctx.getImageData(_sx, _sy, _size.x, _size.y).data;\r\n if (doHalfSample){\r\n grayAndHalfSampleFromCanvasData(ctxData, _size, _data);\r\n } else {\r\n computeGray(ctxData, _data, _streamConfig);\r\n }\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n _that.getSize = function() {\r\n return _size;\r\n };\r\n\r\n return _that;\r\n};\r\n\r\nexport default FrameGrabber;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/input/frame_grabber.js\n **/","import {findTagsInObjectURL} from './exif_helper';\r\n\r\nvar ImageLoader = {};\r\nImageLoader.load = function(directory, callback, offset, size, sequence) {\r\n var htmlImagesSrcArray = new Array(size),\r\n htmlImagesArray = new Array(htmlImagesSrcArray.length),\r\n i,\r\n img,\r\n num;\r\n\r\n if (sequence === false) {\r\n htmlImagesSrcArray[0] = directory;\r\n } else {\r\n for ( i = 0; i < htmlImagesSrcArray.length; i++) {\r\n num = (offset + i);\r\n htmlImagesSrcArray[i] = directory + \"image-\" + (\"00\" + num).slice(-3) + \".jpg\";\r\n }\r\n }\r\n htmlImagesArray.notLoaded = [];\r\n htmlImagesArray.addImage = function(image) {\r\n htmlImagesArray.notLoaded.push(image);\r\n };\r\n htmlImagesArray.loaded = function(loadedImg) {\r\n var notloadedImgs = htmlImagesArray.notLoaded;\r\n for (var x = 0; x < notloadedImgs.length; x++) {\r\n if (notloadedImgs[x] === loadedImg) {\r\n notloadedImgs.splice(x, 1);\r\n for (var y = 0; y < htmlImagesSrcArray.length; y++) {\r\n var imgName = htmlImagesSrcArray[y].substr(htmlImagesSrcArray[y].lastIndexOf(\"/\"));\r\n if (loadedImg.src.lastIndexOf(imgName) !== -1) {\r\n htmlImagesArray[y] = {img: loadedImg};\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n if (notloadedImgs.length === 0) {\r\n if (ENV.development) {\r\n console.log(\"Images loaded\");\r\n }\r\n if (sequence === false) {\r\n findTagsInObjectURL(directory, ['orientation'])\r\n .then(tags => {\r\n htmlImagesArray[0].tags = tags;\r\n callback(htmlImagesArray);\r\n }).catch(e => {\r\n console.log(e);\r\n callback(htmlImagesArray);\r\n });\r\n } else {\r\n callback(htmlImagesArray);\r\n }\r\n }\r\n };\r\n\r\n for ( i = 0; i < htmlImagesSrcArray.length; i++) {\r\n img = new Image();\r\n htmlImagesArray.addImage(img);\r\n addOnloadHandler(img, htmlImagesArray);\r\n img.src = htmlImagesSrcArray[i];\r\n }\r\n};\r\n\r\nfunction addOnloadHandler(img, htmlImagesArray) {\r\n img.onload = function() {\r\n htmlImagesArray.loaded(this);\r\n };\r\n}\r\n\r\nexport default (ImageLoader);\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/input/image_loader.js\n **/","import ImageLoader from './image_loader';\r\n\r\nvar InputStream = {};\r\nInputStream.createVideoStream = function(video) {\r\n var that = {},\r\n _config = null,\r\n _eventNames = ['canrecord', 'ended'],\r\n _eventHandlers = {},\r\n _calculatedWidth,\r\n _calculatedHeight,\r\n _topRight = {x: 0, y: 0},\r\n _canvasSize = {x: 0, y: 0};\r\n\r\n function initSize() {\r\n var width = video.videoWidth,\r\n height = video.videoHeight;\r\n\r\n _calculatedWidth =\r\n _config.size ? width / height > 1 ? _config.size : Math.floor((width / height) * _config.size) : width;\r\n _calculatedHeight =\r\n _config.size ? width / height > 1 ? Math.floor((height / width) * _config.size) : _config.size : height;\r\n\r\n _canvasSize.x = _calculatedWidth;\r\n _canvasSize.y = _calculatedHeight;\r\n }\r\n\r\n that.getRealWidth = function() {\r\n return video.videoWidth;\r\n };\r\n\r\n that.getRealHeight = function() {\r\n return video.videoHeight;\r\n };\r\n\r\n that.getWidth = function() {\r\n return _calculatedWidth;\r\n };\r\n\r\n that.getHeight = function() {\r\n return _calculatedHeight;\r\n };\r\n\r\n that.setWidth = function(width) {\r\n _calculatedWidth = width;\r\n };\r\n\r\n that.setHeight = function(height) {\r\n _calculatedHeight = height;\r\n };\r\n\r\n that.setInputStream = function(config) {\r\n _config = config;\r\n video.src = (typeof config.src !== 'undefined') ? config.src : '';\r\n };\r\n\r\n that.ended = function() {\r\n return video.ended;\r\n };\r\n\r\n that.getConfig = function() {\r\n return _config;\r\n };\r\n\r\n that.setAttribute = function(name, value) {\r\n video.setAttribute(name, value);\r\n };\r\n\r\n that.pause = function() {\r\n video.pause();\r\n };\r\n\r\n that.play = function() {\r\n video.play();\r\n };\r\n\r\n that.setCurrentTime = function(time) {\r\n if (_config.type !== \"LiveStream\") {\r\n video.currentTime = time;\r\n }\r\n };\r\n\r\n that.addEventListener = function(event, f, bool) {\r\n if (_eventNames.indexOf(event) !== -1) {\r\n if (!_eventHandlers[event]) {\r\n _eventHandlers[event] = [];\r\n }\r\n _eventHandlers[event].push(f);\r\n } else {\r\n video.addEventListener(event, f, bool);\r\n }\r\n };\r\n\r\n that.clearEventHandlers = function() {\r\n _eventNames.forEach(function(eventName) {\r\n var handlers = _eventHandlers[eventName];\r\n if (handlers && handlers.length > 0) {\r\n handlers.forEach(function(handler) {\r\n video.removeEventListener(eventName, handler);\r\n });\r\n }\r\n });\r\n };\r\n\r\n that.trigger = function(eventName, args) {\r\n var j,\r\n handlers = _eventHandlers[eventName];\r\n\r\n if (eventName === 'canrecord') {\r\n initSize();\r\n }\r\n if (handlers && handlers.length > 0) {\r\n for ( j = 0; j < handlers.length; j++) {\r\n handlers[j].apply(that, args);\r\n }\r\n }\r\n };\r\n\r\n that.setTopRight = function(topRight) {\r\n _topRight.x = topRight.x;\r\n _topRight.y = topRight.y;\r\n };\r\n\r\n that.getTopRight = function() {\r\n return _topRight;\r\n };\r\n\r\n that.setCanvasSize = function(size) {\r\n _canvasSize.x = size.x;\r\n _canvasSize.y = size.y;\r\n };\r\n\r\n that.getCanvasSize = function() {\r\n return _canvasSize;\r\n };\r\n\r\n that.getFrame = function() {\r\n return video;\r\n };\r\n\r\n return that;\r\n};\r\n\r\nInputStream.createLiveStream = function(video) {\r\n video.setAttribute(\"autoplay\", true);\r\n var that = InputStream.createVideoStream(video);\r\n\r\n that.ended = function() {\r\n return false;\r\n };\r\n\r\n return that;\r\n};\r\n\r\nInputStream.createImageStream = function() {\r\n var that = {};\r\n var _config = null;\r\n\r\n var width = 0,\r\n height = 0,\r\n frameIdx = 0,\r\n paused = true,\r\n loaded = false,\r\n imgArray = null,\r\n size = 0,\r\n offset = 1,\r\n baseUrl = null,\r\n ended = false,\r\n calculatedWidth,\r\n calculatedHeight,\r\n _eventNames = ['canrecord', 'ended'],\r\n _eventHandlers = {},\r\n _topRight = {x: 0, y: 0},\r\n _canvasSize = {x: 0, y: 0};\r\n\r\n function loadImages() {\r\n loaded = false;\r\n ImageLoader.load(baseUrl, function(imgs) {\r\n imgArray = imgs;\r\n if (imgs[0].tags && imgs[0].tags.orientation) {\r\n switch (imgs[0].tags.orientation) {\r\n case 6:\r\n case 8:\r\n width = imgs[0].img.height;\r\n height = imgs[0].img.width;\r\n break;\r\n default:\r\n width = imgs[0].img.width;\r\n height = imgs[0].img.height;\r\n }\r\n } else {\r\n width = imgs[0].img.width;\r\n height = imgs[0].img.height;\r\n }\r\n calculatedWidth =\r\n _config.size ? width / height > 1 ? _config.size : Math.floor((width / height) * _config.size) : width;\r\n calculatedHeight =\r\n _config.size ? width / height > 1 ? Math.floor((height / width) * _config.size) : _config.size : height;\r\n _canvasSize.x = calculatedWidth;\r\n _canvasSize.y = calculatedHeight;\r\n loaded = true;\r\n frameIdx = 0;\r\n setTimeout(function() {\r\n publishEvent(\"canrecord\", []);\r\n }, 0);\r\n }, offset, size, _config.sequence);\r\n }\r\n\r\n function publishEvent(eventName, args) {\r\n var j,\r\n handlers = _eventHandlers[eventName];\r\n\r\n if (handlers && handlers.length > 0) {\r\n for ( j = 0; j < handlers.length; j++) {\r\n handlers[j].apply(that, args);\r\n }\r\n }\r\n }\r\n\r\n\r\n that.trigger = publishEvent;\r\n\r\n that.getWidth = function() {\r\n return calculatedWidth;\r\n };\r\n\r\n that.getHeight = function() {\r\n return calculatedHeight;\r\n };\r\n\r\n that.setWidth = function(newWidth) {\r\n calculatedWidth = newWidth;\r\n };\r\n\r\n that.setHeight = function(newHeight) {\r\n calculatedHeight = newHeight;\r\n };\r\n\r\n that.getRealWidth = function() {\r\n return width;\r\n };\r\n\r\n that.getRealHeight = function() {\r\n return height;\r\n };\r\n\r\n that.setInputStream = function(stream) {\r\n _config = stream;\r\n if (stream.sequence === false) {\r\n baseUrl = stream.src;\r\n size = 1;\r\n } else {\r\n baseUrl = stream.src;\r\n size = stream.length;\r\n }\r\n loadImages();\r\n };\r\n\r\n that.ended = function() {\r\n return ended;\r\n };\r\n\r\n that.setAttribute = function() {};\r\n\r\n that.getConfig = function() {\r\n return _config;\r\n };\r\n\r\n that.pause = function() {\r\n paused = true;\r\n };\r\n\r\n that.play = function() {\r\n paused = false;\r\n };\r\n\r\n that.setCurrentTime = function(time) {\r\n frameIdx = time;\r\n };\r\n\r\n that.addEventListener = function(event, f) {\r\n if (_eventNames.indexOf(event) !== -1) {\r\n if (!_eventHandlers[event]) {\r\n _eventHandlers[event] = [];\r\n }\r\n _eventHandlers[event].push(f);\r\n }\r\n };\r\n\r\n that.clearEventHandlers = function() {\r\n _eventHandlers = {};\r\n };\r\n\r\n that.setTopRight = function(topRight) {\r\n _topRight.x = topRight.x;\r\n _topRight.y = topRight.y;\r\n };\r\n\r\n that.getTopRight = function() {\r\n return _topRight;\r\n };\r\n\r\n that.setCanvasSize = function(canvasSize) {\r\n _canvasSize.x = canvasSize.x;\r\n _canvasSize.y = canvasSize.y;\r\n };\r\n\r\n that.getCanvasSize = function() {\r\n return _canvasSize;\r\n };\r\n\r\n that.getFrame = function() {\r\n var frame;\r\n\r\n if (!loaded){\r\n return null;\r\n }\r\n if (!paused) {\r\n frame = imgArray[frameIdx];\r\n if (frameIdx < (size - 1)) {\r\n frameIdx++;\r\n } else {\r\n setTimeout(function() {\r\n ended = true;\r\n publishEvent(\"ended\", []);\r\n }, 0);\r\n }\r\n }\r\n return frame;\r\n };\r\n\r\n return that;\r\n};\r\n\r\nexport default InputStream;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/input/input_stream.js\n **/","import ImageWrapper from '../common/image_wrapper';\r\nimport {\r\n calculatePatchSize,\r\n otsuThreshold,\r\n hsv2rgb,\r\n cluster,\r\n topGeneric,\r\n imageRef,\r\n halfSample,\r\n computeImageArea\r\n} from '../common/cv_utils';\r\nimport ArrayHelper from '../common/array_helper';\r\nimport ImageDebug from '../common/image_debug';\r\nimport Rasterizer from './rasterizer';\r\nimport Tracer from './tracer';\r\nimport skeletonizer from './skeletonizer';\r\nconst vec2 = {\r\n clone: require('gl-vec2/clone'),\r\n dot: require('gl-vec2/dot'),\r\n scale: require('gl-vec2/scale'),\r\n transformMat2: require('gl-vec2/transformMat2')\r\n};\r\nconst mat2 = {\r\n copy: require('gl-mat2/copy'),\r\n create: require('gl-mat2/create'),\r\n invert: require('gl-mat2/invert')\r\n};\r\n\r\nexport default function createLocator(inputImageWrapper, config) {\r\n var _config = config,\r\n _currentImageWrapper,\r\n _skelImageWrapper,\r\n _subImageWrapper,\r\n _labelImageWrapper,\r\n _patchGrid,\r\n _patchLabelGrid,\r\n _imageToPatchGrid,\r\n _binaryImageWrapper,\r\n _patchSize,\r\n _canvasContainer = {\r\n ctx: {\r\n binary: null\r\n },\r\n dom: {\r\n binary: null\r\n }\r\n },\r\n _numPatches = {x: 0, y: 0},\r\n _inputImageWrapper = inputImageWrapper,\r\n _skeletonizer;\r\n\r\n initBuffers();\r\n initCanvas();\r\n\r\n function initBuffers() {\r\n var skeletonImageData;\r\n\r\n if (_config.halfSample) {\r\n _currentImageWrapper = new ImageWrapper({\r\n x: _inputImageWrapper.size.x / 2 | 0,\r\n y: _inputImageWrapper.size.y / 2 | 0\r\n });\r\n } else {\r\n _currentImageWrapper = _inputImageWrapper;\r\n }\r\n\r\n _patchSize = calculatePatchSize(_config.patchSize, _currentImageWrapper.size);\r\n\r\n _numPatches.x = _currentImageWrapper.size.x / _patchSize.x | 0;\r\n _numPatches.y = _currentImageWrapper.size.y / _patchSize.y | 0;\r\n\r\n _binaryImageWrapper = new ImageWrapper(_currentImageWrapper.size, undefined, Uint8Array, false);\r\n\r\n _labelImageWrapper = new ImageWrapper(_patchSize, undefined, Array, true);\r\n\r\n skeletonImageData = new ArrayBuffer(64 * 1024);\r\n _subImageWrapper = new ImageWrapper(_patchSize,\r\n new Uint8Array(skeletonImageData, 0, _patchSize.x * _patchSize.y));\r\n _skelImageWrapper = new ImageWrapper(_patchSize,\r\n new Uint8Array(skeletonImageData, _patchSize.x * _patchSize.y * 3, _patchSize.x * _patchSize.y),\r\n undefined, true);\r\n _skeletonizer = skeletonizer((typeof window !== 'undefined') ? window : (typeof self !== 'undefined') ? self : global, {\r\n size: _patchSize.x\r\n }, skeletonImageData);\r\n\r\n _imageToPatchGrid = new ImageWrapper({\r\n x: (_currentImageWrapper.size.x / _subImageWrapper.size.x) | 0,\r\n y: (_currentImageWrapper.size.y / _subImageWrapper.size.y) | 0\r\n }, undefined, Array, true);\r\n _patchGrid = new ImageWrapper(_imageToPatchGrid.size, undefined, undefined, true);\r\n _patchLabelGrid = new ImageWrapper(_imageToPatchGrid.size, undefined, Int32Array, true);\r\n }\r\n\r\n function initCanvas() {\r\n if (_config.useWorker || typeof document === 'undefined') {\r\n return;\r\n }\r\n _canvasContainer.dom.binary = document.createElement(\"canvas\");\r\n _canvasContainer.dom.binary.className = \"binaryBuffer\";\r\n if (ENV.development && _config.debug.showCanvas === true) {\r\n document.querySelector(\"#debug\").appendChild(_canvasContainer.dom.binary);\r\n }\r\n _canvasContainer.ctx.binary = _canvasContainer.dom.binary.getContext(\"2d\");\r\n _canvasContainer.dom.binary.width = _binaryImageWrapper.size.x;\r\n _canvasContainer.dom.binary.height = _binaryImageWrapper.size.y;\r\n }\r\n\r\n /**\r\n * Creates a bounding box which encloses all the given patches\r\n * @returns {Array} The minimal bounding box\r\n */\r\n function boxFromPatches(patches) {\r\n var overAvg,\r\n i,\r\n j,\r\n patch,\r\n transMat,\r\n minx =\r\n _binaryImageWrapper.size.x,\r\n miny = _binaryImageWrapper.size.y,\r\n maxx = -_binaryImageWrapper.size.x,\r\n maxy = -_binaryImageWrapper.size.y,\r\n box,\r\n scale;\r\n\r\n // draw all patches which are to be taken into consideration\r\n overAvg = 0;\r\n for ( i = 0; i < patches.length; i++) {\r\n patch = patches[i];\r\n overAvg += patch.rad;\r\n if (ENV.development && _config.debug.showPatches) {\r\n ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary, {color: \"red\"});\r\n }\r\n }\r\n\r\n overAvg /= patches.length;\r\n overAvg = (overAvg * 180 / Math.PI + 90) % 180 - 90;\r\n if (overAvg < 0) {\r\n overAvg += 180;\r\n }\r\n\r\n overAvg = (180 - overAvg) * Math.PI / 180;\r\n transMat = mat2.copy(mat2.create(), [Math.cos(overAvg), Math.sin(overAvg), -Math.sin(overAvg), Math.cos(overAvg)]);\r\n\r\n // iterate over patches and rotate by angle\r\n for ( i = 0; i < patches.length; i++) {\r\n patch = patches[i];\r\n for ( j = 0; j < 4; j++) {\r\n vec2.transformMat2(patch.box[j], patch.box[j], transMat);\r\n }\r\n\r\n if (ENV.development && _config.debug.boxFromPatches.showTransformed) {\r\n ImageDebug.drawPath(patch.box, {x: 0, y: 1}, _canvasContainer.ctx.binary, {color: '#99ff00', lineWidth: 2});\r\n }\r\n }\r\n\r\n // find bounding box\r\n for ( i = 0; i < patches.length; i++) {\r\n patch = patches[i];\r\n for ( j = 0; j < 4; j++) {\r\n if (patch.box[j][0] < minx) {\r\n minx = patch.box[j][0];\r\n }\r\n if (patch.box[j][0] > maxx) {\r\n maxx = patch.box[j][0];\r\n }\r\n if (patch.box[j][1] < miny) {\r\n miny = patch.box[j][1];\r\n }\r\n if (patch.box[j][1] > maxy) {\r\n maxy = patch.box[j][1];\r\n }\r\n }\r\n }\r\n\r\n box = [[minx, miny], [maxx, miny], [maxx, maxy], [minx, maxy]];\r\n\r\n if (ENV.development && _config.debug.boxFromPatches.showTransformedBox) {\r\n ImageDebug.drawPath(box, {x: 0, y: 1}, _canvasContainer.ctx.binary, {color: '#ff0000', lineWidth: 2});\r\n }\r\n\r\n scale = _config.halfSample ? 2 : 1;\r\n // reverse rotation;\r\n transMat = mat2.invert(transMat, transMat);\r\n for ( j = 0; j < 4; j++) {\r\n vec2.transformMat2(box[j], box[j], transMat);\r\n }\r\n\r\n if (ENV.development && _config.debug.boxFromPatches.showBB) {\r\n ImageDebug.drawPath(box, {x: 0, y: 1}, _canvasContainer.ctx.binary, {color: '#ff0000', lineWidth: 2});\r\n }\r\n\r\n for ( j = 0; j < 4; j++) {\r\n vec2.scale(box[j], box[j], scale);\r\n }\r\n\r\n return box;\r\n }\r\n\r\n /**\r\n * Creates a binary image of the current image\r\n */\r\n function binarizeImage() {\r\n otsuThreshold(_currentImageWrapper, _binaryImageWrapper);\r\n _binaryImageWrapper.zeroBorder();\r\n if (ENV.development && _config.debug.showCanvas) {\r\n _binaryImageWrapper.show(_canvasContainer.dom.binary, 255);\r\n }\r\n }\r\n\r\n /**\r\n * Iterate over the entire image\r\n * extract patches\r\n */\r\n function findPatches() {\r\n var i,\r\n j,\r\n x,\r\n y,\r\n moments,\r\n patchesFound = [],\r\n rasterizer,\r\n rasterResult,\r\n patch;\r\n for (i = 0; i < _numPatches.x; i++) {\r\n for (j = 0; j < _numPatches.y; j++) {\r\n x = _subImageWrapper.size.x * i;\r\n y = _subImageWrapper.size.y * j;\r\n\r\n // seperate parts\r\n skeletonize(x, y);\r\n\r\n // Rasterize, find individual bars\r\n _skelImageWrapper.zeroBorder();\r\n ArrayHelper.init(_labelImageWrapper.data, 0);\r\n rasterizer = Rasterizer.create(_skelImageWrapper, _labelImageWrapper);\r\n rasterResult = rasterizer.rasterize(0);\r\n\r\n if (ENV.development && _config.debug.showLabels) {\r\n _labelImageWrapper.overlay(_canvasContainer.dom.binary, Math.floor(360 / rasterResult.count),\r\n {x: x, y: y});\r\n }\r\n\r\n // calculate moments from the skeletonized patch\r\n moments = _labelImageWrapper.moments(rasterResult.count);\r\n\r\n // extract eligible patches\r\n patchesFound = patchesFound.concat(describePatch(moments, [i, j], x, y));\r\n }\r\n }\r\n\r\n if (ENV.development && _config.debug.showFoundPatches) {\r\n for ( i = 0; i < patchesFound.length; i++) {\r\n patch = patchesFound[i];\r\n ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,\r\n {color: \"#99ff00\", lineWidth: 2});\r\n }\r\n }\r\n\r\n return patchesFound;\r\n }\r\n\r\n /**\r\n * Finds those connected areas which contain at least 6 patches\r\n * and returns them ordered DESC by the number of contained patches\r\n * @param {Number} maxLabel\r\n */\r\n function findBiggestConnectedAreas(maxLabel){\r\n var i,\r\n sum,\r\n labelHist = [],\r\n topLabels = [];\r\n\r\n for ( i = 0; i < maxLabel; i++) {\r\n labelHist.push(0);\r\n }\r\n sum = _patchLabelGrid.data.length;\r\n while (sum--) {\r\n if (_patchLabelGrid.data[sum] > 0) {\r\n labelHist[_patchLabelGrid.data[sum] - 1]++;\r\n }\r\n }\r\n\r\n labelHist = labelHist.map(function(val, idx) {\r\n return {\r\n val: val,\r\n label: idx + 1\r\n };\r\n });\r\n\r\n labelHist.sort(function(a, b) {\r\n return b.val - a.val;\r\n });\r\n\r\n // extract top areas with at least 6 patches present\r\n topLabels = labelHist.filter(function(el) {\r\n return el.val >= 5;\r\n });\r\n\r\n return topLabels;\r\n }\r\n\r\n /**\r\n *\r\n */\r\n function findBoxes(topLabels, maxLabel) {\r\n var i,\r\n j,\r\n sum,\r\n patches = [],\r\n patch,\r\n box,\r\n boxes = [],\r\n hsv = [0, 1, 1],\r\n rgb = [0, 0, 0];\r\n\r\n for ( i = 0; i < topLabels.length; i++) {\r\n sum = _patchLabelGrid.data.length;\r\n patches.length = 0;\r\n while (sum--) {\r\n if (_patchLabelGrid.data[sum] === topLabels[i].label) {\r\n patch = _imageToPatchGrid.data[sum];\r\n patches.push(patch);\r\n }\r\n }\r\n box = boxFromPatches(patches);\r\n if (box) {\r\n boxes.push(box);\r\n\r\n // draw patch-labels if requested\r\n if (ENV.development && _config.debug.showRemainingPatchLabels) {\r\n for ( j = 0; j < patches.length; j++) {\r\n patch = patches[j];\r\n hsv[0] = (topLabels[i].label / (maxLabel + 1)) * 360;\r\n hsv2rgb(hsv, rgb);\r\n ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,\r\n {color: \"rgb(\" + rgb.join(\",\") + \")\", lineWidth: 2});\r\n }\r\n }\r\n }\r\n }\r\n return boxes;\r\n }\r\n\r\n /**\r\n * Find similar moments (via cluster)\r\n * @param {Object} moments\r\n */\r\n function similarMoments(moments) {\r\n var clusters = cluster(moments, 0.90);\r\n var topCluster = topGeneric(clusters, 1, function(e) {\r\n return e.getPoints().length;\r\n });\r\n var points = [], result = [];\r\n if (topCluster.length === 1) {\r\n points = topCluster[0].item.getPoints();\r\n for (var i = 0; i < points.length; i++) {\r\n result.push(points[i].point);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n function skeletonize(x, y) {\r\n _binaryImageWrapper.subImageAsCopy(_subImageWrapper, imageRef(x, y));\r\n _skeletonizer.skeletonize();\r\n\r\n // Show skeleton if requested\r\n if (ENV.development && _config.debug.showSkeleton) {\r\n _skelImageWrapper.overlay(_canvasContainer.dom.binary, 360, imageRef(x, y));\r\n }\r\n }\r\n\r\n /**\r\n * Extracts and describes those patches which seem to contain a barcode pattern\r\n * @param {Array} moments\r\n * @param {Object} patchPos,\r\n * @param {Number} x\r\n * @param {Number} y\r\n * @returns {Array} list of patches\r\n */\r\n function describePatch(moments, patchPos, x, y) {\r\n var k,\r\n avg,\r\n eligibleMoments = [],\r\n matchingMoments,\r\n patch,\r\n patchesFound = [],\r\n minComponentWeight = Math.ceil(_patchSize.x / 3);\r\n\r\n if (moments.length >= 2) {\r\n // only collect moments which's area covers at least minComponentWeight pixels.\r\n for ( k = 0; k < moments.length; k++) {\r\n if (moments[k].m00 > minComponentWeight) {\r\n eligibleMoments.push(moments[k]);\r\n }\r\n }\r\n\r\n // if at least 2 moments are found which have at least minComponentWeights covered\r\n if (eligibleMoments.length >= 2) {\r\n matchingMoments = similarMoments(eligibleMoments);\r\n avg = 0;\r\n // determine the similarity of the moments\r\n for ( k = 0; k < matchingMoments.length; k++) {\r\n avg += matchingMoments[k].rad;\r\n }\r\n\r\n // Only two of the moments are allowed not to fit into the equation\r\n // add the patch to the set\r\n if (matchingMoments.length > 1\r\n && matchingMoments.length >= (eligibleMoments.length / 4) * 3\r\n && matchingMoments.length > moments.length / 4) {\r\n avg /= matchingMoments.length;\r\n patch = {\r\n index: patchPos[1] * _numPatches.x + patchPos[0],\r\n pos: {\r\n x: x,\r\n y: y\r\n },\r\n box: [\r\n vec2.clone([x, y]),\r\n vec2.clone([x + _subImageWrapper.size.x, y]),\r\n vec2.clone([x + _subImageWrapper.size.x, y + _subImageWrapper.size.y]),\r\n vec2.clone([x, y + _subImageWrapper.size.y])\r\n ],\r\n moments: matchingMoments,\r\n rad: avg,\r\n vec: vec2.clone([Math.cos(avg), Math.sin(avg)])\r\n };\r\n patchesFound.push(patch);\r\n }\r\n }\r\n }\r\n return patchesFound;\r\n }\r\n\r\n /**\r\n * finds patches which are connected and share the same orientation\r\n * @param {Object} patchesFound\r\n */\r\n function rasterizeAngularSimilarity(patchesFound) {\r\n var label = 0,\r\n threshold = 0.95,\r\n currIdx = 0,\r\n j,\r\n patch,\r\n hsv = [0, 1, 1],\r\n rgb = [0, 0, 0];\r\n\r\n function notYetProcessed() {\r\n var i;\r\n for ( i = 0; i < _patchLabelGrid.data.length; i++) {\r\n if (_patchLabelGrid.data[i] === 0 && _patchGrid.data[i] === 1) {\r\n return i;\r\n }\r\n }\r\n return _patchLabelGrid.length;\r\n }\r\n\r\n function trace(currentIdx) {\r\n var x,\r\n y,\r\n currentPatch,\r\n idx,\r\n dir,\r\n current = {\r\n x: currentIdx % _patchLabelGrid.size.x,\r\n y: (currentIdx / _patchLabelGrid.size.x) | 0\r\n },\r\n similarity;\r\n\r\n if (currentIdx < _patchLabelGrid.data.length) {\r\n currentPatch = _imageToPatchGrid.data[currentIdx];\r\n // assign label\r\n _patchLabelGrid.data[currentIdx] = label;\r\n for ( dir = 0; dir < Tracer.searchDirections.length; dir++) {\r\n y = current.y + Tracer.searchDirections[dir][0];\r\n x = current.x + Tracer.searchDirections[dir][1];\r\n idx = y * _patchLabelGrid.size.x + x;\r\n\r\n // continue if patch empty\r\n if (_patchGrid.data[idx] === 0) {\r\n _patchLabelGrid.data[idx] = Number.MAX_VALUE;\r\n continue;\r\n }\r\n\r\n if (_patchLabelGrid.data[idx] === 0) {\r\n similarity = Math.abs(vec2.dot(_imageToPatchGrid.data[idx].vec, currentPatch.vec));\r\n if (similarity > threshold) {\r\n trace(idx);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // prepare for finding the right patches\r\n ArrayHelper.init(_patchGrid.data, 0);\r\n ArrayHelper.init(_patchLabelGrid.data, 0);\r\n ArrayHelper.init(_imageToPatchGrid.data, null);\r\n\r\n for ( j = 0; j < patchesFound.length; j++) {\r\n patch = patchesFound[j];\r\n _imageToPatchGrid.data[patch.index] = patch;\r\n _patchGrid.data[patch.index] = 1;\r\n }\r\n\r\n // rasterize the patches found to determine area\r\n _patchGrid.zeroBorder();\r\n\r\n while (( currIdx = notYetProcessed()) < _patchLabelGrid.data.length) {\r\n label++;\r\n trace(currIdx);\r\n }\r\n\r\n // draw patch-labels if requested\r\n if (ENV.development && _config.debug.showPatchLabels) {\r\n for ( j = 0; j < _patchLabelGrid.data.length; j++) {\r\n if (_patchLabelGrid.data[j] > 0 && _patchLabelGrid.data[j] <= label) {\r\n patch = _imageToPatchGrid.data[j];\r\n hsv[0] = (_patchLabelGrid.data[j] / (label + 1)) * 360;\r\n hsv2rgb(hsv, rgb);\r\n ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,\r\n {color: \"rgb(\" + rgb.join(\",\") + \")\", lineWidth: 2});\r\n }\r\n }\r\n }\r\n\r\n return label;\r\n }\r\n\r\n return {\r\n locate: function() {\r\n var patchesFound,\r\n topLabels,\r\n boxes;\r\n\r\n if (_config.halfSample) {\r\n halfSample(_inputImageWrapper, _currentImageWrapper);\r\n }\r\n\r\n binarizeImage();\r\n patchesFound = findPatches();\r\n // return unless 5% or more patches are found\r\n if (patchesFound.length < _numPatches.x * _numPatches.y * 0.05) {\r\n return null;\r\n }\r\n\r\n // rasterrize area by comparing angular similarity;\r\n var maxLabel = rasterizeAngularSimilarity(patchesFound);\r\n if (maxLabel < 1) {\r\n return null;\r\n }\r\n\r\n // search for area with the most patches (biggest connected area)\r\n topLabels = findBiggestConnectedAreas(maxLabel);\r\n if (topLabels.length === 0) {\r\n return null;\r\n }\r\n\r\n boxes = findBoxes(topLabels, maxLabel);\r\n return boxes;\r\n }\r\n };\r\n}\r\nexport function checkImageConstraints(inputStream, config) {\r\n var patchSize,\r\n width = inputStream.getWidth(),\r\n height = inputStream.getHeight(),\r\n halfSample = config.halfSample ? 0.5 : 1,\r\n size,\r\n area;\r\n\r\n // calculate width and height based on area\r\n if (inputStream.getConfig().area) {\r\n area = computeImageArea(width, height, inputStream.getConfig().area);\r\n inputStream.setTopRight({x: area.sx, y: area.sy});\r\n inputStream.setCanvasSize({x: width, y: height});\r\n width = area.sw;\r\n height = area.sh;\r\n }\r\n\r\n size = {\r\n x: Math.floor(width * halfSample),\r\n y: Math.floor(height * halfSample)\r\n };\r\n\r\n patchSize = calculatePatchSize(config.patchSize, size);\r\n if (ENV.development) {\r\n console.log(\"Patch-Size: \" + JSON.stringify(patchSize));\r\n }\r\n\r\n inputStream.setWidth(Math.floor(Math.floor(size.x / patchSize.x) * (1 / halfSample) * patchSize.x));\r\n inputStream.setHeight(Math.floor(Math.floor(size.y / patchSize.y) * (1 / halfSample) * patchSize.y));\r\n\r\n if ((inputStream.getWidth() % patchSize.x) === 0 && (inputStream.getHeight() % patchSize.y) === 0) {\r\n return true;\r\n }\r\n\r\n throw new Error(\"Image dimensions do not comply with the current settings: Width (\" +\r\n width + \" )and height (\" + height +\r\n \") must a multiple of \" + patchSize.x);\r\n}\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/locator/barcode_locator.js\n **/","import Tracer from './tracer';\r\n\r\n/**\r\n * http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization\r\n */\r\nvar Rasterizer = {\r\n createContour2D: function() {\r\n return {\r\n dir: null,\r\n index: null,\r\n firstVertex: null,\r\n insideContours: null,\r\n nextpeer: null,\r\n prevpeer: null\r\n };\r\n },\r\n CONTOUR_DIR: {\r\n CW_DIR: 0,\r\n CCW_DIR: 1,\r\n UNKNOWN_DIR: 2\r\n },\r\n DIR: {\r\n OUTSIDE_EDGE: -32767,\r\n INSIDE_EDGE: -32766\r\n },\r\n create: function(imageWrapper, labelWrapper) {\r\n var imageData = imageWrapper.data,\r\n labelData = labelWrapper.data,\r\n width = imageWrapper.size.x,\r\n height = imageWrapper.size.y,\r\n tracer = Tracer.create(imageWrapper, labelWrapper);\r\n\r\n return {\r\n rasterize: function(depthlabel) {\r\n var color,\r\n bc,\r\n lc,\r\n labelindex,\r\n cx,\r\n cy,\r\n colorMap = [],\r\n vertex,\r\n p,\r\n cc,\r\n sc,\r\n pos,\r\n connectedCount = 0,\r\n i;\r\n\r\n for ( i = 0; i < 400; i++) {\r\n colorMap[i] = 0;\r\n }\r\n\r\n colorMap[0] = imageData[0];\r\n cc = null;\r\n for ( cy = 1; cy < height - 1; cy++) {\r\n labelindex = 0;\r\n bc = colorMap[0];\r\n for ( cx = 1; cx < width - 1; cx++) {\r\n pos = cy * width + cx;\r\n if (labelData[pos] === 0) {\r\n color = imageData[pos];\r\n if (color !== bc) {\r\n if (labelindex === 0) {\r\n lc = connectedCount + 1;\r\n colorMap[lc] = color;\r\n bc = color;\r\n vertex = tracer.contourTracing(cy, cx, lc, color, Rasterizer.DIR.OUTSIDE_EDGE);\r\n if (vertex !== null) {\r\n connectedCount++;\r\n labelindex = lc;\r\n p = Rasterizer.createContour2D();\r\n p.dir = Rasterizer.CONTOUR_DIR.CW_DIR;\r\n p.index = labelindex;\r\n p.firstVertex = vertex;\r\n p.nextpeer = cc;\r\n p.insideContours = null;\r\n if (cc !== null) {\r\n cc.prevpeer = p;\r\n }\r\n cc = p;\r\n }\r\n } else {\r\n vertex = tracer\r\n .contourTracing(cy, cx, Rasterizer.DIR.INSIDE_EDGE, color, labelindex);\r\n if (vertex !== null) {\r\n p = Rasterizer.createContour2D();\r\n p.firstVertex = vertex;\r\n p.insideContours = null;\r\n if (depthlabel === 0) {\r\n p.dir = Rasterizer.CONTOUR_DIR.CCW_DIR;\r\n } else {\r\n p.dir = Rasterizer.CONTOUR_DIR.CW_DIR;\r\n }\r\n p.index = depthlabel;\r\n sc = cc;\r\n while ((sc !== null) && sc.index !== labelindex) {\r\n sc = sc.nextpeer;\r\n }\r\n if (sc !== null) {\r\n p.nextpeer = sc.insideContours;\r\n if (sc.insideContours !== null) {\r\n sc.insideContours.prevpeer = p;\r\n }\r\n sc.insideContours = p;\r\n }\r\n }\r\n }\r\n } else {\r\n labelData[pos] = labelindex;\r\n }\r\n } else if (labelData[pos] === Rasterizer.DIR.OUTSIDE_EDGE\r\n || labelData[pos] === Rasterizer.DIR.INSIDE_EDGE) {\r\n labelindex = 0;\r\n if (labelData[pos] === Rasterizer.DIR.INSIDE_EDGE) {\r\n bc = imageData[pos];\r\n } else {\r\n bc = colorMap[0];\r\n }\r\n } else {\r\n labelindex = labelData[pos];\r\n bc = colorMap[labelindex];\r\n }\r\n }\r\n }\r\n sc = cc;\r\n while (sc !== null) {\r\n sc.index = depthlabel;\r\n sc = sc.nextpeer;\r\n }\r\n return {\r\n cc: cc,\r\n count: connectedCount\r\n };\r\n },\r\n debug: {\r\n drawContour: function(canvas, firstContour) {\r\n var ctx = canvas.getContext(\"2d\"),\r\n pq = firstContour,\r\n iq,\r\n q,\r\n p;\r\n\r\n ctx.strokeStyle = \"red\";\r\n ctx.fillStyle = \"red\";\r\n ctx.lineWidth = 1;\r\n\r\n if (pq !== null) {\r\n iq = pq.insideContours;\r\n } else {\r\n iq = null;\r\n }\r\n\r\n while (pq !== null) {\r\n if (iq !== null) {\r\n q = iq;\r\n iq = iq.nextpeer;\r\n } else {\r\n q = pq;\r\n pq = pq.nextpeer;\r\n if (pq !== null) {\r\n iq = pq.insideContours;\r\n } else {\r\n iq = null;\r\n }\r\n }\r\n\r\n switch (q.dir) {\r\n case Rasterizer.CONTOUR_DIR.CW_DIR:\r\n ctx.strokeStyle = \"red\";\r\n break;\r\n case Rasterizer.CONTOUR_DIR.CCW_DIR:\r\n ctx.strokeStyle = \"blue\";\r\n break;\r\n case Rasterizer.CONTOUR_DIR.UNKNOWN_DIR:\r\n ctx.strokeStyle = \"green\";\r\n break;\r\n }\r\n\r\n p = q.firstVertex;\r\n ctx.beginPath();\r\n ctx.moveTo(p.x, p.y);\r\n do {\r\n p = p.next;\r\n ctx.lineTo(p.x, p.y);\r\n } while (p !== q.firstVertex);\r\n ctx.stroke();\r\n }\r\n }\r\n }\r\n };\r\n }\r\n};\r\n\r\nexport default Rasterizer;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/locator/rasterizer.js\n **/","/* @preserve ASM BEGIN */\r\n/* eslint-disable eqeqeq*/\r\nfunction Skeletonizer(stdlib, foreign, buffer) {\r\n \"use asm\";\r\n\r\n var images = new stdlib.Uint8Array(buffer),\r\n size = foreign.size | 0,\r\n imul = stdlib.Math.imul;\r\n\r\n function erode(inImagePtr, outImagePtr) {\r\n inImagePtr = inImagePtr | 0;\r\n outImagePtr = outImagePtr | 0;\r\n\r\n var v = 0,\r\n u = 0,\r\n sum = 0,\r\n yStart1 = 0,\r\n yStart2 = 0,\r\n xStart1 = 0,\r\n xStart2 = 0,\r\n offset = 0;\r\n\r\n for ( v = 1; (v | 0) < ((size - 1) | 0); v = (v + 1) | 0) {\r\n offset = (offset + size) | 0;\r\n for ( u = 1; (u | 0) < ((size - 1) | 0); u = (u + 1) | 0) {\r\n yStart1 = (offset - size) | 0;\r\n yStart2 = (offset + size) | 0;\r\n xStart1 = (u - 1) | 0;\r\n xStart2 = (u + 1) | 0;\r\n sum = ((images[(inImagePtr + yStart1 + xStart1) | 0] | 0)\r\n + (images[(inImagePtr + yStart1 + xStart2) | 0] | 0)\r\n + (images[(inImagePtr + offset + u) | 0] | 0)\r\n + (images[(inImagePtr + yStart2 + xStart1) | 0] | 0)\r\n + (images[(inImagePtr + yStart2 + xStart2) | 0] | 0)) | 0;\r\n if ((sum | 0) == (5 | 0)) {\r\n images[(outImagePtr + offset + u) | 0] = 1;\r\n } else {\r\n images[(outImagePtr + offset + u) | 0] = 0;\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n\r\n function subtract(aImagePtr, bImagePtr, outImagePtr) {\r\n aImagePtr = aImagePtr | 0;\r\n bImagePtr = bImagePtr | 0;\r\n outImagePtr = outImagePtr | 0;\r\n\r\n var length = 0;\r\n\r\n length = imul(size, size) | 0;\r\n\r\n while ((length | 0) > 0) {\r\n length = (length - 1) | 0;\r\n images[(outImagePtr + length) | 0] =\r\n ((images[(aImagePtr + length) | 0] | 0) - (images[(bImagePtr + length) | 0] | 0)) | 0;\r\n }\r\n }\r\n\r\n function bitwiseOr(aImagePtr, bImagePtr, outImagePtr) {\r\n aImagePtr = aImagePtr | 0;\r\n bImagePtr = bImagePtr | 0;\r\n outImagePtr = outImagePtr | 0;\r\n\r\n var length = 0;\r\n\r\n length = imul(size, size) | 0;\r\n\r\n while ((length | 0) > 0) {\r\n length = (length - 1) | 0;\r\n images[(outImagePtr + length) | 0] =\r\n ((images[(aImagePtr + length) | 0] | 0) | (images[(bImagePtr + length) | 0] | 0)) | 0;\r\n }\r\n }\r\n\r\n function countNonZero(imagePtr) {\r\n imagePtr = imagePtr | 0;\r\n\r\n var sum = 0,\r\n length = 0;\r\n\r\n length = imul(size, size) | 0;\r\n\r\n while ((length | 0) > 0) {\r\n length = (length - 1) | 0;\r\n sum = ((sum | 0) + (images[(imagePtr + length) | 0] | 0)) | 0;\r\n }\r\n\r\n return (sum | 0);\r\n }\r\n\r\n function init(imagePtr, value) {\r\n imagePtr = imagePtr | 0;\r\n value = value | 0;\r\n\r\n var length = 0;\r\n\r\n length = imul(size, size) | 0;\r\n\r\n while ((length | 0) > 0) {\r\n length = (length - 1) | 0;\r\n images[(imagePtr + length) | 0] = value;\r\n }\r\n }\r\n\r\n function dilate(inImagePtr, outImagePtr) {\r\n inImagePtr = inImagePtr | 0;\r\n outImagePtr = outImagePtr | 0;\r\n\r\n var v = 0,\r\n u = 0,\r\n sum = 0,\r\n yStart1 = 0,\r\n yStart2 = 0,\r\n xStart1 = 0,\r\n xStart2 = 0,\r\n offset = 0;\r\n\r\n for ( v = 1; (v | 0) < ((size - 1) | 0); v = (v + 1) | 0) {\r\n offset = (offset + size) | 0;\r\n for ( u = 1; (u | 0) < ((size - 1) | 0); u = (u + 1) | 0) {\r\n yStart1 = (offset - size) | 0;\r\n yStart2 = (offset + size) | 0;\r\n xStart1 = (u - 1) | 0;\r\n xStart2 = (u + 1) | 0;\r\n sum = ((images[(inImagePtr + yStart1 + xStart1) | 0] | 0)\r\n + (images[(inImagePtr + yStart1 + xStart2) | 0] | 0)\r\n + (images[(inImagePtr + offset + u) | 0] | 0)\r\n + (images[(inImagePtr + yStart2 + xStart1) | 0] | 0)\r\n + (images[(inImagePtr + yStart2 + xStart2) | 0] | 0)) | 0;\r\n if ((sum | 0) > (0 | 0)) {\r\n images[(outImagePtr + offset + u) | 0] = 1;\r\n } else {\r\n images[(outImagePtr + offset + u) | 0] = 0;\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n\r\n function memcpy(srcImagePtr, dstImagePtr) {\r\n srcImagePtr = srcImagePtr | 0;\r\n dstImagePtr = dstImagePtr | 0;\r\n\r\n var length = 0;\r\n\r\n length = imul(size, size) | 0;\r\n\r\n while ((length | 0) > 0) {\r\n length = (length - 1) | 0;\r\n images[(dstImagePtr + length) | 0] = (images[(srcImagePtr + length) | 0] | 0);\r\n }\r\n }\r\n\r\n function zeroBorder(imagePtr) {\r\n imagePtr = imagePtr | 0;\r\n\r\n var x = 0,\r\n y = 0;\r\n\r\n for ( x = 0; (x | 0) < ((size - 1) | 0); x = (x + 1) | 0) {\r\n images[(imagePtr + x) | 0] = 0;\r\n images[(imagePtr + y) | 0] = 0;\r\n y = ((y + size) - 1) | 0;\r\n images[(imagePtr + y) | 0] = 0;\r\n y = (y + 1) | 0;\r\n }\r\n for ( x = 0; (x | 0) < (size | 0); x = (x + 1) | 0) {\r\n images[(imagePtr + y) | 0] = 0;\r\n y = (y + 1) | 0;\r\n }\r\n }\r\n\r\n function skeletonize() {\r\n var subImagePtr = 0,\r\n erodedImagePtr = 0,\r\n tempImagePtr = 0,\r\n skelImagePtr = 0,\r\n sum = 0,\r\n done = 0;\r\n\r\n erodedImagePtr = imul(size, size) | 0;\r\n tempImagePtr = (erodedImagePtr + erodedImagePtr) | 0;\r\n skelImagePtr = (tempImagePtr + erodedImagePtr) | 0;\r\n\r\n // init skel-image\r\n init(skelImagePtr, 0);\r\n zeroBorder(subImagePtr);\r\n\r\n do {\r\n erode(subImagePtr, erodedImagePtr);\r\n dilate(erodedImagePtr, tempImagePtr);\r\n subtract(subImagePtr, tempImagePtr, tempImagePtr);\r\n bitwiseOr(skelImagePtr, tempImagePtr, skelImagePtr);\r\n memcpy(erodedImagePtr, subImagePtr);\r\n sum = countNonZero(subImagePtr) | 0;\r\n done = ((sum | 0) == 0 | 0);\r\n } while (!done);\r\n }\r\n return {\r\n skeletonize: skeletonize\r\n };\r\n}\r\n/* @preserve ASM END */\r\nexport default Skeletonizer;\r\n/* eslint-enable eqeqeq*/\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/locator/skeletonizer.js\n **/","import BarcodeReader from './barcode_reader';\r\n\r\nfunction CodabarReader() {\r\n BarcodeReader.call(this);\r\n this._counters = [];\r\n}\r\n\r\nvar properties = {\r\n ALPHABETH_STRING: {value: \"0123456789-$:/.+ABCD\"},\r\n ALPHABET: {value: [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 45, 36, 58, 47, 46, 43, 65, 66, 67, 68]},\r\n CHARACTER_ENCODINGS: {value: [0x003, 0x006, 0x009, 0x060, 0x012, 0x042, 0x021, 0x024, 0x030, 0x048, 0x00c, 0x018,\r\n 0x045, 0x051, 0x054, 0x015, 0x01A, 0x029, 0x00B, 0x00E]},\r\n START_END: {value: [0x01A, 0x029, 0x00B, 0x00E]},\r\n MIN_ENCODED_CHARS: {value: 4},\r\n MAX_ACCEPTABLE: {value: 2.0},\r\n PADDING: {value: 1.5},\r\n FORMAT: {value: \"codabar\", writeable: false}\r\n};\r\n\r\nCodabarReader.prototype = Object.create(BarcodeReader.prototype, properties);\r\nCodabarReader.prototype.constructor = CodabarReader;\r\n\r\nCodabarReader.prototype._decode = function() {\r\n var self = this,\r\n result = [],\r\n start,\r\n decodedChar,\r\n pattern,\r\n nextStart,\r\n end;\r\n\r\n this._counters = self._fillCounters();\r\n start = self._findStart();\r\n if (!start) {\r\n return null;\r\n }\r\n nextStart = start.startCounter;\r\n\r\n do {\r\n pattern = self._toPattern(nextStart);\r\n if (pattern < 0) {\r\n return null;\r\n }\r\n decodedChar = self._patternToChar(pattern);\r\n if (decodedChar < 0){\r\n return null;\r\n }\r\n result.push(decodedChar);\r\n nextStart += 8;\r\n if (result.length > 1 && self._isStartEnd(pattern)) {\r\n break;\r\n }\r\n } while (nextStart < self._counters.length);\r\n\r\n // verify end\r\n if ((result.length - 2) < self.MIN_ENCODED_CHARS || !self._isStartEnd(pattern)) {\r\n return null;\r\n }\r\n\r\n // verify end white space\r\n if (!self._verifyWhitespace(start.startCounter, nextStart - 8)){\r\n return null;\r\n }\r\n\r\n if (!self._validateResult(result, start.startCounter)){\r\n return null;\r\n }\r\n\r\n nextStart = nextStart > self._counters.length ? self._counters.length : nextStart;\r\n end = start.start + self._sumCounters(start.startCounter, nextStart - 8);\r\n\r\n return {\r\n code: result.join(\"\"),\r\n start: start.start,\r\n end: end,\r\n startInfo: start,\r\n decodedCodes: result\r\n };\r\n};\r\n\r\nCodabarReader.prototype._verifyWhitespace = function(startCounter, endCounter) {\r\n if ((startCounter - 1 <= 0)\r\n || this._counters[startCounter - 1] >= (this._calculatePatternLength(startCounter) / 2.0)) {\r\n if ((endCounter + 8 >= this._counters.length)\r\n || this._counters[endCounter + 7] >= (this._calculatePatternLength(endCounter) / 2.0)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nCodabarReader.prototype._calculatePatternLength = function(offset) {\r\n var i,\r\n sum = 0;\r\n\r\n for (i = offset; i < offset + 7; i++) {\r\n sum += this._counters[i];\r\n }\r\n\r\n return sum;\r\n};\r\n\r\nCodabarReader.prototype._thresholdResultPattern = function(result, startCounter){\r\n var self = this,\r\n categorization = {\r\n space: {\r\n narrow: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE},\r\n wide: {size: 0, counts: 0, min: 0, max: Number.MAX_VALUE}\r\n },\r\n bar: {\r\n narrow: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE},\r\n wide: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE}\r\n }\r\n },\r\n kind,\r\n cat,\r\n i,\r\n j,\r\n pos = startCounter,\r\n pattern;\r\n\r\n for (i = 0; i < result.length; i++){\r\n pattern = self._charToPattern(result[i]);\r\n for (j = 6; j >= 0; j--) {\r\n kind = (j & 1) === 2 ? categorization.bar : categorization.space;\r\n cat = (pattern & 1) === 1 ? kind.wide : kind.narrow;\r\n cat.size += self._counters[pos + j];\r\n cat.counts++;\r\n pattern >>= 1;\r\n }\r\n pos += 8;\r\n }\r\n\r\n [\"space\", \"bar\"].forEach(function(key) {\r\n var newkind = categorization[key];\r\n newkind.wide.min =\r\n Math.floor((newkind.narrow.size / newkind.narrow.counts + newkind.wide.size / newkind.wide.counts) / 2);\r\n newkind.narrow.max = Math.ceil(newkind.wide.min);\r\n newkind.wide.max = Math.ceil((newkind.wide.size * self.MAX_ACCEPTABLE + self.PADDING) / newkind.wide.counts);\r\n });\r\n\r\n return categorization;\r\n};\r\n\r\nCodabarReader.prototype._charToPattern = function(char) {\r\n var self = this,\r\n charCode = char.charCodeAt(0),\r\n i;\r\n\r\n for (i = 0; i < self.ALPHABET.length; i++) {\r\n if (self.ALPHABET[i] === charCode){\r\n return self.CHARACTER_ENCODINGS[i];\r\n }\r\n }\r\n return 0x0;\r\n};\r\n\r\nCodabarReader.prototype._validateResult = function(result, startCounter) {\r\n var self = this,\r\n thresholds = self._thresholdResultPattern(result, startCounter),\r\n i,\r\n j,\r\n kind,\r\n cat,\r\n size,\r\n pos = startCounter,\r\n pattern;\r\n\r\n for (i = 0; i < result.length; i++) {\r\n pattern = self._charToPattern(result[i]);\r\n for (j = 6; j >= 0; j--) {\r\n kind = (j & 1) === 0 ? thresholds.bar : thresholds.space;\r\n cat = (pattern & 1) === 1 ? kind.wide : kind.narrow;\r\n size = self._counters[pos + j];\r\n if (size < cat.min || size > cat.max) {\r\n return false;\r\n }\r\n pattern >>= 1;\r\n }\r\n pos += 8;\r\n }\r\n return true;\r\n};\r\n\r\nCodabarReader.prototype._patternToChar = function(pattern) {\r\n var i,\r\n self = this;\r\n\r\n for (i = 0; i < self.CHARACTER_ENCODINGS.length; i++) {\r\n if (self.CHARACTER_ENCODINGS[i] === pattern) {\r\n return String.fromCharCode(self.ALPHABET[i]);\r\n }\r\n }\r\n return -1;\r\n};\r\n\r\nCodabarReader.prototype._computeAlternatingThreshold = function(offset, end) {\r\n var i,\r\n min = Number.MAX_VALUE,\r\n max = 0,\r\n counter;\r\n\r\n for (i = offset; i < end; i += 2){\r\n counter = this._counters[i];\r\n if (counter > max) {\r\n max = counter;\r\n }\r\n if (counter < min) {\r\n min = counter;\r\n }\r\n }\r\n\r\n return ((min + max) / 2.0) | 0;\r\n};\r\n\r\nCodabarReader.prototype._toPattern = function(offset) {\r\n var numCounters = 7,\r\n end = offset + numCounters,\r\n barThreshold,\r\n spaceThreshold,\r\n bitmask = 1 << (numCounters - 1),\r\n pattern = 0,\r\n i,\r\n threshold;\r\n\r\n if (end > this._counters.length) {\r\n return -1;\r\n }\r\n\r\n barThreshold = this._computeAlternatingThreshold(offset, end);\r\n spaceThreshold = this._computeAlternatingThreshold(offset + 1, end);\r\n\r\n for (i = 0; i < numCounters; i++){\r\n threshold = (i & 1) === 0 ? barThreshold : spaceThreshold;\r\n if (this._counters[offset + i] > threshold) {\r\n pattern |= bitmask;\r\n }\r\n bitmask >>= 1;\r\n }\r\n\r\n return pattern;\r\n};\r\n\r\nCodabarReader.prototype._isStartEnd = function(pattern) {\r\n var i;\r\n\r\n for (i = 0; i < this.START_END.length; i++) {\r\n if (this.START_END[i] === pattern) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nCodabarReader.prototype._sumCounters = function(start, end) {\r\n var i,\r\n sum = 0;\r\n\r\n for (i = start; i < end; i++) {\r\n sum += this._counters[i];\r\n }\r\n return sum;\r\n};\r\n\r\nCodabarReader.prototype._findStart = function() {\r\n var self = this,\r\n i,\r\n pattern,\r\n start = self._nextUnset(self._row),\r\n end;\r\n\r\n for (i = 1; i < this._counters.length; i++) {\r\n pattern = self._toPattern(i);\r\n if (pattern !== -1 && self._isStartEnd(pattern)) {\r\n // TODO: Look for whitespace ahead\r\n start += self._sumCounters(0, i);\r\n end = start + self._sumCounters(i, i + 8);\r\n return {\r\n start: start,\r\n end: end,\r\n startCounter: i,\r\n endCounter: i + 8\r\n };\r\n }\r\n }\r\n};\r\n\r\nexport default CodabarReader;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/reader/codabar_reader.js\n **/","import BarcodeReader from './barcode_reader';\r\n\r\nfunction Code128Reader() {\r\n BarcodeReader.call(this);\r\n}\r\n\r\nvar properties = {\r\n CODE_SHIFT: {value: 98},\r\n CODE_C: {value: 99},\r\n CODE_B: {value: 100},\r\n CODE_A: {value: 101},\r\n START_CODE_A: {value: 103},\r\n START_CODE_B: {value: 104},\r\n START_CODE_C: {value: 105},\r\n STOP_CODE: {value: 106},\r\n CODE_PATTERN: {value: [\r\n [2, 1, 2, 2, 2, 2],\r\n [2, 2, 2, 1, 2, 2],\r\n [2, 2, 2, 2, 2, 1],\r\n [1, 2, 1, 2, 2, 3],\r\n [1, 2, 1, 3, 2, 2],\r\n [1, 3, 1, 2, 2, 2],\r\n [1, 2, 2, 2, 1, 3],\r\n [1, 2, 2, 3, 1, 2],\r\n [1, 3, 2, 2, 1, 2],\r\n [2, 2, 1, 2, 1, 3],\r\n [2, 2, 1, 3, 1, 2],\r\n [2, 3, 1, 2, 1, 2],\r\n [1, 1, 2, 2, 3, 2],\r\n [1, 2, 2, 1, 3, 2],\r\n [1, 2, 2, 2, 3, 1],\r\n [1, 1, 3, 2, 2, 2],\r\n [1, 2, 3, 1, 2, 2],\r\n [1, 2, 3, 2, 2, 1],\r\n [2, 2, 3, 2, 1, 1],\r\n [2, 2, 1, 1, 3, 2],\r\n [2, 2, 1, 2, 3, 1],\r\n [2, 1, 3, 2, 1, 2],\r\n [2, 2, 3, 1, 1, 2],\r\n [3, 1, 2, 1, 3, 1],\r\n [3, 1, 1, 2, 2, 2],\r\n [3, 2, 1, 1, 2, 2],\r\n [3, 2, 1, 2, 2, 1],\r\n [3, 1, 2, 2, 1, 2],\r\n [3, 2, 2, 1, 1, 2],\r\n [3, 2, 2, 2, 1, 1],\r\n [2, 1, 2, 1, 2, 3],\r\n [2, 1, 2, 3, 2, 1],\r\n [2, 3, 2, 1, 2, 1],\r\n [1, 1, 1, 3, 2, 3],\r\n [1, 3, 1, 1, 2, 3],\r\n [1, 3, 1, 3, 2, 1],\r\n [1, 1, 2, 3, 1, 3],\r\n [1, 3, 2, 1, 1, 3],\r\n [1, 3, 2, 3, 1, 1],\r\n [2, 1, 1, 3, 1, 3],\r\n [2, 3, 1, 1, 1, 3],\r\n [2, 3, 1, 3, 1, 1],\r\n [1, 1, 2, 1, 3, 3],\r\n [1, 1, 2, 3, 3, 1],\r\n [1, 3, 2, 1, 3, 1],\r\n [1, 1, 3, 1, 2, 3],\r\n [1, 1, 3, 3, 2, 1],\r\n [1, 3, 3, 1, 2, 1],\r\n [3, 1, 3, 1, 2, 1],\r\n [2, 1, 1, 3, 3, 1],\r\n [2, 3, 1, 1, 3, 1],\r\n [2, 1, 3, 1, 1, 3],\r\n [2, 1, 3, 3, 1, 1],\r\n [2, 1, 3, 1, 3, 1],\r\n [3, 1, 1, 1, 2, 3],\r\n [3, 1, 1, 3, 2, 1],\r\n [3, 3, 1, 1, 2, 1],\r\n [3, 1, 2, 1, 1, 3],\r\n [3, 1, 2, 3, 1, 1],\r\n [3, 3, 2, 1, 1, 1],\r\n [3, 1, 4, 1, 1, 1],\r\n [2, 2, 1, 4, 1, 1],\r\n [4, 3, 1, 1, 1, 1],\r\n [1, 1, 1, 2, 2, 4],\r\n [1, 1, 1, 4, 2, 2],\r\n [1, 2, 1, 1, 2, 4],\r\n [1, 2, 1, 4, 2, 1],\r\n [1, 4, 1, 1, 2, 2],\r\n [1, 4, 1, 2, 2, 1],\r\n [1, 1, 2, 2, 1, 4],\r\n [1, 1, 2, 4, 1, 2],\r\n [1, 2, 2, 1, 1, 4],\r\n [1, 2, 2, 4, 1, 1],\r\n [1, 4, 2, 1, 1, 2],\r\n [1, 4, 2, 2, 1, 1],\r\n [2, 4, 1, 2, 1, 1],\r\n [2, 2, 1, 1, 1, 4],\r\n [4, 1, 3, 1, 1, 1],\r\n [2, 4, 1, 1, 1, 2],\r\n [1, 3, 4, 1, 1, 1],\r\n [1, 1, 1, 2, 4, 2],\r\n [1, 2, 1, 1, 4, 2],\r\n [1, 2, 1, 2, 4, 1],\r\n [1, 1, 4, 2, 1, 2],\r\n [1, 2, 4, 1, 1, 2],\r\n [1, 2, 4, 2, 1, 1],\r\n [4, 1, 1, 2, 1, 2],\r\n [4, 2, 1, 1, 1, 2],\r\n [4, 2, 1, 2, 1, 1],\r\n [2, 1, 2, 1, 4, 1],\r\n [2, 1, 4, 1, 2, 1],\r\n [4, 1, 2, 1, 2, 1],\r\n [1, 1, 1, 1, 4, 3],\r\n [1, 1, 1, 3, 4, 1],\r\n [1, 3, 1, 1, 4, 1],\r\n [1, 1, 4, 1, 1, 3],\r\n [1, 1, 4, 3, 1, 1],\r\n [4, 1, 1, 1, 1, 3],\r\n [4, 1, 1, 3, 1, 1],\r\n [1, 1, 3, 1, 4, 1],\r\n [1, 1, 4, 1, 3, 1],\r\n [3, 1, 1, 1, 4, 1],\r\n [4, 1, 1, 1, 3, 1],\r\n [2, 1, 1, 4, 1, 2],\r\n [2, 1, 1, 2, 1, 4],\r\n [2, 1, 1, 2, 3, 2],\r\n [2, 3, 3, 1, 1, 1, 2]\r\n ]},\r\n SINGLE_CODE_ERROR: {value: 0.64},\r\n AVG_CODE_ERROR: {value: 0.30},\r\n FORMAT: {value: \"code_128\", writeable: false},\r\n MODULE_INDICES: {value: {bar: [0, 2, 4], space: [1, 3, 5]}}\r\n};\r\n\r\nCode128Reader.prototype = Object.create(BarcodeReader.prototype, properties);\r\nCode128Reader.prototype.constructor = Code128Reader;\r\n\r\nCode128Reader.prototype._decodeCode = function(start, correction) {\r\n var counter = [0, 0, 0, 0, 0, 0],\r\n i,\r\n self = this,\r\n offset = start,\r\n isWhite = !self._row[offset],\r\n counterPos = 0,\r\n bestMatch = {\r\n error: Number.MAX_VALUE,\r\n code: -1,\r\n start: start,\r\n end: start,\r\n correction: {\r\n bar: 1,\r\n space: 1\r\n }\r\n },\r\n code,\r\n error;\r\n\r\n for ( i = offset; i < self._row.length; i++) {\r\n if (self._row[i] ^ isWhite) {\r\n counter[counterPos]++;\r\n } else {\r\n if (counterPos === counter.length - 1) {\r\n if (correction) {\r\n self._correct(counter, correction);\r\n }\r\n for (code = 0; code < self.CODE_PATTERN.length; code++) {\r\n error = self._matchPattern(counter, self.CODE_PATTERN[code]);\r\n if (error < bestMatch.error) {\r\n bestMatch.code = code;\r\n bestMatch.error = error;\r\n }\r\n }\r\n bestMatch.end = i;\r\n if (bestMatch.code === -1 || bestMatch.error > self.AVG_CODE_ERROR) {\r\n return null;\r\n }\r\n if (self.CODE_PATTERN[bestMatch.code]) {\r\n bestMatch.correction.bar = calculateCorrection(\r\n self.CODE_PATTERN[bestMatch.code], counter,\r\n this.MODULE_INDICES.bar);\r\n bestMatch.correction.space = calculateCorrection(\r\n self.CODE_PATTERN[bestMatch.code], counter,\r\n this.MODULE_INDICES.space);\r\n }\r\n return bestMatch;\r\n } else {\r\n counterPos++;\r\n }\r\n counter[counterPos] = 1;\r\n isWhite = !isWhite;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nCode128Reader.prototype._correct = function(counter, correction) {\r\n this._correctBars(counter, correction.bar, this.MODULE_INDICES.bar);\r\n this._correctBars(counter, correction.space, this.MODULE_INDICES.space);\r\n};\r\n\r\nCode128Reader.prototype._findStart = function() {\r\n var counter = [0, 0, 0, 0, 0, 0],\r\n i,\r\n self = this,\r\n offset = self._nextSet(self._row),\r\n isWhite = false,\r\n counterPos = 0,\r\n bestMatch = {\r\n error: Number.MAX_VALUE,\r\n code: -1,\r\n start: 0,\r\n end: 0,\r\n correction: {\r\n bar: 1,\r\n space: 1\r\n }\r\n },\r\n code,\r\n error,\r\n j,\r\n sum;\r\n\r\n for ( i = offset; i < self._row.length; i++) {\r\n if (self._row[i] ^ isWhite) {\r\n counter[counterPos]++;\r\n } else {\r\n if (counterPos === counter.length - 1) {\r\n sum = 0;\r\n for ( j = 0; j < counter.length; j++) {\r\n sum += counter[j];\r\n }\r\n for (code = self.START_CODE_A; code <= self.START_CODE_C; code++) {\r\n error = self._matchPattern(counter, self.CODE_PATTERN[code]);\r\n if (error < bestMatch.error) {\r\n bestMatch.code = code;\r\n bestMatch.error = error;\r\n }\r\n }\r\n if (bestMatch.error < self.AVG_CODE_ERROR) {\r\n bestMatch.start = i - sum;\r\n bestMatch.end = i;\r\n bestMatch.correction.bar = calculateCorrection(\r\n self.CODE_PATTERN[bestMatch.code], counter,\r\n this.MODULE_INDICES.bar);\r\n bestMatch.correction.space = calculateCorrection(\r\n self.CODE_PATTERN[bestMatch.code], counter,\r\n this.MODULE_INDICES.space);\r\n return bestMatch;\r\n }\r\n\r\n for ( j = 0; j < 4; j++) {\r\n counter[j] = counter[j + 2];\r\n }\r\n counter[4] = 0;\r\n counter[5] = 0;\r\n counterPos--;\r\n } else {\r\n counterPos++;\r\n }\r\n counter[counterPos] = 1;\r\n isWhite = !isWhite;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nCode128Reader.prototype._decode = function() {\r\n var self = this,\r\n startInfo = self._findStart(),\r\n code = null,\r\n done = false,\r\n result = [],\r\n multiplier = 0,\r\n checksum = 0,\r\n codeset,\r\n rawResult = [],\r\n decodedCodes = [],\r\n shiftNext = false,\r\n unshift,\r\n removeLastCharacter = true;\r\n\r\n if (startInfo === null) {\r\n return null;\r\n }\r\n code = {\r\n code: startInfo.code,\r\n start: startInfo.start,\r\n end: startInfo.end,\r\n correction: {\r\n bar: startInfo.correction.bar,\r\n space: startInfo.correction.space\r\n }\r\n };\r\n decodedCodes.push(code);\r\n checksum = code.code;\r\n switch (code.code) {\r\n case self.START_CODE_A:\r\n codeset = self.CODE_A;\r\n break;\r\n case self.START_CODE_B:\r\n codeset = self.CODE_B;\r\n break;\r\n case self.START_CODE_C:\r\n codeset = self.CODE_C;\r\n break;\r\n default:\r\n return null;\r\n }\r\n\r\n while (!done) {\r\n unshift = shiftNext;\r\n shiftNext = false;\r\n code = self._decodeCode(code.end, code.correction);\r\n if (code !== null) {\r\n if (code.code !== self.STOP_CODE) {\r\n removeLastCharacter = true;\r\n }\r\n\r\n if (code.code !== self.STOP_CODE) {\r\n rawResult.push(code.code);\r\n multiplier++;\r\n checksum += multiplier * code.code;\r\n }\r\n decodedCodes.push(code);\r\n\r\n switch (codeset) {\r\n case self.CODE_A:\r\n if (code.code < 64) {\r\n result.push(String.fromCharCode(32 + code.code));\r\n } else if (code.code < 96) {\r\n result.push(String.fromCharCode(code.code - 64));\r\n } else {\r\n if (code.code !== self.STOP_CODE) {\r\n removeLastCharacter = false;\r\n }\r\n switch (code.code) {\r\n case self.CODE_SHIFT:\r\n shiftNext = true;\r\n codeset = self.CODE_B;\r\n break;\r\n case self.CODE_B:\r\n codeset = self.CODE_B;\r\n break;\r\n case self.CODE_C:\r\n codeset = self.CODE_C;\r\n break;\r\n case self.STOP_CODE:\r\n done = true;\r\n break;\r\n }\r\n }\r\n break;\r\n case self.CODE_B:\r\n if (code.code < 96) {\r\n result.push(String.fromCharCode(32 + code.code));\r\n } else {\r\n if (code.code !== self.STOP_CODE) {\r\n removeLastCharacter = false;\r\n }\r\n switch (code.code) {\r\n case self.CODE_SHIFT:\r\n shiftNext = true;\r\n codeset = self.CODE_A;\r\n break;\r\n case self.CODE_A:\r\n codeset = self.CODE_A;\r\n break;\r\n case self.CODE_C:\r\n codeset = self.CODE_C;\r\n break;\r\n case self.STOP_CODE:\r\n done = true;\r\n break;\r\n }\r\n }\r\n break;\r\n case self.CODE_C:\r\n if (code.code < 100) {\r\n result.push(code.code < 10 ? \"0\" + code.code : code.code);\r\n } else {\r\n if (code.code !== self.STOP_CODE) {\r\n removeLastCharacter = false;\r\n }\r\n switch (code.code) {\r\n case self.CODE_A:\r\n codeset = self.CODE_A;\r\n break;\r\n case self.CODE_B:\r\n codeset = self.CODE_B;\r\n break;\r\n case self.STOP_CODE:\r\n done = true;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n } else {\r\n done = true;\r\n }\r\n if (unshift) {\r\n codeset = codeset === self.CODE_A ? self.CODE_B : self.CODE_A;\r\n }\r\n }\r\n\r\n if (code === null) {\r\n return null;\r\n }\r\n\r\n code.end = self._nextUnset(self._row, code.end);\r\n if (!self._verifyTrailingWhitespace(code)){\r\n return null;\r\n }\r\n\r\n checksum -= multiplier * rawResult[rawResult.length - 1];\r\n if (checksum % 103 !== rawResult[rawResult.length - 1]) {\r\n return null;\r\n }\r\n\r\n if (!result.length) {\r\n return null;\r\n }\r\n\r\n // remove last code from result (checksum)\r\n if (removeLastCharacter) {\r\n result.splice(result.length - 1, 1);\r\n }\r\n\r\n\r\n return {\r\n code: result.join(\"\"),\r\n start: startInfo.start,\r\n end: code.end,\r\n codeset: codeset,\r\n startInfo: startInfo,\r\n decodedCodes: decodedCodes,\r\n endInfo: code\r\n };\r\n};\r\n\r\n\r\nBarcodeReader.prototype._verifyTrailingWhitespace = function(endInfo) {\r\n var self = this,\r\n trailingWhitespaceEnd;\r\n\r\n trailingWhitespaceEnd = endInfo.end + ((endInfo.end - endInfo.start) / 2);\r\n if (trailingWhitespaceEnd < self._row.length) {\r\n if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {\r\n return endInfo;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nfunction calculateCorrection(expected, normalized, indices) {\r\n var length = indices.length,\r\n sumNormalized = 0,\r\n sumExpected = 0;\r\n\r\n while(length--) {\r\n sumExpected += expected[indices[length]];\r\n sumNormalized += normalized[indices[length]];\r\n }\r\n return sumExpected/sumNormalized;\r\n}\r\n\r\nexport default Code128Reader;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/reader/code_128_reader.js\n **/","import Code39Reader from './code_39_reader';\r\n\r\nfunction Code39VINReader() {\r\n Code39Reader.call(this);\r\n}\r\n\r\nvar patterns = {\r\n IOQ: /[IOQ]/g,\r\n AZ09: /[A-Z0-9]{17}/\r\n};\r\n\r\nCode39VINReader.prototype = Object.create(Code39Reader.prototype);\r\nCode39VINReader.prototype.constructor = Code39VINReader;\r\n\r\n// Cribbed from:\r\n// https://github.com/zxing/zxing/blob/master/core/src/main/java/com/google/zxing/client/result/VINResultParser.java\r\nCode39VINReader.prototype._decode = function() {\r\n var result = Code39Reader.prototype._decode.apply(this);\r\n if (!result) {\r\n return null;\r\n }\r\n\r\n var code = result.code;\r\n\r\n if (!code) {\r\n return null;\r\n }\r\n\r\n code = code.replace(patterns.IOQ, '');\r\n\r\n if (!code.match(patterns.AZ09)) {\r\n if (ENV.development) {\r\n console.log('Failed AZ09 pattern code:', code);\r\n }\r\n return null;\r\n }\r\n\r\n if (!this._checkChecksum(code)) {\r\n return null;\r\n }\r\n\r\n result.code = code;\r\n return result;\r\n};\r\n\r\nCode39VINReader.prototype._checkChecksum = function(code) {\r\n // TODO\r\n return !!code;\r\n};\r\n\r\nexport default Code39VINReader;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/reader/code_39_vin_reader.js\n **/","import EANReader from './ean_reader';\r\n\r\nfunction EAN2Reader() {\r\n EANReader.call(this);\r\n}\r\n\r\nvar properties = {\r\n FORMAT: {value: \"ean_2\", writeable: false}\r\n};\r\n\r\nEAN2Reader.prototype = Object.create(EANReader.prototype, properties);\r\nEAN2Reader.prototype.constructor = EAN2Reader;\r\n\r\nEAN2Reader.prototype.decode = function(row, start) {\r\n this._row = row;\r\n var counters = [0, 0, 0, 0],\r\n codeFrequency = 0,\r\n i = 0,\r\n offset = start,\r\n end = this._row.length,\r\n code,\r\n result = [],\r\n decodedCodes = [];\r\n\r\n for (i = 0; i < 2 && offset < end; i++) {\r\n code = this._decodeCode(offset);\r\n if (!code) {\r\n return null;\r\n }\r\n decodedCodes.push(code);\r\n result.push(code.code % 10);\r\n if (code.code >= this.CODE_G_START) {\r\n codeFrequency |= 1 << (1 - i);\r\n }\r\n if (i != 1) {\r\n offset = this._nextSet(this._row, code.end);\r\n offset = this._nextUnset(this._row, offset);\r\n }\r\n }\r\n\r\n if (result.length != 2 || (parseInt(result.join(\"\")) % 4) !== codeFrequency) {\r\n return null;\r\n }\r\n return {\r\n code: result.join(\"\"),\r\n decodedCodes,\r\n end: code.end\r\n };\r\n};\r\n\r\nexport default EAN2Reader;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/reader/ean_2_reader.js\n **/","import EANReader from './ean_reader';\r\n\r\nfunction EAN5Reader() {\r\n EANReader.call(this);\r\n}\r\n\r\nvar properties = {\r\n FORMAT: {value: \"ean_5\", writeable: false}\r\n};\r\n\r\nconst CHECK_DIGIT_ENCODINGS = [24, 20, 18, 17, 12, 6, 3, 10, 9, 5];\r\n\r\nEAN5Reader.prototype = Object.create(EANReader.prototype, properties);\r\nEAN5Reader.prototype.constructor = EAN5Reader;\r\n\r\nEAN5Reader.prototype.decode = function(row, start) {\r\n this._row = row;\r\n var counters = [0, 0, 0, 0],\r\n codeFrequency = 0,\r\n i = 0,\r\n offset = start,\r\n end = this._row.length,\r\n code,\r\n result = [],\r\n decodedCodes = [];\r\n\r\n for (i = 0; i < 5 && offset < end; i++) {\r\n code = this._decodeCode(offset);\r\n if (!code) {\r\n return null;\r\n }\r\n decodedCodes.push(code);\r\n result.push(code.code % 10);\r\n if (code.code >= this.CODE_G_START) {\r\n codeFrequency |= 1 << (4 - i);\r\n }\r\n if (i != 4) {\r\n offset = this._nextSet(this._row, code.end);\r\n offset = this._nextUnset(this._row, offset);\r\n }\r\n }\r\n\r\n if (result.length != 5) {\r\n return null;\r\n }\r\n\r\n if (extensionChecksum(result) !== determineCheckDigit(codeFrequency)) {\r\n return null;\r\n }\r\n return {\r\n code: result.join(\"\"),\r\n decodedCodes,\r\n end: code.end\r\n };\r\n};\r\n\r\nfunction determineCheckDigit(codeFrequency) {\r\n var i;\r\n for (i = 0; i < 10; i++) {\r\n if (codeFrequency === CHECK_DIGIT_ENCODINGS[i]) {\r\n return i;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n\r\nfunction extensionChecksum(result) {\r\n var length = result.length,\r\n sum = 0,\r\n i;\r\n\r\n for (i = length - 2; i >= 0; i -= 2) {\r\n sum += result[i];\r\n }\r\n sum *= 3;\r\n for (i = length - 1; i >= 0; i -= 2) {\r\n sum += result[i];\r\n }\r\n sum *= 3;\r\n return sum % 10;\r\n}\r\n\r\nexport default EAN5Reader;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/reader/ean_5_reader.js\n **/","import EANReader from './ean_reader';\r\n\r\nfunction EAN8Reader(opts, supplements) {\r\n EANReader.call(this, opts, supplements);\r\n}\r\n\r\nvar properties = {\r\n FORMAT: {value: \"ean_8\", writeable: false}\r\n};\r\n\r\nEAN8Reader.prototype = Object.create(EANReader.prototype, properties);\r\nEAN8Reader.prototype.constructor = EAN8Reader;\r\n\r\nEAN8Reader.prototype._decodePayload = function(code, result, decodedCodes) {\r\n var i,\r\n self = this;\r\n\r\n for ( i = 0; i < 4; i++) {\r\n code = self._decodeCode(code.end, self.CODE_G_START);\r\n if (!code) {\r\n return null;\r\n }\r\n result.push(code.code);\r\n decodedCodes.push(code);\r\n }\r\n\r\n code = self._findPattern(self.MIDDLE_PATTERN, code.end, true, false);\r\n if (code === null) {\r\n return null;\r\n }\r\n decodedCodes.push(code);\r\n\r\n for ( i = 0; i < 4; i++) {\r\n code = self._decodeCode(code.end, self.CODE_G_START);\r\n if (!code) {\r\n return null;\r\n }\r\n decodedCodes.push(code);\r\n result.push(code.code);\r\n }\r\n\r\n return code;\r\n};\r\n\r\nexport default EAN8Reader;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/reader/ean_8_reader.js\n **/","import BarcodeReader from './barcode_reader';\r\nimport {merge} from 'lodash';\r\n\r\nfunction I2of5Reader(opts) {\r\n opts = merge(getDefaulConfig(), opts);\r\n BarcodeReader.call(this, opts);\r\n this.barSpaceRatio = [1, 1];\r\n if (opts.normalizeBarSpaceWidth) {\r\n this.SINGLE_CODE_ERROR = 0.38;\r\n this.AVG_CODE_ERROR = 0.09;\r\n }\r\n}\r\n\r\nfunction getDefaulConfig() {\r\n var config = {};\r\n\r\n Object.keys(I2of5Reader.CONFIG_KEYS).forEach(function(key) {\r\n config[key] = I2of5Reader.CONFIG_KEYS[key].default;\r\n });\r\n return config;\r\n}\r\n\r\nvar N = 1,\r\n W = 3,\r\n properties = {\r\n START_PATTERN: {value: [N, N, N, N]},\r\n STOP_PATTERN: {value: [N, N, W]},\r\n CODE_PATTERN: {value: [\r\n [N, N, W, W, N],\r\n [W, N, N, N, W],\r\n [N, W, N, N, W],\r\n [W, W, N, N, N],\r\n [N, N, W, N, W],\r\n [W, N, W, N, N],\r\n [N, W, W, N, N],\r\n [N, N, N, W, W],\r\n [W, N, N, W, N],\r\n [N, W, N, W, N]\r\n ]},\r\n SINGLE_CODE_ERROR: {value: 0.78, writable: true},\r\n AVG_CODE_ERROR: {value: 0.38, writable: true},\r\n MAX_CORRECTION_FACTOR: {value: 5},\r\n FORMAT: {value: \"i2of5\"}\r\n };\r\n\r\nI2of5Reader.prototype = Object.create(BarcodeReader.prototype, properties);\r\nI2of5Reader.prototype.constructor = I2of5Reader;\r\n\r\nI2of5Reader.prototype._matchPattern = function(counter, code) {\r\n if (this.config.normalizeBarSpaceWidth) {\r\n var i,\r\n counterSum = [0, 0],\r\n codeSum = [0, 0],\r\n correction = [0, 0],\r\n correctionRatio = this.MAX_CORRECTION_FACTOR,\r\n correctionRatioInverse = 1 / correctionRatio;\r\n\r\n for (i = 0; i < counter.length; i++) {\r\n counterSum[i % 2] += counter[i];\r\n codeSum[i % 2] += code[i];\r\n }\r\n correction[0] = codeSum[0] / counterSum[0];\r\n correction[1] = codeSum[1] / counterSum[1];\r\n\r\n correction[0] = Math.max(Math.min(correction[0], correctionRatio), correctionRatioInverse);\r\n correction[1] = Math.max(Math.min(correction[1], correctionRatio), correctionRatioInverse);\r\n this.barSpaceRatio = correction;\r\n for (i = 0; i < counter.length; i++) {\r\n counter[i] *= this.barSpaceRatio[i % 2];\r\n }\r\n }\r\n return BarcodeReader.prototype._matchPattern.call(this, counter, code);\r\n};\r\n\r\nI2of5Reader.prototype._findPattern = function(pattern, offset, isWhite, tryHarder) {\r\n var counter = [],\r\n self = this,\r\n i,\r\n counterPos = 0,\r\n bestMatch = {\r\n error: Number.MAX_VALUE,\r\n code: -1,\r\n start: 0,\r\n end: 0\r\n },\r\n error,\r\n j,\r\n sum,\r\n normalized,\r\n epsilon = self.AVG_CODE_ERROR;\r\n\r\n isWhite = isWhite || false;\r\n tryHarder = tryHarder || false;\r\n\r\n if (!offset) {\r\n offset = self._nextSet(self._row);\r\n }\r\n\r\n for ( i = 0; i < pattern.length; i++) {\r\n counter[i] = 0;\r\n }\r\n\r\n for ( i = offset; i < self._row.length; i++) {\r\n if (self._row[i] ^ isWhite) {\r\n counter[counterPos]++;\r\n } else {\r\n if (counterPos === counter.length - 1) {\r\n sum = 0;\r\n for ( j = 0; j < counter.length; j++) {\r\n sum += counter[j];\r\n }\r\n error = self._matchPattern(counter, pattern);\r\n if (error < epsilon) {\r\n bestMatch.error = error;\r\n bestMatch.start = i - sum;\r\n bestMatch.end = i;\r\n return bestMatch;\r\n }\r\n if (tryHarder) {\r\n for (j = 0; j < counter.length - 2; j++) {\r\n counter[j] = counter[j + 2];\r\n }\r\n counter[counter.length - 2] = 0;\r\n counter[counter.length - 1] = 0;\r\n counterPos--;\r\n } else {\r\n return null;\r\n }\r\n } else {\r\n counterPos++;\r\n }\r\n counter[counterPos] = 1;\r\n isWhite = !isWhite;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nI2of5Reader.prototype._findStart = function() {\r\n var self = this,\r\n leadingWhitespaceStart,\r\n offset = self._nextSet(self._row),\r\n startInfo,\r\n narrowBarWidth = 1;\r\n\r\n while (!startInfo) {\r\n startInfo = self._findPattern(self.START_PATTERN, offset, false, true);\r\n if (!startInfo) {\r\n return null;\r\n }\r\n narrowBarWidth = Math.floor((startInfo.end - startInfo.start) / 4);\r\n leadingWhitespaceStart = startInfo.start - narrowBarWidth * 10;\r\n if (leadingWhitespaceStart >= 0) {\r\n if (self._matchRange(leadingWhitespaceStart, startInfo.start, 0)) {\r\n return startInfo;\r\n }\r\n }\r\n offset = startInfo.end;\r\n startInfo = null;\r\n }\r\n};\r\n\r\nI2of5Reader.prototype._verifyTrailingWhitespace = function(endInfo) {\r\n var self = this,\r\n trailingWhitespaceEnd;\r\n\r\n trailingWhitespaceEnd = endInfo.end + ((endInfo.end - endInfo.start) / 2);\r\n if (trailingWhitespaceEnd < self._row.length) {\r\n if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {\r\n return endInfo;\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nI2of5Reader.prototype._findEnd = function() {\r\n var self = this,\r\n endInfo,\r\n tmp;\r\n\r\n self._row.reverse();\r\n endInfo = self._findPattern(self.STOP_PATTERN);\r\n self._row.reverse();\r\n\r\n if (endInfo === null) {\r\n return null;\r\n }\r\n\r\n // reverse numbers\r\n tmp = endInfo.start;\r\n endInfo.start = self._row.length - endInfo.end;\r\n endInfo.end = self._row.length - tmp;\r\n\r\n return endInfo !== null ? self._verifyTrailingWhitespace(endInfo) : null;\r\n};\r\n\r\nI2of5Reader.prototype._decodePair = function(counterPair) {\r\n var i,\r\n code,\r\n codes = [],\r\n self = this;\r\n\r\n for (i = 0; i < counterPair.length; i++) {\r\n code = self._decodeCode(counterPair[i]);\r\n if (!code) {\r\n return null;\r\n }\r\n codes.push(code);\r\n }\r\n return codes;\r\n};\r\n\r\nI2of5Reader.prototype._decodeCode = function(counter) {\r\n var j,\r\n self = this,\r\n sum = 0,\r\n normalized,\r\n error,\r\n epsilon = self.AVG_CODE_ERROR,\r\n code,\r\n bestMatch = {\r\n error: Number.MAX_VALUE,\r\n code: -1,\r\n start: 0,\r\n end: 0\r\n };\r\n\r\n for ( j = 0; j < counter.length; j++) {\r\n sum += counter[j];\r\n }\r\n for (code = 0; code < self.CODE_PATTERN.length; code++) {\r\n error = self._matchPattern(counter, self.CODE_PATTERN[code]);\r\n if (error < bestMatch.error) {\r\n bestMatch.code = code;\r\n bestMatch.error = error;\r\n }\r\n }\r\n if (bestMatch.error < epsilon) {\r\n return bestMatch;\r\n }\r\n};\r\n\r\nI2of5Reader.prototype._decodePayload = function(counters, result, decodedCodes) {\r\n var i,\r\n self = this,\r\n pos = 0,\r\n counterLength = counters.length,\r\n counterPair = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]],\r\n codes;\r\n\r\n while (pos < counterLength) {\r\n for (i = 0; i < 5; i++) {\r\n counterPair[0][i] = counters[pos] * this.barSpaceRatio[0];\r\n counterPair[1][i] = counters[pos + 1] * this.barSpaceRatio[1];\r\n pos += 2;\r\n }\r\n codes = self._decodePair(counterPair);\r\n if (!codes) {\r\n return null;\r\n }\r\n for (i = 0; i < codes.length; i++) {\r\n result.push(codes[i].code + \"\");\r\n decodedCodes.push(codes[i]);\r\n }\r\n }\r\n return codes;\r\n};\r\n\r\nI2of5Reader.prototype._verifyCounterLength = function(counters) {\r\n return (counters.length % 10 === 0);\r\n};\r\n\r\nI2of5Reader.prototype._decode = function() {\r\n var startInfo,\r\n endInfo,\r\n self = this,\r\n code,\r\n result = [],\r\n decodedCodes = [],\r\n counters;\r\n\r\n startInfo = self._findStart();\r\n if (!startInfo) {\r\n return null;\r\n }\r\n decodedCodes.push(startInfo);\r\n\r\n endInfo = self._findEnd();\r\n if (!endInfo) {\r\n return null;\r\n }\r\n\r\n counters = self._fillCounters(startInfo.end, endInfo.start, false);\r\n if (!self._verifyCounterLength(counters)) {\r\n return null;\r\n }\r\n code = self._decodePayload(counters, result, decodedCodes);\r\n if (!code) {\r\n return null;\r\n }\r\n if (result.length % 2 !== 0 ||\r\n result.length < 6) {\r\n return null;\r\n }\r\n\r\n decodedCodes.push(endInfo);\r\n return {\r\n code: result.join(\"\"),\r\n start: startInfo.start,\r\n end: endInfo.end,\r\n startInfo: startInfo,\r\n decodedCodes: decodedCodes\r\n };\r\n};\r\n\r\nI2of5Reader.CONFIG_KEYS = {\r\n normalizeBarSpaceWidth: {\r\n 'type': 'boolean',\r\n 'default': false,\r\n 'description': 'If true, the reader tries to normalize the' +\r\n 'width-difference between bars and spaces'\r\n }\r\n};\r\n\r\nexport default I2of5Reader;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/reader/i2of5_reader.js\n **/","import EANReader from './ean_reader';\r\n\r\nfunction UPCEReader(opts, supplements) {\r\n EANReader.call(this, opts, supplements);\r\n}\r\n\r\nvar properties = {\r\n CODE_FREQUENCY: {value: [\r\n [ 56, 52, 50, 49, 44, 38, 35, 42, 41, 37 ],\r\n [7, 11, 13, 14, 19, 25, 28, 21, 22, 26]]},\r\n STOP_PATTERN: { value: [1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7]},\r\n FORMAT: {value: \"upc_e\", writeable: false}\r\n};\r\n\r\nUPCEReader.prototype = Object.create(EANReader.prototype, properties);\r\nUPCEReader.prototype.constructor = UPCEReader;\r\n\r\nUPCEReader.prototype._decodePayload = function(code, result, decodedCodes) {\r\n var i,\r\n self = this,\r\n codeFrequency = 0x0;\r\n\r\n for ( i = 0; i < 6; i++) {\r\n code = self._decodeCode(code.end);\r\n if (!code) {\r\n return null;\r\n }\r\n if (code.code >= self.CODE_G_START) {\r\n code.code = code.code - self.CODE_G_START;\r\n codeFrequency |= 1 << (5 - i);\r\n }\r\n result.push(code.code);\r\n decodedCodes.push(code);\r\n }\r\n if (!self._determineParity(codeFrequency, result)) {\r\n return null;\r\n }\r\n\r\n return code;\r\n};\r\n\r\nUPCEReader.prototype._determineParity = function(codeFrequency, result) {\r\n var i,\r\n nrSystem;\r\n\r\n for (nrSystem = 0; nrSystem < this.CODE_FREQUENCY.length; nrSystem++){\r\n for ( i = 0; i < this.CODE_FREQUENCY[nrSystem].length; i++) {\r\n if (codeFrequency === this.CODE_FREQUENCY[nrSystem][i]) {\r\n result.unshift(nrSystem);\r\n result.push(i);\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nUPCEReader.prototype._convertToUPCA = function(result) {\r\n var upca = [result[0]],\r\n lastDigit = result[result.length - 2];\r\n\r\n if (lastDigit <= 2) {\r\n upca = upca.concat(result.slice(1, 3))\r\n .concat([lastDigit, 0, 0, 0, 0])\r\n .concat(result.slice(3, 6));\r\n } else if (lastDigit === 3) {\r\n upca = upca.concat(result.slice(1, 4))\r\n .concat([0, 0, 0, 0, 0])\r\n .concat(result.slice(4, 6));\r\n } else if (lastDigit === 4) {\r\n upca = upca.concat(result.slice(1, 5))\r\n .concat([0, 0, 0, 0, 0, result[5]]);\r\n } else {\r\n upca = upca.concat(result.slice(1, 6))\r\n .concat([0, 0, 0, 0, lastDigit]);\r\n }\r\n\r\n upca.push(result[result.length - 1]);\r\n return upca;\r\n};\r\n\r\nUPCEReader.prototype._checksum = function(result) {\r\n return EANReader.prototype._checksum.call(this, this._convertToUPCA(result));\r\n};\r\n\r\nUPCEReader.prototype._findEnd = function(offset, isWhite) {\r\n isWhite = true;\r\n return EANReader.prototype._findEnd.call(this, offset, isWhite);\r\n};\r\n\r\nUPCEReader.prototype._verifyTrailingWhitespace = function(endInfo) {\r\n var self = this,\r\n trailingWhitespaceEnd;\r\n\r\n trailingWhitespaceEnd = endInfo.end + ((endInfo.end - endInfo.start) / 2);\r\n if (trailingWhitespaceEnd < self._row.length) {\r\n if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {\r\n return endInfo;\r\n }\r\n }\r\n};\r\n\r\nexport default UPCEReader;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/reader/upc_e_reader.js\n **/","import EANReader from './ean_reader';\r\n\r\nfunction UPCReader(opts, supplements) {\r\n EANReader.call(this, opts, supplements);\r\n}\r\n\r\nvar properties = {\r\n FORMAT: {value: \"upc_a\", writeable: false}\r\n};\r\n\r\nUPCReader.prototype = Object.create(EANReader.prototype, properties);\r\nUPCReader.prototype.constructor = UPCReader;\r\n\r\nUPCReader.prototype._decode = function() {\r\n var result = EANReader.prototype._decode.call(this);\r\n\r\n if (result && result.code && result.code.length === 13 && result.code.charAt(0) === \"0\") {\r\n result.code = result.code.substring(1);\r\n return result;\r\n }\r\n return null;\r\n};\r\n\r\nexport default UPCReader;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/reader/upc_reader.js\n **/","import ImageWrapper from './common/image_wrapper';\r\nimport createLocator, {checkImageConstraints} from './locator/barcode_locator';\r\nimport BarcodeDecoder from './decoder/barcode_decoder';\r\nimport createEventedElement from './common/events';\r\nimport CameraAccess from './input/camera_access';\r\nimport ImageDebug from './common/image_debug';\r\nimport ResultCollector from './analytics/result_collector';\r\nimport Config from './config/config';\r\nimport InputStream from 'input_stream';\r\nimport FrameGrabber from 'frame_grabber';\r\nimport {merge} from 'lodash';\r\nconst vec2 = {\r\n clone: require('gl-vec2/clone')\r\n};\r\n\r\n\r\nfunction createScanner() {\r\n var _inputStream,\r\n _framegrabber,\r\n _stopped = true,\r\n _canvasContainer = {\r\n ctx: {\r\n image: null\r\n },\r\n dom: {\r\n image: null\r\n }\r\n },\r\n _inputImageWrapper,\r\n _boxSize,\r\n _decoder,\r\n _workerPool = [],\r\n _onUIThread = true,\r\n _resultCollector,\r\n _config = {},\r\n _events = createEventedElement(),\r\n _locator;\r\n\r\n function initializeData(imageWrapper) {\r\n initBuffers(imageWrapper);\r\n _decoder = BarcodeDecoder.create(_config.decoder, _inputImageWrapper);\r\n }\r\n\r\n function initInputStream(cb) {\r\n var video;\r\n if (_config.inputStream.type === \"VideoStream\") {\r\n video = document.createElement(\"video\");\r\n _inputStream = InputStream.createVideoStream(video);\r\n } else if (_config.inputStream.type === \"ImageStream\") {\r\n _inputStream = InputStream.createImageStream();\r\n } else if (_config.inputStream.type === \"LiveStream\") {\r\n var $viewport = getViewPort();\r\n if ($viewport) {\r\n video = $viewport.querySelector(\"video\");\r\n if (!video) {\r\n video = document.createElement(\"video\");\r\n $viewport.appendChild(video);\r\n }\r\n }\r\n _inputStream = InputStream.createLiveStream(video);\r\n CameraAccess.request(video, _config.inputStream.constraints)\r\n .then(() => {\r\n _inputStream.trigger(\"canrecord\");\r\n }).catch((err) => {\r\n return cb(err);\r\n });\r\n }\r\n\r\n _inputStream.setAttribute(\"preload\", \"auto\");\r\n _inputStream.setInputStream(_config.inputStream);\r\n _inputStream.addEventListener(\"canrecord\", canRecord.bind(undefined, cb));\r\n }\r\n\r\n function getViewPort() {\r\n var target = _config.inputStream.target;\r\n // Check if target is already a DOM element\r\n if (target && target.nodeName && target.nodeType === 1) {\r\n return target;\r\n } else {\r\n // Use '#interactive.viewport' as a fallback selector (backwards compatibility)\r\n var selector = typeof target === 'string' ? target : '#interactive.viewport';\r\n return document.querySelector(selector);\r\n }\r\n }\r\n\r\n function canRecord(cb) {\r\n checkImageConstraints(_inputStream, _config.locator);\r\n initCanvas(_config);\r\n _framegrabber = FrameGrabber.create(_inputStream, _canvasContainer.dom.image);\r\n\r\n adjustWorkerPool(_config.numOfWorkers, function() {\r\n if (_config.numOfWorkers === 0) {\r\n initializeData();\r\n }\r\n ready(cb);\r\n });\r\n }\r\n\r\n function ready(cb){\r\n _inputStream.play();\r\n cb();\r\n }\r\n\r\n function initCanvas() {\r\n if (typeof document !== \"undefined\") {\r\n var $viewport = getViewPort();\r\n _canvasContainer.dom.image = document.querySelector(\"canvas.imgBuffer\");\r\n if (!_canvasContainer.dom.image) {\r\n _canvasContainer.dom.image = document.createElement(\"canvas\");\r\n _canvasContainer.dom.image.className = \"imgBuffer\";\r\n if ($viewport && _config.inputStream.type === \"ImageStream\") {\r\n $viewport.appendChild(_canvasContainer.dom.image);\r\n }\r\n }\r\n _canvasContainer.ctx.image = _canvasContainer.dom.image.getContext(\"2d\");\r\n _canvasContainer.dom.image.width = _inputStream.getCanvasSize().x;\r\n _canvasContainer.dom.image.height = _inputStream.getCanvasSize().y;\r\n }\r\n }\r\n\r\n function initBuffers(imageWrapper) {\r\n if (imageWrapper) {\r\n _inputImageWrapper = imageWrapper;\r\n } else {\r\n _inputImageWrapper = new ImageWrapper({\r\n x: _inputStream.getWidth(),\r\n y: _inputStream.getHeight()\r\n });\r\n }\r\n\r\n if (ENV.development) {\r\n console.log(_inputImageWrapper.size);\r\n }\r\n _boxSize = [\r\n vec2.clone([0, 0]),\r\n vec2.clone([0, _inputImageWrapper.size.y]),\r\n vec2.clone([_inputImageWrapper.size.x, _inputImageWrapper.size.y]),\r\n vec2.clone([_inputImageWrapper.size.x, 0])\r\n ];\r\n _locator = createLocator(_inputImageWrapper, _config.locator);\r\n }\r\n\r\n function getBoundingBoxes() {\r\n if (_config.locate) {\r\n return _locator.locate();\r\n } else {\r\n return [[\r\n vec2.clone(_boxSize[0]),\r\n vec2.clone(_boxSize[1]),\r\n vec2.clone(_boxSize[2]),\r\n vec2.clone(_boxSize[3])]];\r\n }\r\n }\r\n\r\n function transformResult(result) {\r\n var topRight = _inputStream.getTopRight(),\r\n xOffset = topRight.x,\r\n yOffset = topRight.y,\r\n i;\r\n\r\n if (xOffset === 0 && yOffset === 0) {\r\n return;\r\n }\r\n\r\n if (result.barcodes) {\r\n for (i = 0; i < result.barcodes.length; i++) {\r\n transformResult(result.barcodes[i]);\r\n }\r\n }\r\n\r\n if (result.line && result.line.length === 2) {\r\n moveLine(result.line);\r\n }\r\n\r\n if (result.box) {\r\n moveBox(result.box);\r\n }\r\n\r\n if (result.boxes && result.boxes.length > 0) {\r\n for (i = 0; i < result.boxes.length; i++) {\r\n moveBox(result.boxes[i]);\r\n }\r\n }\r\n\r\n function moveBox(box) {\r\n var corner = box.length;\r\n\r\n while (corner--) {\r\n box[corner][0] += xOffset;\r\n box[corner][1] += yOffset;\r\n }\r\n }\r\n\r\n function moveLine(line) {\r\n line[0].x += xOffset;\r\n line[0].y += yOffset;\r\n line[1].x += xOffset;\r\n line[1].y += yOffset;\r\n }\r\n }\r\n\r\n function addResult (result, imageData) {\r\n if (!imageData || !_resultCollector) {\r\n return;\r\n }\r\n\r\n if (result.barcodes) {\r\n result.barcodes.filter(barcode => barcode.codeResult)\r\n .forEach(barcode => addResult(barcode, imageData));\r\n } else if (result.codeResult) {\r\n _resultCollector.addResult(imageData, _inputStream.getCanvasSize(), result.codeResult);\r\n }\r\n }\r\n\r\n function hasCodeResult (result) {\r\n return result && (result.barcodes ?\r\n result.barcodes.some(barcode => barcode.codeResult) :\r\n result.codeResult);\r\n }\r\n\r\n function publishResult(result, imageData) {\r\n let resultToPublish = result;\r\n\r\n if (result && _onUIThread) {\r\n transformResult(result);\r\n addResult(result, imageData);\r\n resultToPublish = result.barcodes || result;\r\n }\r\n\r\n _events.publish(\"processed\", resultToPublish);\r\n if (hasCodeResult(result)) {\r\n _events.publish(\"detected\", resultToPublish);\r\n }\r\n }\r\n\r\n function locateAndDecode() {\r\n var result,\r\n boxes;\r\n\r\n boxes = getBoundingBoxes();\r\n if (boxes) {\r\n result = _decoder.decodeFromBoundingBoxes(boxes);\r\n result = result || {};\r\n result.boxes = boxes;\r\n publishResult(result, _inputImageWrapper.data);\r\n } else {\r\n publishResult();\r\n }\r\n }\r\n\r\n function update() {\r\n var availableWorker;\r\n\r\n if (_onUIThread) {\r\n if (_workerPool.length > 0) {\r\n availableWorker = _workerPool.filter(function(workerThread) {\r\n return !workerThread.busy;\r\n })[0];\r\n if (availableWorker) {\r\n _framegrabber.attachData(availableWorker.imageData);\r\n } else {\r\n return; // all workers are busy\r\n }\r\n } else {\r\n _framegrabber.attachData(_inputImageWrapper.data);\r\n }\r\n if (_framegrabber.grab()) {\r\n if (availableWorker) {\r\n availableWorker.busy = true;\r\n availableWorker.worker.postMessage({\r\n cmd: 'process',\r\n imageData: availableWorker.imageData\r\n }, [availableWorker.imageData.buffer]);\r\n } else {\r\n locateAndDecode();\r\n }\r\n }\r\n } else {\r\n locateAndDecode();\r\n }\r\n }\r\n\r\n function startContinuousUpdate() {\r\n var next = null,\r\n delay = 1000 / (_config.frequency === 0 ? 60 : (_config.frequency || 60));\r\n\r\n _stopped = false;\r\n (function frame(timestamp) {\r\n next = next || timestamp;\r\n if (!_stopped) {\r\n if (timestamp >= next) {\r\n next += delay;\r\n update();\r\n }\r\n window.requestAnimFrame(frame);\r\n }\r\n }(performance.now()));\r\n }\r\n\r\n function start() {\r\n if (_onUIThread && _config.inputStream.type === \"LiveStream\") {\r\n startContinuousUpdate();\r\n } else {\r\n update();\r\n }\r\n }\r\n\r\n function initWorker(cb) {\r\n var blobURL,\r\n workerThread = {\r\n worker: undefined,\r\n imageData: new Uint8Array(_inputStream.getWidth() * _inputStream.getHeight()),\r\n busy: true\r\n };\r\n\r\n blobURL = generateWorkerBlob();\r\n workerThread.worker = new Worker(blobURL);\r\n\r\n workerThread.worker.onmessage = function(e) {\r\n if (e.data.event === 'initialized') {\r\n URL.revokeObjectURL(blobURL);\r\n workerThread.busy = false;\r\n workerThread.imageData = new Uint8Array(e.data.imageData);\r\n if (ENV.development) {\r\n console.log(\"Worker initialized\");\r\n }\r\n return cb(workerThread);\r\n } else if (e.data.event === 'processed') {\r\n workerThread.imageData = new Uint8Array(e.data.imageData);\r\n workerThread.busy = false;\r\n publishResult(e.data.result, workerThread.imageData);\r\n } else if (e.data.event === 'error') {\r\n if (ENV.development) {\r\n console.log(\"Worker error: \" + e.data.message);\r\n }\r\n }\r\n };\r\n\r\n workerThread.worker.postMessage({\r\n cmd: 'init',\r\n size: {x: _inputStream.getWidth(), y: _inputStream.getHeight()},\r\n imageData: workerThread.imageData,\r\n config: configForWorker(_config)\r\n }, [workerThread.imageData.buffer]);\r\n }\r\n\r\n function configForWorker(config) {\r\n return {\r\n ...config,\r\n inputStream: {\r\n ...config.inputStream,\r\n target: null\r\n }\r\n };\r\n }\r\n\r\n function workerInterface(factory) {\r\n /* eslint-disable no-undef*/\r\n if (factory) {\r\n var Quagga = factory().default;\r\n if (!Quagga) {\r\n self.postMessage({'event': 'error', message: 'Quagga could not be created'});\r\n return;\r\n }\r\n }\r\n var imageWrapper,\r\n scanner = Quagga._worker.createScanner();\r\n\r\n self.onmessage = function(e) {\r\n if (e.data.cmd === 'init') {\r\n var config = e.data.config;\r\n config.numOfWorkers = 0;\r\n imageWrapper = new Quagga.ImageWrapper({\r\n x: e.data.size.x,\r\n y: e.data.size.y\r\n }, new Uint8Array(e.data.imageData));\r\n scanner.init(config, ready, imageWrapper);\r\n scanner.subscribe(\"processed\", onProcessed);\r\n } else if (e.data.cmd === 'process') {\r\n imageWrapper.data = new Uint8Array(e.data.imageData);\r\n scanner.start();\r\n }\r\n };\r\n\r\n function onProcessed(result) {\r\n self.postMessage({\r\n 'event': 'processed',\r\n imageData: imageWrapper.data,\r\n result: result\r\n }, [imageWrapper.data.buffer]);\r\n }\r\n\r\n function ready() { // eslint-disable-line\r\n self.postMessage({'event': 'initialized', imageData: imageWrapper.data}, [imageWrapper.data.buffer]);\r\n }\r\n\r\n /* eslint-enable */\r\n }\r\n\r\n function generateWorkerBlob() {\r\n var blob,\r\n factorySource;\r\n\r\n /* jshint ignore:start */\r\n if (typeof __factorySource__ !== 'undefined') {\r\n factorySource = __factorySource__; // eslint-disable-line no-undef\r\n }\r\n /* jshint ignore:end */\r\n\r\n blob = new Blob(['(' + workerInterface.toString() + ')(' + factorySource + ');'],\r\n {type: 'text/javascript'});\r\n\r\n return window.URL.createObjectURL(blob);\r\n }\r\n\r\n function setReaders(readers) {\r\n if (_decoder) {\r\n _decoder.setReaders(readers);\r\n } else if (_onUIThread && _workerPool.length > 0) {\r\n _workerPool.forEach(function(workerThread) {\r\n workerThread.worker.postMessage({cmd: 'setReaders', readers: readers});\r\n });\r\n }\r\n }\r\n\r\n function adjustWorkerPool(capacity, cb) {\r\n const increaseBy = capacity - _workerPool.length;\r\n if (increaseBy === 0) {\r\n return cb && cb();\r\n }\r\n if (increaseBy < 0) {\r\n const workersToTerminate = _workerPool.slice(increaseBy);\r\n workersToTerminate.forEach(function(workerThread) {\r\n workerThread.worker.terminate();\r\n if (ENV.development) {\r\n console.log(\"Worker terminated!\");\r\n }\r\n });\r\n _workerPool = _workerPool.slice(0, increaseBy);\r\n return cb && cb();\r\n } else {\r\n for (var i = 0; i < increaseBy; i++) {\r\n initWorker(workerInitialized);\r\n }\r\n\r\n function workerInitialized(workerThread) {\r\n _workerPool.push(workerThread);\r\n if (_workerPool.length >= capacity){\r\n cb && cb();\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n init: function(config, cb, imageWrapper) {\r\n _config = merge({}, Config, config);\r\n\r\n if (imageWrapper) {\r\n _onUIThread = false;\r\n initializeData(imageWrapper);\r\n return cb();\r\n } else {\r\n initInputStream(cb);\r\n }\r\n },\r\n start: function() {\r\n start();\r\n },\r\n isRunning: function() {\r\n return !_stopped;\r\n },\r\n stop: function() {\r\n _stopped = true;\r\n adjustWorkerPool(0);\r\n if (_config.inputStream.type === \"LiveStream\") {\r\n CameraAccess.release();\r\n }\r\n _inputStream.clearEventHandlers();\r\n },\r\n pause: function() {\r\n _stopped = true;\r\n },\r\n subscribe(eventName, callback) {\r\n _events.subscribe(eventName, callback);\r\n },\r\n unsubscribe(eventName, callback) {\r\n _events.unsubscribe(eventName, callback);\r\n },\r\n registerResultCollector: function(resultCollector) {\r\n if (resultCollector && typeof resultCollector.addResult === 'function') {\r\n _resultCollector = resultCollector;\r\n }\r\n },\r\n decodeSingle: function(config, resultCallback) {\r\n this.init(config, () => {\r\n _events.once(\"processed\", (result) => {\r\n this.stop();\r\n resultCallback.call(null, result);\r\n }, true);\r\n start();\r\n });\r\n },\r\n canvas: _canvasContainer\r\n };\r\n}\r\n\r\nexport default createScanner;\r\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/scanner.js\n **/","module.exports = copy\n\n/**\n * Copy the values from one mat2 to another\n *\n * @alias mat2.copy\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the source matrix\n * @returns {mat2} out\n */\nfunction copy(out, a) {\n out[0] = a[0]\n out[1] = a[1]\n out[2] = a[2]\n out[3] = a[3]\n return out\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gl-mat2/copy.js\n ** module id = 104\n ** module chunks = 0\n **/","module.exports = create\n\n/**\n * Creates a new identity mat2\n *\n * @alias mat2.create\n * @returns {mat2} a new 2x2 matrix\n */\nfunction create() {\n var out = new Float32Array(4)\n out[0] = 1\n out[1] = 0\n out[2] = 0\n out[3] = 1\n return out\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gl-mat2/create.js\n ** module id = 105\n ** module chunks = 0\n **/","module.exports = invert\n\n/**\n * Inverts a mat2\n *\n * @alias mat2.invert\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the source matrix\n * @returns {mat2} out\n */\nfunction invert(out, a) {\n var a0 = a[0]\n var a1 = a[1]\n var a2 = a[2]\n var a3 = a[3]\n var det = a0 * a3 - a2 * a1\n\n if (!det) return null\n det = 1.0 / det\n\n out[0] = a3 * det\n out[1] = -a1 * det\n out[2] = -a2 * det\n out[3] = a0 * det\n\n return out\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gl-mat2/invert.js\n ** module id = 106\n ** module chunks = 0\n **/","module.exports = scale\n\n/**\n * Scales a vec2 by a scalar number\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec2} out\n */\nfunction scale(out, a, b) {\n out[0] = a[0] * b\n out[1] = a[1] * b\n return out\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gl-vec2/scale.js\n ** module id = 107\n ** module chunks = 0\n **/","module.exports = transformMat2\n\n/**\n * Transforms the vec2 with a mat2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat2} m matrix to transform with\n * @returns {vec2} out\n */\nfunction transformMat2(out, a, m) {\n var x = a[0],\n y = a[1]\n out[0] = m[0] * x + m[2] * y\n out[1] = m[1] * x + m[3] * y\n return out\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gl-vec2/transformMat2.js\n ** module id = 108\n ** module chunks = 0\n **/","module.exports = clone;\n\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {vec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\nfunction clone(a) {\n var out = new Float32Array(3)\n out[0] = a[0]\n out[1] = a[1]\n out[2] = a[2]\n return out\n}\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/gl-vec3/clone.js\n ** module id = 109\n ** module chunks = 0\n **/","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_DataView.js\n ** module id = 110\n ** module chunks = 0\n **/","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\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 ? entries.length : 0;\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_Hash.js\n ** module id = 111\n ** module chunks = 0\n **/","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_Promise.js\n ** module id = 112\n ** module chunks = 0\n **/","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_Set.js\n ** module id = 113\n ** module chunks = 0\n **/","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\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 ? values.length : 0;\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_SetCache.js\n ** module id = 114\n ** module chunks = 0\n **/","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_WeakMap.js\n ** module id = 115\n ** module chunks = 0\n **/","/**\n * Adds the key-value `pair` to `map`.\n *\n * @private\n * @param {Object} map The map to modify.\n * @param {Array} pair The key-value pair to add.\n * @returns {Object} Returns `map`.\n */\nfunction addMapEntry(map, pair) {\n // Don't return `map.set` because it's not chainable in IE 11.\n map.set(pair[0], pair[1]);\n return map;\n}\n\nmodule.exports = addMapEntry;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_addMapEntry.js\n ** module id = 116\n ** module chunks = 0\n **/","/**\n * Adds `value` to `set`.\n *\n * @private\n * @param {Object} set The set to modify.\n * @param {*} value The value to add.\n * @returns {Object} Returns `set`.\n */\nfunction addSetEntry(set, value) {\n // Don't return `set.add` because it's not chainable in IE 11.\n set.add(value);\n return set;\n}\n\nmodule.exports = addSetEntry;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_addSetEntry.js\n ** module id = 117\n ** module chunks = 0\n **/","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_apply.js\n ** module id = 118\n ** module chunks = 0\n **/","/**\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 ? array.length : 0,\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_arrayMap.js\n ** module id = 119\n ** module chunks = 0\n **/","/**\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 ? array.length : 0;\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_arraySome.js\n ** module id = 120\n ** module chunks = 0\n **/","var copyObject = require('./_copyObject'),\n keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseAssign.js\n ** module id = 121\n ** module chunks = 0\n **/","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignValue = require('./_assignValue'),\n baseAssign = require('./_baseAssign'),\n cloneBuffer = require('./_cloneBuffer'),\n copyArray = require('./_copyArray'),\n copySymbols = require('./_copySymbols'),\n getAllKeys = require('./_getAllKeys'),\n getTag = require('./_getTag'),\n initCloneArray = require('./_initCloneArray'),\n initCloneByTag = require('./_initCloneByTag'),\n initCloneObject = require('./_initCloneObject'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isHostObject = require('./_isHostObject'),\n isObject = require('./isObject'),\n keys = require('./keys');\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 genTag = '[object GeneratorFunction]',\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 symbolTag = '[object Symbol]',\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 supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @param {boolean} [isFull] Specify a clone including symbols.\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, isDeep, isFull, customizer, key, object, stack) {\n var result;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n if (isHostObject(value)) {\n return object ? value : {};\n }\n result = initCloneObject(isFunc ? {} : value);\n if (!isDeep) {\n return copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, baseClone, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (!isArr) {\n var props = isFull ? getAllKeys(value) : keys(value);\n }\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));\n });\n return result;\n}\n\nmodule.exports = baseClone;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseClone.js\n ** module id = 122\n ** module chunks = 0\n **/","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} prototype The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nfunction baseCreate(proto) {\n return isObject(proto) ? objectCreate(proto) : {};\n}\n\nmodule.exports = baseCreate;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseCreate.js\n ** module id = 123\n ** module chunks = 0\n **/","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseFlatten.js\n ** module id = 124\n ** module chunks = 0\n **/","/** 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 objectToString = objectProto.toString;\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n return objectToString.call(value);\n}\n\nmodule.exports = baseGetTag;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseGetTag.js\n ** module id = 125\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseHasIn.js\n ** module id = 126\n ** module chunks = 0\n **/","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isHostObject = require('./_isHostObject'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for comparison styles. */\nvar PARTIAL_COMPARE_FLAG = 2;\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 {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\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, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_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, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseIsEqualDeep.js\n ** module id = 127\n ** module chunks = 0\n **/","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_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, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\nmodule.exports = baseIsMatch;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseIsMatch.js\n ** module id = 128\n ** module chunks = 0\n **/","var isFunction = require('./isFunction'),\n isHostObject = require('./_isHostObject'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\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) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseIsNative.js\n ** module id = 129\n ** module chunks = 0\n **/","var isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\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/** 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 objectToString = objectProto.toString;\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[objectToString.call(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseIsTypedArray.js\n ** module id = 130\n ** module chunks = 0\n **/","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseKeys.js\n ** module id = 131\n ** module chunks = 0\n **/","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseMatches.js\n ** module id = 132\n ** module chunks = 0\n **/","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_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, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);\n };\n}\n\nmodule.exports = baseMatchesProperty;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseMatchesProperty.js\n ** module id = 133\n ** module chunks = 0\n **/","var Stack = require('./_Stack'),\n arrayEach = require('./_arrayEach'),\n assignMergeValue = require('./_assignMergeValue'),\n baseKeysIn = require('./_baseKeysIn'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isArray = require('./isArray'),\n isObject = require('./isObject'),\n isTypedArray = require('./isTypedArray');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n if (!(isArray(source) || isTypedArray(source))) {\n var props = baseKeysIn(source);\n }\n arrayEach(props || source, function(srcValue, key) {\n if (props) {\n key = srcValue;\n srcValue = source[key];\n }\n if (isObject(srcValue)) {\n stack || (stack = new Stack);\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(object[key], srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n });\n}\n\nmodule.exports = baseMerge;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseMerge.js\n ** module id = 134\n ** module chunks = 0\n **/","var assignMergeValue = require('./_assignMergeValue'),\n baseClone = require('./_baseClone'),\n copyArray = require('./_copyArray'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = object[key],\n srcValue = source[key],\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n newValue = srcValue;\n if (isArray(srcValue) || isTypedArray(srcValue)) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else {\n isCommon = false;\n newValue = baseClone(srcValue, true);\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\n isCommon = false;\n newValue = baseClone(srcValue, true);\n }\n else {\n newValue = objValue;\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseMergeDeep.js\n ** module id = 135\n ** module chunks = 0\n **/","var basePickBy = require('./_basePickBy');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} props The property identifiers to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, props) {\n object = Object(object);\n return basePickBy(object, props, function(value, key) {\n return key in object;\n });\n}\n\nmodule.exports = basePick;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_basePick.js\n ** module id = 136\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseProperty.js\n ** module id = 137\n ** module chunks = 0\n **/","var baseGet = require('./_baseGet');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_basePropertyDeep.js\n ** module id = 138\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseTimes.js\n ** module id = 139\n ** module chunks = 0\n **/","var Symbol = require('./_Symbol'),\n isSymbol = require('./isSymbol');\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 (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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseToString.js\n ** module id = 140\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_baseUnary.js\n ** module id = 141\n ** module chunks = 0\n **/","/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var result = new buffer.constructor(buffer.length);\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_cloneBuffer.js\n ** module id = 142\n ** module chunks = 0\n **/","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_cloneDataView.js\n ** module id = 143\n ** module chunks = 0\n **/","var addMapEntry = require('./_addMapEntry'),\n arrayReduce = require('./_arrayReduce'),\n mapToArray = require('./_mapToArray');\n\n/**\n * Creates a clone of `map`.\n *\n * @private\n * @param {Object} map The map to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned map.\n */\nfunction cloneMap(map, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);\n return arrayReduce(array, addMapEntry, new map.constructor);\n}\n\nmodule.exports = cloneMap;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_cloneMap.js\n ** module id = 144\n ** module chunks = 0\n **/","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nmodule.exports = cloneRegExp;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_cloneRegExp.js\n ** module id = 145\n ** module chunks = 0\n **/","var addSetEntry = require('./_addSetEntry'),\n arrayReduce = require('./_arrayReduce'),\n setToArray = require('./_setToArray');\n\n/**\n * Creates a clone of `set`.\n *\n * @private\n * @param {Object} set The set to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned set.\n */\nfunction cloneSet(set, isDeep, cloneFunc) {\n var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);\n return arrayReduce(array, addSetEntry, new set.constructor);\n}\n\nmodule.exports = cloneSet;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_cloneSet.js\n ** module id = 146\n ** module chunks = 0\n **/","var Symbol = require('./_Symbol');\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 * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_cloneSymbol.js\n ** module id = 147\n ** module chunks = 0\n **/","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_cloneTypedArray.js\n ** module id = 148\n ** module chunks = 0\n **/","var copyObject = require('./_copyObject'),\n getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbol properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_copySymbols.js\n ** module id = 149\n ** module chunks = 0\n **/","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_coreJsData.js\n ** module id = 150\n ** module chunks = 0\n **/","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_createAssigner.js\n ** module id = 151\n ** module chunks = 0\n **/","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_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 {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\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, equalFunc, customizer, bitmask, 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 & PARTIAL_COMPARE_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 |= UNORDERED_COMPARE_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, 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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_equalByTag.js\n ** module id = 152\n ** module chunks = 0\n **/","var keys = require('./keys');\n\n/** Used to compose bitmasks for comparison styles. */\nvar PARTIAL_COMPARE_FLAG = 2;\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 {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\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, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(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 // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\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, customizer, bitmask, 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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_equalObjects.js\n ** module id = 153\n ** module chunks = 0\n **/","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_getAllKeys.js\n ** module id = 154\n ** module chunks = 0\n **/","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * 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 getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_getAllKeysIn.js\n ** module id = 155\n ** module chunks = 0\n **/","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_getMatchData.js\n ** module id = 156\n ** module chunks = 0\n **/","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\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 and inherited enumerable symbol properties\n * of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_getSymbolsIn.js\n ** module id = 157\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_getValue.js\n ** module id = 158\n ** module chunks = 0\n **/","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isKey = require('./_isKey'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\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 = isKey(path, object) ? [path] : castPath(path);\n\n var result,\n index = -1,\n length = path.length;\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) {\n return result;\n }\n var length = object ? object.length : 0;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nmodule.exports = hasPath;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_hasPath.js\n ** module id = 159\n ** module chunks = 0\n **/","var nativeCreate = require('./_nativeCreate');\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}\n\nmodule.exports = hashClear;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_hashClear.js\n ** module id = 160\n ** module chunks = 0\n **/","/**\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 return this.has(key) && delete this.__data__[key];\n}\n\nmodule.exports = hashDelete;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_hashDelete.js\n ** module id = 161\n ** module chunks = 0\n **/","var nativeCreate = require('./_nativeCreate');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_hashGet.js\n ** module id = 162\n ** module chunks = 0\n **/","var nativeCreate = require('./_nativeCreate');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_hashHas.js\n ** module id = 163\n ** module chunks = 0\n **/","var nativeCreate = require('./_nativeCreate');\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 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_hashSet.js\n ** module id = 164\n ** module chunks = 0\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 * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n var length = array.length,\n result = array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n}\n\nmodule.exports = initCloneArray;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_initCloneArray.js\n ** module id = 165\n ** module chunks = 0\n **/","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n cloneDataView = require('./_cloneDataView'),\n cloneMap = require('./_cloneMap'),\n cloneRegExp = require('./_cloneRegExp'),\n cloneSet = require('./_cloneSet'),\n cloneSymbol = require('./_cloneSymbol'),\n cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\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 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/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {Function} cloneFunc The function to clone values.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, cloneFunc, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return cloneMap(object, isDeep, cloneFunc);\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return cloneSet(object, isDeep, cloneFunc);\n\n case symbolTag:\n return cloneSymbol(object);\n }\n}\n\nmodule.exports = initCloneByTag;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_initCloneByTag.js\n ** module id = 166\n ** module chunks = 0\n **/","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_initCloneObject.js\n ** module id = 167\n ** module chunks = 0\n **/","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_isFlattenable.js\n ** module id = 168\n ** module chunks = 0\n **/","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_isIterateeCall.js\n ** module id = 169\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_isKeyable.js\n ** module id = 170\n ** module chunks = 0\n **/","var coreJsData = require('./_coreJsData');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_isMasked.js\n ** module id = 171\n ** module chunks = 0\n **/","/**\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}\n\nmodule.exports = listCacheClear;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_listCacheClear.js\n ** module id = 172\n ** module chunks = 0\n **/","var assocIndexOf = require('./_assocIndexOf');\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 return true;\n}\n\nmodule.exports = listCacheDelete;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_listCacheDelete.js\n ** module id = 173\n ** module chunks = 0\n **/","var assocIndexOf = require('./_assocIndexOf');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_listCacheGet.js\n ** module id = 174\n ** module chunks = 0\n **/","var assocIndexOf = require('./_assocIndexOf');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_listCacheHas.js\n ** module id = 175\n ** module chunks = 0\n **/","var assocIndexOf = require('./_assocIndexOf');\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 data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_listCacheSet.js\n ** module id = 176\n ** module chunks = 0\n **/","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\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.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_mapCacheClear.js\n ** module id = 177\n ** module chunks = 0\n **/","var getMapData = require('./_getMapData');\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 return getMapData(this, key)['delete'](key);\n}\n\nmodule.exports = mapCacheDelete;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_mapCacheDelete.js\n ** module id = 178\n ** module chunks = 0\n **/","var getMapData = require('./_getMapData');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_mapCacheGet.js\n ** module id = 179\n ** module chunks = 0\n **/","var getMapData = require('./_getMapData');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_mapCacheHas.js\n ** module id = 180\n ** module chunks = 0\n **/","var getMapData = require('./_getMapData');\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 getMapData(this, key).set(key, value);\n return this;\n}\n\nmodule.exports = mapCacheSet;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_mapCacheSet.js\n ** module id = 181\n ** module chunks = 0\n **/","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_nativeKeysIn.js\n ** module id = 182\n ** module chunks = 0\n **/","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && 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 return freeProcess && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_nodeUtil.js\n ** module id = 183\n ** module chunks = 0\n **/","/** 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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_setCacheAdd.js\n ** module id = 184\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_setCacheHas.js\n ** module id = 185\n ** module chunks = 0\n **/","var ListCache = require('./_ListCache');\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}\n\nmodule.exports = stackClear;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_stackClear.js\n ** module id = 186\n ** module chunks = 0\n **/","/**\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 return this.__data__['delete'](key);\n}\n\nmodule.exports = stackDelete;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_stackDelete.js\n ** module id = 187\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_stackGet.js\n ** module id = 188\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_stackHas.js\n ** module id = 189\n ** module chunks = 0\n **/","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\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 cache = this.__data__;\n if (cache instanceof ListCache) {\n var pairs = cache.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n return this;\n }\n cache = this.__data__ = new MapCache(pairs);\n }\n cache.set(key, value);\n return this;\n}\n\nmodule.exports = stackSet;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_stackSet.js\n ** module id = 190\n ** module chunks = 0\n **/","var memoize = require('./memoize'),\n toString = require('./toString');\n\n/** Used to match property names within property paths. */\nvar reLeadingDot = /^\\./,\n 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 = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/_stringToPath.js\n ** module id = 191\n ** module chunks = 0\n **/","var baseGet = require('./_baseGet');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/get.js\n ** module id = 192\n ** module chunks = 0\n **/","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/hasIn.js\n ** module id = 193\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/identity.js\n ** module id = 194\n ** module chunks = 0\n **/","var getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\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/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */\nvar nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf');\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\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 empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' ||\n typeof value.splice == 'function' || isBuffer(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (nonEnumShadows || isPrototype(value)) {\n return !nativeKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isEmpty.js\n ** module id = 195\n ** module chunks = 0\n **/","var getPrototype = require('./_getPrototype'),\n isHostObject = require('./_isHostObject'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\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 infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\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 objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) ||\n objectToString.call(value) != objectTag || isHostObject(value)) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return (typeof Ctor == 'function' &&\n Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nmodule.exports = isPlainObject;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/isPlainObject.js\n ** module id = 196\n ** module chunks = 0\n **/","var MapCache = require('./_MapCache');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\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 `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 && 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);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/memoize.js\n ** module id = 197\n ** module chunks = 0\n **/","/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\nfunction negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n}\n\nmodule.exports = negate;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/negate.js\n ** module id = 198\n ** module chunks = 0\n **/","var baseIteratee = require('./_baseIteratee'),\n negate = require('./negate'),\n pickBy = require('./pickBy');\n\n/**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\nfunction omitBy(object, predicate) {\n return pickBy(object, negate(baseIteratee(predicate)));\n}\n\nmodule.exports = omitBy;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/omitBy.js\n ** module id = 199\n ** module chunks = 0\n **/","var baseIteratee = require('./_baseIteratee'),\n basePickBy = require('./_basePickBy'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n return object == null ? {} : basePickBy(object, getAllKeysIn(object), baseIteratee(predicate));\n}\n\nmodule.exports = pickBy;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/pickBy.js\n ** module id = 200\n ** module chunks = 0\n **/","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/property.js\n ** module id = 201\n ** module chunks = 0\n **/","/**\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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/stubFalse.js\n ** module id = 202\n ** module chunks = 0\n **/","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/toPlainObject.js\n ** module id = 203\n ** module chunks = 0\n **/","var baseToString = require('./_baseToString');\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 process.\n * @returns {string} Returns the 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\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash/toString.js\n ** module id = 204\n ** module chunks = 0\n **/"," /* eslint-env node */\n'use strict';\n\n// SDP helpers.\nvar SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substr(2, 10);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(function(line) {\n return line.trim();\n });\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n var parts = blob.split('\\nm=');\n return parts.map(function(part, index) {\n return (index > 0 ? 'm=' + part : part).trim() + '\\r\\n';\n });\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(function(line) {\n return line.indexOf(prefix) === 0;\n });\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\nSDPUtils.parseCandidate = function(line) {\n var parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n var candidate = {\n foundation: parts[0],\n component: parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7]\n };\n\n for (var i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n default: // Unknown extensions are silently ignored.\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\nSDPUtils.writeCandidate = function(candidate) {\n var sdp = [];\n sdp.push(candidate.foundation);\n sdp.push(candidate.component);\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.ip);\n sdp.push(candidate.port);\n\n var type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress); // was: relAddr\n sdp.push('rport');\n sdp.push(candidate.relatedPort); // was: relPort\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n var parts = line.substr(9).split(' ');\n var parsed = {\n payloadType: parseInt(parts.shift(), 10) // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n // was: channels\n parsed.numChannels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n return parsed;\n};\n\n// Generate an a=rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (codec.numChannels !== 1 ? '/' + codec.numChannels : '') + '\\r\\n';\n};\n\n// Parses an a=extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n var parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n uri: parts[1]\n };\n};\n\n// Generates a=extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n ' ' + headerExtension.uri + '\\r\\n';\n};\n\n// Parses an ftmp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n var parsed = {};\n var kv;\n var parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (var j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n var line = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n var params = [];\n Object.keys(codec.parameters).forEach(function(param) {\n params.push(param + '=' + codec.parameters[param]);\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n var parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' ')\n };\n};\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n var lines = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(function(fb) {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses an RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n var sp = line.indexOf(' ');\n var parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10)\n };\n var colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n var lines = SDPUtils.splitLines(mediaSection);\n // Search in session part, too.\n lines = lines.concat(SDPUtils.splitLines(sessionpart));\n var fpLine = lines.filter(function(line) {\n return line.indexOf('a=fingerprint:') === 0;\n })[0].substr(14);\n // Note: a=setup line is ignored since we use the 'auto' role.\n var dtlsParameters = {\n role: 'auto',\n fingerprints: [{\n algorithm: fpLine.split(' ')[0],\n value: fpLine.split(' ')[1]\n }]\n };\n return dtlsParameters;\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n var sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(function(fp) {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n var lines = SDPUtils.splitLines(mediaSection);\n // Search in session part, too.\n lines = lines.concat(SDPUtils.splitLines(sessionpart));\n var iceParameters = {\n usernameFragment: lines.filter(function(line) {\n return line.indexOf('a=ice-ufrag:') === 0;\n })[0].substr(12),\n password: lines.filter(function(line) {\n return line.indexOf('a=ice-pwd:') === 0;\n })[0].substr(10)\n };\n return iceParameters;\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n return 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n var description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: []\n };\n var lines = SDPUtils.splitLines(mediaSection);\n var mline = lines[0].split(' ');\n for (var i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n var pt = mline[i];\n var rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n var codec = SDPUtils.parseRtpMap(rtpmapline);\n var fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp: is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function(line) {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n var sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(function(codec) {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(function(codec) {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n // FIXME: add headerExtensions, fecMechanismş and rtcp.\n sdp += 'a=rtcp-mux\\r\\n';\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n var encodingParameters = [];\n var description = SDPUtils.parseRtpParameters(mediaSection);\n var hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(function(line) {\n return SDPUtils.parseSsrcMedia(line);\n })\n .filter(function(parts) {\n return parts.attribute === 'cname';\n });\n var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n var secondarySsrc;\n\n var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(function(line) {\n var parts = line.split(' ');\n parts.shift();\n return parts.map(function(part) {\n return parseInt(part, 10);\n });\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(function(codec) {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n var encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10),\n rtx: {\n payloadType: codec.payloadType,\n ssrc: secondarySsrc\n }\n };\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: secondarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red'\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(5), 10);\n }\n encodingParameters.forEach(function(params) {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\nSDPUtils.writeSessionBoilerplate = function() {\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=thisisadapterortc 8169639915646943137 2 IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\nSDPUtils.writeMediaSection = function(transceiver, caps, type, stream) {\n var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps);\n\n // Map ICE parameters (ufrag, pwd) to SDP.\n sdp += SDPUtils.writeIceParameters(\n transceiver.iceGatherer.getLocalParameters());\n\n // Map DTLS parameters to SDP.\n sdp += SDPUtils.writeDtlsParameters(\n transceiver.dtlsTransport.getLocalParameters(),\n type === 'offer' ? 'actpass' : 'active');\n\n sdp += 'a=mid:' + transceiver.mid + '\\r\\n';\n\n if (transceiver.rtpSender && transceiver.rtpReceiver) {\n sdp += 'a=sendrecv\\r\\n';\n } else if (transceiver.rtpSender) {\n sdp += 'a=sendonly\\r\\n';\n } else if (transceiver.rtpReceiver) {\n sdp += 'a=recvonly\\r\\n';\n } else {\n sdp += 'a=inactive\\r\\n';\n }\n\n // FIXME: for RTX there might be multiple SSRCs. Not implemented in Edge yet.\n if (transceiver.rtpSender) {\n var msid = 'msid:' + stream.id + ' ' +\n transceiver.rtpSender.track.id + '\\r\\n';\n sdp += 'a=' + msid;\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' ' + msid;\n }\n // FIXME: this should be written by writeRtpDescription.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n return sdp;\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n var lines = SDPUtils.splitLines(mediaSection);\n for (var i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substr(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\n// Expose public methods.\nmodule.exports = SDPUtils;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/sdp/sdp.js\n ** module id = 205\n ** module chunks = 0\n **/","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n\n'use strict';\n\n// Shimming starts here.\n(function() {\n // Utils.\n var logging = require('./utils').log;\n var browserDetails = require('./utils').browserDetails;\n // Export to the adapter global object visible in the browser.\n module.exports.browserDetails = browserDetails;\n module.exports.extractVersion = require('./utils').extractVersion;\n module.exports.disableLog = require('./utils').disableLog;\n\n // Uncomment the line below if you want logging to occur, including logging\n // for the switch statement below. Can also be turned on in the browser via\n // adapter.disableLog(false), but then logging from the switch statement below\n // will not appear.\n // require('./utils').disableLog(false);\n\n // Browser shims.\n var chromeShim = require('./chrome/chrome_shim') || null;\n var edgeShim = require('./edge/edge_shim') || null;\n var firefoxShim = require('./firefox/firefox_shim') || null;\n var safariShim = require('./safari/safari_shim') || null;\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'opera': // fallthrough as it uses chrome shims\n case 'chrome':\n if (!chromeShim || !chromeShim.shimPeerConnection) {\n logging('Chrome shim is not included in this adapter release.');\n return;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n module.exports.browserShim = chromeShim;\n\n chromeShim.shimGetUserMedia();\n chromeShim.shimMediaStream();\n chromeShim.shimSourceObject();\n chromeShim.shimPeerConnection();\n chromeShim.shimOnTrack();\n break;\n case 'firefox':\n if (!firefoxShim || !firefoxShim.shimPeerConnection) {\n logging('Firefox shim is not included in this adapter release.');\n return;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n module.exports.browserShim = firefoxShim;\n\n firefoxShim.shimGetUserMedia();\n firefoxShim.shimSourceObject();\n firefoxShim.shimPeerConnection();\n firefoxShim.shimOnTrack();\n break;\n case 'edge':\n if (!edgeShim || !edgeShim.shimPeerConnection) {\n logging('MS edge shim is not included in this adapter release.');\n return;\n }\n logging('adapter.js shimming edge.');\n // Export to the adapter global object visible in the browser.\n module.exports.browserShim = edgeShim;\n\n edgeShim.shimGetUserMedia();\n edgeShim.shimPeerConnection();\n break;\n case 'safari':\n if (!safariShim) {\n logging('Safari shim is not included in this adapter release.');\n return;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n module.exports.browserShim = safariShim;\n\n safariShim.shimGetUserMedia();\n break;\n default:\n logging('Unsupported browser!');\n }\n})();\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/webrtc-adapter/src/js/adapter_core.js\n ** module id = 206\n ** module chunks = 0\n **/","\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\nvar logging = require('../utils.js').log;\nvar browserDetails = require('../utils.js').browserDetails;\n\nvar chromeShim = {\n shimMediaStream: function() {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n },\n\n shimOnTrack: function() {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get: function() {\n return this._ontrack;\n },\n set: function(f) {\n var self = this;\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n this.removeEventListener('addstream', this._ontrackpoly);\n }\n this.addEventListener('track', this._ontrack = f);\n this.addEventListener('addstream', this._ontrackpoly = function(e) {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', function(te) {\n var event = new Event('track');\n event.track = te.track;\n event.receiver = {track: te.track};\n event.streams = [e.stream];\n self.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(function(track) {\n var event = new Event('track');\n event.track = track;\n event.receiver = {track: track};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n }.bind(this));\n }.bind(this));\n }\n });\n }\n },\n\n shimSourceObject: function() {\n if (typeof window === 'object') {\n if (window.HTMLMediaElement &&\n !('srcObject' in window.HTMLMediaElement.prototype)) {\n // Shim the srcObject property, once, when HTMLMediaElement is found.\n Object.defineProperty(window.HTMLMediaElement.prototype, 'srcObject', {\n get: function() {\n return this._srcObject;\n },\n set: function(stream) {\n var self = this;\n // Use _srcObject as a private property for this shim\n this._srcObject = stream;\n if (this.src) {\n URL.revokeObjectURL(this.src);\n }\n\n if (!stream) {\n this.src = '';\n return;\n }\n this.src = URL.createObjectURL(stream);\n // We need to recreate the blob url when a track is added or\n // removed. Doing it manually since we want to avoid a recursion.\n stream.addEventListener('addtrack', function() {\n if (self.src) {\n URL.revokeObjectURL(self.src);\n }\n self.src = URL.createObjectURL(stream);\n });\n stream.addEventListener('removetrack', function() {\n if (self.src) {\n URL.revokeObjectURL(self.src);\n }\n self.src = URL.createObjectURL(stream);\n });\n }\n });\n }\n }\n },\n\n shimPeerConnection: function() {\n // The RTCPeerConnection object.\n window.RTCPeerConnection = function(pcConfig, pcConstraints) {\n // Translate iceTransportPolicy to iceTransports,\n // see https://code.google.com/p/webrtc/issues/detail?id=4869\n logging('PeerConnection');\n if (pcConfig && pcConfig.iceTransportPolicy) {\n pcConfig.iceTransports = pcConfig.iceTransportPolicy;\n }\n\n var pc = new webkitRTCPeerConnection(pcConfig, pcConstraints);\n var origGetStats = pc.getStats.bind(pc);\n pc.getStats = function(selector, successCallback, errorCallback) {\n var self = this;\n var args = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats(selector, successCallback);\n }\n\n var fixChromeStats_ = function(response) {\n var standardReport = {};\n var reports = response.result();\n reports.forEach(function(report) {\n var standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: report.type\n };\n report.names().forEach(function(name) {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n\n return standardReport;\n };\n\n // shim getStats with maplike support\n var makeMapStats = function(stats, legacyStats) {\n var map = new Map(Object.keys(stats).map(function(key) {\n return[key, stats[key]];\n }));\n legacyStats = legacyStats || stats;\n Object.keys(legacyStats).forEach(function(key) {\n map[key] = legacyStats[key];\n });\n return map;\n };\n\n if (arguments.length >= 2) {\n var successCallbackWrapper_ = function(response) {\n args[1](makeMapStats(fixChromeStats_(response)));\n };\n\n return origGetStats.apply(this, [successCallbackWrapper_,\n arguments[0]]);\n }\n\n // promise-support\n return new Promise(function(resolve, reject) {\n if (args.length === 1 && typeof selector === 'object') {\n origGetStats.apply(self, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n } else {\n // Preserve legacy chrome stats only on legacy access of stats obj\n origGetStats.apply(self, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response),\n response.result()));\n }, reject]);\n }\n }).then(successCallback, errorCallback);\n };\n\n return pc;\n };\n window.RTCPeerConnection.prototype = webkitRTCPeerConnection.prototype;\n\n // wrap static methods. Currently just generateCertificate.\n if (webkitRTCPeerConnection.generateCertificate) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get: function() {\n return webkitRTCPeerConnection.generateCertificate;\n }\n });\n }\n\n ['createOffer', 'createAnswer'].forEach(function(method) {\n var nativeMethod = webkitRTCPeerConnection.prototype[method];\n webkitRTCPeerConnection.prototype[method] = function() {\n var self = this;\n if (arguments.length < 1 || (arguments.length === 1 &&\n typeof arguments[0] === 'object')) {\n var opts = arguments.length === 1 ? arguments[0] : undefined;\n return new Promise(function(resolve, reject) {\n nativeMethod.apply(self, [resolve, reject, opts]);\n });\n }\n return nativeMethod.apply(this, arguments);\n };\n });\n\n // add promise support -- natively available in Chrome 51\n if (browserDetails.version < 51) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n var nativeMethod = webkitRTCPeerConnection.prototype[method];\n webkitRTCPeerConnection.prototype[method] = function() {\n var args = arguments;\n var self = this;\n var promise = new Promise(function(resolve, reject) {\n nativeMethod.apply(self, [args[0], resolve, reject]);\n });\n if (args.length < 2) {\n return promise;\n }\n return promise.then(function() {\n args[1].apply(null, []);\n },\n function(err) {\n if (args.length >= 3) {\n args[2].apply(null, [err]);\n }\n });\n };\n });\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n var nativeMethod = webkitRTCPeerConnection.prototype[method];\n webkitRTCPeerConnection.prototype[method] = function() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n RTCIceCandidate : RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n };\n });\n\n // support for addIceCandidate(null)\n var nativeAddIceCandidate =\n RTCPeerConnection.prototype.addIceCandidate;\n RTCPeerConnection.prototype.addIceCandidate = function() {\n return arguments[0] === null ? Promise.resolve()\n : nativeAddIceCandidate.apply(this, arguments);\n };\n }\n};\n\n\n// Expose public methods.\nmodule.exports = {\n shimMediaStream: chromeShim.shimMediaStream,\n shimOnTrack: chromeShim.shimOnTrack,\n shimSourceObject: chromeShim.shimSourceObject,\n shimPeerConnection: chromeShim.shimPeerConnection,\n shimGetUserMedia: require('./getusermedia')\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/webrtc-adapter/src/js/chrome/chrome_shim.js\n ** module id = 207\n ** module chunks = 0\n **/","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\nvar logging = require('../utils.js').log;\n\n// Expose public methods.\nmodule.exports = function() {\n var constraintsToChrome_ = function(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n var cc = {};\n Object.keys(c).forEach(function(key) {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n var r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n var oldname_ = function(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return (name === 'deviceId') ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n var oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(function(mix) {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n\n var shimConstraints_ = function(constraints, func) {\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && constraints.audio) {\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile, where it defaults to \"user\".\n var face = constraints.video.facingMode;\n face = face && ((typeof face === 'object') ? face : {ideal: face});\n\n if ((face && (face.exact === 'user' || face.exact === 'environment' ||\n face.ideal === 'user' || face.ideal === 'environment')) &&\n !(navigator.mediaDevices.getSupportedConstraints &&\n navigator.mediaDevices.getSupportedConstraints().facingMode)) {\n delete constraints.video.facingMode;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n // Look for \"back\" in label, or use last cam (typically back cam).\n return navigator.mediaDevices.enumerateDevices()\n .then(function(devices) {\n devices = devices.filter(function(d) {\n return d.kind === 'videoinput';\n });\n var back = devices.find(function(d) {\n return d.label.toLowerCase().indexOf('back') !== -1;\n }) || (devices.length && devices[devices.length - 1]);\n if (back) {\n constraints.video.deviceId = face.exact ? {exact: back.deviceId} :\n {ideal: back.deviceId};\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n\n var shimError_ = function(e) {\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n ConstraintNotSatisfiedError: 'OverconstrainedError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraintName,\n toString: function() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n var getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, function(c) {\n navigator.webkitGetUserMedia(c, onSuccess, function(e) {\n onError(shimError_(e));\n });\n });\n };\n\n navigator.getUserMedia = getUserMedia_;\n\n // Returns the result of getUserMedia as a Promise.\n var getUserMediaPromise_ = function(constraints) {\n return new Promise(function(resolve, reject) {\n navigator.getUserMedia(constraints, resolve, reject);\n });\n };\n\n if (!navigator.mediaDevices) {\n navigator.mediaDevices = {\n getUserMedia: getUserMediaPromise_,\n enumerateDevices: function() {\n return new Promise(function(resolve) {\n var kinds = {audio: 'audioinput', video: 'videoinput'};\n return MediaStreamTrack.getSources(function(devices) {\n resolve(devices.map(function(device) {\n return {label: device.label,\n kind: kinds[device.kind],\n deviceId: device.id,\n groupId: ''};\n }));\n });\n });\n }\n };\n }\n\n // A shim for getUserMedia method on the mediaDevices object.\n // TODO(KaptenJansson) remove once implemented in Chrome stable.\n if (!navigator.mediaDevices.getUserMedia) {\n navigator.mediaDevices.getUserMedia = function(constraints) {\n return getUserMediaPromise_(constraints);\n };\n } else {\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n var origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, function(c) {\n return origGetUserMedia(c).catch(function(e) {\n return Promise.reject(shimError_(e));\n });\n });\n };\n }\n\n // Dummy devicechange event methods.\n // TODO(KaptenJansson) remove once implemented in Chrome stable.\n if (typeof navigator.mediaDevices.addEventListener === 'undefined') {\n navigator.mediaDevices.addEventListener = function() {\n logging('Dummy mediaDevices.addEventListener called.');\n };\n }\n if (typeof navigator.mediaDevices.removeEventListener === 'undefined') {\n navigator.mediaDevices.removeEventListener = function() {\n logging('Dummy mediaDevices.removeEventListener called.');\n };\n }\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/webrtc-adapter/src/js/chrome/getusermedia.js\n ** module id = 208\n ** module chunks = 0\n **/","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\n\nvar SDPUtils = require('sdp');\nvar browserDetails = require('../utils').browserDetails;\n\nvar edgeShim = {\n shimPeerConnection: function() {\n if (window.RTCIceGatherer) {\n // ORTC defines an RTCIceCandidate object but no constructor.\n // Not implemented in Edge.\n if (!window.RTCIceCandidate) {\n window.RTCIceCandidate = function(args) {\n return args;\n };\n }\n // ORTC does not have a session description object but\n // other browsers (i.e. Chrome) that will support both PC and ORTC\n // in the future might have this defined already.\n if (!window.RTCSessionDescription) {\n window.RTCSessionDescription = function(args) {\n return args;\n };\n }\n }\n\n window.RTCPeerConnection = function(config) {\n var self = this;\n\n var _eventTarget = document.createDocumentFragment();\n ['addEventListener', 'removeEventListener', 'dispatchEvent']\n .forEach(function(method) {\n self[method] = _eventTarget[method].bind(_eventTarget);\n });\n\n this.onicecandidate = null;\n this.onaddstream = null;\n this.ontrack = null;\n this.onremovestream = null;\n this.onsignalingstatechange = null;\n this.oniceconnectionstatechange = null;\n this.onnegotiationneeded = null;\n this.ondatachannel = null;\n\n this.localStreams = [];\n this.remoteStreams = [];\n this.getLocalStreams = function() {\n return self.localStreams;\n };\n this.getRemoteStreams = function() {\n return self.remoteStreams;\n };\n\n this.localDescription = new RTCSessionDescription({\n type: '',\n sdp: ''\n });\n this.remoteDescription = new RTCSessionDescription({\n type: '',\n sdp: ''\n });\n this.signalingState = 'stable';\n this.iceConnectionState = 'new';\n this.iceGatheringState = 'new';\n\n this.iceOptions = {\n gatherPolicy: 'all',\n iceServers: []\n };\n if (config && config.iceTransportPolicy) {\n switch (config.iceTransportPolicy) {\n case 'all':\n case 'relay':\n this.iceOptions.gatherPolicy = config.iceTransportPolicy;\n break;\n case 'none':\n // FIXME: remove once implementation and spec have added this.\n throw new TypeError('iceTransportPolicy \"none\" not supported');\n default:\n // don't set iceTransportPolicy.\n break;\n }\n }\n this.usingBundle = config && config.bundlePolicy === 'max-bundle';\n\n if (config && config.iceServers) {\n // Edge does not like\n // 1) stun:\n // 2) turn: that does not have all of turn:host:port?transport=udp\n // 3) turn: with ipv6 addresses\n var iceServers = JSON.parse(JSON.stringify(config.iceServers));\n this.iceOptions.iceServers = iceServers.filter(function(server) {\n if (server && server.urls) {\n var urls = server.urls;\n if (typeof urls === 'string') {\n urls = [urls];\n }\n urls = urls.filter(function(url) {\n return (url.indexOf('turn:') === 0 &&\n url.indexOf('transport=udp') !== -1 &&\n url.indexOf('turn:[') === -1) ||\n (url.indexOf('stun:') === 0 &&\n browserDetails.version >= 14393);\n })[0];\n return !!urls;\n }\n return false;\n });\n }\n\n // per-track iceGathers, iceTransports, dtlsTransports, rtpSenders, ...\n // everything that is needed to describe a SDP m-line.\n this.transceivers = [];\n\n // since the iceGatherer is currently created in createOffer but we\n // must not emit candidates until after setLocalDescription we buffer\n // them in this array.\n this._localIceCandidatesBuffer = [];\n };\n\n window.RTCPeerConnection.prototype._emitBufferedCandidates = function() {\n var self = this;\n var sections = SDPUtils.splitSections(self.localDescription.sdp);\n // FIXME: need to apply ice candidates in a way which is async but\n // in-order\n this._localIceCandidatesBuffer.forEach(function(event) {\n var end = !event.candidate || Object.keys(event.candidate).length === 0;\n if (end) {\n for (var j = 1; j < sections.length; j++) {\n if (sections[j].indexOf('\\r\\na=end-of-candidates\\r\\n') === -1) {\n sections[j] += 'a=end-of-candidates\\r\\n';\n }\n }\n } else if (event.candidate.candidate.indexOf('typ endOfCandidates')\n === -1) {\n sections[event.candidate.sdpMLineIndex + 1] +=\n 'a=' + event.candidate.candidate + '\\r\\n';\n }\n self.localDescription.sdp = sections.join('');\n self.dispatchEvent(event);\n if (self.onicecandidate !== null) {\n self.onicecandidate(event);\n }\n if (!event.candidate && self.iceGatheringState !== 'complete') {\n var complete = self.transceivers.every(function(transceiver) {\n return transceiver.iceGatherer &&\n transceiver.iceGatherer.state === 'completed';\n });\n if (complete) {\n self.iceGatheringState = 'complete';\n }\n }\n });\n this._localIceCandidatesBuffer = [];\n };\n\n window.RTCPeerConnection.prototype.addStream = function(stream) {\n // Clone is necessary for local demos mostly, attaching directly\n // to two different senders does not work (build 10547).\n this.localStreams.push(stream.clone());\n this._maybeFireNegotiationNeeded();\n };\n\n window.RTCPeerConnection.prototype.removeStream = function(stream) {\n var idx = this.localStreams.indexOf(stream);\n if (idx > -1) {\n this.localStreams.splice(idx, 1);\n this._maybeFireNegotiationNeeded();\n }\n };\n\n window.RTCPeerConnection.prototype.getSenders = function() {\n return this.transceivers.filter(function(transceiver) {\n return !!transceiver.rtpSender;\n })\n .map(function(transceiver) {\n return transceiver.rtpSender;\n });\n };\n\n window.RTCPeerConnection.prototype.getReceivers = function() {\n return this.transceivers.filter(function(transceiver) {\n return !!transceiver.rtpReceiver;\n })\n .map(function(transceiver) {\n return transceiver.rtpReceiver;\n });\n };\n\n // Determines the intersection of local and remote capabilities.\n window.RTCPeerConnection.prototype._getCommonCapabilities =\n function(localCapabilities, remoteCapabilities) {\n var commonCapabilities = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: []\n };\n localCapabilities.codecs.forEach(function(lCodec) {\n for (var i = 0; i < remoteCapabilities.codecs.length; i++) {\n var rCodec = remoteCapabilities.codecs[i];\n if (lCodec.name.toLowerCase() === rCodec.name.toLowerCase() &&\n lCodec.clockRate === rCodec.clockRate &&\n lCodec.numChannels === rCodec.numChannels) {\n // push rCodec so we reply with offerer payload type\n commonCapabilities.codecs.push(rCodec);\n\n // determine common feedback mechanisms\n rCodec.rtcpFeedback = rCodec.rtcpFeedback.filter(function(fb) {\n for (var j = 0; j < lCodec.rtcpFeedback.length; j++) {\n if (lCodec.rtcpFeedback[j].type === fb.type &&\n lCodec.rtcpFeedback[j].parameter === fb.parameter) {\n return true;\n }\n }\n return false;\n });\n // FIXME: also need to determine .parameters\n // see https://github.com/openpeer/ortc/issues/569\n break;\n }\n }\n });\n\n localCapabilities.headerExtensions\n .forEach(function(lHeaderExtension) {\n for (var i = 0; i < remoteCapabilities.headerExtensions.length;\n i++) {\n var rHeaderExtension = remoteCapabilities.headerExtensions[i];\n if (lHeaderExtension.uri === rHeaderExtension.uri) {\n commonCapabilities.headerExtensions.push(rHeaderExtension);\n break;\n }\n }\n });\n\n // FIXME: fecMechanisms\n return commonCapabilities;\n };\n\n // Create ICE gatherer, ICE transport and DTLS transport.\n window.RTCPeerConnection.prototype._createIceAndDtlsTransports =\n function(mid, sdpMLineIndex) {\n var self = this;\n var iceGatherer = new RTCIceGatherer(self.iceOptions);\n var iceTransport = new RTCIceTransport(iceGatherer);\n iceGatherer.onlocalcandidate = function(evt) {\n var event = new Event('icecandidate');\n event.candidate = {sdpMid: mid, sdpMLineIndex: sdpMLineIndex};\n\n var cand = evt.candidate;\n var end = !cand || Object.keys(cand).length === 0;\n // Edge emits an empty object for RTCIceCandidateComplete‥\n if (end) {\n // polyfill since RTCIceGatherer.state is not implemented in\n // Edge 10547 yet.\n if (iceGatherer.state === undefined) {\n iceGatherer.state = 'completed';\n }\n\n // Emit a candidate with type endOfCandidates to make the samples\n // work. Edge requires addIceCandidate with this empty candidate\n // to start checking. The real solution is to signal\n // end-of-candidates to the other side when getting the null\n // candidate but some apps (like the samples) don't do that.\n event.candidate.candidate =\n 'candidate:1 1 udp 1 0.0.0.0 9 typ endOfCandidates';\n } else {\n // RTCIceCandidate doesn't have a component, needs to be added\n cand.component = iceTransport.component === 'RTCP' ? 2 : 1;\n event.candidate.candidate = SDPUtils.writeCandidate(cand);\n }\n\n // update local description.\n var sections = SDPUtils.splitSections(self.localDescription.sdp);\n if (event.candidate.candidate.indexOf('typ endOfCandidates')\n === -1) {\n sections[event.candidate.sdpMLineIndex + 1] +=\n 'a=' + event.candidate.candidate + '\\r\\n';\n } else {\n sections[event.candidate.sdpMLineIndex + 1] +=\n 'a=end-of-candidates\\r\\n';\n }\n self.localDescription.sdp = sections.join('');\n\n var complete = self.transceivers.every(function(transceiver) {\n return transceiver.iceGatherer &&\n transceiver.iceGatherer.state === 'completed';\n });\n\n // Emit candidate if localDescription is set.\n // Also emits null candidate when all gatherers are complete.\n switch (self.iceGatheringState) {\n case 'new':\n self._localIceCandidatesBuffer.push(event);\n if (end && complete) {\n self._localIceCandidatesBuffer.push(\n new Event('icecandidate'));\n }\n break;\n case 'gathering':\n self._emitBufferedCandidates();\n self.dispatchEvent(event);\n if (self.onicecandidate !== null) {\n self.onicecandidate(event);\n }\n if (complete) {\n self.dispatchEvent(new Event('icecandidate'));\n if (self.onicecandidate !== null) {\n self.onicecandidate(new Event('icecandidate'));\n }\n self.iceGatheringState = 'complete';\n }\n break;\n case 'complete':\n // should not happen... currently!\n break;\n default: // no-op.\n break;\n }\n };\n iceTransport.onicestatechange = function() {\n self._updateConnectionState();\n };\n\n var dtlsTransport = new RTCDtlsTransport(iceTransport);\n dtlsTransport.ondtlsstatechange = function() {\n self._updateConnectionState();\n };\n dtlsTransport.onerror = function() {\n // onerror does not set state to failed by itself.\n dtlsTransport.state = 'failed';\n self._updateConnectionState();\n };\n\n return {\n iceGatherer: iceGatherer,\n iceTransport: iceTransport,\n dtlsTransport: dtlsTransport\n };\n };\n\n // Start the RTP Sender and Receiver for a transceiver.\n window.RTCPeerConnection.prototype._transceive = function(transceiver,\n send, recv) {\n var params = this._getCommonCapabilities(transceiver.localCapabilities,\n transceiver.remoteCapabilities);\n if (send && transceiver.rtpSender) {\n params.encodings = transceiver.sendEncodingParameters;\n params.rtcp = {\n cname: SDPUtils.localCName\n };\n if (transceiver.recvEncodingParameters.length) {\n params.rtcp.ssrc = transceiver.recvEncodingParameters[0].ssrc;\n }\n transceiver.rtpSender.send(params);\n }\n if (recv && transceiver.rtpReceiver) {\n params.encodings = transceiver.recvEncodingParameters;\n params.rtcp = {\n cname: transceiver.cname\n };\n if (transceiver.sendEncodingParameters.length) {\n params.rtcp.ssrc = transceiver.sendEncodingParameters[0].ssrc;\n }\n transceiver.rtpReceiver.receive(params);\n }\n };\n\n window.RTCPeerConnection.prototype.setLocalDescription =\n function(description) {\n var self = this;\n var sections;\n var sessionpart;\n if (description.type === 'offer') {\n // FIXME: What was the purpose of this empty if statement?\n // if (!this._pendingOffer) {\n // } else {\n if (this._pendingOffer) {\n // VERY limited support for SDP munging. Limited to:\n // * changing the order of codecs\n sections = SDPUtils.splitSections(description.sdp);\n sessionpart = sections.shift();\n sections.forEach(function(mediaSection, sdpMLineIndex) {\n var caps = SDPUtils.parseRtpParameters(mediaSection);\n self._pendingOffer[sdpMLineIndex].localCapabilities = caps;\n });\n this.transceivers = this._pendingOffer;\n delete this._pendingOffer;\n }\n } else if (description.type === 'answer') {\n sections = SDPUtils.splitSections(self.remoteDescription.sdp);\n sessionpart = sections.shift();\n var isIceLite = SDPUtils.matchPrefix(sessionpart,\n 'a=ice-lite').length > 0;\n sections.forEach(function(mediaSection, sdpMLineIndex) {\n var transceiver = self.transceivers[sdpMLineIndex];\n var iceGatherer = transceiver.iceGatherer;\n var iceTransport = transceiver.iceTransport;\n var dtlsTransport = transceiver.dtlsTransport;\n var localCapabilities = transceiver.localCapabilities;\n var remoteCapabilities = transceiver.remoteCapabilities;\n var rejected = mediaSection.split('\\n', 1)[0]\n .split(' ', 2)[1] === '0';\n\n if (!rejected) {\n var remoteIceParameters = SDPUtils.getIceParameters(\n mediaSection, sessionpart);\n if (isIceLite) {\n var cands = SDPUtils.matchPrefix(mediaSection, 'a=candidate:')\n .map(function(cand) {\n return SDPUtils.parseCandidate(cand);\n })\n .filter(function(cand) {\n return cand.component === '1';\n });\n // ice-lite only includes host candidates in the SDP so we can\n // use setRemoteCandidates (which implies an\n // RTCIceCandidateComplete)\n if (cands.length) {\n iceTransport.setRemoteCandidates(cands);\n }\n }\n var remoteDtlsParameters = SDPUtils.getDtlsParameters(\n mediaSection, sessionpart);\n if (isIceLite) {\n remoteDtlsParameters.role = 'server';\n }\n\n if (!self.usingBundle || sdpMLineIndex === 0) {\n iceTransport.start(iceGatherer, remoteIceParameters,\n isIceLite ? 'controlling' : 'controlled');\n dtlsTransport.start(remoteDtlsParameters);\n }\n\n // Calculate intersection of capabilities.\n var params = self._getCommonCapabilities(localCapabilities,\n remoteCapabilities);\n\n // Start the RTCRtpSender. The RTCRtpReceiver for this\n // transceiver has already been started in setRemoteDescription.\n self._transceive(transceiver,\n params.codecs.length > 0,\n false);\n }\n });\n }\n\n this.localDescription = {\n type: description.type,\n sdp: description.sdp\n };\n switch (description.type) {\n case 'offer':\n this._updateSignalingState('have-local-offer');\n break;\n case 'answer':\n this._updateSignalingState('stable');\n break;\n default:\n throw new TypeError('unsupported type \"' + description.type +\n '\"');\n }\n\n // If a success callback was provided, emit ICE candidates after it\n // has been executed. Otherwise, emit callback after the Promise is\n // resolved.\n var hasCallback = arguments.length > 1 &&\n typeof arguments[1] === 'function';\n if (hasCallback) {\n var cb = arguments[1];\n window.setTimeout(function() {\n cb();\n if (self.iceGatheringState === 'new') {\n self.iceGatheringState = 'gathering';\n }\n self._emitBufferedCandidates();\n }, 0);\n }\n var p = Promise.resolve();\n p.then(function() {\n if (!hasCallback) {\n if (self.iceGatheringState === 'new') {\n self.iceGatheringState = 'gathering';\n }\n // Usually candidates will be emitted earlier.\n window.setTimeout(self._emitBufferedCandidates.bind(self), 500);\n }\n });\n return p;\n };\n\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function(description) {\n var self = this;\n var stream = new MediaStream();\n var receiverList = [];\n var sections = SDPUtils.splitSections(description.sdp);\n var sessionpart = sections.shift();\n var isIceLite = SDPUtils.matchPrefix(sessionpart,\n 'a=ice-lite').length > 0;\n this.usingBundle = SDPUtils.matchPrefix(sessionpart,\n 'a=group:BUNDLE ').length > 0;\n sections.forEach(function(mediaSection, sdpMLineIndex) {\n var lines = SDPUtils.splitLines(mediaSection);\n var mline = lines[0].substr(2).split(' ');\n var kind = mline[0];\n var rejected = mline[1] === '0';\n var direction = SDPUtils.getDirection(mediaSection, sessionpart);\n\n var transceiver;\n var iceGatherer;\n var iceTransport;\n var dtlsTransport;\n var rtpSender;\n var rtpReceiver;\n var sendEncodingParameters;\n var recvEncodingParameters;\n var localCapabilities;\n\n var track;\n // FIXME: ensure the mediaSection has rtcp-mux set.\n var remoteCapabilities = SDPUtils.parseRtpParameters(mediaSection);\n var remoteIceParameters;\n var remoteDtlsParameters;\n if (!rejected) {\n remoteIceParameters = SDPUtils.getIceParameters(mediaSection,\n sessionpart);\n remoteDtlsParameters = SDPUtils.getDtlsParameters(mediaSection,\n sessionpart);\n remoteDtlsParameters.role = 'client';\n }\n recvEncodingParameters =\n SDPUtils.parseRtpEncodingParameters(mediaSection);\n\n var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:');\n if (mid.length) {\n mid = mid[0].substr(6);\n } else {\n mid = SDPUtils.generateIdentifier();\n }\n\n var cname;\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(function(line) {\n return SDPUtils.parseSsrcMedia(line);\n })\n .filter(function(obj) {\n return obj.attribute === 'cname';\n })[0];\n if (remoteSsrc) {\n cname = remoteSsrc.value;\n }\n\n var isComplete = SDPUtils.matchPrefix(mediaSection,\n 'a=end-of-candidates', sessionpart).length > 0;\n var cands = SDPUtils.matchPrefix(mediaSection, 'a=candidate:')\n .map(function(cand) {\n return SDPUtils.parseCandidate(cand);\n })\n .filter(function(cand) {\n return cand.component === '1';\n });\n if (description.type === 'offer' && !rejected) {\n var transports = self.usingBundle && sdpMLineIndex > 0 ? {\n iceGatherer: self.transceivers[0].iceGatherer,\n iceTransport: self.transceivers[0].iceTransport,\n dtlsTransport: self.transceivers[0].dtlsTransport\n } : self._createIceAndDtlsTransports(mid, sdpMLineIndex);\n\n if (isComplete) {\n transports.iceTransport.setRemoteCandidates(cands);\n }\n\n localCapabilities = RTCRtpReceiver.getCapabilities(kind);\n sendEncodingParameters = [{\n ssrc: (2 * sdpMLineIndex + 2) * 1001\n }];\n\n rtpReceiver = new RTCRtpReceiver(transports.dtlsTransport, kind);\n\n track = rtpReceiver.track;\n receiverList.push([track, rtpReceiver]);\n // FIXME: not correct when there are multiple streams but that is\n // not currently supported in this shim.\n stream.addTrack(track);\n\n // FIXME: look at direction.\n if (self.localStreams.length > 0 &&\n self.localStreams[0].getTracks().length >= sdpMLineIndex) {\n var localTrack;\n if (kind === 'audio') {\n localTrack = self.localStreams[0].getAudioTracks()[0];\n } else if (kind === 'video') {\n localTrack = self.localStreams[0].getVideoTracks()[0];\n }\n if (localTrack) {\n rtpSender = new RTCRtpSender(localTrack,\n transports.dtlsTransport);\n }\n }\n\n self.transceivers[sdpMLineIndex] = {\n iceGatherer: transports.iceGatherer,\n iceTransport: transports.iceTransport,\n dtlsTransport: transports.dtlsTransport,\n localCapabilities: localCapabilities,\n remoteCapabilities: remoteCapabilities,\n rtpSender: rtpSender,\n rtpReceiver: rtpReceiver,\n kind: kind,\n mid: mid,\n cname: cname,\n sendEncodingParameters: sendEncodingParameters,\n recvEncodingParameters: recvEncodingParameters\n };\n // Start the RTCRtpReceiver now. The RTPSender is started in\n // setLocalDescription.\n self._transceive(self.transceivers[sdpMLineIndex],\n false,\n direction === 'sendrecv' || direction === 'sendonly');\n } else if (description.type === 'answer' && !rejected) {\n transceiver = self.transceivers[sdpMLineIndex];\n iceGatherer = transceiver.iceGatherer;\n iceTransport = transceiver.iceTransport;\n dtlsTransport = transceiver.dtlsTransport;\n rtpSender = transceiver.rtpSender;\n rtpReceiver = transceiver.rtpReceiver;\n sendEncodingParameters = transceiver.sendEncodingParameters;\n localCapabilities = transceiver.localCapabilities;\n\n self.transceivers[sdpMLineIndex].recvEncodingParameters =\n recvEncodingParameters;\n self.transceivers[sdpMLineIndex].remoteCapabilities =\n remoteCapabilities;\n self.transceivers[sdpMLineIndex].cname = cname;\n\n if ((isIceLite || isComplete) && cands.length) {\n iceTransport.setRemoteCandidates(cands);\n }\n if (!self.usingBundle || sdpMLineIndex === 0) {\n iceTransport.start(iceGatherer, remoteIceParameters,\n 'controlling');\n dtlsTransport.start(remoteDtlsParameters);\n }\n\n self._transceive(transceiver,\n direction === 'sendrecv' || direction === 'recvonly',\n direction === 'sendrecv' || direction === 'sendonly');\n\n if (rtpReceiver &&\n (direction === 'sendrecv' || direction === 'sendonly')) {\n track = rtpReceiver.track;\n receiverList.push([track, rtpReceiver]);\n stream.addTrack(track);\n } else {\n // FIXME: actually the receiver should be created later.\n delete transceiver.rtpReceiver;\n }\n }\n });\n\n this.remoteDescription = {\n type: description.type,\n sdp: description.sdp\n };\n switch (description.type) {\n case 'offer':\n this._updateSignalingState('have-remote-offer');\n break;\n case 'answer':\n this._updateSignalingState('stable');\n break;\n default:\n throw new TypeError('unsupported type \"' + description.type +\n '\"');\n }\n if (stream.getTracks().length) {\n self.remoteStreams.push(stream);\n window.setTimeout(function() {\n var event = new Event('addstream');\n event.stream = stream;\n self.dispatchEvent(event);\n if (self.onaddstream !== null) {\n window.setTimeout(function() {\n self.onaddstream(event);\n }, 0);\n }\n\n receiverList.forEach(function(item) {\n var track = item[0];\n var receiver = item[1];\n var trackEvent = new Event('track');\n trackEvent.track = track;\n trackEvent.receiver = receiver;\n trackEvent.streams = [stream];\n self.dispatchEvent(event);\n if (self.ontrack !== null) {\n window.setTimeout(function() {\n self.ontrack(trackEvent);\n }, 0);\n }\n });\n }, 0);\n }\n if (arguments.length > 1 && typeof arguments[1] === 'function') {\n window.setTimeout(arguments[1], 0);\n }\n return Promise.resolve();\n };\n\n window.RTCPeerConnection.prototype.close = function() {\n this.transceivers.forEach(function(transceiver) {\n /* not yet\n if (transceiver.iceGatherer) {\n transceiver.iceGatherer.close();\n }\n */\n if (transceiver.iceTransport) {\n transceiver.iceTransport.stop();\n }\n if (transceiver.dtlsTransport) {\n transceiver.dtlsTransport.stop();\n }\n if (transceiver.rtpSender) {\n transceiver.rtpSender.stop();\n }\n if (transceiver.rtpReceiver) {\n transceiver.rtpReceiver.stop();\n }\n });\n // FIXME: clean up tracks, local streams, remote streams, etc\n this._updateSignalingState('closed');\n };\n\n // Update the signaling state.\n window.RTCPeerConnection.prototype._updateSignalingState =\n function(newState) {\n this.signalingState = newState;\n var event = new Event('signalingstatechange');\n this.dispatchEvent(event);\n if (this.onsignalingstatechange !== null) {\n this.onsignalingstatechange(event);\n }\n };\n\n // Determine whether to fire the negotiationneeded event.\n window.RTCPeerConnection.prototype._maybeFireNegotiationNeeded =\n function() {\n // Fire away (for now).\n var event = new Event('negotiationneeded');\n this.dispatchEvent(event);\n if (this.onnegotiationneeded !== null) {\n this.onnegotiationneeded(event);\n }\n };\n\n // Update the connection state.\n window.RTCPeerConnection.prototype._updateConnectionState = function() {\n var self = this;\n var newState;\n var states = {\n 'new': 0,\n closed: 0,\n connecting: 0,\n checking: 0,\n connected: 0,\n completed: 0,\n failed: 0\n };\n this.transceivers.forEach(function(transceiver) {\n states[transceiver.iceTransport.state]++;\n states[transceiver.dtlsTransport.state]++;\n });\n // ICETransport.completed and connected are the same for this purpose.\n states.connected += states.completed;\n\n newState = 'new';\n if (states.failed > 0) {\n newState = 'failed';\n } else if (states.connecting > 0 || states.checking > 0) {\n newState = 'connecting';\n } else if (states.disconnected > 0) {\n newState = 'disconnected';\n } else if (states.new > 0) {\n newState = 'new';\n } else if (states.connected > 0 || states.completed > 0) {\n newState = 'connected';\n }\n\n if (newState !== self.iceConnectionState) {\n self.iceConnectionState = newState;\n var event = new Event('iceconnectionstatechange');\n this.dispatchEvent(event);\n if (this.oniceconnectionstatechange !== null) {\n this.oniceconnectionstatechange(event);\n }\n }\n };\n\n window.RTCPeerConnection.prototype.createOffer = function() {\n var self = this;\n if (this._pendingOffer) {\n throw new Error('createOffer called while there is a pending offer.');\n }\n var offerOptions;\n if (arguments.length === 1 && typeof arguments[0] !== 'function') {\n offerOptions = arguments[0];\n } else if (arguments.length === 3) {\n offerOptions = arguments[2];\n }\n\n var tracks = [];\n var numAudioTracks = 0;\n var numVideoTracks = 0;\n // Default to sendrecv.\n if (this.localStreams.length) {\n numAudioTracks = this.localStreams[0].getAudioTracks().length;\n numVideoTracks = this.localStreams[0].getVideoTracks().length;\n }\n // Determine number of audio and video tracks we need to send/recv.\n if (offerOptions) {\n // Reject Chrome legacy constraints.\n if (offerOptions.mandatory || offerOptions.optional) {\n throw new TypeError(\n 'Legacy mandatory/optional constraints not supported.');\n }\n if (offerOptions.offerToReceiveAudio !== undefined) {\n numAudioTracks = offerOptions.offerToReceiveAudio;\n }\n if (offerOptions.offerToReceiveVideo !== undefined) {\n numVideoTracks = offerOptions.offerToReceiveVideo;\n }\n }\n if (this.localStreams.length) {\n // Push local streams.\n this.localStreams[0].getTracks().forEach(function(track) {\n tracks.push({\n kind: track.kind,\n track: track,\n wantReceive: track.kind === 'audio' ?\n numAudioTracks > 0 : numVideoTracks > 0\n });\n if (track.kind === 'audio') {\n numAudioTracks--;\n } else if (track.kind === 'video') {\n numVideoTracks--;\n }\n });\n }\n // Create M-lines for recvonly streams.\n while (numAudioTracks > 0 || numVideoTracks > 0) {\n if (numAudioTracks > 0) {\n tracks.push({\n kind: 'audio',\n wantReceive: true\n });\n numAudioTracks--;\n }\n if (numVideoTracks > 0) {\n tracks.push({\n kind: 'video',\n wantReceive: true\n });\n numVideoTracks--;\n }\n }\n\n var sdp = SDPUtils.writeSessionBoilerplate();\n var transceivers = [];\n tracks.forEach(function(mline, sdpMLineIndex) {\n // For each track, create an ice gatherer, ice transport,\n // dtls transport, potentially rtpsender and rtpreceiver.\n var track = mline.track;\n var kind = mline.kind;\n var mid = SDPUtils.generateIdentifier();\n\n var transports = self.usingBundle && sdpMLineIndex > 0 ? {\n iceGatherer: transceivers[0].iceGatherer,\n iceTransport: transceivers[0].iceTransport,\n dtlsTransport: transceivers[0].dtlsTransport\n } : self._createIceAndDtlsTransports(mid, sdpMLineIndex);\n\n var localCapabilities = RTCRtpSender.getCapabilities(kind);\n var rtpSender;\n var rtpReceiver;\n\n // generate an ssrc now, to be used later in rtpSender.send\n var sendEncodingParameters = [{\n ssrc: (2 * sdpMLineIndex + 1) * 1001\n }];\n if (track) {\n rtpSender = new RTCRtpSender(track, transports.dtlsTransport);\n }\n\n if (mline.wantReceive) {\n rtpReceiver = new RTCRtpReceiver(transports.dtlsTransport, kind);\n }\n\n transceivers[sdpMLineIndex] = {\n iceGatherer: transports.iceGatherer,\n iceTransport: transports.iceTransport,\n dtlsTransport: transports.dtlsTransport,\n localCapabilities: localCapabilities,\n remoteCapabilities: null,\n rtpSender: rtpSender,\n rtpReceiver: rtpReceiver,\n kind: kind,\n mid: mid,\n sendEncodingParameters: sendEncodingParameters,\n recvEncodingParameters: null\n };\n });\n if (this.usingBundle) {\n sdp += 'a=group:BUNDLE ' + transceivers.map(function(t) {\n return t.mid;\n }).join(' ') + '\\r\\n';\n }\n tracks.forEach(function(mline, sdpMLineIndex) {\n var transceiver = transceivers[sdpMLineIndex];\n sdp += SDPUtils.writeMediaSection(transceiver,\n transceiver.localCapabilities, 'offer', self.localStreams[0]);\n });\n\n this._pendingOffer = transceivers;\n var desc = new RTCSessionDescription({\n type: 'offer',\n sdp: sdp\n });\n if (arguments.length && typeof arguments[0] === 'function') {\n window.setTimeout(arguments[0], 0, desc);\n }\n return Promise.resolve(desc);\n };\n\n window.RTCPeerConnection.prototype.createAnswer = function() {\n var self = this;\n\n var sdp = SDPUtils.writeSessionBoilerplate();\n if (this.usingBundle) {\n sdp += 'a=group:BUNDLE ' + this.transceivers.map(function(t) {\n return t.mid;\n }).join(' ') + '\\r\\n';\n }\n this.transceivers.forEach(function(transceiver) {\n // Calculate intersection of capabilities.\n var commonCapabilities = self._getCommonCapabilities(\n transceiver.localCapabilities,\n transceiver.remoteCapabilities);\n\n sdp += SDPUtils.writeMediaSection(transceiver, commonCapabilities,\n 'answer', self.localStreams[0]);\n });\n\n var desc = new RTCSessionDescription({\n type: 'answer',\n sdp: sdp\n });\n if (arguments.length && typeof arguments[0] === 'function') {\n window.setTimeout(arguments[0], 0, desc);\n }\n return Promise.resolve(desc);\n };\n\n window.RTCPeerConnection.prototype.addIceCandidate = function(candidate) {\n if (candidate === null) {\n this.transceivers.forEach(function(transceiver) {\n transceiver.iceTransport.addRemoteCandidate({});\n });\n } else {\n var mLineIndex = candidate.sdpMLineIndex;\n if (candidate.sdpMid) {\n for (var i = 0; i < this.transceivers.length; i++) {\n if (this.transceivers[i].mid === candidate.sdpMid) {\n mLineIndex = i;\n break;\n }\n }\n }\n var transceiver = this.transceivers[mLineIndex];\n if (transceiver) {\n var cand = Object.keys(candidate.candidate).length > 0 ?\n SDPUtils.parseCandidate(candidate.candidate) : {};\n // Ignore Chrome's invalid candidates since Edge does not like them.\n if (cand.protocol === 'tcp' && (cand.port === 0 || cand.port === 9)) {\n return;\n }\n // Ignore RTCP candidates, we assume RTCP-MUX.\n if (cand.component !== '1') {\n return;\n }\n // A dirty hack to make samples work.\n if (cand.type === 'endOfCandidates') {\n cand = {};\n }\n transceiver.iceTransport.addRemoteCandidate(cand);\n\n // update the remoteDescription.\n var sections = SDPUtils.splitSections(this.remoteDescription.sdp);\n sections[mLineIndex + 1] += (cand.type ? candidate.candidate.trim()\n : 'a=end-of-candidates') + '\\r\\n';\n this.remoteDescription.sdp = sections.join('');\n }\n }\n if (arguments.length > 1 && typeof arguments[1] === 'function') {\n window.setTimeout(arguments[1], 0);\n }\n return Promise.resolve();\n };\n\n window.RTCPeerConnection.prototype.getStats = function() {\n var promises = [];\n this.transceivers.forEach(function(transceiver) {\n ['rtpSender', 'rtpReceiver', 'iceGatherer', 'iceTransport',\n 'dtlsTransport'].forEach(function(method) {\n if (transceiver[method]) {\n promises.push(transceiver[method].getStats());\n }\n });\n });\n var cb = arguments.length > 1 && typeof arguments[1] === 'function' &&\n arguments[1];\n return new Promise(function(resolve) {\n // shim getStats with maplike support\n var results = new Map();\n Promise.all(promises).then(function(res) {\n res.forEach(function(result) {\n Object.keys(result).forEach(function(id) {\n results.set(id, result[id]);\n results[id] = result[id];\n });\n });\n if (cb) {\n window.setTimeout(cb, 0, results);\n }\n resolve(results);\n });\n });\n };\n }\n};\n\n// Expose public methods.\nmodule.exports = {\n shimPeerConnection: edgeShim.shimPeerConnection,\n shimGetUserMedia: require('./getusermedia')\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/webrtc-adapter/src/js/edge/edge_shim.js\n ** module id = 209\n ** module chunks = 0\n **/","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\n\n// Expose public methods.\nmodule.exports = function() {\n var shimError_ = function(e) {\n return {\n name: {PermissionDeniedError: 'NotAllowedError'}[e.name] || e.name,\n message: e.message,\n constraint: e.constraint,\n toString: function() {\n return this.name;\n }\n };\n };\n\n // getUserMedia error shim.\n var origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n return origGetUserMedia(c).catch(function(e) {\n return Promise.reject(shimError_(e));\n });\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/webrtc-adapter/src/js/edge/getusermedia.js\n ** module id = 210\n ** module chunks = 0\n **/","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\n\nvar browserDetails = require('../utils').browserDetails;\n\nvar firefoxShim = {\n shimOnTrack: function() {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get: function() {\n return this._ontrack;\n },\n set: function(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n this.removeEventListener('addstream', this._ontrackpoly);\n }\n this.addEventListener('track', this._ontrack = f);\n this.addEventListener('addstream', this._ontrackpoly = function(e) {\n e.stream.getTracks().forEach(function(track) {\n var event = new Event('track');\n event.track = track;\n event.receiver = {track: track};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n }.bind(this));\n }.bind(this));\n }\n });\n }\n },\n\n shimSourceObject: function() {\n // Firefox has supported mozSrcObject since FF22, unprefixed in 42.\n if (typeof window === 'object') {\n if (window.HTMLMediaElement &&\n !('srcObject' in window.HTMLMediaElement.prototype)) {\n // Shim the srcObject property, once, when HTMLMediaElement is found.\n Object.defineProperty(window.HTMLMediaElement.prototype, 'srcObject', {\n get: function() {\n return this.mozSrcObject;\n },\n set: function(stream) {\n this.mozSrcObject = stream;\n }\n });\n }\n }\n },\n\n shimPeerConnection: function() {\n if (typeof window !== 'object' || !(window.RTCPeerConnection ||\n window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n // The RTCPeerConnection object.\n if (!window.RTCPeerConnection) {\n window.RTCPeerConnection = function(pcConfig, pcConstraints) {\n if (browserDetails.version < 38) {\n // .urls is not supported in FF < 38.\n // create RTCIceServers with a single url.\n if (pcConfig && pcConfig.iceServers) {\n var newIceServers = [];\n for (var i = 0; i < pcConfig.iceServers.length; i++) {\n var server = pcConfig.iceServers[i];\n if (server.hasOwnProperty('urls')) {\n for (var j = 0; j < server.urls.length; j++) {\n var newServer = {\n url: server.urls[j]\n };\n if (server.urls[j].indexOf('turn') === 0) {\n newServer.username = server.username;\n newServer.credential = server.credential;\n }\n newIceServers.push(newServer);\n }\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n }\n return new mozRTCPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = mozRTCPeerConnection.prototype;\n\n // wrap static methods. Currently just generateCertificate.\n if (mozRTCPeerConnection.generateCertificate) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get: function() {\n return mozRTCPeerConnection.generateCertificate;\n }\n });\n }\n\n window.RTCSessionDescription = mozRTCSessionDescription;\n window.RTCIceCandidate = mozRTCIceCandidate;\n }\n\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n var nativeMethod = RTCPeerConnection.prototype[method];\n RTCPeerConnection.prototype[method] = function() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n RTCIceCandidate : RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n };\n });\n\n // support for addIceCandidate(null)\n var nativeAddIceCandidate =\n RTCPeerConnection.prototype.addIceCandidate;\n RTCPeerConnection.prototype.addIceCandidate = function() {\n return arguments[0] === null ? Promise.resolve()\n : nativeAddIceCandidate.apply(this, arguments);\n };\n\n // shim getStats with maplike support\n var makeMapStats = function(stats) {\n var map = new Map();\n Object.keys(stats).forEach(function(key) {\n map.set(key, stats[key]);\n map[key] = stats[key];\n });\n return map;\n };\n\n var nativeGetStats = RTCPeerConnection.prototype.getStats;\n RTCPeerConnection.prototype.getStats = function(selector, onSucc, onErr) {\n return nativeGetStats.apply(this, [selector || null])\n .then(function(stats) {\n return makeMapStats(stats);\n })\n .then(onSucc, onErr);\n };\n }\n};\n\n// Expose public methods.\nmodule.exports = {\n shimOnTrack: firefoxShim.shimOnTrack,\n shimSourceObject: firefoxShim.shimSourceObject,\n shimPeerConnection: firefoxShim.shimPeerConnection,\n shimGetUserMedia: require('./getusermedia')\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/webrtc-adapter/src/js/firefox/firefox_shim.js\n ** module id = 211\n ** module chunks = 0\n **/","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n'use strict';\n\nvar logging = require('../utils').log;\nvar browserDetails = require('../utils').browserDetails;\n\n// Expose public methods.\nmodule.exports = function() {\n var shimError_ = function(e) {\n return {\n name: {\n SecurityError: 'NotAllowedError',\n PermissionDeniedError: 'NotAllowedError'\n }[e.name] || e.name,\n message: {\n 'The operation is insecure.': 'The request is not allowed by the ' +\n 'user agent or the platform in the current context.'\n }[e.message] || e.message,\n constraint: e.constraint,\n toString: function() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n // getUserMedia constraints shim.\n var getUserMedia_ = function(constraints, onSuccess, onError) {\n var constraintsToFF37_ = function(c) {\n if (typeof c !== 'object' || c.require) {\n return c;\n }\n var require = [];\n Object.keys(c).forEach(function(key) {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n var r = c[key] = (typeof c[key] === 'object') ?\n c[key] : {ideal: c[key]};\n if (r.min !== undefined ||\n r.max !== undefined || r.exact !== undefined) {\n require.push(key);\n }\n if (r.exact !== undefined) {\n if (typeof r.exact === 'number') {\n r. min = r.max = r.exact;\n } else {\n c[key] = r.exact;\n }\n delete r.exact;\n }\n if (r.ideal !== undefined) {\n c.advanced = c.advanced || [];\n var oc = {};\n if (typeof r.ideal === 'number') {\n oc[key] = {min: r.ideal, max: r.ideal};\n } else {\n oc[key] = r.ideal;\n }\n c.advanced.push(oc);\n delete r.ideal;\n if (!Object.keys(r).length) {\n delete c[key];\n }\n }\n });\n if (require.length) {\n c.require = require;\n }\n return c;\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n if (browserDetails.version < 38) {\n logging('spec: ' + JSON.stringify(constraints));\n if (constraints.audio) {\n constraints.audio = constraintsToFF37_(constraints.audio);\n }\n if (constraints.video) {\n constraints.video = constraintsToFF37_(constraints.video);\n }\n logging('ff37: ' + JSON.stringify(constraints));\n }\n return navigator.mozGetUserMedia(constraints, onSuccess, function(e) {\n onError(shimError_(e));\n });\n };\n\n // Returns the result of getUserMedia as a Promise.\n var getUserMediaPromise_ = function(constraints) {\n return new Promise(function(resolve, reject) {\n getUserMedia_(constraints, resolve, reject);\n });\n };\n\n // Shim for mediaDevices on older versions.\n if (!navigator.mediaDevices) {\n navigator.mediaDevices = {getUserMedia: getUserMediaPromise_,\n addEventListener: function() { },\n removeEventListener: function() { }\n };\n }\n navigator.mediaDevices.enumerateDevices =\n navigator.mediaDevices.enumerateDevices || function() {\n return new Promise(function(resolve) {\n var infos = [\n {kind: 'audioinput', deviceId: 'default', label: '', groupId: ''},\n {kind: 'videoinput', deviceId: 'default', label: '', groupId: ''}\n ];\n resolve(infos);\n });\n };\n\n if (browserDetails.version < 41) {\n // Work around http://bugzil.la/1169665\n var orgEnumerateDevices =\n navigator.mediaDevices.enumerateDevices.bind(navigator.mediaDevices);\n navigator.mediaDevices.enumerateDevices = function() {\n return orgEnumerateDevices().then(undefined, function(e) {\n if (e.name === 'NotFoundError') {\n return [];\n }\n throw e;\n });\n };\n }\n if (browserDetails.version < 49) {\n var origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n return origGetUserMedia(c).catch(function(e) {\n return Promise.reject(shimError_(e));\n });\n };\n }\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n if (browserDetails.version < 44) {\n return getUserMedia_(constraints, onSuccess, onError);\n }\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n console.warn('navigator.getUserMedia has been replaced by ' +\n 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/webrtc-adapter/src/js/firefox/getusermedia.js\n ** module id = 212\n ** module chunks = 0\n **/","/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n'use strict';\nvar safariShim = {\n // TODO: DrAlex, should be here, double check against LayoutTests\n // shimOnTrack: function() { },\n\n // TODO: once the back-end for the mac port is done, add.\n // TODO: check for webkitGTK+\n // shimPeerConnection: function() { },\n\n shimGetUserMedia: function() {\n navigator.getUserMedia = navigator.webkitGetUserMedia;\n }\n};\n\n// Expose public methods.\nmodule.exports = {\n shimGetUserMedia: safariShim.shimGetUserMedia\n // TODO\n // shimOnTrack: safariShim.shimOnTrack,\n // shimPeerConnection: safariShim.shimPeerConnection\n};\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/webrtc-adapter/src/js/safari/safari_shim.js\n ** module id = 213\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/myModuleDefinition","webpack:///webpack/bootstrap 9d35fc115b98fa66d01a","webpack:///./~/lodash/isArray.js","webpack:///./~/lodash/_root.js","webpack:///./~/lodash/isObject.js","webpack:///./~/lodash/_getNative.js","webpack:///./~/lodash/isObjectLike.js","webpack:///./src/reader/ean_reader.js","webpack:///./~/lodash/_baseGetTag.js","webpack:///./src/common/image_debug.js","webpack:///./src/reader/barcode_reader.js","webpack:///./~/gl-vec2/clone.js","webpack:///./~/lodash/_Symbol.js","webpack:///./~/lodash/_toKey.js","webpack:///./~/lodash/eq.js","webpack:///./~/lodash/isArguments.js","webpack:///./~/lodash/isArrayLike.js","webpack:///./~/lodash/merge.js","webpack:///./src/common/array_helper.js","webpack:///./~/lodash/_ListCache.js","webpack:///./~/lodash/_assocIndexOf.js","webpack:///./~/lodash/_castPath.js","webpack:///./~/lodash/_getMapData.js","webpack:///./~/lodash/_isIndex.js","webpack:///./~/lodash/_isPrototype.js","webpack:///./~/lodash/_nativeCreate.js","webpack:///./~/lodash/isBuffer.js","webpack:///./~/lodash/isTypedArray.js","webpack:///./src/common/cv_utils.js","webpack:///./src/common/image_wrapper.js","webpack:///./~/lodash/_Map.js","webpack:///./~/lodash/_MapCache.js","webpack:///./~/lodash/_Stack.js","webpack:///./~/lodash/_arrayPush.js","webpack:///./~/lodash/_baseAssignValue.js","webpack:///./~/lodash/_baseGet.js","webpack:///./~/lodash/_getPrototype.js","webpack:///./~/lodash/_isKey.js","webpack:///./~/lodash/identity.js","webpack:///./~/lodash/isFunction.js","webpack:///./~/lodash/isLength.js","webpack:///./~/lodash/isSymbol.js","webpack:///./~/lodash/keysIn.js","webpack:///(webpack)/buildin/module.js","webpack:///./src/analytics/result_collector.js","webpack:///./src/config/config.js","webpack:///./src/locator/tracer.js","webpack:///./src/reader/code_39_reader.js","webpack:///./~/gl-vec2/dot.js","webpack:///./~/lodash/_Uint8Array.js","webpack:///./~/lodash/_arrayLikeKeys.js","webpack:///./~/lodash/_arrayMap.js","webpack:///./~/lodash/_assignMergeValue.js","webpack:///./~/lodash/_assignValue.js","webpack:///./~/lodash/_baseGetAllKeys.js","webpack:///./~/lodash/_baseIsEqual.js","webpack:///./~/lodash/_baseIteratee.js","webpack:///./~/lodash/_baseKeys.js","webpack:///./~/lodash/_basePickBy.js","webpack:///./~/lodash/_defineProperty.js","webpack:///./~/lodash/_equalArrays.js","webpack:///./~/lodash/_freeGlobal.js","webpack:///./~/lodash/_getSymbols.js","webpack:///./~/lodash/_getTag.js","webpack:///./~/lodash/_isStrictComparable.js","webpack:///./~/lodash/_matchesStrictComparable.js","webpack:///./~/lodash/_overArg.js","webpack:///./~/lodash/_overRest.js","webpack:///./~/lodash/_setToString.js","webpack:///./~/lodash/_toSource.js","webpack:///./~/lodash/hasIn.js","webpack:///./~/lodash/keys.js","webpack:///./~/lodash/pick.js","webpack:///./~/lodash/stubArray.js","webpack:///(webpack)/buildin/global.js","webpack:///./src/quagga.js","webpack:///./src/common/cluster.js","webpack:///./src/common/dom_helper.js","webpack:///./src/common/events.js","webpack:///./src/common/mediaDevices.js","webpack:///./src/common/subImage.js","webpack:///./src/common/typedefs.js","webpack:///./src/config/config.dev.js","webpack:///./src/decoder/barcode_decoder.js","webpack:///./src/decoder/bresenham.js","webpack:///./src/input/camera_access.js","webpack:///./src/input/config_factory.js","webpack:///./src/input/exif_helper.js","webpack:///./src/input/frame_grabber.js","webpack:///./src/input/image_loader.js","webpack:///./src/input/input_stream.js","webpack:///./src/locator/barcode_locator.js","webpack:///./src/locator/rasterizer.js","webpack:///./src/locator/skeletonizer.js","webpack:///./src/reader/codabar_reader.js","webpack:///./src/reader/code_128_reader.js","webpack:///./src/reader/code_39_vin_reader.js","webpack:///./src/reader/ean_2_reader.js","webpack:///./src/reader/ean_5_reader.js","webpack:///./src/reader/ean_8_reader.js","webpack:///./src/reader/i2of5_reader.js","webpack:///./src/reader/upc_e_reader.js","webpack:///./src/reader/upc_reader.js","webpack:///./src/scanner.js","webpack:///./~/gl-mat2/copy.js","webpack:///./~/gl-mat2/create.js","webpack:///./~/gl-mat2/invert.js","webpack:///./~/gl-vec2/scale.js","webpack:///./~/gl-vec2/transformMat2.js","webpack:///./~/gl-vec3/clone.js","webpack:///./~/lodash/_DataView.js","webpack:///./~/lodash/_Hash.js","webpack:///./~/lodash/_Promise.js","webpack:///./~/lodash/_Set.js","webpack:///./~/lodash/_SetCache.js","webpack:///./~/lodash/_WeakMap.js","webpack:///./~/lodash/_apply.js","webpack:///./~/lodash/_arrayFilter.js","webpack:///./~/lodash/_arraySome.js","webpack:///./~/lodash/_baseCreate.js","webpack:///./~/lodash/_baseFlatten.js","webpack:///./~/lodash/_baseFor.js","webpack:///./~/lodash/_baseHasIn.js","webpack:///./~/lodash/_baseIsArguments.js","webpack:///./~/lodash/_baseIsEqualDeep.js","webpack:///./~/lodash/_baseIsMatch.js","webpack:///./~/lodash/_baseIsNative.js","webpack:///./~/lodash/_baseIsTypedArray.js","webpack:///./~/lodash/_baseKeysIn.js","webpack:///./~/lodash/_baseMatches.js","webpack:///./~/lodash/_baseMatchesProperty.js","webpack:///./~/lodash/_baseMerge.js","webpack:///./~/lodash/_baseMergeDeep.js","webpack:///./~/lodash/_basePick.js","webpack:///./~/lodash/_baseProperty.js","webpack:///./~/lodash/_basePropertyDeep.js","webpack:///./~/lodash/_baseRest.js","webpack:///./~/lodash/_baseSet.js","webpack:///./~/lodash/_baseSetToString.js","webpack:///./~/lodash/_baseTimes.js","webpack:///./~/lodash/_baseToString.js","webpack:///./~/lodash/_baseUnary.js","webpack:///./~/lodash/_cacheHas.js","webpack:///./~/lodash/_cloneArrayBuffer.js","webpack:///./~/lodash/_cloneBuffer.js","webpack:///./~/lodash/_cloneTypedArray.js","webpack:///./~/lodash/_copyArray.js","webpack:///./~/lodash/_copyObject.js","webpack:///./~/lodash/_coreJsData.js","webpack:///./~/lodash/_createAssigner.js","webpack:///./~/lodash/_createBaseFor.js","webpack:///./~/lodash/_equalByTag.js","webpack:///./~/lodash/_equalObjects.js","webpack:///./~/lodash/_flatRest.js","webpack:///./~/lodash/_getAllKeys.js","webpack:///./~/lodash/_getAllKeysIn.js","webpack:///./~/lodash/_getMatchData.js","webpack:///./~/lodash/_getRawTag.js","webpack:///./~/lodash/_getSymbolsIn.js","webpack:///./~/lodash/_getValue.js","webpack:///./~/lodash/_hasPath.js","webpack:///./~/lodash/_hashClear.js","webpack:///./~/lodash/_hashDelete.js","webpack:///./~/lodash/_hashGet.js","webpack:///./~/lodash/_hashHas.js","webpack:///./~/lodash/_hashSet.js","webpack:///./~/lodash/_initCloneObject.js","webpack:///./~/lodash/_isFlattenable.js","webpack:///./~/lodash/_isIterateeCall.js","webpack:///./~/lodash/_isKeyable.js","webpack:///./~/lodash/_isMasked.js","webpack:///./~/lodash/_listCacheClear.js","webpack:///./~/lodash/_listCacheDelete.js","webpack:///./~/lodash/_listCacheGet.js","webpack:///./~/lodash/_listCacheHas.js","webpack:///./~/lodash/_listCacheSet.js","webpack:///./~/lodash/_mapCacheClear.js","webpack:///./~/lodash/_mapCacheDelete.js","webpack:///./~/lodash/_mapCacheGet.js","webpack:///./~/lodash/_mapCacheHas.js","webpack:///./~/lodash/_mapCacheSet.js","webpack:///./~/lodash/_mapToArray.js","webpack:///./~/lodash/_memoizeCapped.js","webpack:///./~/lodash/_nativeKeys.js","webpack:///./~/lodash/_nativeKeysIn.js","webpack:///./~/lodash/_nodeUtil.js","webpack:///./~/lodash/_objectToString.js","webpack:///./~/lodash/_setCacheAdd.js","webpack:///./~/lodash/_setCacheHas.js","webpack:///./~/lodash/_setToArray.js","webpack:///./~/lodash/_shortOut.js","webpack:///./~/lodash/_stackClear.js","webpack:///./~/lodash/_stackDelete.js","webpack:///./~/lodash/_stackGet.js","webpack:///./~/lodash/_stackHas.js","webpack:///./~/lodash/_stackSet.js","webpack:///./~/lodash/_stringToPath.js","webpack:///./~/lodash/constant.js","webpack:///./~/lodash/flatten.js","webpack:///./~/lodash/get.js","webpack:///./~/lodash/isArrayLikeObject.js","webpack:///./~/lodash/isEmpty.js","webpack:///./~/lodash/isPlainObject.js","webpack:///./~/lodash/memoize.js","webpack:///./~/lodash/negate.js","webpack:///./~/lodash/omitBy.js","webpack:///./~/lodash/pickBy.js","webpack:///./~/lodash/property.js","webpack:///./~/lodash/stubFalse.js","webpack:///./~/lodash/toPlainObject.js","webpack:///./~/lodash/toString.js"],"names":["EANReader","opts","supplements","getDefaulConfig","BarcodeReader","call","config","Object","keys","CONFIG_KEYS","forEach","key","default","properties","CODE_L_START","value","CODE_G_START","START_PATTERN","STOP_PATTERN","MIDDLE_PATTERN","EXTENSION_START_PATTERN","CODE_PATTERN","CODE_FREQUENCY","SINGLE_CODE_ERROR","AVG_CODE_ERROR","FORMAT","writeable","prototype","create","constructor","_decodeCode","start","coderange","counter","i","self","offset","isWhite","_row","counterPos","bestMatch","error","Number","MAX_VALUE","code","end","length","_matchPattern","_findPattern","pattern","tryHarder","epsilon","j","sum","_nextSet","undefined","_findStart","leadingWhitespaceStart","startInfo","_matchRange","_verifyTrailingWhitespace","endInfo","trailingWhitespaceEnd","_findEnd","_calculateFirstDigit","codeFrequency","_decodePayload","result","decodedCodes","firstDigit","push","unshift","_decode","resultInfo","_checksum","ext","_decodeExtensions","lastCode","supplement","join","codeset","decode","drawRect","pos","size","ctx","style","strokeStyle","color","fillStyle","lineWidth","beginPath","strokeRect","x","y","drawPath","path","def","moveTo","lineTo","closePath","stroke","drawImage","imageData","canvasData","getImageData","data","imageDataPos","canvasDataPos","putImageData","_nextUnset","line","maxSingleError","singleError","modulo","barWidth","count","scaled","Math","abs","_correctBars","correction","indices","tmp","_matchTrace","cmpCounter","decodePattern","reverse","direction","DIRECTION","REVERSE","FORWARD","format","_fillCounters","counters","defineProperty","Exception","StartNotFoundException","CodeNotFoundException","PatternNotFoundException","init","arr","val","l","shuffle","floor","random","toPointList","row","rows","threshold","scoreFunc","queue","apply","maxIndex","max","vec2","clone","require","vec3","imageRef","that","toVec2","toVec3","round","computeIntegralImage2","imageWrapper","integralWrapper","width","height","integralImageData","posA","posB","posC","posD","computeIntegralImage","v","u","thresholdImage","targetWrapper","targetData","computeHistogram","bitsPerPixel","bitShift","bucketCnt","hist","Int32Array","sharpenLine","left","center","right","determineOtsuThreshold","px","mx","determineThreshold","vet","p1","p2","p12","k","m1","m2","m12","ArrayHelper","otsuThreshold","computeBinaryImage","kernel","A","B","C","D","avg","cluster","points","property","point","clusters","addToCluster","newPoint","found","fits","add","Cluster2","createPoint","Tracer","trace","vec","iteration","maxIterations","top","centerPos","currentPos","idx","forward","from","to","toIdx","predictedPos","thresholdX","thresholdY","match","predicted","DILATE","ERODE","dilate","inImageWrapper","outImageWrapper","inImageData","outImageData","yStart1","yStart2","xStart1","xStart2","erode","subtract","aImageWrapper","bImageWrapper","resultImageWrapper","aImageData","bImageData","cImageData","bitwiseOr","countNonZero","topGeneric","list","minIdx","min","score","hit","item","grayArrayFromImage","htmlImage","offsetX","array","ctxData","computeGray","grayArrayFromContext","grayAndHalfSampleFromCanvasData","outArray","topRowIdx","bottomRowIdx","endIdx","outWidth","outImgIdx","inWidth","singleChannel","loadImageArray","src","callback","canvas","document","createElement","img","Image","onload","getContext","Uint8Array","halfSample","inImgWrapper","outImgWrapper","inImg","outImg","hsv2rgb","hsv","rgb","h","s","c","m","r","g","b","_computeDivisors","n","largeDivisors","divisors","sqrt","concat","_computeIntersection","arr1","arr2","calculatePatchSize","patchSize","imgSize","divisorsX","divisorsY","wideSide","common","nrOfPatchesList","nrOfPatchesMap","nrOfPatchesIdx","medium","nrOfPatches","desiredPatchSize","optimalPatchSize","findPatchSizeForDivisors","_parseCSSDimensionValues","dimension","parseFloat","unit","indexOf","_dimensionsConverters","context","bottom","computeImageArea","inputWidth","inputHeight","area","parsedArea","reduce","parsed","calculated","sx","sy","sw","sh","ImageWrapper","ArrayType","initialize","Array","inImageWithBorder","imgRef","border","sample","lx","ly","w","base","a","d","e","clearArray","subImage","subImageAsCopy","sizeY","sizeX","copyTo","srcData","dstData","get","getSafe","indexMapping","set","zeroBorder","invert","convolve","kx","ky","kSize","accu","moments","labelcount","ysq","labelsum","label","mu11","mu02","mu20","x_","y_","PI","PI_4","m00","m01","m10","m11","m02","m20","theta","rad","isNaN","atan","cos","sin","show","scale","frame","current","pixel","overlay","whiteRgb","blackRgb","contains","codeResult","some","every","passesFilter","filter","results","capacity","capture","matchesConstraints","blacklist","addResult","imageSize","ImageDebug","toDataURL","getResults","ENV","node","searchDirections","labelWrapper","labelData","edgelabel","cy","dir","cx","vertex2D","next","prev","contourTracing","Fv","Cv","P","ldir","Code39Reader","ALPHABETH_STRING","ALPHABET","CHARACTER_ENCODINGS","ASTERISK","_toCounters","numCounters","decodedChar","lastStart","nextStart","_toPattern","_patternToChar","pop","patternSize","String","fromCharCode","_findNextWidth","minWidth","maxNarrowWidth","numWideBars","wideBarWidth","patternStart","whiteSpaceMustStart","fromConfig","scanner","createScanner","pendingStart","initialized","addEventListener","eventType","cb","subscribe","removeEventListener","unsubscribe","isRunning","Promise","resolve","reject","console","log","stop","toPromise","inputStream","type","cancelRequested","cancel","promise","onProcessed","decodeSingle","registerResultCollector","resultCollector","getCanvas","dom","image","fromSource","source","inputConfig","createConfigFromSource","setConfig","configuration","mergedConfig","createApi","conf","decoder","locator","throttle","timeInMs","parseInt","ResultCollector","_worker","dot","pointMap","updateCenter","pointToAdd","id","otherPoint","similarity","getPoints","getCenter","hasWindow","window","windowRef","windowObjects","DOMHelper","obj","setObject","createEventedElement","events","getEvent","eventName","subscribers","clearEvents","publishSubscription","subscription","async","setTimeout","event","publish","subscriber","once","enumerateDevices","navigator","mediaDevices","Error","getUserMedia","constraints","SubImage","I","originalSize","updateData","updateFrom","requestAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","imul","ah","al","bh","bl","assign","target","TypeError","index","arguments","nextSource","nextKey","hasOwnProperty","module","exports","name","facingMode","locate","numOfWorkers","readers","debug","drawBoundingBox","showFrequency","drawScanline","showPattern","showCanvas","showPatches","showFoundPatches","showSkeleton","showLabels","showPatchLabels","showRemainingPatchLabels","boxFromPatches","showTransformed","showTransformedBox","showBB","READERS","code_128_reader","ean_reader","ean_5_reader","ean_2_reader","ean_8_reader","code_39_reader","code_39_vin_reader","codabar_reader","upc_reader","upc_e_reader","i2of5_reader","I2of5Reader","inputImageWrapper","_canvas","frequency","_barcodeReaders","initCanvas","initReaders","initConfig","$debug","querySelector","className","appendChild","readerConfig","reader","map","JSON","stringify","vis","prop","display","getExtendedLine","angle","extendLine","amount","extension","ceil","getLine","box","tryDecode","barcodeLine","Bresenham","getBarcodeLine","printFrequency","toBinaryLine","printPattern","tryDecodeBruteForce","lineAngle","sideLength","pow","slices","xdir","ydir","getLineLength","decodeFromBoundingBox","lineLength","atan2","decodeFromBoundingBoxes","boxes","barcodes","multiple","setReaders","Slope","DIR","UP","DOWN","x0","y0","x1","y1","steep","deltax","deltay","ystep","read","slope","slope2","extrema","currentDir","rThreshold","fillColor","fillRect","facingMatching","streamRef","waitForVideo","video","attempts","checkVideo","videoWidth","videoHeight","initCamera","then","stream","setAttribute","srcObject","play","bind","deprecatedConstraints","videoConstraints","normalized","minAspectRatio","aspectRatio","facing","pickConstraints","normalizedConstraints","audio","deviceId","enumerateVideoDevices","devices","device","kind","request","release","tracks","getVideoTracks","getActiveStreamLabel","isDataURL","regex","isBlobURL","isMediaURL","isImageExt","isVideoExt","sourceConfig","MediaStream","createConfigForStream","HTMLImageElement","HTMLVideoElement","HTMLCanvasElement","createConfigForCanvas","FileList","createConfigForFile","File","createConfigForString","createConfigForLiveStream","createConfigForImage","staticImageConfig","sequence","createConfigForMimeType","mime","createConfigForVideo","file","URL","createObjectURL","blobURL","createConfigForMediaExtension","ExifTags","AvailableTags","findTagsInObjectURL","tags","test","objectURLToBlob","readToBuffer","findTagsInBuffer","buffer","base64ToArrayBuffer","dataUrl","base64","replace","binary","atob","len","ArrayBuffer","view","charCodeAt","blob","fileReader","FileReader","readAsArrayBuffer","url","http","XMLHttpRequest","open","responseType","onreadystatechange","readyState","DONE","status","response","onerror","send","selectedTags","dataView","DataView","byteLength","exifTags","selectedTag","exifTag","tag","marker","getUint8","readEXIFData","getUint16","getStringFromBuffer","tiffOffset","bigEnd","firstIFDOffset","getUint32","readTags","tiffStart","dirStart","strings","entries","entryOffset","readTagValue","numValues","outstr","TO_RADIANS","adjustCanvasSize","targetSize","FrameGrabber","_that","_streamConfig","getConfig","_video_size","getRealWidth","getRealHeight","_canvasSize","getCanvasSize","_size","getWidth","getHeight","topRight","getTopRight","_sx","_sy","_ctx","_data","videoSize","canvasSize","attachData","getData","grab","doHalfSample","getFrame","drawable","drawAngle","orientation","translate","rotate","getSize","ImageLoader","load","directory","htmlImagesSrcArray","htmlImagesArray","num","slice","notLoaded","addImage","loaded","loadedImg","notloadedImgs","splice","imgName","substr","lastIndexOf","catch","addOnloadHandler","InputStream","createVideoStream","_config","_eventNames","_eventHandlers","_calculatedWidth","_calculatedHeight","_topRight","initSize","setWidth","setHeight","setInputStream","ended","pause","setCurrentTime","time","currentTime","f","bool","clearEventHandlers","handlers","handler","trigger","args","setTopRight","setCanvasSize","createLiveStream","createImageStream","frameIdx","paused","imgArray","baseUrl","calculatedWidth","calculatedHeight","loadImages","imgs","publishEvent","newWidth","newHeight","transformMat2","mat2","copy","createLocator","_currentImageWrapper","_skelImageWrapper","_subImageWrapper","_labelImageWrapper","_patchGrid","_patchLabelGrid","_imageToPatchGrid","_binaryImageWrapper","_patchSize","_canvasContainer","_numPatches","_inputImageWrapper","_skeletonizer","initBuffers","skeletonImageData","skeletonizer","global","useWorker","patches","overAvg","patch","transMat","minx","miny","maxx","maxy","binarizeImage","findPatches","patchesFound","rasterizer","rasterResult","skeletonize","Rasterizer","rasterize","describePatch","findBiggestConnectedAreas","maxLabel","labelHist","topLabels","sort","el","findBoxes","similarMoments","topCluster","patchPos","eligibleMoments","matchingMoments","minComponentWeight","rasterizeAngularSimilarity","currIdx","notYetProcessed","currentIdx","currentPatch","checkImageConstraints","createContour2D","firstVertex","insideContours","nextpeer","prevpeer","CONTOUR_DIR","CW_DIR","CCW_DIR","UNKNOWN_DIR","OUTSIDE_EDGE","INSIDE_EDGE","tracer","depthlabel","bc","lc","labelindex","colorMap","vertex","p","cc","sc","connectedCount","drawContour","firstContour","pq","iq","q","Skeletonizer","stdlib","foreign","images","inImagePtr","outImagePtr","aImagePtr","bImagePtr","imagePtr","memcpy","srcImagePtr","dstImagePtr","subImagePtr","erodedImagePtr","tempImagePtr","skelImagePtr","done","CodabarReader","_counters","START_END","MIN_ENCODED_CHARS","MAX_ACCEPTABLE","PADDING","startCounter","_isStartEnd","_verifyWhitespace","_validateResult","_sumCounters","endCounter","_calculatePatternLength","_thresholdResultPattern","categorization","space","narrow","counts","wide","bar","cat","_charToPattern","newkind","char","charCode","thresholds","_computeAlternatingThreshold","barThreshold","spaceThreshold","bitmask","Code128Reader","CODE_SHIFT","CODE_C","CODE_B","CODE_A","START_CODE_A","START_CODE_B","START_CODE_C","STOP_CODE","MODULE_INDICES","_correct","calculateCorrection","multiplier","checksum","rawResult","shiftNext","removeLastCharacter","expected","sumNormalized","sumExpected","Code39VINReader","patterns","IOQ","AZ09","_checkChecksum","EAN2Reader","EAN5Reader","CHECK_DIGIT_ENCODINGS","extensionChecksum","determineCheckDigit","EAN8Reader","barSpaceRatio","normalizeBarSpaceWidth","N","W","writable","MAX_CORRECTION_FACTOR","counterSum","codeSum","correctionRatio","correctionRatioInverse","narrowBarWidth","_decodePair","counterPair","codes","counterLength","_verifyCounterLength","UPCEReader","_determineParity","nrSystem","_convertToUPCA","upca","lastDigit","UPCReader","charAt","substring","_inputStream","_framegrabber","_stopped","_boxSize","_decoder","_workerPool","_onUIThread","_resultCollector","_events","_locator","initializeData","BarcodeDecoder","initInputStream","$viewport","getViewPort","CameraAccess","err","canRecord","nodeName","nodeType","selector","adjustWorkerPool","ready","getBoundingBoxes","transformResult","xOffset","yOffset","moveLine","moveBox","corner","barcode","hasCodeResult","publishResult","resultToPublish","locateAndDecode","update","availableWorker","workerThread","busy","worker","postMessage","cmd","startContinuousUpdate","delay","timestamp","performance","now","initWorker","generateWorkerBlob","Worker","onmessage","revokeObjectURL","message","configForWorker","workerInterface","factory","Quagga","factorySource","__factorySource__","Blob","toString","increaseBy","workersToTerminate","terminate","workerInitialized","resultCallback"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD,O;ACRA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACzBA;;AAEA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC9BA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;AC5BA;;;AAGA,SAASA,SAAT,CAAmBC,IAAnB,EAAyBC,WAAzB,EAAsC;AAClCD,WAAO,qDAAME,iBAAN,EAAyBF,IAAzB,CAAP;AACAG,IAAA,gEAAAA,CAAcC,IAAd,CA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EAA+C,QAA/C,EAAyD;AACrDZ,WAAO,SAD8C;AAErDW,eAAW;AAF0C,CAAzD;;AAKAtB,cAAc6H,SAAd,GAA0B;AACtBE,aAAS,CADa;AAEtBD,aAAS,CAAC;AAFY,CAA1B;;AAKA9H,cAAcoI,SAAd,GAA0B;AACtBC,4BAAwB,2BADF;AAEtBC,2BAAuB,0BAFD;AAGtBC,8BAA0B;AAHJ,CAA1B;;AAMAvI,cAAcK,WAAd,GAA4B,EAA5B;;AAEA,wDAAeL,aAAf,C;;;;;;ACvNA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;ACbA;;AAEA;AACA;;AAEA;;;;;;;ACLA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,cAAc;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpCA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA,6BAA6B,kBAAkB,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA,8CAA8C,kBAAkB,EAAE;AAClE;AACA;AACA;;AAEA;;;;;;;ACnCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChCA;AACA;;AAEA;AACA;AACA;AAC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ACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrBA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACjBA;;AAEA;AACA;;AAEA;;;;;;;ACLA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;ACrCA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1BA;AACA;AACA,IAAMuG,OAAO;AACTC,WAAO,mBAAAC,CAAQ,CAAR;AADE,CAAb;AAGA,IAAMC,OAAO;AACTF,WAAO,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,CAAvB;AACAuC,aAAK5D,SAAS,CAAT,GAAa,CAAlB,IAAuB,GAAvB;AACH;AACDuC,QAAIwB,YAAJ,CAAiBmT,KAAjB,EAAwBtL,KAAK7I,CAA7B,EAAgC6I,KAAK5I,CAArC;AACH,CAtBD;;AAwBA,wDAAesQ,YAAf,C;;;;;;AC5VA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACNA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC1BA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,GAAG;AACH;AACA;AACA;;AAEA;;;;;;;ACxBA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,EAAE;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;;AAEA;;;;;;;ACLA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClCA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC5BA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;;;;;;;;ACrBA;;AAEA,SAASkE,QAAT,CAAkBC,UAAlB,EAA8B/J,IAA9B,EAAoC;AAChC,QAAIA,IAAJ,EAAU;AACN,eAAOA,KAAKgK,IAAL,CAAU,UAAU3J,IAAV,EAAgB;AAC7B,mBAAOtQ,OAAOC,IAAP,CAAYqQ,IAAZ,EAAkB4J,KAAlB,CAAwB,UAAU9Z,GAAV,EAAe;AAC1C,uBAAOkQ,KAAKlQ,GAAL,MAAc4Z,WAAW5Z,GAAX,CAAr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H;AACDN,oBAAQM,UAAR,IAAsB,CAAtB;AACAF,sBAAU,CAACA,OAAX;AACH;AACJ;AACD,WAAO,IAAP;AACH,CA1CD;;AA4CA,wDAAeka,YAAf,C;;;;;;ACtNA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,OAAO;AACpB;AACA;AACA;AACA,C;;;;;;ACXA;;AAEA;AACA;;AAEA;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChDA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3BA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,QAAQ;AACnB;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3BA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC9BA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7BA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7BA;;AAEA;AACA;AACA;AACA,WAAW,QAAQ;AACnB;AACA,GAAG;AACH,CAAC;;AAED;;;;;;;ACVA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClFA;AACA;;AAEA;;;;;;;;ACHA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;;;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACzDA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACdA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnCA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;;AAEA;;;;;;;ACbA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;;;;;;ACzBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,QAAQ;AACrB;AACA;AACA,0BAA0B,gBAAgB,SAAS,GAAG;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,qBAAqB;AAChC,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,UAAU;AACV;AACA;AACA,4BAA4B;AAC5B,CAAC;;AAED;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACtBA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;;;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAASuB,WAAT,CAAoBxd,MAApB,EAA4B;AACxB,QAAMyd,UAAU,gFAAAC,EAAhB;AACA,QAAIC,eAAe,IAAnB;AACA,QAAIC,cAAc,KAAlB;AACA,WAAO;AACHC,wBADG,4BACcC,SADd,EACyBC,EADzB,EAC6B;AAC5BN,oBAAQO,SAAR,CAAkBF,SAAlB,EAA6BC,EAA7B;AACA,mBAAO,IAAP;AACH,SAJE;AA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YAAM;AACpBwkC,wBAAQpiB,IAAR,CAAa,WAAb,EAA0B,UAACve,MAAD,EAAY;AAClC,0BAAK4a,IAAL;AACAwpB,mCAAeloC,IAAf,CAAoB,IAApB,EAA0B8D,MAA1B;AACH,iBAHD,EAGG,IAHH;AAIApC;AACH,aAND;AAOH,SAhDE;AAiDHkQ,gBAAQsnB;AAjDL,KAAP;AAmDH;;AAED,wDAAevb,aAAf,C;;;;;;AC3fA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AChBA;;AAEA;AACA;AACA;AACA;AACA,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC1BA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,OAAO;AAClB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA,C;;;;;;ACdA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;AChBA;;AAEA;AACA;AACA;AACA,WAAW,KAAK;AAChB,aAAa,KAAK;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C;;;;;;ACdA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACNA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACNA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACNA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;AC1BA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,EAAE;AACb,WAAW,MAAM;AACjB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACtBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;;;;;;;AC7BA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,WAAW,QAAQ;AACnB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;;AAEA;;;;;;;ACfA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACZA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClFA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7DA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oCAAoC;;AAEpC;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC9CA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC3DA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;;;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC5FA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;;;;AClBA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;;AAEA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;;;;;;;AChBA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC9CA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpCA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACZA;;AAEA;AACA;AACA;AACA;AACA,WAAW,YAAY;AACvB,aAAa,YAAY;AACzB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;;AClCA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,QAAQ;AACnB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,MAAM;AACjB,WAAW,OAAO,WAAW;AAC7B,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvCA;;AAEA;AACA;;AAEA;;;;;;;ACLA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;;;;ACpCA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxBA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/GA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxFA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;;;;;;;AChBA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;ACvBA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7CA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxBA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACtCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChBA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7BA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACtBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACtBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,WAAW,EAAE;AACb,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7BA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACdA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACZA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;AClBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;;;;;;;ACzBA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACfA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;ACrBA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;;;;;;ACjBA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;;;;;;ACzBA;;AAEA;AACA;;AAEA;;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnBA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;;;;;;;;ACrBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;ACrBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;;AAEA;;;;;;;ACjBA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,EAAE;AACf;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;;;;;;;ACbA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjCA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;;;;;;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,SAAS;AACtB;AACA;AACA,wCAAwC,SAAS;AACjD;AACA;AACA,WAAW,SAAS,GAAG,SAAS;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACzBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,MAAM;AACjB,aAAa,MAAM;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACrBA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,aAAa;AACxB,WAAW,EAAE;AACb,aAAa,EAAE;AACf;AACA;AACA,iBAAiB,QAAQ,OAAO,SAAS,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChCA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC5EA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,iBAAiB;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC7DA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA,iBAAiB;AACjB,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;;;;;;ACxEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,SAAS;AACpB,aAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACvCA;AACA;AACA;;AAEA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;;;;;;;AC5BA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB,WAAW,SAAS;AACpB,aAAa,OAAO;AACpB;AACA;AACA,iBAAiB;AACjB;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;;;;ACpCA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,aAAa;AACxB,aAAa,SAAS;AACtB;AACA;AACA;AACA,MAAM,OAAO,SAAS,EAAE;AACxB,MAAM,OAAO,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,QAAQ;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACjBA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,SAAS;AACtB,UAAU;AACV;AACA,aAAa,SAAS;AACtB,UAAU;AACV;AACA;AACA;AACA;;AAEA;;;;;;;AC/BA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,EAAE;AACb,aAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA","file":"quagga.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(factory.toString()).default;\n\telse if(typeof exports === 'object')\n\t\texports[\"Quagga\"] = factory(factory.toString()).default;\n\telse\n\t\troot[\"Quagga\"] = factory(factory.toString()).default;\n})(this, function(__factorySource__) {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/myModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 209);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9d35fc115b98fa66d01a","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isArray.js\n// module id = 0\n// module chunks = 0","var freeGlobal = require('./_freeGlobal');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_root.js\n// module id = 1\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isObject.js\n// module id = 2\n// module chunks = 0","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getNative.js\n// module id = 3\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isObjectLike.js\n// module id = 4\n// module chunks = 0","import BarcodeReader from './barcode_reader';\nimport {merge} from 'lodash';\n\nfunction EANReader(opts, supplements) {\n opts = merge(getDefaulConfig(), opts);\n BarcodeReader.call(this, opts, supplements);\n}\n\nfunction getDefaulConfig() {\n var config = {};\n\n Object.keys(EANReader.CONFIG_KEYS).forEach(function(key) {\n config[key] = EANReader.CONFIG_KEYS[key].default;\n });\n return config;\n}\n\nvar properties = {\n CODE_L_START: {value: 0},\n CODE_G_START: {value: 10},\n START_PATTERN: {value: [1, 1, 1]},\n STOP_PATTERN: {value: [1, 1, 1]},\n MIDDLE_PATTERN: {value: [1, 1, 1, 1, 1]},\n EXTENSION_START_PATTERN: {value: [1, 1, 2]},\n CODE_PATTERN: {value: [\n [3, 2, 1, 1],\n [2, 2, 2, 1],\n [2, 1, 2, 2],\n [1, 4, 1, 1],\n [1, 1, 3, 2],\n [1, 2, 3, 1],\n [1, 1, 1, 4],\n [1, 3, 1, 2],\n [1, 2, 1, 3],\n [3, 1, 1, 2],\n [1, 1, 2, 3],\n [1, 2, 2, 2],\n [2, 2, 1, 2],\n [1, 1, 4, 1],\n [2, 3, 1, 1],\n [1, 3, 2, 1],\n [4, 1, 1, 1],\n [2, 1, 3, 1],\n [3, 1, 2, 1],\n [2, 1, 1, 3]\n ]},\n CODE_FREQUENCY: {value: [0, 11, 13, 14, 19, 25, 28, 21, 22, 26]},\n SINGLE_CODE_ERROR: {value: 0.70},\n AVG_CODE_ERROR: {value: 0.48},\n FORMAT: {value: \"ean_13\", writeable: false}\n};\n\nEANReader.prototype = Object.create(BarcodeReader.prototype, properties);\nEANReader.prototype.constructor = EANReader;\n\nEANReader.prototype._decodeCode = function(start, coderange) {\n var counter = [0, 0, 0, 0],\n i,\n self = this,\n offset = start,\n isWhite = !self._row[offset],\n counterPos = 0,\n bestMatch = {\n error: Number.MAX_VALUE,\n code: -1,\n start: start,\n end: start\n },\n code,\n error;\n\n if (!coderange) {\n coderange = self.CODE_PATTERN.length;\n }\n\n for ( i = offset; i < self._row.length; i++) {\n if (self._row[i] ^ isWhite) {\n counter[counterPos]++;\n } else {\n if (counterPos === counter.length - 1) {\n for (code = 0; code < coderange; code++) {\n error = self._matchPattern(counter, self.CODE_PATTERN[code]);\n if (error < bestMatch.error) {\n bestMatch.code = code;\n bestMatch.error = error;\n }\n }\n bestMatch.end = i;\n if (bestMatch.error > self.AVG_CODE_ERROR) {\n return null;\n }\n return bestMatch;\n } else {\n counterPos++;\n }\n counter[counterPos] = 1;\n isWhite = !isWhite;\n }\n }\n return null;\n};\n\nEANReader.prototype._findPattern = function(pattern, offset, isWhite, tryHarder, epsilon) {\n var counter = [],\n self = this,\n i,\n counterPos = 0,\n bestMatch = {\n error: Number.MAX_VALUE,\n code: -1,\n start: 0,\n end: 0\n },\n error,\n j,\n sum;\n\n if (!offset) {\n offset = self._nextSet(self._row);\n }\n\n if (isWhite === undefined) {\n isWhite = false;\n }\n\n if (tryHarder === undefined) {\n tryHarder = true;\n }\n\n if ( epsilon === undefined) {\n epsilon = self.AVG_CODE_ERROR;\n }\n\n for ( i = 0; i < pattern.length; i++) {\n counter[i] = 0;\n }\n\n for ( i = offset; i < self._row.length; i++) {\n if (self._row[i] ^ isWhite) {\n counter[counterPos]++;\n } else {\n if (counterPos === counter.length - 1) {\n sum = 0;\n for ( j = 0; j < counter.length; j++) {\n sum += counter[j];\n }\n error = self._matchPattern(counter, pattern);\n\n if (error < epsilon) {\n bestMatch.error = error;\n bestMatch.start = i - sum;\n bestMatch.end = i;\n return bestMatch;\n }\n if (tryHarder) {\n for ( j = 0; j < counter.length - 2; j++) {\n counter[j] = counter[j + 2];\n }\n counter[counter.length - 2] = 0;\n counter[counter.length - 1] = 0;\n counterPos--;\n } else {\n return null;\n }\n } else {\n counterPos++;\n }\n counter[counterPos] = 1;\n isWhite = !isWhite;\n }\n }\n return null;\n};\n\nEANReader.prototype._findStart = function() {\n var self = this,\n leadingWhitespaceStart,\n offset = self._nextSet(self._row),\n startInfo;\n\n while (!startInfo) {\n startInfo = self._findPattern(self.START_PATTERN, offset);\n if (!startInfo) {\n return null;\n }\n leadingWhitespaceStart = startInfo.start - (startInfo.end - startInfo.start);\n if (leadingWhitespaceStart >= 0) {\n if (self._matchRange(leadingWhitespaceStart, startInfo.start, 0)) {\n return startInfo;\n }\n }\n offset = startInfo.end;\n startInfo = null;\n }\n};\n\nEANReader.prototype._verifyTrailingWhitespace = function(endInfo) {\n var self = this,\n trailingWhitespaceEnd;\n\n trailingWhitespaceEnd = endInfo.end + (endInfo.end - endInfo.start);\n if (trailingWhitespaceEnd < self._row.length) {\n if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {\n return endInfo;\n }\n }\n return null;\n};\n\nEANReader.prototype._findEnd = function(offset, isWhite) {\n var self = this,\n endInfo = self._findPattern(self.STOP_PATTERN, offset, isWhite, false);\n\n return endInfo !== null ? self._verifyTrailingWhitespace(endInfo) : null;\n};\n\nEANReader.prototype._calculateFirstDigit = function(codeFrequency) {\n var i,\n self = this;\n\n for ( i = 0; i < self.CODE_FREQUENCY.length; i++) {\n if (codeFrequency === self.CODE_FREQUENCY[i]) {\n return i;\n }\n }\n return null;\n};\n\nEANReader.prototype._decodePayload = function(code, result, decodedCodes) {\n var i,\n self = this,\n codeFrequency = 0x0,\n firstDigit;\n\n for ( i = 0; i < 6; i++) {\n code = self._decodeCode(code.end);\n if (!code) {\n return null;\n }\n if (code.code >= self.CODE_G_START) {\n code.code = code.code - self.CODE_G_START;\n codeFrequency |= 1 << (5 - i);\n } else {\n codeFrequency |= 0 << (5 - i);\n }\n result.push(code.code);\n decodedCodes.push(code);\n }\n\n firstDigit = self._calculateFirstDigit(codeFrequency);\n if (firstDigit === null) {\n return null;\n }\n result.unshift(firstDigit);\n\n code = self._findPattern(self.MIDDLE_PATTERN, code.end, true, false);\n if (code === null) {\n return null;\n }\n decodedCodes.push(code);\n\n for ( i = 0; i < 6; i++) {\n code = self._decodeCode(code.end, self.CODE_G_START);\n if (!code) {\n return null;\n }\n decodedCodes.push(code);\n result.push(code.code);\n }\n\n return code;\n};\n\nEANReader.prototype._decode = function() {\n var startInfo,\n self = this,\n code,\n result = [],\n decodedCodes = [],\n resultInfo = {};\n\n startInfo = self._findStart();\n if (!startInfo) {\n return null;\n }\n code = {\n code: startInfo.code,\n start: startInfo.start,\n end: startInfo.end\n };\n decodedCodes.push(code);\n code = self._decodePayload(code, result, decodedCodes);\n if (!code) {\n return null;\n }\n code = self._findEnd(code.end, false);\n if (!code){\n return null;\n }\n\n decodedCodes.push(code);\n\n // Checksum\n if (!self._checksum(result)) {\n return null;\n }\n\n if (this.supplements.length > 0) {\n let ext = this._decodeExtensions(code.end);\n if (!ext) {\n return null;\n }\n let lastCode = ext.decodedCodes[ext.decodedCodes.length-1],\n endInfo = {\n start: lastCode.start + (((lastCode.end - lastCode.start) / 2) | 0),\n end: lastCode.end\n };\n if(!self._verifyTrailingWhitespace(endInfo)) {\n return null;\n }\n resultInfo = {\n supplement: ext,\n code: result.join(\"\") + ext.code\n }\n }\n\n return {\n code: result.join(\"\"),\n start: startInfo.start,\n end: code.end,\n codeset: \"\",\n startInfo: startInfo,\n decodedCodes: decodedCodes,\n ...resultInfo\n };\n};\n\nEANReader.prototype._decodeExtensions = function(offset) {\n var i,\n start = this._nextSet(this._row, offset),\n startInfo = this._findPattern(this.EXTENSION_START_PATTERN, start, false, false),\n result;\n\n if (startInfo === null) {\n return null;\n }\n\n for (i = 0; i < this.supplements.length; i++) {\n result = this.supplements[i].decode(this._row, startInfo.end);\n if (result !== null) {\n return {\n code: result.code,\n start,\n startInfo,\n end: result.end,\n codeset: \"\",\n decodedCodes: result.decodedCodes\n }\n }\n }\n return null;\n};\n\nEANReader.prototype._checksum = function(result) {\n var sum = 0, i;\n\n for ( i = result.length - 2; i >= 0; i -= 2) {\n sum += result[i];\n }\n sum *= 3;\n for ( i = result.length - 1; i >= 0; i -= 2) {\n sum += result[i];\n }\n return sum % 10 === 0;\n};\n\nEANReader.CONFIG_KEYS = {\n supplements: {\n 'type': 'arrayOf(string)',\n 'default': [],\n 'description': 'Allowed extensions to be decoded (2 and/or 5)'\n }\n};\n\nexport default (EANReader);\n\n\n\n// WEBPACK FOOTER //\n// ./src/reader/ean_reader.js","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseGetTag.js\n// module id = 6\n// module chunks = 0","export default {\n drawRect: function(pos, size, ctx, style){\n ctx.strokeStyle = style.color;\n ctx.fillStyle = style.color;\n ctx.lineWidth = 1;\n ctx.beginPath();\n ctx.strokeRect(pos.x, pos.y, size.x, size.y);\n },\n drawPath: function(path, def, ctx, style) {\n ctx.strokeStyle = style.color;\n ctx.fillStyle = style.color;\n ctx.lineWidth = style.lineWidth;\n ctx.beginPath();\n ctx.moveTo(path[0][def.x], path[0][def.y]);\n for (var j = 1; j < path.length; j++) {\n ctx.lineTo(path[j][def.x], path[j][def.y]);\n }\n ctx.closePath();\n ctx.stroke();\n },\n drawImage: function(imageData, size, ctx) {\n var canvasData = ctx.getImageData(0, 0, size.x, size.y),\n data = canvasData.data,\n imageDataPos = imageData.length,\n canvasDataPos = data.length,\n value;\n\n if (canvasDataPos / imageDataPos !== 4) {\n return false;\n }\n while (imageDataPos--){\n value = imageData[imageDataPos];\n data[--canvasDataPos] = 255;\n data[--canvasDataPos] = value;\n data[--canvasDataPos] = value;\n data[--canvasDataPos] = value;\n }\n ctx.putImageData(canvasData, 0, 0);\n return true;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/image_debug.js","function BarcodeReader(config, supplements) {\n this._row = [];\n this.config = config || {};\n this.supplements = supplements;\n return this;\n}\n\nBarcodeReader.prototype._nextUnset = function(line, start) {\n var i;\n\n if (start === undefined) {\n start = 0;\n }\n for (i = start; i < line.length; i++) {\n if (!line[i]) {\n return i;\n }\n }\n return line.length;\n};\n\nBarcodeReader.prototype._matchPattern = function(counter, code, maxSingleError) {\n var i,\n error = 0,\n singleError = 0,\n sum = 0,\n modulo = 0,\n barWidth,\n count,\n scaled;\n\n maxSingleError = maxSingleError || this.SINGLE_CODE_ERROR || 1;\n\n for (i = 0; i < counter.length; i++) {\n sum += counter[i];\n modulo += code[i];\n }\n if (sum < modulo) {\n return Number.MAX_VALUE;\n }\n barWidth = sum / modulo;\n maxSingleError *= barWidth;\n\n for (i = 0; i < counter.length; i++) {\n count = counter[i];\n scaled = code[i] * barWidth;\n singleError = Math.abs(count - scaled) / scaled;\n if (singleError > maxSingleError) {\n return Number.MAX_VALUE;\n }\n error += singleError;\n }\n return error / modulo;\n};\n\nBarcodeReader.prototype._nextSet = function(line, offset) {\n var i;\n\n offset = offset || 0;\n for (i = offset; i < line.length; i++) {\n if (line[i]) {\n return i;\n }\n }\n return line.length;\n};\n\nBarcodeReader.prototype._correctBars = function(counter, correction, indices) {\n var length = indices.length,\n tmp = 0;\n while(length--) {\n tmp = counter[indices[length]] * (1 - ((1 - correction) / 2));\n if (tmp > 1) {\n counter[indices[length]] = tmp;\n }\n }\n}\n\nBarcodeReader.prototype._matchTrace = function(cmpCounter, epsilon) {\n var counter = [],\n i,\n self = this,\n offset = self._nextSet(self._row),\n isWhite = !self._row[offset],\n counterPos = 0,\n bestMatch = {\n error: Number.MAX_VALUE,\n code: -1,\n start: 0\n },\n error;\n\n if (cmpCounter) {\n for ( i = 0; i < cmpCounter.length; i++) {\n counter.push(0);\n }\n for ( i = offset; i < self._row.length; i++) {\n if (self._row[i] ^ isWhite) {\n counter[counterPos]++;\n } else {\n if (counterPos === counter.length - 1) {\n error = self._matchPattern(counter, cmpCounter);\n\n if (error < epsilon) {\n bestMatch.start = i - offset;\n bestMatch.end = i;\n bestMatch.counter = counter;\n return bestMatch;\n } else {\n return null;\n }\n } else {\n counterPos++;\n }\n counter[counterPos] = 1;\n isWhite = !isWhite;\n }\n }\n } else {\n counter.push(0);\n for ( i = offset; i < self._row.length; i++) {\n if (self._row[i] ^ isWhite) {\n counter[counterPos]++;\n } else {\n counterPos++;\n counter.push(0);\n counter[counterPos] = 1;\n isWhite = !isWhite;\n }\n }\n }\n\n // if cmpCounter was not given\n bestMatch.start = offset;\n bestMatch.end = self._row.length - 1;\n bestMatch.counter = counter;\n return bestMatch;\n};\n\nBarcodeReader.prototype.decodePattern = function(pattern) {\n var self = this,\n result;\n\n self._row = pattern;\n result = self._decode();\n if (result === null) {\n self._row.reverse();\n result = self._decode();\n if (result) {\n result.direction = BarcodeReader.DIRECTION.REVERSE;\n result.start = self._row.length - result.start;\n result.end = self._row.length - result.end;\n }\n } else {\n result.direction = BarcodeReader.DIRECTION.FORWARD;\n }\n if (result) {\n result.format = self.FORMAT;\n }\n return result;\n};\n\nBarcodeReader.prototype._matchRange = function(start, end, value) {\n var i;\n\n start = start < 0 ? 0 : start;\n for (i = start; i < end; i++) {\n if (this._row[i] !== value) {\n return false;\n }\n }\n return true;\n};\n\nBarcodeReader.prototype._fillCounters = function(offset, end, isWhite) {\n var self = this,\n counterPos = 0,\n i,\n counters = [];\n\n isWhite = (typeof isWhite !== 'undefined') ? isWhite : true;\n offset = (typeof offset !== 'undefined') ? offset : self._nextUnset(self._row);\n end = end || self._row.length;\n\n counters[counterPos] = 0;\n for (i = offset; i < end; i++) {\n if (self._row[i] ^ isWhite) {\n counters[counterPos]++;\n } else {\n counterPos++;\n counters[counterPos] = 1;\n isWhite = !isWhite;\n }\n }\n return counters;\n};\n\nObject.defineProperty(BarcodeReader.prototype, \"FORMAT\", {\n value: 'unknown',\n writeable: false\n});\n\nBarcodeReader.DIRECTION = {\n FORWARD: 1,\n REVERSE: -1\n};\n\nBarcodeReader.Exception = {\n StartNotFoundException: \"Start-Info was not found!\",\n CodeNotFoundException: \"Code could not be found!\",\n PatternNotFoundException: \"Pattern could not be found!\"\n};\n\nBarcodeReader.CONFIG_KEYS = {};\n\nexport default BarcodeReader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/reader/barcode_reader.js","module.exports = clone\n\n/**\n * Creates a new vec2 initialized with values from an existing vector\n *\n * @param {vec2} a vector to clone\n * @returns {vec2} a new 2D vector\n */\nfunction clone(a) {\n var out = new Float32Array(2)\n out[0] = a[0]\n out[1] = a[1]\n return out\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gl-vec2/clone.js\n// module id = 9\n// module chunks = 0","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_Symbol.js\n// module id = 10\n// module chunks = 0","var isSymbol = require('./isSymbol');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_toKey.js\n// module id = 11\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/eq.js\n// module id = 12\n// module chunks = 0","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isArguments.js\n// module id = 13\n// module chunks = 0","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isArrayLike.js\n// module id = 14\n// module chunks = 0","var baseMerge = require('./_baseMerge'),\n createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nmodule.exports = merge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/merge.js\n// module id = 15\n// module chunks = 0","export default {\n init: function(arr, val) {\n var l = arr.length;\n while (l--) {\n arr[l] = val;\n }\n },\n\n /**\n * Shuffles the content of an array\n * @return {Array} the array itself shuffled\n */\n shuffle: function(arr) {\n var i = arr.length - 1, j, x;\n for (i; i >= 0; i--) {\n j = Math.floor(Math.random() * i);\n x = arr[i];\n arr[i] = arr[j];\n arr[j] = x;\n }\n return arr;\n },\n\n toPointList: function(arr) {\n var i, j, row = [], rows = [];\n for ( i = 0; i < arr.length; i++) {\n row = [];\n for ( j = 0; j < arr[i].length; j++) {\n row[j] = arr[i][j];\n }\n rows[i] = \"[\" + row.join(\",\") + \"]\";\n }\n return \"[\" + rows.join(\",\\r\\n\") + \"]\";\n },\n\n /**\n * returns the elements which's score is bigger than the threshold\n * @return {Array} the reduced array\n */\n threshold: function(arr, threshold, scoreFunc) {\n var i, queue = [];\n for ( i = 0; i < arr.length; i++) {\n if (scoreFunc.apply(arr, [arr[i]]) >= threshold) {\n queue.push(arr[i]);\n }\n }\n return queue;\n },\n\n maxIndex: function(arr) {\n var i, max = 0;\n for ( i = 0; i < arr.length; i++) {\n if (arr[i] > arr[max]) {\n max = i;\n }\n }\n return max;\n },\n\n max: function(arr) {\n var i, max = 0;\n for ( i = 0; i < arr.length; i++) {\n if (arr[i] > max) {\n max = arr[i];\n }\n }\n return max;\n },\n\n sum: function(arr) {\n var length = arr.length,\n sum = 0;\n\n while (length--) {\n sum += arr[length];\n }\n return sum;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/array_helper.js","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_ListCache.js\n// module id = 17\n// module chunks = 0","var eq = require('./eq');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_assocIndexOf.js\n// module id = 18\n// module chunks = 0","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_castPath.js\n// module id = 19\n// module chunks = 0","var isKeyable = require('./_isKeyable');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getMapData.js\n// module id = 20\n// module chunks = 0","/** 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 length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isIndex.js\n// module id = 21\n// module chunks = 0","/** 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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isPrototype.js\n// module id = 22\n// module chunks = 0","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_nativeCreate.js\n// module id = 23\n// module chunks = 0","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && 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\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isBuffer.js\n// module id = 24\n// module chunks = 0","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isTypedArray.js\n// module id = 25\n// module chunks = 0","import Cluster2 from './cluster';\nimport ArrayHelper from './array_helper';\nconst vec2 = {\n clone: require('gl-vec2/clone')\n};\nconst vec3 = {\n clone: require('gl-vec3/clone')\n};\n\n/**\n * @param x x-coordinate\n * @param y y-coordinate\n * @return ImageReference {x,y} Coordinate\n */\nexport function imageRef(x, y) {\n var that = {\n x: x,\n y: y,\n toVec2: function() {\n return vec2.clone([this.x, this.y]);\n },\n toVec3: function() {\n return vec3.clone([this.x, this.y, 1]);\n },\n round: function() {\n this.x = this.x > 0.0 ? Math.floor(this.x + 0.5) : Math.floor(this.x - 0.5);\n this.y = this.y > 0.0 ? Math.floor(this.y + 0.5) : Math.floor(this.y - 0.5);\n return this;\n }\n };\n return that;\n};\n\n/**\n * Computes an integral image of a given grayscale image.\n * @param imageDataContainer {ImageDataContainer} the image to be integrated\n */\nexport function computeIntegralImage2(imageWrapper, integralWrapper) {\n var imageData = imageWrapper.data;\n var width = imageWrapper.size.x;\n var height = imageWrapper.size.y;\n var integralImageData = integralWrapper.data;\n var sum = 0, posA = 0, posB = 0, posC = 0, posD = 0, x, y;\n\n // sum up first column\n posB = width;\n sum = 0;\n for ( y = 1; y < height; y++) {\n sum += imageData[posA];\n integralImageData[posB] += sum;\n posA += width;\n posB += width;\n }\n\n posA = 0;\n posB = 1;\n sum = 0;\n for ( x = 1; x < width; x++) {\n sum += imageData[posA];\n integralImageData[posB] += sum;\n posA++;\n posB++;\n }\n\n for ( y = 1; y < height; y++) {\n posA = y * width + 1;\n posB = (y - 1) * width + 1;\n posC = y * width;\n posD = (y - 1) * width;\n for ( x = 1; x < width; x++) {\n integralImageData[posA] +=\n imageData[posA] + integralImageData[posB] + integralImageData[posC] - integralImageData[posD];\n posA++;\n posB++;\n posC++;\n posD++;\n }\n }\n};\n\nexport function computeIntegralImage(imageWrapper, integralWrapper) {\n var imageData = imageWrapper.data;\n var width = imageWrapper.size.x;\n var height = imageWrapper.size.y;\n var integralImageData = integralWrapper.data;\n var sum = 0;\n\n // sum up first row\n for (var i = 0; i < width; i++) {\n sum += imageData[i];\n integralImageData[i] = sum;\n }\n\n for (var v = 1; v < height; v++) {\n sum = 0;\n for (var u = 0; u < width; u++) {\n sum += imageData[v * width + u];\n integralImageData[((v) * width) + u] = sum + integralImageData[(v - 1) * width + u];\n }\n }\n};\n\nexport function thresholdImage(imageWrapper, threshold, targetWrapper) {\n if (!targetWrapper) {\n targetWrapper = imageWrapper;\n }\n var imageData = imageWrapper.data, length = imageData.length, targetData = targetWrapper.data;\n\n while (length--) {\n targetData[length] = imageData[length] < threshold ? 1 : 0;\n }\n};\n\nexport function computeHistogram(imageWrapper, bitsPerPixel) {\n if (!bitsPerPixel) {\n bitsPerPixel = 8;\n }\n var imageData = imageWrapper.data,\n length = imageData.length,\n bitShift = 8 - bitsPerPixel,\n bucketCnt = 1 << bitsPerPixel,\n hist = new Int32Array(bucketCnt);\n\n while (length--) {\n hist[imageData[length] >> bitShift]++;\n }\n return hist;\n};\n\nexport function sharpenLine(line) {\n var i,\n length = line.length,\n left = line[0],\n center = line[1],\n right;\n\n for (i = 1; i < length - 1; i++) {\n right = line[i + 1];\n // -1 4 -1 kernel\n line[i - 1] = (((center * 2) - left - right)) & 255;\n left = center;\n center = right;\n }\n return line;\n};\n\nexport function determineOtsuThreshold(imageWrapper, bitsPerPixel) {\n if (!bitsPerPixel) {\n bitsPerPixel = 8;\n }\n var hist,\n threshold,\n bitShift = 8 - bitsPerPixel;\n\n function px(init, end) {\n var sum = 0, i;\n for ( i = init; i <= end; i++) {\n sum += hist[i];\n }\n return sum;\n }\n\n function mx(init, end) {\n var i, sum = 0;\n\n for ( i = init; i <= end; i++) {\n sum += i * hist[i];\n }\n\n return sum;\n }\n\n function determineThreshold() {\n var vet = [0], p1, p2, p12, k, m1, m2, m12,\n max = (1 << bitsPerPixel) - 1;\n\n hist = computeHistogram(imageWrapper, bitsPerPixel);\n for ( k = 1; k < max; k++) {\n p1 = px(0, k);\n p2 = px(k + 1, max);\n p12 = p1 * p2;\n if (p12 === 0) {\n p12 = 1;\n }\n m1 = mx(0, k) * p2;\n m2 = mx(k + 1, max) * p1;\n m12 = m1 - m2;\n vet[k] = m12 * m12 / p12;\n }\n return ArrayHelper.maxIndex(vet);\n }\n\n threshold = determineThreshold();\n return threshold << bitShift;\n};\n\nexport function otsuThreshold(imageWrapper, targetWrapper) {\n var threshold = determineOtsuThreshold(imageWrapper);\n\n thresholdImage(imageWrapper, threshold, targetWrapper);\n return threshold;\n};\n\n// local thresholding\nexport function computeBinaryImage(imageWrapper, integralWrapper, targetWrapper) {\n computeIntegralImage(imageWrapper, integralWrapper);\n\n if (!targetWrapper) {\n targetWrapper = imageWrapper;\n }\n var imageData = imageWrapper.data;\n var targetData = targetWrapper.data;\n var width = imageWrapper.size.x;\n var height = imageWrapper.size.y;\n var integralImageData = integralWrapper.data;\n var sum = 0, v, u, kernel = 3, A, B, C, D, avg, size = (kernel * 2 + 1) * (kernel * 2 + 1);\n\n // clear out top & bottom-border\n for ( v = 0; v <= kernel; v++) {\n for ( u = 0; u < width; u++) {\n targetData[((v) * width) + u] = 0;\n targetData[(((height - 1) - v) * width) + u] = 0;\n }\n }\n\n // clear out left & right border\n for ( v = kernel; v < height - kernel; v++) {\n for ( u = 0; u <= kernel; u++) {\n targetData[((v) * width) + u] = 0;\n targetData[((v) * width) + (width - 1 - u)] = 0;\n }\n }\n\n for ( v = kernel + 1; v < height - kernel - 1; v++) {\n for ( u = kernel + 1; u < width - kernel; u++) {\n A = integralImageData[(v - kernel - 1) * width + (u - kernel - 1)];\n B = integralImageData[(v - kernel - 1) * width + (u + kernel)];\n C = integralImageData[(v + kernel) * width + (u - kernel - 1)];\n D = integralImageData[(v + kernel) * width + (u + kernel)];\n sum = D - C - B + A;\n avg = sum / (size);\n targetData[v * width + u] = imageData[v * width + u] > (avg + 5) ? 0 : 1;\n }\n }\n};\n\nexport function cluster(points, threshold, property) {\n var i, k, cluster, point, clusters = [];\n\n if (!property) {\n property = \"rad\";\n }\n\n function addToCluster(newPoint) {\n var found = false;\n for ( k = 0; k < clusters.length; k++) {\n cluster = clusters[k];\n if (cluster.fits(newPoint)) {\n cluster.add(newPoint);\n found = true;\n }\n }\n return found;\n }\n\n // iterate over each cloud\n for ( i = 0; i < points.length; i++) {\n point = Cluster2.createPoint(points[i], i, property);\n if (!addToCluster(point)) {\n clusters.push(Cluster2.create(point, threshold));\n }\n }\n return clusters;\n};\n\nexport const Tracer = {\n trace: function(points, vec) {\n var iteration, maxIterations = 10, top = [], result = [], centerPos = 0, currentPos = 0;\n\n function trace(idx, forward) {\n var from, to, toIdx, predictedPos, thresholdX = 1, thresholdY = Math.abs(vec[1] / 10), found = false;\n\n function match(pos, predicted) {\n if (pos.x > (predicted.x - thresholdX)\n && pos.x < (predicted.x + thresholdX)\n && pos.y > (predicted.y - thresholdY)\n && pos.y < (predicted.y + thresholdY)) {\n return true;\n } else {\n return false;\n }\n }\n\n // check if the next index is within the vec specifications\n // if not, check as long as the threshold is met\n\n from = points[idx];\n if (forward) {\n predictedPos = {\n x: from.x + vec[0],\n y: from.y + vec[1]\n };\n } else {\n predictedPos = {\n x: from.x - vec[0],\n y: from.y - vec[1]\n };\n }\n\n toIdx = forward ? idx + 1 : idx - 1;\n to = points[toIdx];\n while (to && ( found = match(to, predictedPos)) !== true && (Math.abs(to.y - from.y) < vec[1])) {\n toIdx = forward ? toIdx + 1 : toIdx - 1;\n to = points[toIdx];\n }\n\n return found ? toIdx : null;\n }\n\n for ( iteration = 0; iteration < maxIterations; iteration++) {\n // randomly select point to start with\n centerPos = Math.floor(Math.random() * points.length);\n\n // trace forward\n top = [];\n currentPos = centerPos;\n top.push(points[currentPos]);\n while (( currentPos = trace(currentPos, true)) !== null) {\n top.push(points[currentPos]);\n }\n if (centerPos > 0) {\n currentPos = centerPos;\n while (( currentPos = trace(currentPos, false)) !== null) {\n top.push(points[currentPos]);\n }\n }\n\n if (top.length > result.length) {\n result = top;\n }\n }\n return result;\n }\n};\n\nexport const DILATE = 1;\nexport const ERODE = 2;\n\nexport function dilate(inImageWrapper, outImageWrapper) {\n var v,\n u,\n inImageData = inImageWrapper.data,\n outImageData = outImageWrapper.data,\n height = inImageWrapper.size.y,\n width = inImageWrapper.size.x,\n sum,\n yStart1,\n yStart2,\n xStart1,\n xStart2;\n\n for ( v = 1; v < height - 1; v++) {\n for ( u = 1; u < width - 1; u++) {\n yStart1 = v - 1;\n yStart2 = v + 1;\n xStart1 = u - 1;\n xStart2 = u + 1;\n sum = inImageData[yStart1 * width + xStart1] + inImageData[yStart1 * width + xStart2] +\n inImageData[v * width + u] +\n inImageData[yStart2 * width + xStart1] + inImageData[yStart2 * width + xStart2];\n outImageData[v * width + u] = sum > 0 ? 1 : 0;\n }\n }\n};\n\nexport function erode(inImageWrapper, outImageWrapper) {\n var v,\n u,\n inImageData = inImageWrapper.data,\n outImageData = outImageWrapper.data,\n height = inImageWrapper.size.y,\n width = inImageWrapper.size.x,\n sum,\n yStart1,\n yStart2,\n xStart1,\n xStart2;\n\n for ( v = 1; v < height - 1; v++) {\n for ( u = 1; u < width - 1; u++) {\n yStart1 = v - 1;\n yStart2 = v + 1;\n xStart1 = u - 1;\n xStart2 = u + 1;\n sum = inImageData[yStart1 * width + xStart1] + inImageData[yStart1 * width + xStart2] +\n inImageData[v * width + u] +\n inImageData[yStart2 * width + xStart1] + inImageData[yStart2 * width + xStart2];\n outImageData[v * width + u] = sum === 5 ? 1 : 0;\n }\n }\n};\n\nexport function subtract(aImageWrapper, bImageWrapper, resultImageWrapper) {\n if (!resultImageWrapper) {\n resultImageWrapper = aImageWrapper;\n }\n var length = aImageWrapper.data.length,\n aImageData = aImageWrapper.data,\n bImageData = bImageWrapper.data,\n cImageData = resultImageWrapper.data;\n\n while (length--) {\n cImageData[length] = aImageData[length] - bImageData[length];\n }\n};\n\nexport function bitwiseOr(aImageWrapper, bImageWrapper, resultImageWrapper) {\n if (!resultImageWrapper) {\n resultImageWrapper = aImageWrapper;\n }\n var length = aImageWrapper.data.length,\n aImageData = aImageWrapper.data,\n bImageData = bImageWrapper.data,\n cImageData = resultImageWrapper.data;\n\n while (length--) {\n cImageData[length] = aImageData[length] || bImageData[length];\n }\n};\n\nexport function countNonZero(imageWrapper) {\n var length = imageWrapper.data.length, data = imageWrapper.data, sum = 0;\n\n while (length--) {\n sum += data[length];\n }\n return sum;\n};\n\nexport function topGeneric(list, top, scoreFunc) {\n var i, minIdx = 0, min = 0, queue = [], score, hit, pos;\n\n for ( i = 0; i < top; i++) {\n queue[i] = {\n score: 0,\n item: null\n };\n }\n\n for ( i = 0; i < list.length; i++) {\n score = scoreFunc.apply(this, [list[i]]);\n if (score > min) {\n hit = queue[minIdx];\n hit.score = score;\n hit.item = list[i];\n min = Number.MAX_VALUE;\n for ( pos = 0; pos < top; pos++) {\n if (queue[pos].score < min) {\n min = queue[pos].score;\n minIdx = pos;\n }\n }\n }\n }\n\n return queue;\n};\n\nexport function grayArrayFromImage(htmlImage, offsetX, ctx, array) {\n ctx.drawImage(htmlImage, offsetX, 0, htmlImage.width, htmlImage.height);\n var ctxData = ctx.getImageData(offsetX, 0, htmlImage.width, htmlImage.height).data;\n computeGray(ctxData, array);\n};\n\nexport function grayArrayFromContext(ctx, size, offset, array) {\n var ctxData = ctx.getImageData(offset.x, offset.y, size.x, size.y).data;\n computeGray(ctxData, array);\n};\n\nexport function grayAndHalfSampleFromCanvasData(canvasData, size, outArray) {\n var topRowIdx = 0;\n var bottomRowIdx = size.x;\n var endIdx = Math.floor(canvasData.length / 4);\n var outWidth = size.x / 2;\n var outImgIdx = 0;\n var inWidth = size.x;\n var i;\n\n while (bottomRowIdx < endIdx) {\n for ( i = 0; i < outWidth; i++) {\n outArray[outImgIdx] = Math.floor((\n (0.299 * canvasData[topRowIdx * 4 + 0] +\n 0.587 * canvasData[topRowIdx * 4 + 1] +\n 0.114 * canvasData[topRowIdx * 4 + 2]) +\n (0.299 * canvasData[(topRowIdx + 1) * 4 + 0] +\n 0.587 * canvasData[(topRowIdx + 1) * 4 + 1] +\n 0.114 * canvasData[(topRowIdx + 1) * 4 + 2]) +\n (0.299 * canvasData[(bottomRowIdx) * 4 + 0] +\n 0.587 * canvasData[(bottomRowIdx) * 4 + 1] +\n 0.114 * canvasData[(bottomRowIdx) * 4 + 2]) +\n (0.299 * canvasData[(bottomRowIdx + 1) * 4 + 0] +\n 0.587 * canvasData[(bottomRowIdx + 1) * 4 + 1] +\n 0.114 * canvasData[(bottomRowIdx + 1) * 4 + 2])) / 4);\n outImgIdx++;\n topRowIdx = topRowIdx + 2;\n bottomRowIdx = bottomRowIdx + 2;\n }\n topRowIdx = topRowIdx + inWidth;\n bottomRowIdx = bottomRowIdx + inWidth;\n }\n};\n\nexport function computeGray(imageData, outArray, config) {\n var l = (imageData.length / 4) | 0,\n i,\n singleChannel = config && config.singleChannel === true;\n\n if (singleChannel) {\n for (i = 0; i < l; i++) {\n outArray[i] = imageData[i * 4 + 0];\n }\n } else {\n for (i = 0; i < l; i++) {\n outArray[i] = Math.floor(\n 0.299 * imageData[i * 4 + 0] + 0.587 * imageData[i * 4 + 1] + 0.114 * imageData[i * 4 + 2]);\n }\n }\n};\n\nexport function loadImageArray(src, callback, canvas) {\n if (!canvas) {\n canvas = document.createElement('canvas');\n }\n var img = new Image();\n img.callback = callback;\n img.onload = function() {\n canvas.width = this.width;\n canvas.height = this.height;\n var ctx = canvas.getContext('2d');\n ctx.drawImage(this, 0, 0);\n var array = new Uint8Array(this.width * this.height);\n ctx.drawImage(this, 0, 0);\n var data = ctx.getImageData(0, 0, this.width, this.height).data;\n computeGray(data, array);\n this.callback(array, {\n x: this.width,\n y: this.height\n }, this);\n };\n img.src = src;\n};\n\n/**\n * @param inImg {ImageWrapper} input image to be sampled\n * @param outImg {ImageWrapper} to be stored in\n */\nexport function halfSample(inImgWrapper, outImgWrapper) {\n var inImg = inImgWrapper.data;\n var inWidth = inImgWrapper.size.x;\n var outImg = outImgWrapper.data;\n var topRowIdx = 0;\n var bottomRowIdx = inWidth;\n var endIdx = inImg.length;\n var outWidth = inWidth / 2;\n var outImgIdx = 0;\n while (bottomRowIdx < endIdx) {\n for (var i = 0; i < outWidth; i++) {\n outImg[outImgIdx] = Math.floor(\n (inImg[topRowIdx] + inImg[topRowIdx + 1] + inImg[bottomRowIdx] + inImg[bottomRowIdx + 1]) / 4);\n outImgIdx++;\n topRowIdx = topRowIdx + 2;\n bottomRowIdx = bottomRowIdx + 2;\n }\n topRowIdx = topRowIdx + inWidth;\n bottomRowIdx = bottomRowIdx + inWidth;\n }\n};\n\nexport function hsv2rgb(hsv, rgb) {\n var h = hsv[0],\n s = hsv[1],\n v = hsv[2],\n c = v * s,\n x = c * (1 - Math.abs((h / 60) % 2 - 1)),\n m = v - c,\n r = 0,\n g = 0,\n b = 0;\n\n rgb = rgb || [0, 0, 0];\n\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else if (h < 360) {\n r = c;\n b = x;\n }\n rgb[0] = ((r + m) * 255) | 0;\n rgb[1] = ((g + m) * 255) | 0;\n rgb[2] = ((b + m) * 255) | 0;\n return rgb;\n};\n\nexport function _computeDivisors(n) {\n var largeDivisors = [],\n divisors = [],\n i;\n\n for (i = 1; i < Math.sqrt(n) + 1; i++) {\n if (n % i === 0) {\n divisors.push(i);\n if (i !== n / i) {\n largeDivisors.unshift(Math.floor(n / i));\n }\n }\n }\n return divisors.concat(largeDivisors);\n};\n\nfunction _computeIntersection(arr1, arr2) {\n var i = 0,\n j = 0,\n result = [];\n\n while (i < arr1.length && j < arr2.length) {\n if (arr1[i] === arr2[j]) {\n result.push(arr1[i]);\n i++;\n j++;\n } else if (arr1[i] > arr2[j]) {\n j++;\n } else {\n i++;\n }\n }\n return result;\n};\n\nexport function calculatePatchSize(patchSize, imgSize) {\n var divisorsX = _computeDivisors(imgSize.x),\n divisorsY = _computeDivisors(imgSize.y),\n wideSide = Math.max(imgSize.x, imgSize.y),\n common = _computeIntersection(divisorsX, divisorsY),\n nrOfPatchesList = [8, 10, 15, 20, 32, 60, 80],\n nrOfPatchesMap = {\n \"x-small\": 5,\n \"small\": 4,\n \"medium\": 3,\n \"large\": 2,\n \"x-large\": 1\n },\n nrOfPatchesIdx = nrOfPatchesMap[patchSize] || nrOfPatchesMap.medium,\n nrOfPatches = nrOfPatchesList[nrOfPatchesIdx],\n desiredPatchSize = Math.floor(wideSide / nrOfPatches),\n optimalPatchSize;\n\n function findPatchSizeForDivisors(divisors) {\n var i = 0,\n found = divisors[Math.floor(divisors.length / 2)];\n\n while (i < (divisors.length - 1) && divisors[i] < desiredPatchSize) {\n i++;\n }\n if (i > 0) {\n if (Math.abs(divisors[i] - desiredPatchSize) > Math.abs(divisors[i - 1] - desiredPatchSize)) {\n found = divisors[i - 1];\n } else {\n found = divisors[i];\n }\n }\n if (desiredPatchSize / found < nrOfPatchesList[nrOfPatchesIdx + 1] / nrOfPatchesList[nrOfPatchesIdx] &&\n desiredPatchSize / found > nrOfPatchesList[nrOfPatchesIdx - 1] / nrOfPatchesList[nrOfPatchesIdx] ) {\n return {x: found, y: found};\n }\n return null;\n }\n\n optimalPatchSize = findPatchSizeForDivisors(common);\n if (!optimalPatchSize) {\n optimalPatchSize = findPatchSizeForDivisors(_computeDivisors(wideSide));\n if (!optimalPatchSize) {\n optimalPatchSize = findPatchSizeForDivisors((_computeDivisors(desiredPatchSize * nrOfPatches)));\n }\n }\n return optimalPatchSize;\n};\n\nexport function _parseCSSDimensionValues(value) {\n var dimension = {\n value: parseFloat(value),\n unit: value.indexOf(\"%\") === value.length - 1 ? \"%\" : \"%\"\n };\n\n return dimension;\n};\n\nexport const _dimensionsConverters = {\n top: function(dimension, context) {\n if (dimension.unit === \"%\") {\n return Math.floor(context.height * (dimension.value / 100));\n }\n },\n right: function(dimension, context) {\n if (dimension.unit === \"%\") {\n return Math.floor(context.width - (context.width * (dimension.value / 100)));\n }\n },\n bottom: function(dimension, context) {\n if (dimension.unit === \"%\") {\n return Math.floor(context.height - (context.height * (dimension.value / 100)));\n }\n },\n left: function(dimension, context) {\n if (dimension.unit === \"%\") {\n return Math.floor(context.width * (dimension.value / 100));\n }\n }\n};\n\nexport function computeImageArea(inputWidth, inputHeight, area) {\n var context = {width: inputWidth, height: inputHeight};\n\n var parsedArea = Object.keys(area).reduce(function(result, key) {\n var value = area[key],\n parsed = _parseCSSDimensionValues(value),\n calculated = _dimensionsConverters[key](parsed, context);\n\n result[key] = calculated;\n return result;\n }, {});\n\n return {\n sx: parsedArea.left,\n sy: parsedArea.top,\n sw: parsedArea.right - parsedArea.left,\n sh: parsedArea.bottom - parsedArea.top\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/cv_utils.js","import SubImage from './subImage';\nimport {hsv2rgb} from '../common/cv_utils';\nimport ArrayHelper from '../common/array_helper';\nconst vec2 = {\n clone: require('gl-vec2/clone'),\n};\n\n/**\n * Represents a basic image combining the data and size.\n * In addition, some methods for manipulation are contained.\n * @param size {x,y} The size of the image in pixel\n * @param data {Array} If given, a flat array containing the pixel data\n * @param ArrayType {Type} If given, the desired DataType of the Array (may be typed/non-typed)\n * @param initialize {Boolean} Indicating if the array should be initialized on creation.\n * @returns {ImageWrapper}\n */\nfunction ImageWrapper(size, data, ArrayType, initialize) {\n if (!data) {\n if (ArrayType) {\n this.data = new ArrayType(size.x * size.y);\n if (ArrayType === Array && initialize) {\n ArrayHelper.init(this.data, 0);\n }\n } else {\n this.data = new Uint8Array(size.x * size.y);\n if (Uint8Array === Array && initialize) {\n ArrayHelper.init(this.data, 0);\n }\n }\n } else {\n this.data = data;\n }\n this.size = size;\n}\n\n/**\n * tests if a position is within the image with a given offset\n * @param imgRef {x, y} The location to test\n * @param border Number the padding value in pixel\n * @returns {Boolean} true if location inside the image's border, false otherwise\n * @see cvd/image.h\n */\nImageWrapper.prototype.inImageWithBorder = function(imgRef, border) {\n return (imgRef.x >= border)\n && (imgRef.y >= border)\n && (imgRef.x < (this.size.x - border))\n && (imgRef.y < (this.size.y - border));\n};\n\n/**\n * Performs bilinear sampling\n * @param inImg Image to extract sample from\n * @param x the x-coordinate\n * @param y the y-coordinate\n * @returns the sampled value\n * @see cvd/vision.h\n */\nImageWrapper.sample = function(inImg, x, y) {\n var lx = Math.floor(x);\n var ly = Math.floor(y);\n var w = inImg.size.x;\n var base = ly * inImg.size.x + lx;\n var a = inImg.data[base + 0];\n var b = inImg.data[base + 1];\n var c = inImg.data[base + w];\n var d = inImg.data[base + w + 1];\n var e = a - b;\n x -= lx;\n y -= ly;\n\n var result = Math.floor(x * (y * (e - c + d) - e) + y * (c - a) + a);\n return result;\n};\n\n/**\n * Initializes a given array. Sets each element to zero.\n * @param array {Array} The array to initialize\n */\nImageWrapper.clearArray = function(array) {\n var l = array.length;\n while (l--) {\n array[l] = 0;\n }\n};\n\n/**\n * Creates a {SubImage} from the current image ({this}).\n * @param from {ImageRef} The position where to start the {SubImage} from. (top-left corner)\n * @param size {ImageRef} The size of the resulting image\n * @returns {SubImage} A shared part of the original image\n */\nImageWrapper.prototype.subImage = function(from, size) {\n return new SubImage(from, size, this);\n};\n\n/**\n * Creates an {ImageWrapper) and copies the needed underlying image-data area\n * @param imageWrapper {ImageWrapper} The target {ImageWrapper} where the data should be copied\n * @param from {ImageRef} The location where to copy from (top-left location)\n */\nImageWrapper.prototype.subImageAsCopy = function(imageWrapper, from) {\n var sizeY = imageWrapper.size.y, sizeX = imageWrapper.size.x;\n var x, y;\n for ( x = 0; x < sizeX; x++) {\n for ( y = 0; y < sizeY; y++) {\n imageWrapper.data[y * sizeX + x] = this.data[(from.y + y) * this.size.x + from.x + x];\n }\n }\n};\n\nImageWrapper.prototype.copyTo = function(imageWrapper) {\n var length = this.data.length, srcData = this.data, dstData = imageWrapper.data;\n\n while (length--) {\n dstData[length] = srcData[length];\n }\n};\n\n/**\n * Retrieves a given pixel position from the image\n * @param x {Number} The x-position\n * @param y {Number} The y-position\n * @returns {Number} The grayscale value at the pixel-position\n */\nImageWrapper.prototype.get = function(x, y) {\n return this.data[y * this.size.x + x];\n};\n\n/**\n * Retrieves a given pixel position from the image\n * @param x {Number} The x-position\n * @param y {Number} The y-position\n * @returns {Number} The grayscale value at the pixel-position\n */\nImageWrapper.prototype.getSafe = function(x, y) {\n var i;\n\n if (!this.indexMapping) {\n this.indexMapping = {\n x: [],\n y: []\n };\n for (i = 0; i < this.size.x; i++) {\n this.indexMapping.x[i] = i;\n this.indexMapping.x[i + this.size.x] = i;\n }\n for (i = 0; i < this.size.y; i++) {\n this.indexMapping.y[i] = i;\n this.indexMapping.y[i + this.size.y] = i;\n }\n }\n return this.data[(this.indexMapping.y[y + this.size.y]) * this.size.x + this.indexMapping.x[x + this.size.x]];\n};\n\n/**\n * Sets a given pixel position in the image\n * @param x {Number} The x-position\n * @param y {Number} The y-position\n * @param value {Number} The grayscale value to set\n * @returns {ImageWrapper} The Image itself (for possible chaining)\n */\nImageWrapper.prototype.set = function(x, y, value) {\n this.data[y * this.size.x + x] = value;\n return this;\n};\n\n/**\n * Sets the border of the image (1 pixel) to zero\n */\nImageWrapper.prototype.zeroBorder = function() {\n var i, width = this.size.x, height = this.size.y, data = this.data;\n for ( i = 0; i < width; i++) {\n data[i] = data[(height - 1) * width + i] = 0;\n }\n for ( i = 1; i < height - 1; i++) {\n data[i * width] = data[i * width + (width - 1)] = 0;\n }\n};\n\n/**\n * Inverts a binary image in place\n */\nImageWrapper.prototype.invert = function() {\n var data = this.data, length = data.length;\n\n while (length--) {\n data[length] = data[length] ? 0 : 1;\n }\n};\n\nImageWrapper.prototype.convolve = function(kernel) {\n var x, y, kx, ky, kSize = (kernel.length / 2) | 0, accu = 0;\n for ( y = 0; y < this.size.y; y++) {\n for ( x = 0; x < this.size.x; x++) {\n accu = 0;\n for ( ky = -kSize; ky <= kSize; ky++) {\n for ( kx = -kSize; kx <= kSize; kx++) {\n accu += kernel[ky + kSize][kx + kSize] * this.getSafe(x + kx, y + ky);\n }\n }\n this.data[y * this.size.x + x] = accu;\n }\n }\n};\n\nImageWrapper.prototype.moments = function(labelcount) {\n var data = this.data,\n x,\n y,\n height = this.size.y,\n width = this.size.x,\n val,\n ysq,\n labelsum = [],\n i,\n label,\n mu11,\n mu02,\n mu20,\n x_,\n y_,\n tmp,\n result = [],\n PI = Math.PI,\n PI_4 = PI / 4;\n\n if (labelcount <= 0) {\n return result;\n }\n\n for ( i = 0; i < labelcount; i++) {\n labelsum[i] = {\n m00: 0,\n m01: 0,\n m10: 0,\n m11: 0,\n m02: 0,\n m20: 0,\n theta: 0,\n rad: 0\n };\n }\n\n for ( y = 0; y < height; y++) {\n ysq = y * y;\n for ( x = 0; x < width; x++) {\n val = data[y * width + x];\n if (val > 0) {\n label = labelsum[val - 1];\n label.m00 += 1;\n label.m01 += y;\n label.m10 += x;\n label.m11 += x * y;\n label.m02 += ysq;\n label.m20 += x * x;\n }\n }\n }\n\n for ( i = 0; i < labelcount; i++) {\n label = labelsum[i];\n if (!isNaN(label.m00) && label.m00 !== 0) {\n x_ = label.m10 / label.m00;\n y_ = label.m01 / label.m00;\n mu11 = label.m11 / label.m00 - x_ * y_;\n mu02 = label.m02 / label.m00 - y_ * y_;\n mu20 = label.m20 / label.m00 - x_ * x_;\n tmp = (mu02 - mu20) / (2 * mu11);\n tmp = 0.5 * Math.atan(tmp) + (mu11 >= 0 ? PI_4 : -PI_4 ) + PI;\n label.theta = (tmp * 180 / PI + 90) % 180 - 90;\n if (label.theta < 0) {\n label.theta += 180;\n }\n label.rad = tmp > PI ? tmp - PI : tmp;\n label.vec = vec2.clone([Math.cos(tmp), Math.sin(tmp)]);\n result.push(label);\n }\n }\n\n return result;\n};\n\n/**\n * Displays the {ImageWrapper} in a given canvas\n * @param canvas {Canvas} The canvas element to write to\n * @param scale {Number} Scale which is applied to each pixel-value\n */\nImageWrapper.prototype.show = function(canvas, scale) {\n var ctx,\n frame,\n data,\n current,\n pixel,\n x,\n y;\n\n if (!scale) {\n scale = 1.0;\n }\n ctx = canvas.getContext('2d');\n canvas.width = this.size.x;\n canvas.height = this.size.y;\n frame = ctx.getImageData(0, 0, canvas.width, canvas.height);\n data = frame.data;\n current = 0;\n for (y = 0; y < this.size.y; y++) {\n for (x = 0; x < this.size.x; x++) {\n pixel = y * this.size.x + x;\n current = this.get(x, y) * scale;\n data[pixel * 4 + 0] = current;\n data[pixel * 4 + 1] = current;\n data[pixel * 4 + 2] = current;\n data[pixel * 4 + 3] = 255;\n }\n }\n //frame.data = data;\n ctx.putImageData(frame, 0, 0);\n};\n\n/**\n * Displays the {SubImage} in a given canvas\n * @param canvas {Canvas} The canvas element to write to\n * @param scale {Number} Scale which is applied to each pixel-value\n */\nImageWrapper.prototype.overlay = function(canvas, scale, from) {\n if (!scale || scale < 0 || scale > 360) {\n scale = 360;\n }\n var hsv = [0, 1, 1];\n var rgb = [0, 0, 0];\n var whiteRgb = [255, 255, 255];\n var blackRgb = [0, 0, 0];\n var result = [];\n var ctx = canvas.getContext('2d');\n var frame = ctx.getImageData(from.x, from.y, this.size.x, this.size.y);\n var data = frame.data;\n var length = this.data.length;\n while (length--) {\n hsv[0] = this.data[length] * scale;\n result = hsv[0] <= 0 ? whiteRgb : hsv[0] >= 360 ? blackRgb : hsv2rgb(hsv, rgb);\n data[length * 4 + 0] = result[0];\n data[length * 4 + 1] = result[1];\n data[length * 4 + 2] = result[2];\n data[length * 4 + 3] = 255;\n }\n ctx.putImageData(frame, from.x, from.y);\n};\n\nexport default ImageWrapper;\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/image_wrapper.js","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_Map.js\n// module id = 28\n// module chunks = 0","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_MapCache.js\n// module id = 29\n// module chunks = 0","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_Stack.js\n// module id = 30\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_arrayPush.js\n// module id = 31\n// module chunks = 0","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseAssignValue.js\n// module id = 32\n// module chunks = 0","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseGet.js\n// module id = 33\n// module chunks = 0","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getPrototype.js\n// module id = 34\n// module chunks = 0","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isKey.js\n// module id = 35\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/identity.js\n// module id = 36\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isFunction.js\n// module id = 37\n// module chunks = 0","/** 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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isLength.js\n// module id = 38\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isSymbol.js\n// module id = 39\n// module chunks = 0","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeysIn = require('./_baseKeysIn'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\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 * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/keysIn.js\n// module id = 40\n// module chunks = 0","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 41\n// module chunks = 0","import ImageDebug from '../common/image_debug';\n\nfunction contains(codeResult, list) {\n if (list) {\n return list.some(function (item) {\n return Object.keys(item).every(function (key) {\n return item[key] === codeResult[key];\n });\n });\n }\n return false;\n}\n\nfunction passesFilter(codeResult, filter) {\n if (typeof filter === 'function') {\n return filter(codeResult);\n }\n return true;\n}\n\nexport default {\n create: function(config) {\n var canvas = document.createElement(\"canvas\"),\n ctx = canvas.getContext(\"2d\"),\n results = [],\n capacity = config.capacity || 20,\n capture = config.capture === true;\n\n function matchesConstraints(codeResult) {\n return capacity\n && codeResult\n && !contains(codeResult, config.blacklist)\n && passesFilter(codeResult, config.filter);\n }\n\n return {\n addResult: function(data, imageSize, codeResult) {\n var result = {};\n\n if (matchesConstraints(codeResult)) {\n capacity--;\n result.codeResult = codeResult;\n if (capture) {\n canvas.width = imageSize.x;\n canvas.height = imageSize.y;\n ImageDebug.drawImage(data, imageSize, ctx);\n result.frame = canvas.toDataURL();\n }\n results.push(result);\n }\n },\n getResults: function() {\n return results;\n }\n };\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/analytics/result_collector.js","let config;\n\nif (ENV.development){\n config = require('./config.dev.js');\n} else if (ENV.node) {\n config = require('./config.node.js');\n} else {\n config = require('./config.prod.js');\n}\n\nexport default config;\n\n\n\n// WEBPACK FOOTER //\n// ./src/config/config.js","/**\n * http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization\n */\nvar Tracer = {\n searchDirections: [[0, 1], [1, 1], [1, 0], [1, -1], [0, -1], [-1, -1], [-1, 0], [-1, 1]],\n create: function(imageWrapper, labelWrapper) {\n var imageData = imageWrapper.data,\n labelData = labelWrapper.data,\n searchDirections = this.searchDirections,\n width = imageWrapper.size.x,\n pos;\n\n function trace(current, color, label, edgelabel) {\n var i,\n y,\n x;\n\n for ( i = 0; i < 7; i++) {\n y = current.cy + searchDirections[current.dir][0];\n x = current.cx + searchDirections[current.dir][1];\n pos = y * width + x;\n if ((imageData[pos] === color) && ((labelData[pos] === 0) || (labelData[pos] === label))) {\n labelData[pos] = label;\n current.cy = y;\n current.cx = x;\n return true;\n } else {\n if (labelData[pos] === 0) {\n labelData[pos] = edgelabel;\n }\n current.dir = (current.dir + 1) % 8;\n }\n }\n return false;\n }\n\n function vertex2D(x, y, dir) {\n return {\n dir: dir,\n x: x,\n y: y,\n next: null,\n prev: null\n };\n }\n\n function contourTracing(sy, sx, label, color, edgelabel) {\n var Fv = null,\n Cv,\n P,\n ldir,\n current = {\n cx: sx,\n cy: sy,\n dir: 0\n };\n\n if (trace(current, color, label, edgelabel)) {\n Fv = vertex2D(sx, sy, current.dir);\n Cv = Fv;\n ldir = current.dir;\n P = vertex2D(current.cx, current.cy, 0);\n P.prev = Cv;\n Cv.next = P;\n P.next = null;\n Cv = P;\n do {\n current.dir = (current.dir + 6) % 8;\n trace(current, color, label, edgelabel);\n if (ldir !== current.dir) {\n Cv.dir = current.dir;\n P = vertex2D(current.cx, current.cy, 0);\n P.prev = Cv;\n Cv.next = P;\n P.next = null;\n Cv = P;\n } else {\n Cv.dir = ldir;\n Cv.x = current.cx;\n Cv.y = current.cy;\n }\n ldir = current.dir;\n } while (current.cx !== sx || current.cy !== sy);\n Fv.prev = Cv.prev;\n Cv.prev.next = Fv;\n }\n return Fv;\n }\n\n return {\n trace: function(current, color, label, edgelabel) {\n return trace(current, color, label, edgelabel);\n },\n contourTracing: function(sy, sx, label, color, edgelabel) {\n return contourTracing(sy, sx, label, color, edgelabel);\n }\n };\n }\n};\n\nexport default (Tracer);\n\n\n\n// WEBPACK FOOTER //\n// ./src/locator/tracer.js","import BarcodeReader from './barcode_reader';\nimport ArrayHelper from '../common/array_helper';\n\nfunction Code39Reader() {\n BarcodeReader.call(this);\n}\n\nvar properties = {\n ALPHABETH_STRING: {value: \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%\"},\n ALPHABET: {value: [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,\n 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 45, 46, 32, 42, 36, 47, 43, 37]},\n CHARACTER_ENCODINGS: {value: [0x034, 0x121, 0x061, 0x160, 0x031, 0x130, 0x070, 0x025, 0x124, 0x064, 0x109, 0x049,\n 0x148, 0x019, 0x118, 0x058, 0x00D, 0x10C, 0x04C, 0x01C, 0x103, 0x043, 0x142, 0x013, 0x112, 0x052, 0x007, 0x106,\n 0x046, 0x016, 0x181, 0x0C1, 0x1C0, 0x091, 0x190, 0x0D0, 0x085, 0x184, 0x0C4, 0x094, 0x0A8, 0x0A2, 0x08A, 0x02A\n ]},\n ASTERISK: {value: 0x094},\n FORMAT: {value: \"code_39\", writeable: false}\n};\n\nCode39Reader.prototype = Object.create(BarcodeReader.prototype, properties);\nCode39Reader.prototype.constructor = Code39Reader;\n\nCode39Reader.prototype._toCounters = function(start, counter) {\n var self = this,\n numCounters = counter.length,\n end = self._row.length,\n isWhite = !self._row[start],\n i,\n counterPos = 0;\n\n ArrayHelper.init(counter, 0);\n\n for ( i = start; i < end; i++) {\n if (self._row[i] ^ isWhite) {\n counter[counterPos]++;\n } else {\n counterPos++;\n if (counterPos === numCounters) {\n break;\n } else {\n counter[counterPos] = 1;\n isWhite = !isWhite;\n }\n }\n }\n\n return counter;\n};\n\nCode39Reader.prototype._decode = function() {\n var self = this,\n counters = [0, 0, 0, 0, 0, 0, 0, 0, 0],\n result = [],\n start = self._findStart(),\n decodedChar,\n lastStart,\n pattern,\n nextStart;\n\n if (!start) {\n return null;\n }\n nextStart = self._nextSet(self._row, start.end);\n\n do {\n counters = self._toCounters(nextStart, counters);\n pattern = self._toPattern(counters);\n if (pattern < 0) {\n return null;\n }\n decodedChar = self._patternToChar(pattern);\n if (decodedChar < 0){\n return null;\n }\n result.push(decodedChar);\n lastStart = nextStart;\n nextStart += ArrayHelper.sum(counters);\n nextStart = self._nextSet(self._row, nextStart);\n } while (decodedChar !== '*');\n result.pop();\n\n if (!result.length) {\n return null;\n }\n\n if (!self._verifyTrailingWhitespace(lastStart, nextStart, counters)) {\n return null;\n }\n\n return {\n code: result.join(\"\"),\n start: start.start,\n end: nextStart,\n startInfo: start,\n decodedCodes: result\n };\n};\n\nCode39Reader.prototype._verifyTrailingWhitespace = function(lastStart, nextStart, counters) {\n var trailingWhitespaceEnd,\n patternSize = ArrayHelper.sum(counters);\n\n trailingWhitespaceEnd = nextStart - lastStart - patternSize;\n if ((trailingWhitespaceEnd * 3) >= patternSize) {\n return true;\n }\n return false;\n};\n\nCode39Reader.prototype._patternToChar = function(pattern) {\n var i,\n self = this;\n\n for (i = 0; i < self.CHARACTER_ENCODINGS.length; i++) {\n if (self.CHARACTER_ENCODINGS[i] === pattern) {\n return String.fromCharCode(self.ALPHABET[i]);\n }\n }\n return -1;\n};\n\nCode39Reader.prototype._findNextWidth = function(counters, current) {\n var i,\n minWidth = Number.MAX_VALUE;\n\n for (i = 0; i < counters.length; i++) {\n if (counters[i] < minWidth && counters[i] > current) {\n minWidth = counters[i];\n }\n }\n\n return minWidth;\n};\n\nCode39Reader.prototype._toPattern = function(counters) {\n var numCounters = counters.length,\n maxNarrowWidth = 0,\n numWideBars = numCounters,\n wideBarWidth = 0,\n self = this,\n pattern,\n i;\n\n while (numWideBars > 3) {\n maxNarrowWidth = self._findNextWidth(counters, maxNarrowWidth);\n numWideBars = 0;\n pattern = 0;\n for (i = 0; i < numCounters; i++) {\n if (counters[i] > maxNarrowWidth) {\n pattern |= 1 << (numCounters - 1 - i);\n numWideBars++;\n wideBarWidth += counters[i];\n }\n }\n\n if (numWideBars === 3) {\n for (i = 0; i < numCounters && numWideBars > 0; i++) {\n if (counters[i] > maxNarrowWidth) {\n numWideBars--;\n if ((counters[i] * 2) >= wideBarWidth) {\n return -1;\n }\n }\n }\n return pattern;\n }\n }\n return -1;\n};\n\nCode39Reader.prototype._findStart = function() {\n var self = this,\n offset = self._nextSet(self._row),\n patternStart = offset,\n counter = [0, 0, 0, 0, 0, 0, 0, 0, 0],\n counterPos = 0,\n isWhite = false,\n i,\n j,\n whiteSpaceMustStart;\n\n for ( i = offset; i < self._row.length; i++) {\n if (self._row[i] ^ isWhite) {\n counter[counterPos]++;\n } else {\n if (counterPos === counter.length - 1) {\n // find start pattern\n if (self._toPattern(counter) === self.ASTERISK) {\n whiteSpaceMustStart = Math.floor(Math.max(0, patternStart - ((i - patternStart) / 4)));\n if (self._matchRange(whiteSpaceMustStart, patternStart, 0)) {\n return {\n start: patternStart,\n end: i\n };\n }\n }\n\n patternStart += counter[0] + counter[1];\n for ( j = 0; j < 7; j++) {\n counter[j] = counter[j + 2];\n }\n counter[7] = 0;\n counter[8] = 0;\n counterPos--;\n } else {\n counterPos++;\n }\n counter[counterPos] = 1;\n isWhite = !isWhite;\n }\n }\n return null;\n};\n\nexport default Code39Reader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/reader/code_39_reader.js","module.exports = dot\n\n/**\n * Calculates the dot product of two vec2's\n *\n * @param {vec2} a the first operand\n * @param {vec2} b the second operand\n * @returns {Number} dot product of a and b\n */\nfunction dot(a, b) {\n return a[0] * b[0] + a[1] * b[1]\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gl-vec2/dot.js\n// module id = 46\n// module chunks = 0","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_Uint8Array.js\n// module id = 47\n// module chunks = 0","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_arrayLikeKeys.js\n// module id = 48\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_arrayMap.js\n// module id = 49\n// module chunks = 0","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignMergeValue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_assignMergeValue.js\n// module id = 50\n// module chunks = 0","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\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 * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_assignValue.js\n// module id = 51\n// module chunks = 0","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseGetAllKeys.js\n// module id = 52\n// module chunks = 0","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIsEqual.js\n// module id = 53\n// module chunks = 0","var baseMatches = require('./_baseMatches'),\n baseMatchesProperty = require('./_baseMatchesProperty'),\n identity = require('./identity'),\n isArray = require('./isArray'),\n property = require('./property');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIteratee.js\n// module id = 54\n// module chunks = 0","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseKeys.js\n// module id = 55\n// module chunks = 0","var baseGet = require('./_baseGet'),\n baseSet = require('./_baseSet'),\n castPath = require('./_castPath');\n\n/**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\nfunction basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n}\n\nmodule.exports = basePickBy;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_basePickBy.js\n// module id = 56\n// module chunks = 0","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_defineProperty.js\n// module id = 57\n// module chunks = 0","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\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 // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_equalArrays.js\n// module id = 58\n// module chunks = 0","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_freeGlobal.js\n// module id = 59\n// module chunks = 0","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getSymbols.js\n// module id = 60\n// module chunks = 0","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getTag.js\n// module id = 61\n// module chunks = 0","var isObject = require('./isObject');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isStrictComparable.js\n// module id = 62\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_matchesStrictComparable.js\n// module id = 63\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_overArg.js\n// module id = 64\n// module chunks = 0","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nmodule.exports = overRest;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_overRest.js\n// module id = 65\n// module chunks = 0","var baseSetToString = require('./_baseSetToString'),\n shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_setToString.js\n// module id = 66\n// module chunks = 0","/** 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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_toSource.js\n// module id = 67\n// module chunks = 0","var baseHasIn = require('./_baseHasIn'),\n hasPath = require('./_hasPath');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/hasIn.js\n// module id = 68\n// module chunks = 0","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/keys.js\n// module id = 69\n// module chunks = 0","var basePick = require('./_basePick'),\n flatRest = require('./_flatRest');\n\n/**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nmodule.exports = pick;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/pick.js\n// module id = 70\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/stubArray.js\n// module id = 71\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 72\n// module chunks = 0","import './common/typedefs';\nimport createScanner from './scanner';\nimport ImageWrapper from './common/image_wrapper';\nimport ImageDebug from './common/image_debug';\nimport ResultCollector from './analytics/result_collector';\nimport Config from './config/config';\nimport {merge} from 'lodash';\nimport {createConfigFromSource} from './input/config_factory';\n\nfunction fromConfig(config) {\n const scanner = createScanner();\n let pendingStart = null;\n let initialized = false;\n return {\n addEventListener(eventType, cb) {\n scanner.subscribe(eventType, cb);\n return this;\n },\n removeEventListener(eventType, cb) {\n scanner.unsubscribe(eventType, cb);\n return this;\n },\n start() {\n if (scanner.isRunning()) {\n return Promise.resolve(true);\n }\n if (pendingStart) {\n return pendingStart;\n }\n if (initialized) {\n scanner.start();\n return Promise.resolve(true);\n }\n pendingStart = new Promise((resolve, reject) => {\n scanner.init(config, (error) => {\n if (error) {\n console.log(error);\n reject(error);\n }\n initialized = true;\n scanner.start();\n resolve();\n pendingStart = null;\n });\n });\n return pendingStart;\n },\n stop() {\n scanner.stop();\n initialized = false;\n return this;\n },\n toPromise() {\n if (config.inputStream.type === 'LiveStream'\n || config.inputStream.type === 'VideoStream') {\n let cancelRequested = false;\n return {\n cancel() {\n cancelRequested = true;\n },\n promise: new Promise((resolve, reject) => {\n function onProcessed(result) {\n if (result && result.codeResult && result.codeResult.code) {\n scanner.stop();\n scanner.unsubscribe(\"processed\", onProcessed);\n resolve(result);\n }\n if (cancelRequested) {\n scanner.stop();\n scanner.unsubscribe(\"processed\", onProcessed);\n reject(\"cancelled!\");\n }\n }\n scanner.subscribe(\"processed\", onProcessed);\n this.start();\n })\n };\n } else {\n return new Promise((resolve, reject) => {\n scanner.decodeSingle(config, (result) => {\n if (result && result.codeResult && result.codeResult.code) {\n return resolve(result);\n }\n return reject(result);\n });\n });\n }\n },\n registerResultCollector(resultCollector) {\n scanner.registerResultCollector(resultCollector);\n },\n getCanvas() {\n return scanner.canvas.dom.image;\n },\n };\n}\n\nfunction fromSource(config, source, inputConfig = {}) {\n config = createConfigFromSource(config, inputConfig, source);\n return fromConfig(config);\n}\n\nfunction setConfig(configuration = {}, key, config = {}) {\n var mergedConfig = merge({}, configuration, {[key]: config});\n return createApi(mergedConfig);\n}\n\nfunction createApi(configuration = Config) {\n return {\n fromSource(src, inputConfig) {\n return fromSource(configuration, src, inputConfig);\n },\n fromConfig(conf) {\n return fromConfig(merge({}, configuration, conf));\n },\n decoder(conf) {\n return setConfig(configuration, \"decoder\", conf);\n },\n locator(conf) {\n return setConfig(configuration, \"locator\", conf);\n },\n throttle(timeInMs) {\n return setConfig(configuration, \"frequency\", 1000 / parseInt(timeInMs));\n },\n config(conf) {\n return createApi(merge({}, configuration, conf));\n },\n ImageWrapper,\n ImageDebug,\n ResultCollector,\n _worker: {\n createScanner\n }\n };\n}\n\nexport default createApi();\n\n\n\n// WEBPACK FOOTER //\n// ./src/quagga.js","const vec2 = {\n clone: require('gl-vec2/clone'),\n dot: require('gl-vec2/dot')\n};\n\n/**\n * Creates a cluster for grouping similar orientations of datapoints\n */\nexport default {\n create: function(point, threshold) {\n var points = [],\n center = {\n rad: 0,\n vec: vec2.clone([0, 0])\n },\n pointMap = {};\n\n function init() {\n add(point);\n updateCenter();\n }\n\n function add(pointToAdd) {\n pointMap[pointToAdd.id] = pointToAdd;\n points.push(pointToAdd);\n }\n\n function updateCenter() {\n var i, sum = 0;\n for ( i = 0; i < points.length; i++) {\n sum += points[i].rad;\n }\n center.rad = sum / points.length;\n center.vec = vec2.clone([Math.cos(center.rad), Math.sin(center.rad)]);\n }\n\n init();\n\n return {\n add: function(pointToAdd) {\n if (!pointMap[pointToAdd.id]) {\n add(pointToAdd);\n updateCenter();\n }\n },\n fits: function(otherPoint) {\n // check cosine similarity to center-angle\n var similarity = Math.abs(vec2.dot(otherPoint.point.vec, center.vec));\n if (similarity > threshold) {\n return true;\n }\n return false;\n },\n getPoints: function() {\n return points;\n },\n getCenter: function() {\n return center;\n }\n };\n },\n createPoint: function(newPoint, id, property) {\n return {\n rad: newPoint[property],\n point: newPoint,\n id: id\n };\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/cluster.js","const hasWindow = typeof window !== 'undefined';\nconst windowRef = hasWindow ? window : {};\n\nconst windowObjects = [\n \"MediaStream\",\n \"HTMLImageElement\",\n \"HTMLVideoElement\",\n \"HTMLCanvasElement\",\n \"FileList\",\n \"File\",\n \"URL\"\n];\n\nconst DOMHelper = windowObjects.reduce((result, obj) => {\n return {\n ...result,\n [obj]: obj in windowRef ? windowRef[obj] : () => {}\n };\n}, {});\n\nDOMHelper.setObject = (key, value) => {\n DOMHelper[key] = value;\n};\n\nexport default DOMHelper;\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/dom_helper.js","export default function createEventedElement() {\n var events = {};\n\n function getEvent(eventName) {\n if (!events[eventName]) {\n events[eventName] = {\n subscribers: []\n };\n }\n return events[eventName];\n }\n\n function clearEvents(){\n events = {};\n }\n\n function publishSubscription(subscription, data) {\n if (subscription.async) {\n setTimeout(function() {\n subscription.callback(data);\n }, 4);\n } else {\n subscription.callback(data);\n }\n }\n\n function subscribe(event, callback, async) {\n var subscription;\n\n if ( typeof callback === \"function\") {\n subscription = {\n callback: callback,\n async: async\n };\n } else {\n subscription = callback;\n if (!subscription.callback) {\n throw \"Callback was not specified on options\";\n }\n }\n\n getEvent(event).subscribers.push(subscription);\n }\n\n return {\n subscribe: function(event, callback, async) {\n return subscribe(event, callback, async);\n },\n publish: function(eventName, data) {\n var event = getEvent(eventName),\n subscribers = event.subscribers;\n\n // Publish one-time subscriptions\n subscribers.filter(function(subscriber) {\n return !!subscriber.once;\n }).forEach((subscriber) => {\n publishSubscription(subscriber, data);\n });\n\n // remove them from the subscriber\n event.subscribers = subscribers.filter(function(subscriber) {\n return !subscriber.once;\n });\n\n // publish the rest\n event.subscribers.forEach((subscriber) => {\n publishSubscription(subscriber, data);\n });\n },\n once: function(event, callback, async) {\n subscribe(event, {\n callback: callback,\n async: async,\n once: true\n });\n },\n unsubscribe: function(eventName, callback) {\n var event;\n\n if (eventName) {\n event = getEvent(eventName);\n if (event && callback) {\n event.subscribers = event.subscribers.filter(function(subscriber){\n return subscriber.callback !== callback;\n });\n } else {\n event.subscribers = [];\n }\n } else {\n clearEvents();\n }\n }\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/events.js","\nexport function enumerateDevices() {\n if (navigator.mediaDevices\n && typeof navigator.mediaDevices.enumerateDevices === 'function') {\n return navigator.mediaDevices.enumerateDevices();\n }\n return Promise.reject(new Error('enumerateDevices is not defined'));\n};\n\nexport function getUserMedia(constraints) {\n if (navigator.mediaDevices\n && typeof navigator.mediaDevices.getUserMedia === 'function') {\n return navigator.mediaDevices\n .getUserMedia(constraints);\n }\n return Promise.reject(new Error('getUserMedia is not defined'));\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/mediaDevices.js","/**\n * Construct representing a part of another {ImageWrapper}. Shares data\n * between the parent and the child.\n * @param from {ImageRef} The position where to start the {SubImage} from. (top-left corner)\n * @param size {ImageRef} The size of the resulting image\n * @param I {ImageWrapper} The {ImageWrapper} to share from\n * @returns {SubImage} A shared part of the original image\n */\nfunction SubImage(from, size, I) {\n if (!I) {\n I = {\n data: null,\n size: size\n };\n }\n this.data = I.data;\n this.originalSize = I.size;\n this.I = I;\n\n this.from = from;\n this.size = size;\n}\n\n/**\n * Displays the {SubImage} in a given canvas\n * @param canvas {Canvas} The canvas element to write to\n * @param scale {Number} Scale which is applied to each pixel-value\n */\nSubImage.prototype.show = function(canvas, scale) {\n var ctx,\n frame,\n data,\n current,\n y,\n x,\n pixel;\n\n if (!scale) {\n scale = 1.0;\n }\n ctx = canvas.getContext('2d');\n canvas.width = this.size.x;\n canvas.height = this.size.y;\n frame = ctx.getImageData(0, 0, canvas.width, canvas.height);\n data = frame.data;\n current = 0;\n for (y = 0; y < this.size.y; y++) {\n for (x = 0; x < this.size.x; x++) {\n pixel = y * this.size.x + x;\n current = this.get(x, y) * scale;\n data[pixel * 4 + 0] = current;\n data[pixel * 4 + 1] = current;\n data[pixel * 4 + 2] = current;\n data[pixel * 4 + 3] = 255;\n }\n }\n frame.data = data;\n ctx.putImageData(frame, 0, 0);\n};\n\n/**\n * Retrieves a given pixel position from the {SubImage}\n * @param x {Number} The x-position\n * @param y {Number} The y-position\n * @returns {Number} The grayscale value at the pixel-position\n */\nSubImage.prototype.get = function(x, y) {\n return this.data[(this.from.y + y) * this.originalSize.x + this.from.x + x];\n};\n\n/**\n * Updates the underlying data from a given {ImageWrapper}\n * @param image {ImageWrapper} The updated image\n */\nSubImage.prototype.updateData = function(image) {\n this.originalSize = image.size;\n this.data = image.data;\n};\n\n/**\n * Updates the position of the shared area\n * @param from {x,y} The new location\n * @returns {SubImage} returns {this} for possible chaining\n */\nSubImage.prototype.updateFrom = function(from) {\n this.from = from;\n return this;\n};\n\nexport default (SubImage);\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/subImage.js","/*\n * typedefs.js\n * Normalizes browser-specific prefixes\n */\n\nif (typeof window !== 'undefined') {\n window.requestAnimFrame = (function () {\n return window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function (/* function FrameRequestCallback */ callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n })();\n}\nMath.imul = Math.imul || function(a, b) {\n var ah = (a >>> 16) & 0xffff,\n al = a & 0xffff,\n bh = (b >>> 16) & 0xffff,\n bl = b & 0xffff;\n // the shift by 0 fixes the sign on the high part\n // the final |0 converts the unsigned value into a signed value\n return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0) | 0);\n};\n\nif (typeof Object.assign !== 'function') {\n Object.assign = function(target) { // .length of function is 2\n 'use strict';\n if (target === null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource !== null) { // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/common/typedefs.js","module.exports = {\n inputStream: {\n name: \"Live\",\n type: \"LiveStream\",\n constraints: {\n width: 640,\n height: 480,\n // aspectRatio: 640/480, // optional\n facingMode: \"environment\", // or user\n // deviceId: \"38745983457387598375983759834\"\n },\n area: {\n top: \"0%\",\n right: \"0%\",\n left: \"0%\",\n bottom: \"0%\"\n },\n singleChannel: false // true: only the red color-channel is read\n },\n locate: true,\n numOfWorkers: 2,\n decoder: {\n readers: [\n 'code_128_reader'\n ],\n debug: {\n drawBoundingBox: false,\n showFrequency: false,\n drawScanline: false,\n showPattern: false\n }\n },\n locator: {\n halfSample: true,\n patchSize: \"medium\", // x-small, small, medium, large, x-large\n debug: {\n showCanvas: false,\n showPatches: false,\n showFoundPatches: false,\n showSkeleton: false,\n showLabels: false,\n showPatchLabels: false,\n showRemainingPatchLabels: false,\n boxFromPatches: {\n showTransformed: false,\n showTransformedBox: false,\n showBB: false\n }\n }\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/config/config.dev.js","import Bresenham from './bresenham';\nimport ImageDebug from '../common/image_debug';\nimport Code128Reader from '../reader/code_128_reader';\nimport EANReader from '../reader/ean_reader';\nimport Code39Reader from '../reader/code_39_reader';\nimport Code39VINReader from '../reader/code_39_vin_reader';\nimport CodabarReader from '../reader/codabar_reader';\nimport UPCReader from '../reader/upc_reader';\nimport EAN8Reader from '../reader/ean_8_reader';\nimport EAN2Reader from '../reader/ean_2_reader';\nimport EAN5Reader from '../reader/ean_5_reader';\nimport UPCEReader from '../reader/upc_e_reader';\nimport I2of5Reader from '../reader/i2of5_reader';\n\nconst READERS = {\n code_128_reader: Code128Reader,\n ean_reader: EANReader,\n ean_5_reader: EAN5Reader,\n ean_2_reader: EAN2Reader,\n ean_8_reader: EAN8Reader,\n code_39_reader: Code39Reader,\n code_39_vin_reader: Code39VINReader,\n codabar_reader: CodabarReader,\n upc_reader: UPCReader,\n upc_e_reader: UPCEReader,\n i2of5_reader: I2of5Reader\n};\nexport default {\n create: function(config, inputImageWrapper) {\n var _canvas = {\n ctx: {\n frequency: null,\n pattern: null,\n overlay: null\n },\n dom: {\n frequency: null,\n pattern: null,\n overlay: null\n }\n },\n _barcodeReaders = [];\n\n initCanvas();\n initReaders();\n initConfig();\n\n function initCanvas() {\n if (ENV.development && typeof document !== 'undefined') {\n var $debug = document.querySelector(\"#debug.detection\");\n _canvas.dom.frequency = document.querySelector(\"canvas.frequency\");\n if (!_canvas.dom.frequency) {\n _canvas.dom.frequency = document.createElement(\"canvas\");\n _canvas.dom.frequency.className = \"frequency\";\n if ($debug) {\n $debug.appendChild(_canvas.dom.frequency);\n }\n }\n _canvas.ctx.frequency = _canvas.dom.frequency.getContext(\"2d\");\n\n _canvas.dom.pattern = document.querySelector(\"canvas.patternBuffer\");\n if (!_canvas.dom.pattern) {\n _canvas.dom.pattern = document.createElement(\"canvas\");\n _canvas.dom.pattern.className = \"patternBuffer\";\n if ($debug) {\n $debug.appendChild(_canvas.dom.pattern);\n }\n }\n _canvas.ctx.pattern = _canvas.dom.pattern.getContext(\"2d\");\n\n if ($debug) {\n _canvas.dom.overlay = document.querySelector(\"canvas.drawingBuffer\");\n if (!_canvas.dom.overlay) {\n _canvas.dom.overlay = document.createElement(\"canvas\");\n _canvas.dom.overlay.className = \"drawingBuffer\";\n $debug.appendChild(_canvas.dom.overlay);\n }\n _canvas.ctx.overlay = _canvas.dom.overlay.getContext(\"2d\");\n }\n }\n }\n\n function initReaders() {\n config.readers.forEach(function(readerConfig) {\n var reader,\n configuration = {},\n supplements = [];\n\n if (typeof readerConfig === 'object') {\n reader = readerConfig.format;\n configuration = readerConfig.config;\n } else if (typeof readerConfig === 'string') {\n reader = readerConfig;\n }\n if (ENV.development) {\n console.log(\"Before registering reader: \", reader);\n }\n if (configuration.supplements) {\n supplements = configuration\n .supplements.map((supplement) => {\n return new READERS[supplement]();\n });\n }\n _barcodeReaders.push(new READERS[reader](configuration, supplements));\n });\n if (ENV.development) {\n console.log(\"Registered Readers: \" + _barcodeReaders\n .map((reader) => JSON.stringify({format: reader.FORMAT, config: reader.config}))\n .join(', '));\n }\n }\n\n function initConfig() {\n if (ENV.development && typeof document !== 'undefined') {\n var i,\n vis = [{\n node: _canvas.dom.frequency,\n prop: config.debug.showFrequency\n }, {\n node: _canvas.dom.pattern,\n prop: config.debug.showPattern\n }];\n\n for (i = 0; i < vis.length; i++) {\n if (vis[i].prop === true) {\n vis[i].node.style.display = \"block\";\n } else {\n vis[i].node.style.display = \"none\";\n }\n }\n }\n }\n\n /**\n * extend the line on both ends\n * @param {Array} line\n * @param {Number} angle\n */\n function getExtendedLine(line, angle, ext) {\n function extendLine(amount) {\n var extension = {\n y: amount * Math.sin(angle),\n x: amount * Math.cos(angle)\n };\n\n line[0].y -= extension.y;\n line[0].x -= extension.x;\n line[1].y += extension.y;\n line[1].x += extension.x;\n }\n\n // check if inside image\n extendLine(ext);\n while (ext > 1 && (!inputImageWrapper.inImageWithBorder(line[0], 0)\n || !inputImageWrapper.inImageWithBorder(line[1], 0))) {\n ext -= Math.ceil(ext / 2);\n extendLine(-ext);\n }\n return line;\n }\n\n function getLine(box) {\n return [{\n x: (box[1][0] - box[0][0]) / 2 + box[0][0],\n y: (box[1][1] - box[0][1]) / 2 + box[0][1]\n }, {\n x: (box[3][0] - box[2][0]) / 2 + box[2][0],\n y: (box[3][1] - box[2][1]) / 2 + box[2][1]\n }];\n }\n\n function tryDecode(line) {\n var result = null,\n i,\n barcodeLine = Bresenham.getBarcodeLine(inputImageWrapper, line[0], line[1]);\n\n if (ENV.development && config.debug.showFrequency) {\n ImageDebug.drawPath(line, {x: 'x', y: 'y'}, _canvas.ctx.overlay, {color: 'red', lineWidth: 3});\n Bresenham.debug.printFrequency(barcodeLine.line, _canvas.dom.frequency);\n }\n\n Bresenham.toBinaryLine(barcodeLine);\n\n if (ENV.development && config.debug.showPattern) {\n Bresenham.debug.printPattern(barcodeLine.line, _canvas.dom.pattern);\n }\n\n for ( i = 0; i < _barcodeReaders.length && result === null; i++) {\n result = _barcodeReaders[i].decodePattern(barcodeLine.line);\n }\n if (result === null){\n return null;\n }\n return {\n codeResult: result,\n barcodeLine: barcodeLine\n };\n }\n\n /**\n * This method slices the given area apart and tries to detect a barcode-pattern\n * for each slice. It returns the decoded barcode, or null if nothing was found\n * @param {Array} box\n * @param {Array} line\n * @param {Number} lineAngle\n */\n function tryDecodeBruteForce(box, line, lineAngle) {\n var sideLength = Math.sqrt(Math.pow(box[1][0] - box[0][0], 2) + Math.pow((box[1][1] - box[0][1]), 2)),\n i,\n slices = 16,\n result = null,\n dir,\n extension,\n xdir = Math.sin(lineAngle),\n ydir = Math.cos(lineAngle);\n\n for ( i = 1; i < slices && result === null; i++) {\n // move line perpendicular to angle\n dir = sideLength / slices * i * (i % 2 === 0 ? -1 : 1);\n extension = {\n y: dir * xdir,\n x: dir * ydir\n };\n line[0].y += extension.x;\n line[0].x -= extension.y;\n line[1].y += extension.x;\n line[1].x -= extension.y;\n\n result = tryDecode(line);\n }\n return result;\n }\n\n function getLineLength(line) {\n return Math.sqrt(\n Math.pow(Math.abs(line[1].y - line[0].y), 2) +\n Math.pow(Math.abs(line[1].x - line[0].x), 2));\n }\n\n /**\n * With the help of the configured readers (Code128 or EAN) this function tries to detect a\n * valid barcode pattern within the given area.\n * @param {Object} box The area to search in\n * @returns {Object} the result {codeResult, line, angle, pattern, threshold}\n */\n function decodeFromBoundingBox(box) {\n var line,\n lineAngle,\n ctx = _canvas.ctx.overlay,\n result,\n lineLength;\n\n if (ENV.development) {\n if (config.debug.drawBoundingBox && ctx) {\n ImageDebug.drawPath(box, {x: 0, y: 1}, ctx, {color: \"blue\", lineWidth: 2});\n }\n }\n\n line = getLine(box);\n lineLength = getLineLength(line);\n lineAngle = Math.atan2(line[1].y - line[0].y, line[1].x - line[0].x);\n line = getExtendedLine(line, lineAngle, Math.floor(lineLength * 0.1));\n if (line === null){\n return null;\n }\n\n result = tryDecode(line);\n if (result === null) {\n result = tryDecodeBruteForce(box, line, lineAngle);\n }\n\n if (result === null) {\n return null;\n }\n\n if (ENV.development && result && config.debug.drawScanline && ctx) {\n ImageDebug.drawPath(line, {x: 'x', y: 'y'}, ctx, {color: 'red', lineWidth: 3});\n }\n\n return {\n codeResult: result.codeResult,\n line: line,\n angle: lineAngle,\n pattern: result.barcodeLine.line,\n threshold: result.barcodeLine.threshold\n };\n }\n\n return {\n decodeFromBoundingBox: function(box) {\n return decodeFromBoundingBox(box);\n },\n decodeFromBoundingBoxes: function(boxes) {\n var i, result,\n barcodes = [],\n multiple = config.multiple;\n\n for ( i = 0; i < boxes.length; i++) {\n const box = boxes[i];\n result = decodeFromBoundingBox(box) || {};\n result.box = box;\n\n if (multiple) {\n barcodes.push(result);\n } else if (result.codeResult) {\n return result;\n }\n }\n\n if (multiple) {\n return {\n barcodes\n };\n }\n },\n setReaders: function(readers) {\n config.readers = readers;\n _barcodeReaders.length = 0;\n initReaders();\n }\n };\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/decoder/barcode_decoder.js","var Bresenham = {};\n\nvar Slope = {\n DIR: {\n UP: 1,\n DOWN: -1\n }\n};\n/**\n * Scans a line of the given image from point p1 to p2 and returns a result object containing\n * gray-scale values (0-255) of the underlying pixels in addition to the min\n * and max values.\n * @param {Object} imageWrapper\n * @param {Object} p1 The start point {x,y}\n * @param {Object} p2 The end point {x,y}\n * @returns {line, min, max}\n */\nBresenham.getBarcodeLine = function(imageWrapper, p1, p2) {\n var x0 = p1.x | 0,\n y0 = p1.y | 0,\n x1 = p2.x | 0,\n y1 = p2.y | 0,\n steep = Math.abs(y1 - y0) > Math.abs(x1 - x0),\n deltax,\n deltay,\n error,\n ystep,\n y,\n tmp,\n x,\n line = [],\n imageData = imageWrapper.data,\n width = imageWrapper.size.x,\n sum = 0,\n val,\n min = 255,\n max = 0;\n\n function read(a, b) {\n val = imageData[b * width + a];\n sum += val;\n min = val < min ? val : min;\n max = val > max ? val : max;\n line.push(val);\n }\n\n if (steep) {\n tmp = x0;\n x0 = y0;\n y0 = tmp;\n\n tmp = x1;\n x1 = y1;\n y1 = tmp;\n }\n if (x0 > x1) {\n tmp = x0;\n x0 = x1;\n x1 = tmp;\n\n tmp = y0;\n y0 = y1;\n y1 = tmp;\n }\n deltax = x1 - x0;\n deltay = Math.abs(y1 - y0);\n error = (deltax / 2) | 0;\n y = y0;\n ystep = y0 < y1 ? 1 : -1;\n for ( x = x0; x < x1; x++) {\n if (steep){\n read(y, x);\n } else {\n read(x, y);\n }\n error = error - deltay;\n if (error < 0) {\n y = y + ystep;\n error = error + deltax;\n }\n }\n\n return {\n line: line,\n min: min,\n max: max\n };\n};\n\n/**\n * Converts the result from getBarcodeLine into a binary representation\n * also considering the frequency and slope of the signal for more robust results\n * @param {Object} result {line, min, max}\n */\nBresenham.toBinaryLine = function(result) {\n var min = result.min,\n max = result.max,\n line = result.line,\n slope,\n slope2,\n center = min + (max - min) / 2,\n extrema = [],\n currentDir,\n dir,\n threshold = (max - min) / 12,\n rThreshold = -threshold,\n i,\n j;\n\n // 1. find extrema\n currentDir = line[0] > center ? Slope.DIR.UP : Slope.DIR.DOWN;\n extrema.push({\n pos: 0,\n val: line[0]\n });\n for ( i = 0; i < line.length - 2; i++) {\n slope = (line[i + 1] - line[i]);\n slope2 = (line[i + 2] - line[i + 1]);\n if ((slope + slope2) < rThreshold && line[i + 1] < (center * 1.5)) {\n dir = Slope.DIR.DOWN;\n } else if ((slope + slope2) > threshold && line[i + 1] > (center * 0.5)) {\n dir = Slope.DIR.UP;\n } else {\n dir = currentDir;\n }\n\n if (currentDir !== dir) {\n extrema.push({\n pos: i,\n val: line[i]\n });\n currentDir = dir;\n }\n }\n extrema.push({\n pos: line.length,\n val: line[line.length - 1]\n });\n\n for ( j = extrema[0].pos; j < extrema[1].pos; j++) {\n line[j] = line[j] > center ? 0 : 1;\n }\n\n // iterate over extrema and convert to binary based on avg between minmax\n for ( i = 1; i < extrema.length - 1; i++) {\n if (extrema[i + 1].val > extrema[i].val) {\n threshold = (extrema[i].val + ((extrema[i + 1].val - extrema[i].val) / 3) * 2) | 0;\n } else {\n threshold = (extrema[i + 1].val + ((extrema[i].val - extrema[i + 1].val) / 3)) | 0;\n }\n\n for ( j = extrema[i].pos; j < extrema[i + 1].pos; j++) {\n line[j] = line[j] > threshold ? 0 : 1;\n }\n }\n\n return {\n line: line,\n threshold: threshold\n };\n};\n\n/**\n * Used for development only\n */\nBresenham.debug = {\n printFrequency: function(line, canvas) {\n var i,\n ctx = canvas.getContext(\"2d\");\n canvas.width = line.length;\n canvas.height = 256;\n\n ctx.beginPath();\n ctx.strokeStyle = \"blue\";\n for ( i = 0; i < line.length; i++) {\n ctx.moveTo(i, 255);\n ctx.lineTo(i, 255 - line[i]);\n }\n ctx.stroke();\n ctx.closePath();\n },\n\n printPattern: function(line, canvas) {\n var ctx = canvas.getContext(\"2d\"), i;\n\n canvas.width = line.length;\n ctx.fillColor = \"black\";\n for ( i = 0; i < line.length; i++) {\n if (line[i] === 1) {\n ctx.fillRect(i, 0, 1, 100);\n }\n }\n }\n};\n\nexport default Bresenham;\n\n\n\n// WEBPACK FOOTER //\n// ./src/decoder/bresenham.js","import {omit, pick} from 'lodash';\nimport {getUserMedia, enumerateDevices} from 'mediaDevices';\n\nconst facingMatching = {\n \"user\": /front/i,\n \"environment\": /back/i\n};\n\nvar streamRef;\n\nfunction waitForVideo(video) {\n return new Promise((resolve, reject) => {\n let attempts = 10;\n\n function checkVideo() {\n if (attempts > 0) {\n if (video.videoWidth > 0 && video.videoHeight > 0) {\n if (ENV.development) {\n console.log(video.videoWidth + \"px x \" + video.videoHeight + \"px\");\n }\n resolve();\n } else {\n window.setTimeout(checkVideo, 500);\n }\n } else {\n reject('Unable to play video stream. Is webcam working?');\n }\n attempts--;\n }\n checkVideo();\n });\n}\n\n/**\n * Tries to attach the camera-stream to a given video-element\n * and calls the callback function when the content is ready\n * @param {Object} constraints\n * @param {Object} video\n */\nfunction initCamera(video, constraints) {\n return getUserMedia(constraints)\n .then((stream) => {\n return new Promise((resolve) => {\n streamRef = stream;\n video.setAttribute(\"autoplay\", 'true');\n video.srcObject = stream;\n video.addEventListener('loadedmetadata', () => {\n video.play();\n resolve();\n });\n });\n })\n .then(waitForVideo.bind(null, video));\n}\n\nfunction deprecatedConstraints(videoConstraints) {\n const normalized = pick(videoConstraints, [\"width\", \"height\", \"facingMode\",\n \"aspectRatio\", \"deviceId\"]);\n\n if (typeof videoConstraints.minAspectRatio !== 'undefined' &&\n videoConstraints.minAspectRatio > 0) {\n normalized.aspectRatio = videoConstraints.minAspectRatio;\n console.log(\"WARNING: Constraint 'minAspectRatio' is deprecated; Use 'aspectRatio' instead\");\n }\n if (typeof videoConstraints.facing !== 'undefined') {\n normalized.facingMode = videoConstraints.facing;\n console.log(\"WARNING: Constraint 'facing' is deprecated. Use 'facingMode' instead'\");\n }\n return normalized;\n}\n\nexport function pickConstraints(videoConstraints) {\n const normalizedConstraints = {\n audio: false,\n video: deprecatedConstraints(videoConstraints)\n };\n\n if (normalizedConstraints.video.deviceId\n && normalizedConstraints.video.facingMode) {\n delete normalizedConstraints.video.facingMode;\n }\n return Promise.resolve(normalizedConstraints);\n}\n\nfunction enumerateVideoDevices() {\n return enumerateDevices()\n .then(devices => devices.filter(device => device.kind === 'videoinput'));\n}\n\nexport default {\n request: function(video, videoConstraints) {\n return pickConstraints(videoConstraints)\n .then(initCamera.bind(null, video));\n },\n release: function() {\n var tracks = streamRef && streamRef.getVideoTracks();\n if (tracks && tracks.length) {\n tracks[0].stop();\n }\n streamRef = null;\n },\n enumerateVideoDevices,\n getActiveStreamLabel: function() {\n if (streamRef) {\n const tracks = streamRef.getVideoTracks();\n if (tracks && tracks.length) {\n return tracks[0].label;\n }\n }\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/input/camera_access.js","import {merge, pick, omitBy, isEmpty} from 'lodash';\n\nimport DOMHelper from '../common/dom_helper';\n\nconst isDataURL = {regex: /^\\s*data:([a-z]+\\/[a-z0-9\\-\\+]+(;[a-z\\-]+\\=[a-z0-9\\-]+)?)?(;base64)?,[a-z0-9\\!\\$\\&\\'\\,\\(\\)\\*\\+\\,\\;\\=\\-\\.\\_\\~\\:\\@\\/\\?\\%\\s]*\\s*$/i}, // eslint-disable-line max-len\n isBlobURL = {regex: /^\\s*blob:(.*)$/i},\n isMediaURL = {regex: /^(?:(?:http[s]?|ftp):\\/)?\\/?(?:(?:[^:\\/\\s]+)(?:(?:\\/\\w+)*\\/))?([\\w\\-]+\\.([^#?\\s]+))(?:.*)?(?:#[\\w\\-]+)?$/i}, // eslint-disable-line max-len\n isImageExt = {regex: /(jpe?g|png|gif|tiff)(?:\\s+|$)/i},\n isVideoExt = {regex: /(webm|ogg|mp4|m4v)/i};\n\nexport function createConfigFromSource(config, sourceConfig, source) {\n if (source instanceof DOMHelper.MediaStream) {\n return createConfigForStream(config, sourceConfig, {srcObject: source});\n } else if (source instanceof DOMHelper.HTMLImageElement) {\n throw new Error('Source \"HTMLImageElement\": not yet supported');\n // return createConfigForImage(config, inputConfig, {image: source});\n } else if (source instanceof DOMHelper.HTMLVideoElement) {\n throw new Error('Source \"HTMLVideoElement\": not yet supported');\n // return createConfigForVideo(config, inputConfig, {video: source});\n } else if (source instanceof DOMHelper.HTMLCanvasElement) {\n return createConfigForCanvas(config, sourceConfig, {canvas: source});\n } else if (source instanceof DOMHelper.FileList) {\n if (source.length > 0) {\n return createConfigForFile(config, sourceConfig, source[0]);\n }\n } else if (source instanceof DOMHelper.File) {\n return createConfigForFile(config, sourceConfig, source);\n } else if (typeof source === 'string') {\n return createConfigForString(config, sourceConfig, source);\n } else if (typeof source === 'object'\n && (typeof source.constraints !== 'undefined'\n || typeof source.area !== 'undefined')) {\n return createConfigForLiveStream(config, source);\n } else {\n throw new Error(\"No source given!\");\n }\n}\n\nfunction createConfigForImage(config, source, inputConfig = {}) {\n const staticImageConfig = {\n inputStream: merge({\n type: \"ImageStream\",\n sequence: false,\n size: 800\n }, source),\n numOfWorkers: (ENV.development && config.debug) ? 0 : 1\n };\n return merge(\n config,\n staticImageConfig,\n {numOfWorkers: typeof config.numOfWorkers === 'number' && config.numOfWorkers > 0 ? 1 : 0},\n {inputStream: omitBy(pick(config.inputStream, ['size']), isEmpty)},\n {inputStream: inputConfig});\n}\n\nfunction createConfigForMimeType(config, inputConfig, {src, mime}) {\n const [, type] = mime.match(/^(video|image)\\/(.*)$/i) || [];\n if (type === 'video') {\n return createConfigForVideo(config, {src}, inputConfig);\n } else if (type === 'image') {\n return createConfigForImage(config, {src}, inputConfig);\n }\n throw new Error(`Source with mimetype: \"${type}\" not supported`);\n}\n\nfunction createConfigForFile(config, inputConfig, file) {\n const src = DOMHelper.URL.createObjectURL(file);\n return createConfigForMimeType(config, inputConfig, {\n src,\n mime: file.type\n });\n}\n\nfunction createConfigForString(config, inputConfig = {}, source) {\n const [, mime] = source.match(isDataURL.regex) || [];\n if (mime) {\n return createConfigForMimeType(config, inputConfig, {src: source, mime});\n }\n const blobURL = source.match(isBlobURL.regex);\n if (blobURL) {\n throw new Error(`Source \"objectURL\": not supported`);\n }\n const [, , ext] = source.match(isMediaURL.regex) || [];\n if (ext) {\n return createConfigForMediaExtension(config, inputConfig, {src: source, ext});\n }\n throw new Error(`Source \"${source}\": not recognized`);\n}\n\nfunction createConfigForMediaExtension(config, inputConfig, {src, ext}) {\n if (ext.match(isImageExt.regex)) {\n return createConfigForImage(config, {src}, inputConfig);\n } else if (ext.match(isVideoExt.regex)) {\n return createConfigForVideo(config, {src}, inputConfig);\n }\n throw new Error(`Source \"MediaString\": not recognized`);\n}\n\nfunction createConfigForCanvas (config, {canvas}, inputConfig = {}) {\n // TODO: adjust stream & frame-grabber\n // once/continous\n throw new Error('Source \"Canvas\": not implemented!');\n}\n\nfunction createConfigForVideo (config, source, inputConfig = {}) {\n return merge({},\n config,\n {\n inputStream: merge({\n type: \"VideoStream\"\n }, source)\n }, {\n inputStream: inputConfig\n });\n}\n\nfunction createConfigForStream(config, {srcObject}, inputConfig = {}) {\n // TODO: attach to element\n // wait for the video to be ready (dimensions known)\n throw new Error('Source \"MediaStream\": not implemented!');\n}\n\nfunction createConfigForLiveStream(config, inputConfig = {}) {\n return merge({},\n config,\n {\n inputStream: {\n type: \"LiveStream\",\n constraints: {\n width: 640,\n height: 480,\n facingMode: \"environment\"\n }\n }\n }, {\n inputStream: inputConfig\n });\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/input/config_factory.js","// Scraped from https://github.com/exif-js/exif-js\n\nconst ExifTags = {0x0112: \"orientation\"};\nexport const AvailableTags = Object.keys(ExifTags).map(key => ExifTags[key]);\n\nexport function findTagsInObjectURL(src, tags = AvailableTags) {\n if (/^blob\\:/i.test(src)) {\n return objectURLToBlob(src)\n .then(readToBuffer)\n .then(buffer => findTagsInBuffer(buffer, tags));\n }\n return Promise.resolve(null);\n}\n\nexport function base64ToArrayBuffer(dataUrl) {\n const base64 = dataUrl.replace(/^data\\:([^\\;]+)\\;base64,/gmi, ''),\n binary = atob(base64),\n len = binary.length,\n buffer = new ArrayBuffer(len),\n view = new Uint8Array(buffer);\n\n for (let i = 0; i < len; i++) {\n view[i] = binary.charCodeAt(i);\n }\n return buffer;\n}\n\nfunction readToBuffer(blob) {\n return new Promise(resolve => {\n const fileReader = new FileReader();\n fileReader.onload = function(e) {\n return resolve(e.target.result);\n };\n fileReader.readAsArrayBuffer(blob);\n });\n}\n\nfunction objectURLToBlob(url) {\n return new Promise((resolve, reject) => {\n const http = new XMLHttpRequest();\n http.open(\"GET\", url, true);\n http.responseType = \"blob\";\n http.onreadystatechange = function () {\n if (http.readyState === XMLHttpRequest.DONE && (http.status === 200 || http.status === 0)) {\n resolve(this.response);\n }\n };\n http.onerror = reject;\n http.send();\n });\n}\n\nexport function findTagsInBuffer(file, selectedTags = AvailableTags) {\n const dataView = new DataView(file),\n length = file.byteLength,\n exifTags = selectedTags.reduce((result, selectedTag) => {\n const exifTag = Object.keys(ExifTags).filter(tag => ExifTags[tag] === selectedTag)[0];\n if (exifTag) {\n result[exifTag] = selectedTag;\n }\n return result;\n }, {});\n let offset = 2,\n marker;\n\n if ((dataView.getUint8(0) !== 0xFF) || (dataView.getUint8(1) !== 0xD8)) {\n return false;\n }\n\n while (offset < length) {\n if (dataView.getUint8(offset) !== 0xFF) {\n return false;\n }\n\n marker = dataView.getUint8(offset + 1);\n if (marker === 0xE1) {\n return readEXIFData(dataView, offset + 4, exifTags);\n } else {\n offset += 2 + dataView.getUint16(offset + 2);\n }\n }\n}\n\nfunction readEXIFData(file, start, exifTags) {\n if (getStringFromBuffer(file, start, 4) !== \"Exif\") {\n return false;\n }\n\n const tiffOffset = start + 6;\n let bigEnd,\n tags;\n\n if (file.getUint16(tiffOffset) === 0x4949) {\n bigEnd = false;\n } else if (file.getUint16(tiffOffset) === 0x4D4D) {\n bigEnd = true;\n } else {\n return false;\n }\n\n if (file.getUint16(tiffOffset + 2, !bigEnd) !== 0x002A) {\n return false;\n }\n\n const firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd);\n if (firstIFDOffset < 0x00000008) {\n return false;\n }\n\n tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, exifTags, bigEnd);\n return tags;\n}\n\nfunction readTags(file, tiffStart, dirStart, strings, bigEnd) {\n const entries = file.getUint16(dirStart, !bigEnd),\n tags = {};\n\n for (let i = 0; i < entries; i++) {\n const entryOffset = dirStart + i * 12 + 2,\n tag = strings[file.getUint16(entryOffset, !bigEnd)];\n if (tag) {\n tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd);\n }\n }\n return tags;\n}\n\nfunction readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd) {\n const type = file.getUint16(entryOffset + 2, !bigEnd),\n numValues = file.getUint32(entryOffset + 4, !bigEnd);\n\n switch (type) {\n case 3:\n if (numValues === 1) {\n return file.getUint16(entryOffset + 8, !bigEnd);\n }\n }\n}\n\nfunction getStringFromBuffer(buffer, start, length) {\n let outstr = \"\";\n for (let n = start; n < start + length; n++) {\n outstr += String.fromCharCode(buffer.getUint8(n));\n }\n return outstr;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/input/exif_helper.js","import {\n imageRef,\n grayAndHalfSampleFromCanvasData,\n computeGray\n} from '../common/cv_utils';\n\nconst TO_RADIANS = Math.PI / 180;\n\nfunction adjustCanvasSize(canvas, targetSize) {\n if (canvas.width !== targetSize.x) {\n if (ENV.development) {\n console.log(\"WARNING: canvas-size needs to be adjusted\");\n }\n canvas.width = targetSize.x;\n }\n if (canvas.height !== targetSize.y) {\n if (ENV.development) {\n console.log(\"WARNING: canvas-size needs to be adjusted\");\n }\n canvas.height = targetSize.y;\n }\n}\n\nvar FrameGrabber = {};\n\nFrameGrabber.create = function(inputStream, canvas) {\n var _that = {},\n _streamConfig = inputStream.getConfig(),\n _video_size = imageRef(inputStream.getRealWidth(), inputStream.getRealHeight()),\n _canvasSize = inputStream.getCanvasSize(),\n _size = imageRef(inputStream.getWidth(), inputStream.getHeight()),\n topRight = inputStream.getTopRight(),\n _sx = topRight.x,\n _sy = topRight.y,\n _canvas,\n _ctx = null,\n _data = null;\n\n _canvas = canvas ? canvas : document.createElement(\"canvas\");\n _canvas.width = _canvasSize.x;\n _canvas.height = _canvasSize.y;\n _ctx = _canvas.getContext(\"2d\");\n _data = new Uint8Array(_size.x * _size.y);\n if (ENV.development) {\n console.log(\"FrameGrabber\", JSON.stringify({\n size: _size,\n topRight: topRight,\n videoSize: _video_size,\n canvasSize: _canvasSize\n }));\n }\n\n /**\n * Uses the given array as frame-buffer\n */\n _that.attachData = function(data) {\n _data = data;\n };\n\n /**\n * Returns the used frame-buffer\n */\n _that.getData = function() {\n return _data;\n };\n\n /**\n * Fetches a frame from the input-stream and puts into the frame-buffer.\n * The image-data is converted to gray-scale and then half-sampled if configured.\n */\n _that.grab = function() {\n var doHalfSample = _streamConfig.halfSample,\n frame = inputStream.getFrame(),\n drawable = frame,\n drawAngle = 0,\n ctxData;\n if (drawable) {\n adjustCanvasSize(_canvas, _canvasSize);\n if (_streamConfig.type === 'ImageStream') {\n drawable = frame.img;\n if (frame.tags && frame.tags.orientation) {\n switch (frame.tags.orientation) {\n case 6:\n drawAngle = 90 * TO_RADIANS;\n break;\n case 8:\n drawAngle = -90 * TO_RADIANS;\n break;\n }\n }\n }\n\n if (drawAngle !== 0) {\n _ctx.translate(_canvasSize.x / 2, _canvasSize.y / 2);\n _ctx.rotate(drawAngle);\n _ctx.drawImage(drawable, -_canvasSize.y / 2, -_canvasSize.x / 2, _canvasSize.y, _canvasSize.x);\n _ctx.rotate(-drawAngle);\n _ctx.translate(-_canvasSize.x / 2, -_canvasSize.y / 2);\n } else {\n _ctx.drawImage(drawable, 0, 0, _canvasSize.x, _canvasSize.y);\n }\n\n ctxData = _ctx.getImageData(_sx, _sy, _size.x, _size.y).data;\n if (doHalfSample){\n grayAndHalfSampleFromCanvasData(ctxData, _size, _data);\n } else {\n computeGray(ctxData, _data, _streamConfig);\n }\n return true;\n } else {\n return false;\n }\n };\n\n _that.getSize = function() {\n return _size;\n };\n\n return _that;\n};\n\nexport default FrameGrabber;\n\n\n\n// WEBPACK FOOTER //\n// ./src/input/frame_grabber.js","import {findTagsInObjectURL} from './exif_helper';\n\nvar ImageLoader = {};\nImageLoader.load = function(directory, callback, offset, size, sequence) {\n var htmlImagesSrcArray = new Array(size),\n htmlImagesArray = new Array(htmlImagesSrcArray.length),\n i,\n img,\n num;\n\n if (sequence === false) {\n htmlImagesSrcArray[0] = directory;\n } else {\n for ( i = 0; i < htmlImagesSrcArray.length; i++) {\n num = (offset + i);\n htmlImagesSrcArray[i] = directory + \"image-\" + (\"00\" + num).slice(-3) + \".jpg\";\n }\n }\n htmlImagesArray.notLoaded = [];\n htmlImagesArray.addImage = function(image) {\n htmlImagesArray.notLoaded.push(image);\n };\n htmlImagesArray.loaded = function(loadedImg) {\n var notloadedImgs = htmlImagesArray.notLoaded;\n for (var x = 0; x < notloadedImgs.length; x++) {\n if (notloadedImgs[x] === loadedImg) {\n notloadedImgs.splice(x, 1);\n for (var y = 0; y < htmlImagesSrcArray.length; y++) {\n var imgName = htmlImagesSrcArray[y].substr(htmlImagesSrcArray[y].lastIndexOf(\"/\"));\n if (loadedImg.src.lastIndexOf(imgName) !== -1) {\n htmlImagesArray[y] = {img: loadedImg};\n break;\n }\n }\n break;\n }\n }\n if (notloadedImgs.length === 0) {\n if (ENV.development) {\n console.log(\"Images loaded\");\n }\n if (sequence === false) {\n findTagsInObjectURL(directory, ['orientation'])\n .then(tags => {\n htmlImagesArray[0].tags = tags;\n callback(htmlImagesArray);\n }).catch(e => {\n console.log(e);\n callback(htmlImagesArray);\n });\n } else {\n callback(htmlImagesArray);\n }\n }\n };\n\n for ( i = 0; i < htmlImagesSrcArray.length; i++) {\n img = new Image();\n htmlImagesArray.addImage(img);\n addOnloadHandler(img, htmlImagesArray);\n img.src = htmlImagesSrcArray[i];\n }\n};\n\nfunction addOnloadHandler(img, htmlImagesArray) {\n img.onload = function() {\n htmlImagesArray.loaded(this);\n };\n}\n\nexport default (ImageLoader);\n\n\n\n// WEBPACK FOOTER //\n// ./src/input/image_loader.js","import ImageLoader from './image_loader';\n\nvar InputStream = {};\nInputStream.createVideoStream = function(video) {\n var that = {},\n _config = null,\n _eventNames = ['canrecord', 'ended'],\n _eventHandlers = {},\n _calculatedWidth,\n _calculatedHeight,\n _topRight = {x: 0, y: 0},\n _canvasSize = {x: 0, y: 0};\n\n function initSize() {\n var width = video.videoWidth,\n height = video.videoHeight;\n\n _calculatedWidth =\n _config.size ? width / height > 1 ? _config.size : Math.floor((width / height) * _config.size) : width;\n _calculatedHeight =\n _config.size ? width / height > 1 ? Math.floor((height / width) * _config.size) : _config.size : height;\n\n _canvasSize.x = _calculatedWidth;\n _canvasSize.y = _calculatedHeight;\n }\n\n that.getRealWidth = function() {\n return video.videoWidth;\n };\n\n that.getRealHeight = function() {\n return video.videoHeight;\n };\n\n that.getWidth = function() {\n return _calculatedWidth;\n };\n\n that.getHeight = function() {\n return _calculatedHeight;\n };\n\n that.setWidth = function(width) {\n _calculatedWidth = width;\n };\n\n that.setHeight = function(height) {\n _calculatedHeight = height;\n };\n\n that.setInputStream = function(config) {\n _config = config;\n video.src = (typeof config.src !== 'undefined') ? config.src : '';\n };\n\n that.ended = function() {\n return video.ended;\n };\n\n that.getConfig = function() {\n return _config;\n };\n\n that.setAttribute = function(name, value) {\n video.setAttribute(name, value);\n };\n\n that.pause = function() {\n video.pause();\n };\n\n that.play = function() {\n video.play();\n };\n\n that.setCurrentTime = function(time) {\n if (_config.type !== \"LiveStream\") {\n video.currentTime = time;\n }\n };\n\n that.addEventListener = function(event, f, bool) {\n if (_eventNames.indexOf(event) !== -1) {\n if (!_eventHandlers[event]) {\n _eventHandlers[event] = [];\n }\n _eventHandlers[event].push(f);\n } else {\n video.addEventListener(event, f, bool);\n }\n };\n\n that.clearEventHandlers = function() {\n _eventNames.forEach(function(eventName) {\n var handlers = _eventHandlers[eventName];\n if (handlers && handlers.length > 0) {\n handlers.forEach(function(handler) {\n video.removeEventListener(eventName, handler);\n });\n }\n });\n };\n\n that.trigger = function(eventName, args) {\n var j,\n handlers = _eventHandlers[eventName];\n\n if (eventName === 'canrecord') {\n initSize();\n }\n if (handlers && handlers.length > 0) {\n for ( j = 0; j < handlers.length; j++) {\n handlers[j].apply(that, args);\n }\n }\n };\n\n that.setTopRight = function(topRight) {\n _topRight.x = topRight.x;\n _topRight.y = topRight.y;\n };\n\n that.getTopRight = function() {\n return _topRight;\n };\n\n that.setCanvasSize = function(size) {\n _canvasSize.x = size.x;\n _canvasSize.y = size.y;\n };\n\n that.getCanvasSize = function() {\n return _canvasSize;\n };\n\n that.getFrame = function() {\n return video;\n };\n\n return that;\n};\n\nInputStream.createLiveStream = function(video) {\n video.setAttribute(\"autoplay\", true);\n var that = InputStream.createVideoStream(video);\n\n that.ended = function() {\n return false;\n };\n\n return that;\n};\n\nInputStream.createImageStream = function() {\n var that = {};\n var _config = null;\n\n var width = 0,\n height = 0,\n frameIdx = 0,\n paused = true,\n loaded = false,\n imgArray = null,\n size = 0,\n offset = 1,\n baseUrl = null,\n ended = false,\n calculatedWidth,\n calculatedHeight,\n _eventNames = ['canrecord', 'ended'],\n _eventHandlers = {},\n _topRight = {x: 0, y: 0},\n _canvasSize = {x: 0, y: 0};\n\n function loadImages() {\n loaded = false;\n ImageLoader.load(baseUrl, function(imgs) {\n imgArray = imgs;\n if (imgs[0].tags && imgs[0].tags.orientation) {\n switch (imgs[0].tags.orientation) {\n case 6:\n case 8:\n width = imgs[0].img.height;\n height = imgs[0].img.width;\n break;\n default:\n width = imgs[0].img.width;\n height = imgs[0].img.height;\n }\n } else {\n width = imgs[0].img.width;\n height = imgs[0].img.height;\n }\n calculatedWidth =\n _config.size ? width / height > 1 ? _config.size : Math.floor((width / height) * _config.size) : width;\n calculatedHeight =\n _config.size ? width / height > 1 ? Math.floor((height / width) * _config.size) : _config.size : height;\n _canvasSize.x = calculatedWidth;\n _canvasSize.y = calculatedHeight;\n loaded = true;\n frameIdx = 0;\n setTimeout(function() {\n publishEvent(\"canrecord\", []);\n }, 0);\n }, offset, size, _config.sequence);\n }\n\n function publishEvent(eventName, args) {\n var j,\n handlers = _eventHandlers[eventName];\n\n if (handlers && handlers.length > 0) {\n for ( j = 0; j < handlers.length; j++) {\n handlers[j].apply(that, args);\n }\n }\n }\n\n\n that.trigger = publishEvent;\n\n that.getWidth = function() {\n return calculatedWidth;\n };\n\n that.getHeight = function() {\n return calculatedHeight;\n };\n\n that.setWidth = function(newWidth) {\n calculatedWidth = newWidth;\n };\n\n that.setHeight = function(newHeight) {\n calculatedHeight = newHeight;\n };\n\n that.getRealWidth = function() {\n return width;\n };\n\n that.getRealHeight = function() {\n return height;\n };\n\n that.setInputStream = function(stream) {\n _config = stream;\n if (stream.sequence === false) {\n baseUrl = stream.src;\n size = 1;\n } else {\n baseUrl = stream.src;\n size = stream.length;\n }\n loadImages();\n };\n\n that.ended = function() {\n return ended;\n };\n\n that.setAttribute = function() {};\n\n that.getConfig = function() {\n return _config;\n };\n\n that.pause = function() {\n paused = true;\n };\n\n that.play = function() {\n paused = false;\n };\n\n that.setCurrentTime = function(time) {\n frameIdx = time;\n };\n\n that.addEventListener = function(event, f) {\n if (_eventNames.indexOf(event) !== -1) {\n if (!_eventHandlers[event]) {\n _eventHandlers[event] = [];\n }\n _eventHandlers[event].push(f);\n }\n };\n\n that.clearEventHandlers = function() {\n _eventHandlers = {};\n };\n\n that.setTopRight = function(topRight) {\n _topRight.x = topRight.x;\n _topRight.y = topRight.y;\n };\n\n that.getTopRight = function() {\n return _topRight;\n };\n\n that.setCanvasSize = function(canvasSize) {\n _canvasSize.x = canvasSize.x;\n _canvasSize.y = canvasSize.y;\n };\n\n that.getCanvasSize = function() {\n return _canvasSize;\n };\n\n that.getFrame = function() {\n var frame;\n\n if (!loaded){\n return null;\n }\n if (!paused) {\n frame = imgArray[frameIdx];\n if (frameIdx < (size - 1)) {\n frameIdx++;\n } else {\n setTimeout(function() {\n ended = true;\n publishEvent(\"ended\", []);\n }, 0);\n }\n }\n return frame;\n };\n\n return that;\n};\n\nexport default InputStream;\n\n\n\n// WEBPACK FOOTER //\n// ./src/input/input_stream.js","import ImageWrapper from '../common/image_wrapper';\nimport {\n calculatePatchSize,\n otsuThreshold,\n hsv2rgb,\n cluster,\n topGeneric,\n imageRef,\n halfSample,\n computeImageArea\n} from '../common/cv_utils';\nimport ArrayHelper from '../common/array_helper';\nimport ImageDebug from '../common/image_debug';\nimport Rasterizer from './rasterizer';\nimport Tracer from './tracer';\nimport skeletonizer from './skeletonizer';\nconst vec2 = {\n clone: require('gl-vec2/clone'),\n dot: require('gl-vec2/dot'),\n scale: require('gl-vec2/scale'),\n transformMat2: require('gl-vec2/transformMat2')\n};\nconst mat2 = {\n copy: require('gl-mat2/copy'),\n create: require('gl-mat2/create'),\n invert: require('gl-mat2/invert')\n};\n\nexport default function createLocator(inputImageWrapper, config) {\n var _config = config,\n _currentImageWrapper,\n _skelImageWrapper,\n _subImageWrapper,\n _labelImageWrapper,\n _patchGrid,\n _patchLabelGrid,\n _imageToPatchGrid,\n _binaryImageWrapper,\n _patchSize,\n _canvasContainer = {\n ctx: {\n binary: null\n },\n dom: {\n binary: null\n }\n },\n _numPatches = {x: 0, y: 0},\n _inputImageWrapper = inputImageWrapper,\n _skeletonizer;\n\n initBuffers();\n initCanvas();\n\n function initBuffers() {\n var skeletonImageData;\n\n if (_config.halfSample) {\n _currentImageWrapper = new ImageWrapper({\n x: _inputImageWrapper.size.x / 2 | 0,\n y: _inputImageWrapper.size.y / 2 | 0\n });\n } else {\n _currentImageWrapper = _inputImageWrapper;\n }\n\n _patchSize = calculatePatchSize(_config.patchSize, _currentImageWrapper.size);\n\n _numPatches.x = _currentImageWrapper.size.x / _patchSize.x | 0;\n _numPatches.y = _currentImageWrapper.size.y / _patchSize.y | 0;\n\n _binaryImageWrapper = new ImageWrapper(_currentImageWrapper.size, undefined, Uint8Array, false);\n\n _labelImageWrapper = new ImageWrapper(_patchSize, undefined, Array, true);\n\n skeletonImageData = new ArrayBuffer(64 * 1024);\n _subImageWrapper = new ImageWrapper(_patchSize,\n new Uint8Array(skeletonImageData, 0, _patchSize.x * _patchSize.y));\n _skelImageWrapper = new ImageWrapper(_patchSize,\n new Uint8Array(skeletonImageData, _patchSize.x * _patchSize.y * 3, _patchSize.x * _patchSize.y),\n undefined, true);\n _skeletonizer = skeletonizer((typeof window !== 'undefined') ? window : (typeof self !== 'undefined') ? self : global, {\n size: _patchSize.x\n }, skeletonImageData);\n\n _imageToPatchGrid = new ImageWrapper({\n x: (_currentImageWrapper.size.x / _subImageWrapper.size.x) | 0,\n y: (_currentImageWrapper.size.y / _subImageWrapper.size.y) | 0\n }, undefined, Array, true);\n _patchGrid = new ImageWrapper(_imageToPatchGrid.size, undefined, undefined, true);\n _patchLabelGrid = new ImageWrapper(_imageToPatchGrid.size, undefined, Int32Array, true);\n }\n\n function initCanvas() {\n if (_config.useWorker || typeof document === 'undefined') {\n return;\n }\n _canvasContainer.dom.binary = document.createElement(\"canvas\");\n _canvasContainer.dom.binary.className = \"binaryBuffer\";\n if (ENV.development && _config.debug.showCanvas === true) {\n document.querySelector(\"#debug\").appendChild(_canvasContainer.dom.binary);\n }\n _canvasContainer.ctx.binary = _canvasContainer.dom.binary.getContext(\"2d\");\n _canvasContainer.dom.binary.width = _binaryImageWrapper.size.x;\n _canvasContainer.dom.binary.height = _binaryImageWrapper.size.y;\n }\n\n /**\n * Creates a bounding box which encloses all the given patches\n * @returns {Array} The minimal bounding box\n */\n function boxFromPatches(patches) {\n var overAvg,\n i,\n j,\n patch,\n transMat,\n minx =\n _binaryImageWrapper.size.x,\n miny = _binaryImageWrapper.size.y,\n maxx = -_binaryImageWrapper.size.x,\n maxy = -_binaryImageWrapper.size.y,\n box,\n scale;\n\n // draw all patches which are to be taken into consideration\n overAvg = 0;\n for ( i = 0; i < patches.length; i++) {\n patch = patches[i];\n overAvg += patch.rad;\n if (ENV.development && _config.debug.showPatches) {\n ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary, {color: \"red\"});\n }\n }\n\n overAvg /= patches.length;\n overAvg = (overAvg * 180 / Math.PI + 90) % 180 - 90;\n if (overAvg < 0) {\n overAvg += 180;\n }\n\n overAvg = (180 - overAvg) * Math.PI / 180;\n transMat = mat2.copy(mat2.create(), [Math.cos(overAvg), Math.sin(overAvg), -Math.sin(overAvg), Math.cos(overAvg)]);\n\n // iterate over patches and rotate by angle\n for ( i = 0; i < patches.length; i++) {\n patch = patches[i];\n for ( j = 0; j < 4; j++) {\n vec2.transformMat2(patch.box[j], patch.box[j], transMat);\n }\n\n if (ENV.development && _config.debug.boxFromPatches.showTransformed) {\n ImageDebug.drawPath(patch.box, {x: 0, y: 1}, _canvasContainer.ctx.binary, {color: '#99ff00', lineWidth: 2});\n }\n }\n\n // find bounding box\n for ( i = 0; i < patches.length; i++) {\n patch = patches[i];\n for ( j = 0; j < 4; j++) {\n if (patch.box[j][0] < minx) {\n minx = patch.box[j][0];\n }\n if (patch.box[j][0] > maxx) {\n maxx = patch.box[j][0];\n }\n if (patch.box[j][1] < miny) {\n miny = patch.box[j][1];\n }\n if (patch.box[j][1] > maxy) {\n maxy = patch.box[j][1];\n }\n }\n }\n\n box = [[minx, miny], [maxx, miny], [maxx, maxy], [minx, maxy]];\n\n if (ENV.development && _config.debug.boxFromPatches.showTransformedBox) {\n ImageDebug.drawPath(box, {x: 0, y: 1}, _canvasContainer.ctx.binary, {color: '#ff0000', lineWidth: 2});\n }\n\n scale = _config.halfSample ? 2 : 1;\n // reverse rotation;\n transMat = mat2.invert(transMat, transMat);\n for ( j = 0; j < 4; j++) {\n vec2.transformMat2(box[j], box[j], transMat);\n }\n\n if (ENV.development && _config.debug.boxFromPatches.showBB) {\n ImageDebug.drawPath(box, {x: 0, y: 1}, _canvasContainer.ctx.binary, {color: '#ff0000', lineWidth: 2});\n }\n\n for ( j = 0; j < 4; j++) {\n vec2.scale(box[j], box[j], scale);\n }\n\n return box;\n }\n\n /**\n * Creates a binary image of the current image\n */\n function binarizeImage() {\n otsuThreshold(_currentImageWrapper, _binaryImageWrapper);\n _binaryImageWrapper.zeroBorder();\n if (ENV.development && _config.debug.showCanvas) {\n _binaryImageWrapper.show(_canvasContainer.dom.binary, 255);\n }\n }\n\n /**\n * Iterate over the entire image\n * extract patches\n */\n function findPatches() {\n var i,\n j,\n x,\n y,\n moments,\n patchesFound = [],\n rasterizer,\n rasterResult,\n patch;\n for (i = 0; i < _numPatches.x; i++) {\n for (j = 0; j < _numPatches.y; j++) {\n x = _subImageWrapper.size.x * i;\n y = _subImageWrapper.size.y * j;\n\n // seperate parts\n skeletonize(x, y);\n\n // Rasterize, find individual bars\n _skelImageWrapper.zeroBorder();\n ArrayHelper.init(_labelImageWrapper.data, 0);\n rasterizer = Rasterizer.create(_skelImageWrapper, _labelImageWrapper);\n rasterResult = rasterizer.rasterize(0);\n\n if (ENV.development && _config.debug.showLabels) {\n _labelImageWrapper.overlay(_canvasContainer.dom.binary, Math.floor(360 / rasterResult.count),\n {x: x, y: y});\n }\n\n // calculate moments from the skeletonized patch\n moments = _labelImageWrapper.moments(rasterResult.count);\n\n // extract eligible patches\n patchesFound = patchesFound.concat(describePatch(moments, [i, j], x, y));\n }\n }\n\n if (ENV.development && _config.debug.showFoundPatches) {\n for ( i = 0; i < patchesFound.length; i++) {\n patch = patchesFound[i];\n ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,\n {color: \"#99ff00\", lineWidth: 2});\n }\n }\n\n return patchesFound;\n }\n\n /**\n * Finds those connected areas which contain at least 6 patches\n * and returns them ordered DESC by the number of contained patches\n * @param {Number} maxLabel\n */\n function findBiggestConnectedAreas(maxLabel){\n var i,\n sum,\n labelHist = [],\n topLabels = [];\n\n for ( i = 0; i < maxLabel; i++) {\n labelHist.push(0);\n }\n sum = _patchLabelGrid.data.length;\n while (sum--) {\n if (_patchLabelGrid.data[sum] > 0) {\n labelHist[_patchLabelGrid.data[sum] - 1]++;\n }\n }\n\n labelHist = labelHist.map(function(val, idx) {\n return {\n val: val,\n label: idx + 1\n };\n });\n\n labelHist.sort(function(a, b) {\n return b.val - a.val;\n });\n\n // extract top areas with at least 6 patches present\n topLabels = labelHist.filter(function(el) {\n return el.val >= 5;\n });\n\n return topLabels;\n }\n\n /**\n *\n */\n function findBoxes(topLabels, maxLabel) {\n var i,\n j,\n sum,\n patches = [],\n patch,\n box,\n boxes = [],\n hsv = [0, 1, 1],\n rgb = [0, 0, 0];\n\n for ( i = 0; i < topLabels.length; i++) {\n sum = _patchLabelGrid.data.length;\n patches.length = 0;\n while (sum--) {\n if (_patchLabelGrid.data[sum] === topLabels[i].label) {\n patch = _imageToPatchGrid.data[sum];\n patches.push(patch);\n }\n }\n box = boxFromPatches(patches);\n if (box) {\n boxes.push(box);\n\n // draw patch-labels if requested\n if (ENV.development && _config.debug.showRemainingPatchLabels) {\n for ( j = 0; j < patches.length; j++) {\n patch = patches[j];\n hsv[0] = (topLabels[i].label / (maxLabel + 1)) * 360;\n hsv2rgb(hsv, rgb);\n ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,\n {color: \"rgb(\" + rgb.join(\",\") + \")\", lineWidth: 2});\n }\n }\n }\n }\n return boxes;\n }\n\n /**\n * Find similar moments (via cluster)\n * @param {Object} moments\n */\n function similarMoments(moments) {\n var clusters = cluster(moments, 0.90);\n var topCluster = topGeneric(clusters, 1, function(e) {\n return e.getPoints().length;\n });\n var points = [], result = [];\n if (topCluster.length === 1) {\n points = topCluster[0].item.getPoints();\n for (var i = 0; i < points.length; i++) {\n result.push(points[i].point);\n }\n }\n return result;\n }\n\n function skeletonize(x, y) {\n _binaryImageWrapper.subImageAsCopy(_subImageWrapper, imageRef(x, y));\n _skeletonizer.skeletonize();\n\n // Show skeleton if requested\n if (ENV.development && _config.debug.showSkeleton) {\n _skelImageWrapper.overlay(_canvasContainer.dom.binary, 360, imageRef(x, y));\n }\n }\n\n /**\n * Extracts and describes those patches which seem to contain a barcode pattern\n * @param {Array} moments\n * @param {Object} patchPos,\n * @param {Number} x\n * @param {Number} y\n * @returns {Array} list of patches\n */\n function describePatch(moments, patchPos, x, y) {\n var k,\n avg,\n eligibleMoments = [],\n matchingMoments,\n patch,\n patchesFound = [],\n minComponentWeight = Math.ceil(_patchSize.x / 3);\n\n if (moments.length >= 2) {\n // only collect moments which's area covers at least minComponentWeight pixels.\n for ( k = 0; k < moments.length; k++) {\n if (moments[k].m00 > minComponentWeight) {\n eligibleMoments.push(moments[k]);\n }\n }\n\n // if at least 2 moments are found which have at least minComponentWeights covered\n if (eligibleMoments.length >= 2) {\n matchingMoments = similarMoments(eligibleMoments);\n avg = 0;\n // determine the similarity of the moments\n for ( k = 0; k < matchingMoments.length; k++) {\n avg += matchingMoments[k].rad;\n }\n\n // Only two of the moments are allowed not to fit into the equation\n // add the patch to the set\n if (matchingMoments.length > 1\n && matchingMoments.length >= (eligibleMoments.length / 4) * 3\n && matchingMoments.length > moments.length / 4) {\n avg /= matchingMoments.length;\n patch = {\n index: patchPos[1] * _numPatches.x + patchPos[0],\n pos: {\n x: x,\n y: y\n },\n box: [\n vec2.clone([x, y]),\n vec2.clone([x + _subImageWrapper.size.x, y]),\n vec2.clone([x + _subImageWrapper.size.x, y + _subImageWrapper.size.y]),\n vec2.clone([x, y + _subImageWrapper.size.y])\n ],\n moments: matchingMoments,\n rad: avg,\n vec: vec2.clone([Math.cos(avg), Math.sin(avg)])\n };\n patchesFound.push(patch);\n }\n }\n }\n return patchesFound;\n }\n\n /**\n * finds patches which are connected and share the same orientation\n * @param {Object} patchesFound\n */\n function rasterizeAngularSimilarity(patchesFound) {\n var label = 0,\n threshold = 0.95,\n currIdx = 0,\n j,\n patch,\n hsv = [0, 1, 1],\n rgb = [0, 0, 0];\n\n function notYetProcessed() {\n var i;\n for ( i = 0; i < _patchLabelGrid.data.length; i++) {\n if (_patchLabelGrid.data[i] === 0 && _patchGrid.data[i] === 1) {\n return i;\n }\n }\n return _patchLabelGrid.length;\n }\n\n function trace(currentIdx) {\n var x,\n y,\n currentPatch,\n idx,\n dir,\n current = {\n x: currentIdx % _patchLabelGrid.size.x,\n y: (currentIdx / _patchLabelGrid.size.x) | 0\n },\n similarity;\n\n if (currentIdx < _patchLabelGrid.data.length) {\n currentPatch = _imageToPatchGrid.data[currentIdx];\n // assign label\n _patchLabelGrid.data[currentIdx] = label;\n for ( dir = 0; dir < Tracer.searchDirections.length; dir++) {\n y = current.y + Tracer.searchDirections[dir][0];\n x = current.x + Tracer.searchDirections[dir][1];\n idx = y * _patchLabelGrid.size.x + x;\n\n // continue if patch empty\n if (_patchGrid.data[idx] === 0) {\n _patchLabelGrid.data[idx] = Number.MAX_VALUE;\n continue;\n }\n\n if (_patchLabelGrid.data[idx] === 0) {\n similarity = Math.abs(vec2.dot(_imageToPatchGrid.data[idx].vec, currentPatch.vec));\n if (similarity > threshold) {\n trace(idx);\n }\n }\n }\n }\n }\n\n // prepare for finding the right patches\n ArrayHelper.init(_patchGrid.data, 0);\n ArrayHelper.init(_patchLabelGrid.data, 0);\n ArrayHelper.init(_imageToPatchGrid.data, null);\n\n for ( j = 0; j < patchesFound.length; j++) {\n patch = patchesFound[j];\n _imageToPatchGrid.data[patch.index] = patch;\n _patchGrid.data[patch.index] = 1;\n }\n\n // rasterize the patches found to determine area\n _patchGrid.zeroBorder();\n\n while (( currIdx = notYetProcessed()) < _patchLabelGrid.data.length) {\n label++;\n trace(currIdx);\n }\n\n // draw patch-labels if requested\n if (ENV.development && _config.debug.showPatchLabels) {\n for ( j = 0; j < _patchLabelGrid.data.length; j++) {\n if (_patchLabelGrid.data[j] > 0 && _patchLabelGrid.data[j] <= label) {\n patch = _imageToPatchGrid.data[j];\n hsv[0] = (_patchLabelGrid.data[j] / (label + 1)) * 360;\n hsv2rgb(hsv, rgb);\n ImageDebug.drawRect(patch.pos, _subImageWrapper.size, _canvasContainer.ctx.binary,\n {color: \"rgb(\" + rgb.join(\",\") + \")\", lineWidth: 2});\n }\n }\n }\n\n return label;\n }\n\n return {\n locate: function() {\n var patchesFound,\n topLabels,\n boxes;\n\n if (_config.halfSample) {\n halfSample(_inputImageWrapper, _currentImageWrapper);\n }\n\n binarizeImage();\n patchesFound = findPatches();\n // return unless 5% or more patches are found\n if (patchesFound.length < _numPatches.x * _numPatches.y * 0.05) {\n return null;\n }\n\n // rasterrize area by comparing angular similarity;\n var maxLabel = rasterizeAngularSimilarity(patchesFound);\n if (maxLabel < 1) {\n return null;\n }\n\n // search for area with the most patches (biggest connected area)\n topLabels = findBiggestConnectedAreas(maxLabel);\n if (topLabels.length === 0) {\n return null;\n }\n\n boxes = findBoxes(topLabels, maxLabel);\n return boxes;\n }\n };\n}\nexport function checkImageConstraints(inputStream, config) {\n var patchSize,\n width = inputStream.getWidth(),\n height = inputStream.getHeight(),\n halfSample = config.halfSample ? 0.5 : 1,\n size,\n area;\n\n // calculate width and height based on area\n if (inputStream.getConfig().area) {\n area = computeImageArea(width, height, inputStream.getConfig().area);\n inputStream.setTopRight({x: area.sx, y: area.sy});\n inputStream.setCanvasSize({x: width, y: height});\n width = area.sw;\n height = area.sh;\n }\n\n size = {\n x: Math.floor(width * halfSample),\n y: Math.floor(height * halfSample)\n };\n\n patchSize = calculatePatchSize(config.patchSize, size);\n if (ENV.development) {\n console.log(\"Patch-Size: \" + JSON.stringify(patchSize));\n }\n\n inputStream.setWidth(Math.floor(Math.floor(size.x / patchSize.x) * (1 / halfSample) * patchSize.x));\n inputStream.setHeight(Math.floor(Math.floor(size.y / patchSize.y) * (1 / halfSample) * patchSize.y));\n\n if ((inputStream.getWidth() % patchSize.x) === 0 && (inputStream.getHeight() % patchSize.y) === 0) {\n return true;\n }\n\n throw new Error(\"Image dimensions do not comply with the current settings: Width (\" +\n width + \" )and height (\" + height +\n \") must a multiple of \" + patchSize.x);\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/locator/barcode_locator.js","import Tracer from './tracer';\n\n/**\n * http://www.codeproject.com/Tips/407172/Connected-Component-Labeling-and-Vectorization\n */\nvar Rasterizer = {\n createContour2D: function() {\n return {\n dir: null,\n index: null,\n firstVertex: null,\n insideContours: null,\n nextpeer: null,\n prevpeer: null\n };\n },\n CONTOUR_DIR: {\n CW_DIR: 0,\n CCW_DIR: 1,\n UNKNOWN_DIR: 2\n },\n DIR: {\n OUTSIDE_EDGE: -32767,\n INSIDE_EDGE: -32766\n },\n create: function(imageWrapper, labelWrapper) {\n var imageData = imageWrapper.data,\n labelData = labelWrapper.data,\n width = imageWrapper.size.x,\n height = imageWrapper.size.y,\n tracer = Tracer.create(imageWrapper, labelWrapper);\n\n return {\n rasterize: function(depthlabel) {\n var color,\n bc,\n lc,\n labelindex,\n cx,\n cy,\n colorMap = [],\n vertex,\n p,\n cc,\n sc,\n pos,\n connectedCount = 0,\n i;\n\n for ( i = 0; i < 400; i++) {\n colorMap[i] = 0;\n }\n\n colorMap[0] = imageData[0];\n cc = null;\n for ( cy = 1; cy < height - 1; cy++) {\n labelindex = 0;\n bc = colorMap[0];\n for ( cx = 1; cx < width - 1; cx++) {\n pos = cy * width + cx;\n if (labelData[pos] === 0) {\n color = imageData[pos];\n if (color !== bc) {\n if (labelindex === 0) {\n lc = connectedCount + 1;\n colorMap[lc] = color;\n bc = color;\n vertex = tracer.contourTracing(cy, cx, lc, color, Rasterizer.DIR.OUTSIDE_EDGE);\n if (vertex !== null) {\n connectedCount++;\n labelindex = lc;\n p = Rasterizer.createContour2D();\n p.dir = Rasterizer.CONTOUR_DIR.CW_DIR;\n p.index = labelindex;\n p.firstVertex = vertex;\n p.nextpeer = cc;\n p.insideContours = null;\n if (cc !== null) {\n cc.prevpeer = p;\n }\n cc = p;\n }\n } else {\n vertex = tracer\n .contourTracing(cy, cx, Rasterizer.DIR.INSIDE_EDGE, color, labelindex);\n if (vertex !== null) {\n p = Rasterizer.createContour2D();\n p.firstVertex = vertex;\n p.insideContours = null;\n if (depthlabel === 0) {\n p.dir = Rasterizer.CONTOUR_DIR.CCW_DIR;\n } else {\n p.dir = Rasterizer.CONTOUR_DIR.CW_DIR;\n }\n p.index = depthlabel;\n sc = cc;\n while ((sc !== null) && sc.index !== labelindex) {\n sc = sc.nextpeer;\n }\n if (sc !== null) {\n p.nextpeer = sc.insideContours;\n if (sc.insideContours !== null) {\n sc.insideContours.prevpeer = p;\n }\n sc.insideContours = p;\n }\n }\n }\n } else {\n labelData[pos] = labelindex;\n }\n } else if (labelData[pos] === Rasterizer.DIR.OUTSIDE_EDGE\n || labelData[pos] === Rasterizer.DIR.INSIDE_EDGE) {\n labelindex = 0;\n if (labelData[pos] === Rasterizer.DIR.INSIDE_EDGE) {\n bc = imageData[pos];\n } else {\n bc = colorMap[0];\n }\n } else {\n labelindex = labelData[pos];\n bc = colorMap[labelindex];\n }\n }\n }\n sc = cc;\n while (sc !== null) {\n sc.index = depthlabel;\n sc = sc.nextpeer;\n }\n return {\n cc: cc,\n count: connectedCount\n };\n },\n debug: {\n drawContour: function(canvas, firstContour) {\n var ctx = canvas.getContext(\"2d\"),\n pq = firstContour,\n iq,\n q,\n p;\n\n ctx.strokeStyle = \"red\";\n ctx.fillStyle = \"red\";\n ctx.lineWidth = 1;\n\n if (pq !== null) {\n iq = pq.insideContours;\n } else {\n iq = null;\n }\n\n while (pq !== null) {\n if (iq !== null) {\n q = iq;\n iq = iq.nextpeer;\n } else {\n q = pq;\n pq = pq.nextpeer;\n if (pq !== null) {\n iq = pq.insideContours;\n } else {\n iq = null;\n }\n }\n\n switch (q.dir) {\n case Rasterizer.CONTOUR_DIR.CW_DIR:\n ctx.strokeStyle = \"red\";\n break;\n case Rasterizer.CONTOUR_DIR.CCW_DIR:\n ctx.strokeStyle = \"blue\";\n break;\n case Rasterizer.CONTOUR_DIR.UNKNOWN_DIR:\n ctx.strokeStyle = \"green\";\n break;\n }\n\n p = q.firstVertex;\n ctx.beginPath();\n ctx.moveTo(p.x, p.y);\n do {\n p = p.next;\n ctx.lineTo(p.x, p.y);\n } while (p !== q.firstVertex);\n ctx.stroke();\n }\n }\n }\n };\n }\n};\n\nexport default Rasterizer;\n\n\n\n// WEBPACK FOOTER //\n// ./src/locator/rasterizer.js","/* @preserve ASM BEGIN */\n/* eslint-disable eqeqeq*/\nfunction Skeletonizer(stdlib, foreign, buffer) {\n \"use asm\";\n\n var images = new stdlib.Uint8Array(buffer),\n size = foreign.size | 0,\n imul = stdlib.Math.imul;\n\n function erode(inImagePtr, outImagePtr) {\n inImagePtr = inImagePtr | 0;\n outImagePtr = outImagePtr | 0;\n\n var v = 0,\n u = 0,\n sum = 0,\n yStart1 = 0,\n yStart2 = 0,\n xStart1 = 0,\n xStart2 = 0,\n offset = 0;\n\n for ( v = 1; (v | 0) < ((size - 1) | 0); v = (v + 1) | 0) {\n offset = (offset + size) | 0;\n for ( u = 1; (u | 0) < ((size - 1) | 0); u = (u + 1) | 0) {\n yStart1 = (offset - size) | 0;\n yStart2 = (offset + size) | 0;\n xStart1 = (u - 1) | 0;\n xStart2 = (u + 1) | 0;\n sum = ((images[(inImagePtr + yStart1 + xStart1) | 0] | 0)\n + (images[(inImagePtr + yStart1 + xStart2) | 0] | 0)\n + (images[(inImagePtr + offset + u) | 0] | 0)\n + (images[(inImagePtr + yStart2 + xStart1) | 0] | 0)\n + (images[(inImagePtr + yStart2 + xStart2) | 0] | 0)) | 0;\n if ((sum | 0) == (5 | 0)) {\n images[(outImagePtr + offset + u) | 0] = 1;\n } else {\n images[(outImagePtr + offset + u) | 0] = 0;\n }\n }\n }\n return;\n }\n\n function subtract(aImagePtr, bImagePtr, outImagePtr) {\n aImagePtr = aImagePtr | 0;\n bImagePtr = bImagePtr | 0;\n outImagePtr = outImagePtr | 0;\n\n var length = 0;\n\n length = imul(size, size) | 0;\n\n while ((length | 0) > 0) {\n length = (length - 1) | 0;\n images[(outImagePtr + length) | 0] =\n ((images[(aImagePtr + length) | 0] | 0) - (images[(bImagePtr + length) | 0] | 0)) | 0;\n }\n }\n\n function bitwiseOr(aImagePtr, bImagePtr, outImagePtr) {\n aImagePtr = aImagePtr | 0;\n bImagePtr = bImagePtr | 0;\n outImagePtr = outImagePtr | 0;\n\n var length = 0;\n\n length = imul(size, size) | 0;\n\n while ((length | 0) > 0) {\n length = (length - 1) | 0;\n images[(outImagePtr + length) | 0] =\n ((images[(aImagePtr + length) | 0] | 0) | (images[(bImagePtr + length) | 0] | 0)) | 0;\n }\n }\n\n function countNonZero(imagePtr) {\n imagePtr = imagePtr | 0;\n\n var sum = 0,\n length = 0;\n\n length = imul(size, size) | 0;\n\n while ((length | 0) > 0) {\n length = (length - 1) | 0;\n sum = ((sum | 0) + (images[(imagePtr + length) | 0] | 0)) | 0;\n }\n\n return (sum | 0);\n }\n\n function init(imagePtr, value) {\n imagePtr = imagePtr | 0;\n value = value | 0;\n\n var length = 0;\n\n length = imul(size, size) | 0;\n\n while ((length | 0) > 0) {\n length = (length - 1) | 0;\n images[(imagePtr + length) | 0] = value;\n }\n }\n\n function dilate(inImagePtr, outImagePtr) {\n inImagePtr = inImagePtr | 0;\n outImagePtr = outImagePtr | 0;\n\n var v = 0,\n u = 0,\n sum = 0,\n yStart1 = 0,\n yStart2 = 0,\n xStart1 = 0,\n xStart2 = 0,\n offset = 0;\n\n for ( v = 1; (v | 0) < ((size - 1) | 0); v = (v + 1) | 0) {\n offset = (offset + size) | 0;\n for ( u = 1; (u | 0) < ((size - 1) | 0); u = (u + 1) | 0) {\n yStart1 = (offset - size) | 0;\n yStart2 = (offset + size) | 0;\n xStart1 = (u - 1) | 0;\n xStart2 = (u + 1) | 0;\n sum = ((images[(inImagePtr + yStart1 + xStart1) | 0] | 0)\n + (images[(inImagePtr + yStart1 + xStart2) | 0] | 0)\n + (images[(inImagePtr + offset + u) | 0] | 0)\n + (images[(inImagePtr + yStart2 + xStart1) | 0] | 0)\n + (images[(inImagePtr + yStart2 + xStart2) | 0] | 0)) | 0;\n if ((sum | 0) > (0 | 0)) {\n images[(outImagePtr + offset + u) | 0] = 1;\n } else {\n images[(outImagePtr + offset + u) | 0] = 0;\n }\n }\n }\n return;\n }\n\n function memcpy(srcImagePtr, dstImagePtr) {\n srcImagePtr = srcImagePtr | 0;\n dstImagePtr = dstImagePtr | 0;\n\n var length = 0;\n\n length = imul(size, size) | 0;\n\n while ((length | 0) > 0) {\n length = (length - 1) | 0;\n images[(dstImagePtr + length) | 0] = (images[(srcImagePtr + length) | 0] | 0);\n }\n }\n\n function zeroBorder(imagePtr) {\n imagePtr = imagePtr | 0;\n\n var x = 0,\n y = 0;\n\n for ( x = 0; (x | 0) < ((size - 1) | 0); x = (x + 1) | 0) {\n images[(imagePtr + x) | 0] = 0;\n images[(imagePtr + y) | 0] = 0;\n y = ((y + size) - 1) | 0;\n images[(imagePtr + y) | 0] = 0;\n y = (y + 1) | 0;\n }\n for ( x = 0; (x | 0) < (size | 0); x = (x + 1) | 0) {\n images[(imagePtr + y) | 0] = 0;\n y = (y + 1) | 0;\n }\n }\n\n function skeletonize() {\n var subImagePtr = 0,\n erodedImagePtr = 0,\n tempImagePtr = 0,\n skelImagePtr = 0,\n sum = 0,\n done = 0;\n\n erodedImagePtr = imul(size, size) | 0;\n tempImagePtr = (erodedImagePtr + erodedImagePtr) | 0;\n skelImagePtr = (tempImagePtr + erodedImagePtr) | 0;\n\n // init skel-image\n init(skelImagePtr, 0);\n zeroBorder(subImagePtr);\n\n do {\n erode(subImagePtr, erodedImagePtr);\n dilate(erodedImagePtr, tempImagePtr);\n subtract(subImagePtr, tempImagePtr, tempImagePtr);\n bitwiseOr(skelImagePtr, tempImagePtr, skelImagePtr);\n memcpy(erodedImagePtr, subImagePtr);\n sum = countNonZero(subImagePtr) | 0;\n done = ((sum | 0) == 0 | 0);\n } while (!done);\n }\n return {\n skeletonize: skeletonize\n };\n}\n/* @preserve ASM END */\nexport default Skeletonizer;\n/* eslint-enable eqeqeq*/\n\n\n\n// WEBPACK FOOTER //\n// ./src/locator/skeletonizer.js","import BarcodeReader from './barcode_reader';\n\nfunction CodabarReader() {\n BarcodeReader.call(this);\n this._counters = [];\n}\n\nvar properties = {\n ALPHABETH_STRING: {value: \"0123456789-$:/.+ABCD\"},\n ALPHABET: {value: [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 45, 36, 58, 47, 46, 43, 65, 66, 67, 68]},\n CHARACTER_ENCODINGS: {value: [0x003, 0x006, 0x009, 0x060, 0x012, 0x042, 0x021, 0x024, 0x030, 0x048, 0x00c, 0x018,\n 0x045, 0x051, 0x054, 0x015, 0x01A, 0x029, 0x00B, 0x00E]},\n START_END: {value: [0x01A, 0x029, 0x00B, 0x00E]},\n MIN_ENCODED_CHARS: {value: 4},\n MAX_ACCEPTABLE: {value: 2.0},\n PADDING: {value: 1.5},\n FORMAT: {value: \"codabar\", writeable: false}\n};\n\nCodabarReader.prototype = Object.create(BarcodeReader.prototype, properties);\nCodabarReader.prototype.constructor = CodabarReader;\n\nCodabarReader.prototype._decode = function() {\n var self = this,\n result = [],\n start,\n decodedChar,\n pattern,\n nextStart,\n end;\n\n this._counters = self._fillCounters();\n start = self._findStart();\n if (!start) {\n return null;\n }\n nextStart = start.startCounter;\n\n do {\n pattern = self._toPattern(nextStart);\n if (pattern < 0) {\n return null;\n }\n decodedChar = self._patternToChar(pattern);\n if (decodedChar < 0){\n return null;\n }\n result.push(decodedChar);\n nextStart += 8;\n if (result.length > 1 && self._isStartEnd(pattern)) {\n break;\n }\n } while (nextStart < self._counters.length);\n\n // verify end\n if ((result.length - 2) < self.MIN_ENCODED_CHARS || !self._isStartEnd(pattern)) {\n return null;\n }\n\n // verify end white space\n if (!self._verifyWhitespace(start.startCounter, nextStart - 8)){\n return null;\n }\n\n if (!self._validateResult(result, start.startCounter)){\n return null;\n }\n\n nextStart = nextStart > self._counters.length ? self._counters.length : nextStart;\n end = start.start + self._sumCounters(start.startCounter, nextStart - 8);\n\n return {\n code: result.join(\"\"),\n start: start.start,\n end: end,\n startInfo: start,\n decodedCodes: result\n };\n};\n\nCodabarReader.prototype._verifyWhitespace = function(startCounter, endCounter) {\n if ((startCounter - 1 <= 0)\n || this._counters[startCounter - 1] >= (this._calculatePatternLength(startCounter) / 2.0)) {\n if ((endCounter + 8 >= this._counters.length)\n || this._counters[endCounter + 7] >= (this._calculatePatternLength(endCounter) / 2.0)) {\n return true;\n }\n }\n return false;\n};\n\nCodabarReader.prototype._calculatePatternLength = function(offset) {\n var i,\n sum = 0;\n\n for (i = offset; i < offset + 7; i++) {\n sum += this._counters[i];\n }\n\n return sum;\n};\n\nCodabarReader.prototype._thresholdResultPattern = function(result, startCounter){\n var self = this,\n categorization = {\n space: {\n narrow: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE},\n wide: {size: 0, counts: 0, min: 0, max: Number.MAX_VALUE}\n },\n bar: {\n narrow: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE},\n wide: { size: 0, counts: 0, min: 0, max: Number.MAX_VALUE}\n }\n },\n kind,\n cat,\n i,\n j,\n pos = startCounter,\n pattern;\n\n for (i = 0; i < result.length; i++){\n pattern = self._charToPattern(result[i]);\n for (j = 6; j >= 0; j--) {\n kind = (j & 1) === 2 ? categorization.bar : categorization.space;\n cat = (pattern & 1) === 1 ? kind.wide : kind.narrow;\n cat.size += self._counters[pos + j];\n cat.counts++;\n pattern >>= 1;\n }\n pos += 8;\n }\n\n [\"space\", \"bar\"].forEach(function(key) {\n var newkind = categorization[key];\n newkind.wide.min =\n Math.floor((newkind.narrow.size / newkind.narrow.counts + newkind.wide.size / newkind.wide.counts) / 2);\n newkind.narrow.max = Math.ceil(newkind.wide.min);\n newkind.wide.max = Math.ceil((newkind.wide.size * self.MAX_ACCEPTABLE + self.PADDING) / newkind.wide.counts);\n });\n\n return categorization;\n};\n\nCodabarReader.prototype._charToPattern = function(char) {\n var self = this,\n charCode = char.charCodeAt(0),\n i;\n\n for (i = 0; i < self.ALPHABET.length; i++) {\n if (self.ALPHABET[i] === charCode){\n return self.CHARACTER_ENCODINGS[i];\n }\n }\n return 0x0;\n};\n\nCodabarReader.prototype._validateResult = function(result, startCounter) {\n var self = this,\n thresholds = self._thresholdResultPattern(result, startCounter),\n i,\n j,\n kind,\n cat,\n size,\n pos = startCounter,\n pattern;\n\n for (i = 0; i < result.length; i++) {\n pattern = self._charToPattern(result[i]);\n for (j = 6; j >= 0; j--) {\n kind = (j & 1) === 0 ? thresholds.bar : thresholds.space;\n cat = (pattern & 1) === 1 ? kind.wide : kind.narrow;\n size = self._counters[pos + j];\n if (size < cat.min || size > cat.max) {\n return false;\n }\n pattern >>= 1;\n }\n pos += 8;\n }\n return true;\n};\n\nCodabarReader.prototype._patternToChar = function(pattern) {\n var i,\n self = this;\n\n for (i = 0; i < self.CHARACTER_ENCODINGS.length; i++) {\n if (self.CHARACTER_ENCODINGS[i] === pattern) {\n return String.fromCharCode(self.ALPHABET[i]);\n }\n }\n return -1;\n};\n\nCodabarReader.prototype._computeAlternatingThreshold = function(offset, end) {\n var i,\n min = Number.MAX_VALUE,\n max = 0,\n counter;\n\n for (i = offset; i < end; i += 2){\n counter = this._counters[i];\n if (counter > max) {\n max = counter;\n }\n if (counter < min) {\n min = counter;\n }\n }\n\n return ((min + max) / 2.0) | 0;\n};\n\nCodabarReader.prototype._toPattern = function(offset) {\n var numCounters = 7,\n end = offset + numCounters,\n barThreshold,\n spaceThreshold,\n bitmask = 1 << (numCounters - 1),\n pattern = 0,\n i,\n threshold;\n\n if (end > this._counters.length) {\n return -1;\n }\n\n barThreshold = this._computeAlternatingThreshold(offset, end);\n spaceThreshold = this._computeAlternatingThreshold(offset + 1, end);\n\n for (i = 0; i < numCounters; i++){\n threshold = (i & 1) === 0 ? barThreshold : spaceThreshold;\n if (this._counters[offset + i] > threshold) {\n pattern |= bitmask;\n }\n bitmask >>= 1;\n }\n\n return pattern;\n};\n\nCodabarReader.prototype._isStartEnd = function(pattern) {\n var i;\n\n for (i = 0; i < this.START_END.length; i++) {\n if (this.START_END[i] === pattern) {\n return true;\n }\n }\n return false;\n};\n\nCodabarReader.prototype._sumCounters = function(start, end) {\n var i,\n sum = 0;\n\n for (i = start; i < end; i++) {\n sum += this._counters[i];\n }\n return sum;\n};\n\nCodabarReader.prototype._findStart = function() {\n var self = this,\n i,\n pattern,\n start = self._nextUnset(self._row),\n end;\n\n for (i = 1; i < this._counters.length; i++) {\n pattern = self._toPattern(i);\n if (pattern !== -1 && self._isStartEnd(pattern)) {\n // TODO: Look for whitespace ahead\n start += self._sumCounters(0, i);\n end = start + self._sumCounters(i, i + 8);\n return {\n start: start,\n end: end,\n startCounter: i,\n endCounter: i + 8\n };\n }\n }\n};\n\nexport default CodabarReader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/reader/codabar_reader.js","import BarcodeReader from './barcode_reader';\n\nfunction Code128Reader() {\n BarcodeReader.call(this);\n}\n\nvar properties = {\n CODE_SHIFT: {value: 98},\n CODE_C: {value: 99},\n CODE_B: {value: 100},\n CODE_A: {value: 101},\n START_CODE_A: {value: 103},\n START_CODE_B: {value: 104},\n START_CODE_C: {value: 105},\n STOP_CODE: {value: 106},\n CODE_PATTERN: {value: [\n [2, 1, 2, 2, 2, 2],\n [2, 2, 2, 1, 2, 2],\n [2, 2, 2, 2, 2, 1],\n [1, 2, 1, 2, 2, 3],\n [1, 2, 1, 3, 2, 2],\n [1, 3, 1, 2, 2, 2],\n [1, 2, 2, 2, 1, 3],\n [1, 2, 2, 3, 1, 2],\n [1, 3, 2, 2, 1, 2],\n [2, 2, 1, 2, 1, 3],\n [2, 2, 1, 3, 1, 2],\n [2, 3, 1, 2, 1, 2],\n [1, 1, 2, 2, 3, 2],\n [1, 2, 2, 1, 3, 2],\n [1, 2, 2, 2, 3, 1],\n [1, 1, 3, 2, 2, 2],\n [1, 2, 3, 1, 2, 2],\n [1, 2, 3, 2, 2, 1],\n [2, 2, 3, 2, 1, 1],\n [2, 2, 1, 1, 3, 2],\n [2, 2, 1, 2, 3, 1],\n [2, 1, 3, 2, 1, 2],\n [2, 2, 3, 1, 1, 2],\n [3, 1, 2, 1, 3, 1],\n [3, 1, 1, 2, 2, 2],\n [3, 2, 1, 1, 2, 2],\n [3, 2, 1, 2, 2, 1],\n [3, 1, 2, 2, 1, 2],\n [3, 2, 2, 1, 1, 2],\n [3, 2, 2, 2, 1, 1],\n [2, 1, 2, 1, 2, 3],\n [2, 1, 2, 3, 2, 1],\n [2, 3, 2, 1, 2, 1],\n [1, 1, 1, 3, 2, 3],\n [1, 3, 1, 1, 2, 3],\n [1, 3, 1, 3, 2, 1],\n [1, 1, 2, 3, 1, 3],\n [1, 3, 2, 1, 1, 3],\n [1, 3, 2, 3, 1, 1],\n [2, 1, 1, 3, 1, 3],\n [2, 3, 1, 1, 1, 3],\n [2, 3, 1, 3, 1, 1],\n [1, 1, 2, 1, 3, 3],\n [1, 1, 2, 3, 3, 1],\n [1, 3, 2, 1, 3, 1],\n [1, 1, 3, 1, 2, 3],\n [1, 1, 3, 3, 2, 1],\n [1, 3, 3, 1, 2, 1],\n [3, 1, 3, 1, 2, 1],\n [2, 1, 1, 3, 3, 1],\n [2, 3, 1, 1, 3, 1],\n [2, 1, 3, 1, 1, 3],\n [2, 1, 3, 3, 1, 1],\n [2, 1, 3, 1, 3, 1],\n [3, 1, 1, 1, 2, 3],\n [3, 1, 1, 3, 2, 1],\n [3, 3, 1, 1, 2, 1],\n [3, 1, 2, 1, 1, 3],\n [3, 1, 2, 3, 1, 1],\n [3, 3, 2, 1, 1, 1],\n [3, 1, 4, 1, 1, 1],\n [2, 2, 1, 4, 1, 1],\n [4, 3, 1, 1, 1, 1],\n [1, 1, 1, 2, 2, 4],\n [1, 1, 1, 4, 2, 2],\n [1, 2, 1, 1, 2, 4],\n [1, 2, 1, 4, 2, 1],\n [1, 4, 1, 1, 2, 2],\n [1, 4, 1, 2, 2, 1],\n [1, 1, 2, 2, 1, 4],\n [1, 1, 2, 4, 1, 2],\n [1, 2, 2, 1, 1, 4],\n [1, 2, 2, 4, 1, 1],\n [1, 4, 2, 1, 1, 2],\n [1, 4, 2, 2, 1, 1],\n [2, 4, 1, 2, 1, 1],\n [2, 2, 1, 1, 1, 4],\n [4, 1, 3, 1, 1, 1],\n [2, 4, 1, 1, 1, 2],\n [1, 3, 4, 1, 1, 1],\n [1, 1, 1, 2, 4, 2],\n [1, 2, 1, 1, 4, 2],\n [1, 2, 1, 2, 4, 1],\n [1, 1, 4, 2, 1, 2],\n [1, 2, 4, 1, 1, 2],\n [1, 2, 4, 2, 1, 1],\n [4, 1, 1, 2, 1, 2],\n [4, 2, 1, 1, 1, 2],\n [4, 2, 1, 2, 1, 1],\n [2, 1, 2, 1, 4, 1],\n [2, 1, 4, 1, 2, 1],\n [4, 1, 2, 1, 2, 1],\n [1, 1, 1, 1, 4, 3],\n [1, 1, 1, 3, 4, 1],\n [1, 3, 1, 1, 4, 1],\n [1, 1, 4, 1, 1, 3],\n [1, 1, 4, 3, 1, 1],\n [4, 1, 1, 1, 1, 3],\n [4, 1, 1, 3, 1, 1],\n [1, 1, 3, 1, 4, 1],\n [1, 1, 4, 1, 3, 1],\n [3, 1, 1, 1, 4, 1],\n [4, 1, 1, 1, 3, 1],\n [2, 1, 1, 4, 1, 2],\n [2, 1, 1, 2, 1, 4],\n [2, 1, 1, 2, 3, 2],\n [2, 3, 3, 1, 1, 1, 2]\n ]},\n SINGLE_CODE_ERROR: {value: 0.64},\n AVG_CODE_ERROR: {value: 0.30},\n FORMAT: {value: \"code_128\", writeable: false},\n MODULE_INDICES: {value: {bar: [0, 2, 4], space: [1, 3, 5]}}\n};\n\nCode128Reader.prototype = Object.create(BarcodeReader.prototype, properties);\nCode128Reader.prototype.constructor = Code128Reader;\n\nCode128Reader.prototype._decodeCode = function(start, correction) {\n var counter = [0, 0, 0, 0, 0, 0],\n i,\n self = this,\n offset = start,\n isWhite = !self._row[offset],\n counterPos = 0,\n bestMatch = {\n error: Number.MAX_VALUE,\n code: -1,\n start: start,\n end: start,\n correction: {\n bar: 1,\n space: 1\n }\n },\n code,\n error;\n\n for ( i = offset; i < self._row.length; i++) {\n if (self._row[i] ^ isWhite) {\n counter[counterPos]++;\n } else {\n if (counterPos === counter.length - 1) {\n if (correction) {\n self._correct(counter, correction);\n }\n for (code = 0; code < self.CODE_PATTERN.length; code++) {\n error = self._matchPattern(counter, self.CODE_PATTERN[code]);\n if (error < bestMatch.error) {\n bestMatch.code = code;\n bestMatch.error = error;\n }\n }\n bestMatch.end = i;\n if (bestMatch.code === -1 || bestMatch.error > self.AVG_CODE_ERROR) {\n return null;\n }\n if (self.CODE_PATTERN[bestMatch.code]) {\n bestMatch.correction.bar = calculateCorrection(\n self.CODE_PATTERN[bestMatch.code], counter,\n this.MODULE_INDICES.bar);\n bestMatch.correction.space = calculateCorrection(\n self.CODE_PATTERN[bestMatch.code], counter,\n this.MODULE_INDICES.space);\n }\n return bestMatch;\n } else {\n counterPos++;\n }\n counter[counterPos] = 1;\n isWhite = !isWhite;\n }\n }\n return null;\n};\n\nCode128Reader.prototype._correct = function(counter, correction) {\n this._correctBars(counter, correction.bar, this.MODULE_INDICES.bar);\n this._correctBars(counter, correction.space, this.MODULE_INDICES.space);\n};\n\nCode128Reader.prototype._findStart = function() {\n var counter = [0, 0, 0, 0, 0, 0],\n i,\n self = this,\n offset = self._nextSet(self._row),\n isWhite = false,\n counterPos = 0,\n bestMatch = {\n error: Number.MAX_VALUE,\n code: -1,\n start: 0,\n end: 0,\n correction: {\n bar: 1,\n space: 1\n }\n },\n code,\n error,\n j,\n sum;\n\n for ( i = offset; i < self._row.length; i++) {\n if (self._row[i] ^ isWhite) {\n counter[counterPos]++;\n } else {\n if (counterPos === counter.length - 1) {\n sum = 0;\n for ( j = 0; j < counter.length; j++) {\n sum += counter[j];\n }\n for (code = self.START_CODE_A; code <= self.START_CODE_C; code++) {\n error = self._matchPattern(counter, self.CODE_PATTERN[code]);\n if (error < bestMatch.error) {\n bestMatch.code = code;\n bestMatch.error = error;\n }\n }\n if (bestMatch.error < self.AVG_CODE_ERROR) {\n bestMatch.start = i - sum;\n bestMatch.end = i;\n bestMatch.correction.bar = calculateCorrection(\n self.CODE_PATTERN[bestMatch.code], counter,\n this.MODULE_INDICES.bar);\n bestMatch.correction.space = calculateCorrection(\n self.CODE_PATTERN[bestMatch.code], counter,\n this.MODULE_INDICES.space);\n return bestMatch;\n }\n\n for ( j = 0; j < 4; j++) {\n counter[j] = counter[j + 2];\n }\n counter[4] = 0;\n counter[5] = 0;\n counterPos--;\n } else {\n counterPos++;\n }\n counter[counterPos] = 1;\n isWhite = !isWhite;\n }\n }\n return null;\n};\n\nCode128Reader.prototype._decode = function() {\n var self = this,\n startInfo = self._findStart(),\n code = null,\n done = false,\n result = [],\n multiplier = 0,\n checksum = 0,\n codeset,\n rawResult = [],\n decodedCodes = [],\n shiftNext = false,\n unshift,\n removeLastCharacter = true;\n\n if (startInfo === null) {\n return null;\n }\n code = {\n code: startInfo.code,\n start: startInfo.start,\n end: startInfo.end,\n correction: {\n bar: startInfo.correction.bar,\n space: startInfo.correction.space\n }\n };\n decodedCodes.push(code);\n checksum = code.code;\n switch (code.code) {\n case self.START_CODE_A:\n codeset = self.CODE_A;\n break;\n case self.START_CODE_B:\n codeset = self.CODE_B;\n break;\n case self.START_CODE_C:\n codeset = self.CODE_C;\n break;\n default:\n return null;\n }\n\n while (!done) {\n unshift = shiftNext;\n shiftNext = false;\n code = self._decodeCode(code.end, code.correction);\n if (code !== null) {\n if (code.code !== self.STOP_CODE) {\n removeLastCharacter = true;\n }\n\n if (code.code !== self.STOP_CODE) {\n rawResult.push(code.code);\n multiplier++;\n checksum += multiplier * code.code;\n }\n decodedCodes.push(code);\n\n switch (codeset) {\n case self.CODE_A:\n if (code.code < 64) {\n result.push(String.fromCharCode(32 + code.code));\n } else if (code.code < 96) {\n result.push(String.fromCharCode(code.code - 64));\n } else {\n if (code.code !== self.STOP_CODE) {\n removeLastCharacter = false;\n }\n switch (code.code) {\n case self.CODE_SHIFT:\n shiftNext = true;\n codeset = self.CODE_B;\n break;\n case self.CODE_B:\n codeset = self.CODE_B;\n break;\n case self.CODE_C:\n codeset = self.CODE_C;\n break;\n case self.STOP_CODE:\n done = true;\n break;\n }\n }\n break;\n case self.CODE_B:\n if (code.code < 96) {\n result.push(String.fromCharCode(32 + code.code));\n } else {\n if (code.code !== self.STOP_CODE) {\n removeLastCharacter = false;\n }\n switch (code.code) {\n case self.CODE_SHIFT:\n shiftNext = true;\n codeset = self.CODE_A;\n break;\n case self.CODE_A:\n codeset = self.CODE_A;\n break;\n case self.CODE_C:\n codeset = self.CODE_C;\n break;\n case self.STOP_CODE:\n done = true;\n break;\n }\n }\n break;\n case self.CODE_C:\n if (code.code < 100) {\n result.push(code.code < 10 ? \"0\" + code.code : code.code);\n } else {\n if (code.code !== self.STOP_CODE) {\n removeLastCharacter = false;\n }\n switch (code.code) {\n case self.CODE_A:\n codeset = self.CODE_A;\n break;\n case self.CODE_B:\n codeset = self.CODE_B;\n break;\n case self.STOP_CODE:\n done = true;\n break;\n }\n }\n break;\n }\n } else {\n done = true;\n }\n if (unshift) {\n codeset = codeset === self.CODE_A ? self.CODE_B : self.CODE_A;\n }\n }\n\n if (code === null) {\n return null;\n }\n\n code.end = self._nextUnset(self._row, code.end);\n if (!self._verifyTrailingWhitespace(code)){\n return null;\n }\n\n checksum -= multiplier * rawResult[rawResult.length - 1];\n if (checksum % 103 !== rawResult[rawResult.length - 1]) {\n return null;\n }\n\n if (!result.length) {\n return null;\n }\n\n // remove last code from result (checksum)\n if (removeLastCharacter) {\n result.splice(result.length - 1, 1);\n }\n\n\n return {\n code: result.join(\"\"),\n start: startInfo.start,\n end: code.end,\n codeset: codeset,\n startInfo: startInfo,\n decodedCodes: decodedCodes,\n endInfo: code\n };\n};\n\n\nBarcodeReader.prototype._verifyTrailingWhitespace = function(endInfo) {\n var self = this,\n trailingWhitespaceEnd;\n\n trailingWhitespaceEnd = endInfo.end + ((endInfo.end - endInfo.start) / 2);\n if (trailingWhitespaceEnd < self._row.length) {\n if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {\n return endInfo;\n }\n }\n return null;\n};\n\nfunction calculateCorrection(expected, normalized, indices) {\n var length = indices.length,\n sumNormalized = 0,\n sumExpected = 0;\n\n while(length--) {\n sumExpected += expected[indices[length]];\n sumNormalized += normalized[indices[length]];\n }\n return sumExpected/sumNormalized;\n}\n\nexport default Code128Reader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/reader/code_128_reader.js","import Code39Reader from './code_39_reader';\n\nfunction Code39VINReader() {\n Code39Reader.call(this);\n}\n\nvar patterns = {\n IOQ: /[IOQ]/g,\n AZ09: /[A-Z0-9]{17}/\n};\n\nCode39VINReader.prototype = Object.create(Code39Reader.prototype);\nCode39VINReader.prototype.constructor = Code39VINReader;\n\n// Cribbed from:\n// https://github.com/zxing/zxing/blob/master/core/src/main/java/com/google/zxing/client/result/VINResultParser.java\nCode39VINReader.prototype._decode = function() {\n var result = Code39Reader.prototype._decode.apply(this);\n if (!result) {\n return null;\n }\n\n var code = result.code;\n\n if (!code) {\n return null;\n }\n\n code = code.replace(patterns.IOQ, '');\n\n if (!code.match(patterns.AZ09)) {\n if (ENV.development) {\n console.log('Failed AZ09 pattern code:', code);\n }\n return null;\n }\n\n if (!this._checkChecksum(code)) {\n return null;\n }\n\n result.code = code;\n return result;\n};\n\nCode39VINReader.prototype._checkChecksum = function(code) {\n // TODO\n return !!code;\n};\n\nexport default Code39VINReader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/reader/code_39_vin_reader.js","import EANReader from './ean_reader';\n\nfunction EAN2Reader() {\n EANReader.call(this);\n}\n\nvar properties = {\n FORMAT: {value: \"ean_2\", writeable: false}\n};\n\nEAN2Reader.prototype = Object.create(EANReader.prototype, properties);\nEAN2Reader.prototype.constructor = EAN2Reader;\n\nEAN2Reader.prototype.decode = function(row, start) {\n this._row = row;\n var counters = [0, 0, 0, 0],\n codeFrequency = 0,\n i = 0,\n offset = start,\n end = this._row.length,\n code,\n result = [],\n decodedCodes = [];\n\n for (i = 0; i < 2 && offset < end; i++) {\n code = this._decodeCode(offset);\n if (!code) {\n return null;\n }\n decodedCodes.push(code);\n result.push(code.code % 10);\n if (code.code >= this.CODE_G_START) {\n codeFrequency |= 1 << (1 - i);\n }\n if (i != 1) {\n offset = this._nextSet(this._row, code.end);\n offset = this._nextUnset(this._row, offset);\n }\n }\n\n if (result.length != 2 || (parseInt(result.join(\"\")) % 4) !== codeFrequency) {\n return null;\n }\n return {\n code: result.join(\"\"),\n decodedCodes,\n end: code.end\n };\n};\n\nexport default EAN2Reader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/reader/ean_2_reader.js","import EANReader from './ean_reader';\n\nfunction EAN5Reader() {\n EANReader.call(this);\n}\n\nvar properties = {\n FORMAT: {value: \"ean_5\", writeable: false}\n};\n\nconst CHECK_DIGIT_ENCODINGS = [24, 20, 18, 17, 12, 6, 3, 10, 9, 5];\n\nEAN5Reader.prototype = Object.create(EANReader.prototype, properties);\nEAN5Reader.prototype.constructor = EAN5Reader;\n\nEAN5Reader.prototype.decode = function(row, start) {\n this._row = row;\n var counters = [0, 0, 0, 0],\n codeFrequency = 0,\n i = 0,\n offset = start,\n end = this._row.length,\n code,\n result = [],\n decodedCodes = [];\n\n for (i = 0; i < 5 && offset < end; i++) {\n code = this._decodeCode(offset);\n if (!code) {\n return null;\n }\n decodedCodes.push(code);\n result.push(code.code % 10);\n if (code.code >= this.CODE_G_START) {\n codeFrequency |= 1 << (4 - i);\n }\n if (i != 4) {\n offset = this._nextSet(this._row, code.end);\n offset = this._nextUnset(this._row, offset);\n }\n }\n\n if (result.length != 5) {\n return null;\n }\n\n if (extensionChecksum(result) !== determineCheckDigit(codeFrequency)) {\n return null;\n }\n return {\n code: result.join(\"\"),\n decodedCodes,\n end: code.end\n };\n};\n\nfunction determineCheckDigit(codeFrequency) {\n var i;\n for (i = 0; i < 10; i++) {\n if (codeFrequency === CHECK_DIGIT_ENCODINGS[i]) {\n return i;\n }\n }\n return null;\n}\n\n\nfunction extensionChecksum(result) {\n var length = result.length,\n sum = 0,\n i;\n\n for (i = length - 2; i >= 0; i -= 2) {\n sum += result[i];\n }\n sum *= 3;\n for (i = length - 1; i >= 0; i -= 2) {\n sum += result[i];\n }\n sum *= 3;\n return sum % 10;\n}\n\nexport default EAN5Reader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/reader/ean_5_reader.js","import EANReader from './ean_reader';\n\nfunction EAN8Reader(opts, supplements) {\n EANReader.call(this, opts, supplements);\n}\n\nvar properties = {\n FORMAT: {value: \"ean_8\", writeable: false}\n};\n\nEAN8Reader.prototype = Object.create(EANReader.prototype, properties);\nEAN8Reader.prototype.constructor = EAN8Reader;\n\nEAN8Reader.prototype._decodePayload = function(code, result, decodedCodes) {\n var i,\n self = this;\n\n for ( i = 0; i < 4; i++) {\n code = self._decodeCode(code.end, self.CODE_G_START);\n if (!code) {\n return null;\n }\n result.push(code.code);\n decodedCodes.push(code);\n }\n\n code = self._findPattern(self.MIDDLE_PATTERN, code.end, true, false);\n if (code === null) {\n return null;\n }\n decodedCodes.push(code);\n\n for ( i = 0; i < 4; i++) {\n code = self._decodeCode(code.end, self.CODE_G_START);\n if (!code) {\n return null;\n }\n decodedCodes.push(code);\n result.push(code.code);\n }\n\n return code;\n};\n\nexport default EAN8Reader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/reader/ean_8_reader.js","import BarcodeReader from './barcode_reader';\nimport {merge} from 'lodash';\n\nfunction I2of5Reader(opts) {\n opts = merge(getDefaulConfig(), opts);\n BarcodeReader.call(this, opts);\n this.barSpaceRatio = [1, 1];\n if (opts.normalizeBarSpaceWidth) {\n this.SINGLE_CODE_ERROR = 0.38;\n this.AVG_CODE_ERROR = 0.09;\n }\n}\n\nfunction getDefaulConfig() {\n var config = {};\n\n Object.keys(I2of5Reader.CONFIG_KEYS).forEach(function(key) {\n config[key] = I2of5Reader.CONFIG_KEYS[key].default;\n });\n return config;\n}\n\nvar N = 1,\n W = 3,\n properties = {\n START_PATTERN: {value: [N, N, N, N]},\n STOP_PATTERN: {value: [N, N, W]},\n CODE_PATTERN: {value: [\n [N, N, W, W, N],\n [W, N, N, N, W],\n [N, W, N, N, W],\n [W, W, N, N, N],\n [N, N, W, N, W],\n [W, N, W, N, N],\n [N, W, W, N, N],\n [N, N, N, W, W],\n [W, N, N, W, N],\n [N, W, N, W, N]\n ]},\n SINGLE_CODE_ERROR: {value: 0.78, writable: true},\n AVG_CODE_ERROR: {value: 0.38, writable: true},\n MAX_CORRECTION_FACTOR: {value: 5},\n FORMAT: {value: \"i2of5\"}\n };\n\nI2of5Reader.prototype = Object.create(BarcodeReader.prototype, properties);\nI2of5Reader.prototype.constructor = I2of5Reader;\n\nI2of5Reader.prototype._matchPattern = function(counter, code) {\n if (this.config.normalizeBarSpaceWidth) {\n var i,\n counterSum = [0, 0],\n codeSum = [0, 0],\n correction = [0, 0],\n correctionRatio = this.MAX_CORRECTION_FACTOR,\n correctionRatioInverse = 1 / correctionRatio;\n\n for (i = 0; i < counter.length; i++) {\n counterSum[i % 2] += counter[i];\n codeSum[i % 2] += code[i];\n }\n correction[0] = codeSum[0] / counterSum[0];\n correction[1] = codeSum[1] / counterSum[1];\n\n correction[0] = Math.max(Math.min(correction[0], correctionRatio), correctionRatioInverse);\n correction[1] = Math.max(Math.min(correction[1], correctionRatio), correctionRatioInverse);\n this.barSpaceRatio = correction;\n for (i = 0; i < counter.length; i++) {\n counter[i] *= this.barSpaceRatio[i % 2];\n }\n }\n return BarcodeReader.prototype._matchPattern.call(this, counter, code);\n};\n\nI2of5Reader.prototype._findPattern = function(pattern, offset, isWhite, tryHarder) {\n var counter = [],\n self = this,\n i,\n counterPos = 0,\n bestMatch = {\n error: Number.MAX_VALUE,\n code: -1,\n start: 0,\n end: 0\n },\n error,\n j,\n sum,\n normalized,\n epsilon = self.AVG_CODE_ERROR;\n\n isWhite = isWhite || false;\n tryHarder = tryHarder || false;\n\n if (!offset) {\n offset = self._nextSet(self._row);\n }\n\n for ( i = 0; i < pattern.length; i++) {\n counter[i] = 0;\n }\n\n for ( i = offset; i < self._row.length; i++) {\n if (self._row[i] ^ isWhite) {\n counter[counterPos]++;\n } else {\n if (counterPos === counter.length - 1) {\n sum = 0;\n for ( j = 0; j < counter.length; j++) {\n sum += counter[j];\n }\n error = self._matchPattern(counter, pattern);\n if (error < epsilon) {\n bestMatch.error = error;\n bestMatch.start = i - sum;\n bestMatch.end = i;\n return bestMatch;\n }\n if (tryHarder) {\n for (j = 0; j < counter.length - 2; j++) {\n counter[j] = counter[j + 2];\n }\n counter[counter.length - 2] = 0;\n counter[counter.length - 1] = 0;\n counterPos--;\n } else {\n return null;\n }\n } else {\n counterPos++;\n }\n counter[counterPos] = 1;\n isWhite = !isWhite;\n }\n }\n return null;\n};\n\nI2of5Reader.prototype._findStart = function() {\n var self = this,\n leadingWhitespaceStart,\n offset = self._nextSet(self._row),\n startInfo,\n narrowBarWidth = 1;\n\n while (!startInfo) {\n startInfo = self._findPattern(self.START_PATTERN, offset, false, true);\n if (!startInfo) {\n return null;\n }\n narrowBarWidth = Math.floor((startInfo.end - startInfo.start) / 4);\n leadingWhitespaceStart = startInfo.start - narrowBarWidth * 10;\n if (leadingWhitespaceStart >= 0) {\n if (self._matchRange(leadingWhitespaceStart, startInfo.start, 0)) {\n return startInfo;\n }\n }\n offset = startInfo.end;\n startInfo = null;\n }\n};\n\nI2of5Reader.prototype._verifyTrailingWhitespace = function(endInfo) {\n var self = this,\n trailingWhitespaceEnd;\n\n trailingWhitespaceEnd = endInfo.end + ((endInfo.end - endInfo.start) / 2);\n if (trailingWhitespaceEnd < self._row.length) {\n if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {\n return endInfo;\n }\n }\n return null;\n};\n\nI2of5Reader.prototype._findEnd = function() {\n var self = this,\n endInfo,\n tmp;\n\n self._row.reverse();\n endInfo = self._findPattern(self.STOP_PATTERN);\n self._row.reverse();\n\n if (endInfo === null) {\n return null;\n }\n\n // reverse numbers\n tmp = endInfo.start;\n endInfo.start = self._row.length - endInfo.end;\n endInfo.end = self._row.length - tmp;\n\n return endInfo !== null ? self._verifyTrailingWhitespace(endInfo) : null;\n};\n\nI2of5Reader.prototype._decodePair = function(counterPair) {\n var i,\n code,\n codes = [],\n self = this;\n\n for (i = 0; i < counterPair.length; i++) {\n code = self._decodeCode(counterPair[i]);\n if (!code) {\n return null;\n }\n codes.push(code);\n }\n return codes;\n};\n\nI2of5Reader.prototype._decodeCode = function(counter) {\n var j,\n self = this,\n sum = 0,\n normalized,\n error,\n epsilon = self.AVG_CODE_ERROR,\n code,\n bestMatch = {\n error: Number.MAX_VALUE,\n code: -1,\n start: 0,\n end: 0\n };\n\n for ( j = 0; j < counter.length; j++) {\n sum += counter[j];\n }\n for (code = 0; code < self.CODE_PATTERN.length; code++) {\n error = self._matchPattern(counter, self.CODE_PATTERN[code]);\n if (error < bestMatch.error) {\n bestMatch.code = code;\n bestMatch.error = error;\n }\n }\n if (bestMatch.error < epsilon) {\n return bestMatch;\n }\n};\n\nI2of5Reader.prototype._decodePayload = function(counters, result, decodedCodes) {\n var i,\n self = this,\n pos = 0,\n counterLength = counters.length,\n counterPair = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]],\n codes;\n\n while (pos < counterLength) {\n for (i = 0; i < 5; i++) {\n counterPair[0][i] = counters[pos] * this.barSpaceRatio[0];\n counterPair[1][i] = counters[pos + 1] * this.barSpaceRatio[1];\n pos += 2;\n }\n codes = self._decodePair(counterPair);\n if (!codes) {\n return null;\n }\n for (i = 0; i < codes.length; i++) {\n result.push(codes[i].code + \"\");\n decodedCodes.push(codes[i]);\n }\n }\n return codes;\n};\n\nI2of5Reader.prototype._verifyCounterLength = function(counters) {\n return (counters.length % 10 === 0);\n};\n\nI2of5Reader.prototype._decode = function() {\n var startInfo,\n endInfo,\n self = this,\n code,\n result = [],\n decodedCodes = [],\n counters;\n\n startInfo = self._findStart();\n if (!startInfo) {\n return null;\n }\n decodedCodes.push(startInfo);\n\n endInfo = self._findEnd();\n if (!endInfo) {\n return null;\n }\n\n counters = self._fillCounters(startInfo.end, endInfo.start, false);\n if (!self._verifyCounterLength(counters)) {\n return null;\n }\n code = self._decodePayload(counters, result, decodedCodes);\n if (!code) {\n return null;\n }\n if (result.length % 2 !== 0 ||\n result.length < 6) {\n return null;\n }\n\n decodedCodes.push(endInfo);\n return {\n code: result.join(\"\"),\n start: startInfo.start,\n end: endInfo.end,\n startInfo: startInfo,\n decodedCodes: decodedCodes\n };\n};\n\nI2of5Reader.CONFIG_KEYS = {\n normalizeBarSpaceWidth: {\n 'type': 'boolean',\n 'default': false,\n 'description': 'If true, the reader tries to normalize the' +\n 'width-difference between bars and spaces'\n }\n};\n\nexport default I2of5Reader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/reader/i2of5_reader.js","import EANReader from './ean_reader';\n\nfunction UPCEReader(opts, supplements) {\n EANReader.call(this, opts, supplements);\n}\n\nvar properties = {\n CODE_FREQUENCY: {value: [\n [ 56, 52, 50, 49, 44, 38, 35, 42, 41, 37 ],\n [7, 11, 13, 14, 19, 25, 28, 21, 22, 26]]},\n STOP_PATTERN: { value: [1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7, 1 / 6 * 7]},\n FORMAT: {value: \"upc_e\", writeable: false}\n};\n\nUPCEReader.prototype = Object.create(EANReader.prototype, properties);\nUPCEReader.prototype.constructor = UPCEReader;\n\nUPCEReader.prototype._decodePayload = function(code, result, decodedCodes) {\n var i,\n self = this,\n codeFrequency = 0x0;\n\n for ( i = 0; i < 6; i++) {\n code = self._decodeCode(code.end);\n if (!code) {\n return null;\n }\n if (code.code >= self.CODE_G_START) {\n code.code = code.code - self.CODE_G_START;\n codeFrequency |= 1 << (5 - i);\n }\n result.push(code.code);\n decodedCodes.push(code);\n }\n if (!self._determineParity(codeFrequency, result)) {\n return null;\n }\n\n return code;\n};\n\nUPCEReader.prototype._determineParity = function(codeFrequency, result) {\n var i,\n nrSystem;\n\n for (nrSystem = 0; nrSystem < this.CODE_FREQUENCY.length; nrSystem++){\n for ( i = 0; i < this.CODE_FREQUENCY[nrSystem].length; i++) {\n if (codeFrequency === this.CODE_FREQUENCY[nrSystem][i]) {\n result.unshift(nrSystem);\n result.push(i);\n return true;\n }\n }\n }\n return false;\n};\n\nUPCEReader.prototype._convertToUPCA = function(result) {\n var upca = [result[0]],\n lastDigit = result[result.length - 2];\n\n if (lastDigit <= 2) {\n upca = upca.concat(result.slice(1, 3))\n .concat([lastDigit, 0, 0, 0, 0])\n .concat(result.slice(3, 6));\n } else if (lastDigit === 3) {\n upca = upca.concat(result.slice(1, 4))\n .concat([0, 0, 0, 0, 0])\n .concat(result.slice(4, 6));\n } else if (lastDigit === 4) {\n upca = upca.concat(result.slice(1, 5))\n .concat([0, 0, 0, 0, 0, result[5]]);\n } else {\n upca = upca.concat(result.slice(1, 6))\n .concat([0, 0, 0, 0, lastDigit]);\n }\n\n upca.push(result[result.length - 1]);\n return upca;\n};\n\nUPCEReader.prototype._checksum = function(result) {\n return EANReader.prototype._checksum.call(this, this._convertToUPCA(result));\n};\n\nUPCEReader.prototype._findEnd = function(offset, isWhite) {\n isWhite = true;\n return EANReader.prototype._findEnd.call(this, offset, isWhite);\n};\n\nUPCEReader.prototype._verifyTrailingWhitespace = function(endInfo) {\n var self = this,\n trailingWhitespaceEnd;\n\n trailingWhitespaceEnd = endInfo.end + ((endInfo.end - endInfo.start) / 2);\n if (trailingWhitespaceEnd < self._row.length) {\n if (self._matchRange(endInfo.end, trailingWhitespaceEnd, 0)) {\n return endInfo;\n }\n }\n};\n\nexport default UPCEReader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/reader/upc_e_reader.js","import EANReader from './ean_reader';\n\nfunction UPCReader(opts, supplements) {\n EANReader.call(this, opts, supplements);\n}\n\nvar properties = {\n FORMAT: {value: \"upc_a\", writeable: false}\n};\n\nUPCReader.prototype = Object.create(EANReader.prototype, properties);\nUPCReader.prototype.constructor = UPCReader;\n\nUPCReader.prototype._decode = function() {\n var result = EANReader.prototype._decode.call(this);\n\n if (result && result.code && result.code.length === 13 && result.code.charAt(0) === \"0\") {\n result.code = result.code.substring(1);\n return result;\n }\n return null;\n};\n\nexport default UPCReader;\n\n\n\n// WEBPACK FOOTER //\n// ./src/reader/upc_reader.js","import ImageWrapper from './common/image_wrapper';\nimport createLocator, {checkImageConstraints} from './locator/barcode_locator';\nimport BarcodeDecoder from './decoder/barcode_decoder';\nimport createEventedElement from './common/events';\nimport CameraAccess from './input/camera_access';\nimport ImageDebug from './common/image_debug';\nimport ResultCollector from './analytics/result_collector';\nimport Config from './config/config';\nimport InputStream from 'input_stream';\nimport FrameGrabber from 'frame_grabber';\nimport {merge} from 'lodash';\nconst vec2 = {\n clone: require('gl-vec2/clone')\n};\n\n\nfunction createScanner() {\n var _inputStream,\n _framegrabber,\n _stopped = true,\n _canvasContainer = {\n ctx: {\n image: null\n },\n dom: {\n image: null\n }\n },\n _inputImageWrapper,\n _boxSize,\n _decoder,\n _workerPool = [],\n _onUIThread = true,\n _resultCollector,\n _config = {},\n _events = createEventedElement(),\n _locator;\n\n function initializeData(imageWrapper) {\n initBuffers(imageWrapper);\n _decoder = BarcodeDecoder.create(_config.decoder, _inputImageWrapper);\n }\n\n function initInputStream(cb) {\n var video;\n if (_config.inputStream.type === \"VideoStream\") {\n video = document.createElement(\"video\");\n _inputStream = InputStream.createVideoStream(video);\n } else if (_config.inputStream.type === \"ImageStream\") {\n _inputStream = InputStream.createImageStream();\n } else if (_config.inputStream.type === \"LiveStream\") {\n var $viewport = getViewPort();\n if ($viewport) {\n video = $viewport.querySelector(\"video\");\n if (!video) {\n video = document.createElement(\"video\");\n $viewport.appendChild(video);\n }\n }\n _inputStream = InputStream.createLiveStream(video);\n CameraAccess.request(video, _config.inputStream.constraints)\n .then(() => {\n _inputStream.trigger(\"canrecord\");\n }).catch((err) => {\n return cb(err);\n });\n }\n\n _inputStream.setAttribute(\"preload\", \"auto\");\n _inputStream.setInputStream(_config.inputStream);\n _inputStream.addEventListener(\"canrecord\", canRecord.bind(undefined, cb));\n }\n\n function getViewPort() {\n var target = _config.inputStream.target;\n // Check if target is already a DOM element\n if (target && target.nodeName && target.nodeType === 1) {\n return target;\n } else {\n // Use '#interactive.viewport' as a fallback selector (backwards compatibility)\n var selector = typeof target === 'string' ? target : '#interactive.viewport';\n return document.querySelector(selector);\n }\n }\n\n function canRecord(cb) {\n checkImageConstraints(_inputStream, _config.locator);\n initCanvas(_config);\n _framegrabber = FrameGrabber.create(_inputStream, _canvasContainer.dom.image);\n\n adjustWorkerPool(_config.numOfWorkers, function() {\n if (_config.numOfWorkers === 0) {\n initializeData();\n }\n ready(cb);\n });\n }\n\n function ready(cb){\n _inputStream.play();\n cb();\n }\n\n function initCanvas() {\n if (typeof document !== \"undefined\") {\n var $viewport = getViewPort();\n _canvasContainer.dom.image = document.querySelector(\"canvas.imgBuffer\");\n if (!_canvasContainer.dom.image) {\n _canvasContainer.dom.image = document.createElement(\"canvas\");\n _canvasContainer.dom.image.className = \"imgBuffer\";\n if ($viewport && _config.inputStream.type === \"ImageStream\") {\n $viewport.appendChild(_canvasContainer.dom.image);\n }\n }\n _canvasContainer.ctx.image = _canvasContainer.dom.image.getContext(\"2d\");\n _canvasContainer.dom.image.width = _inputStream.getCanvasSize().x;\n _canvasContainer.dom.image.height = _inputStream.getCanvasSize().y;\n }\n }\n\n function initBuffers(imageWrapper) {\n if (imageWrapper) {\n _inputImageWrapper = imageWrapper;\n } else {\n _inputImageWrapper = new ImageWrapper({\n x: _inputStream.getWidth(),\n y: _inputStream.getHeight()\n });\n }\n\n if (ENV.development) {\n console.log(_inputImageWrapper.size);\n }\n _boxSize = [\n vec2.clone([0, 0]),\n vec2.clone([0, _inputImageWrapper.size.y]),\n vec2.clone([_inputImageWrapper.size.x, _inputImageWrapper.size.y]),\n vec2.clone([_inputImageWrapper.size.x, 0])\n ];\n _locator = createLocator(_inputImageWrapper, _config.locator);\n }\n\n function getBoundingBoxes() {\n if (_config.locate) {\n return _locator.locate();\n } else {\n return [[\n vec2.clone(_boxSize[0]),\n vec2.clone(_boxSize[1]),\n vec2.clone(_boxSize[2]),\n vec2.clone(_boxSize[3])]];\n }\n }\n\n function transformResult(result) {\n var topRight = _inputStream.getTopRight(),\n xOffset = topRight.x,\n yOffset = topRight.y,\n i;\n\n if (xOffset === 0 && yOffset === 0) {\n return;\n }\n\n if (result.barcodes) {\n for (i = 0; i < result.barcodes.length; i++) {\n transformResult(result.barcodes[i]);\n }\n }\n\n if (result.line && result.line.length === 2) {\n moveLine(result.line);\n }\n\n if (result.box) {\n moveBox(result.box);\n }\n\n if (result.boxes && result.boxes.length > 0) {\n for (i = 0; i < result.boxes.length; i++) {\n moveBox(result.boxes[i]);\n }\n }\n\n function moveBox(box) {\n var corner = box.length;\n\n while (corner--) {\n box[corner][0] += xOffset;\n box[corner][1] += yOffset;\n }\n }\n\n function moveLine(line) {\n line[0].x += xOffset;\n line[0].y += yOffset;\n line[1].x += xOffset;\n line[1].y += yOffset;\n }\n }\n\n function addResult (result, imageData) {\n if (!imageData || !_resultCollector) {\n return;\n }\n\n if (result.barcodes) {\n result.barcodes.filter(barcode => barcode.codeResult)\n .forEach(barcode => addResult(barcode, imageData));\n } else if (result.codeResult) {\n _resultCollector.addResult(imageData, _inputStream.getCanvasSize(), result.codeResult);\n }\n }\n\n function hasCodeResult (result) {\n return result && (result.barcodes ?\n result.barcodes.some(barcode => barcode.codeResult) :\n result.codeResult);\n }\n\n function publishResult(result, imageData) {\n let resultToPublish = result;\n\n if (result && _onUIThread) {\n transformResult(result);\n addResult(result, imageData);\n resultToPublish = result.barcodes || result;\n }\n\n _events.publish(\"processed\", resultToPublish);\n if (hasCodeResult(result)) {\n _events.publish(\"detected\", resultToPublish);\n }\n }\n\n function locateAndDecode() {\n var result,\n boxes;\n\n boxes = getBoundingBoxes();\n if (boxes) {\n result = _decoder.decodeFromBoundingBoxes(boxes);\n result = result || {};\n result.boxes = boxes;\n publishResult(result, _inputImageWrapper.data);\n } else {\n publishResult();\n }\n }\n\n function update() {\n var availableWorker;\n\n if (_onUIThread) {\n if (_workerPool.length > 0) {\n availableWorker = _workerPool.filter(function(workerThread) {\n return !workerThread.busy;\n })[0];\n if (availableWorker) {\n _framegrabber.attachData(availableWorker.imageData);\n } else {\n return; // all workers are busy\n }\n } else {\n _framegrabber.attachData(_inputImageWrapper.data);\n }\n if (_framegrabber.grab()) {\n if (availableWorker) {\n availableWorker.busy = true;\n availableWorker.worker.postMessage({\n cmd: 'process',\n imageData: availableWorker.imageData\n }, [availableWorker.imageData.buffer]);\n } else {\n locateAndDecode();\n }\n }\n } else {\n locateAndDecode();\n }\n }\n\n function startContinuousUpdate() {\n var next = null,\n delay = 1000 / (_config.frequency === 0 ? 60 : (_config.frequency || 60));\n\n _stopped = false;\n (function frame(timestamp) {\n next = next || timestamp;\n if (!_stopped) {\n if (timestamp >= next) {\n next += delay;\n update();\n }\n window.requestAnimFrame(frame);\n }\n }(performance.now()));\n }\n\n function start() {\n if (_onUIThread && _config.inputStream.type === \"LiveStream\") {\n startContinuousUpdate();\n } else {\n update();\n }\n }\n\n function initWorker(cb) {\n var blobURL,\n workerThread = {\n worker: undefined,\n imageData: new Uint8Array(_inputStream.getWidth() * _inputStream.getHeight()),\n busy: true\n };\n\n blobURL = generateWorkerBlob();\n workerThread.worker = new Worker(blobURL);\n\n workerThread.worker.onmessage = function(e) {\n if (e.data.event === 'initialized') {\n URL.revokeObjectURL(blobURL);\n workerThread.busy = false;\n workerThread.imageData = new Uint8Array(e.data.imageData);\n if (ENV.development) {\n console.log(\"Worker initialized\");\n }\n return cb(workerThread);\n } else if (e.data.event === 'processed') {\n workerThread.imageData = new Uint8Array(e.data.imageData);\n workerThread.busy = false;\n publishResult(e.data.result, workerThread.imageData);\n } else if (e.data.event === 'error') {\n if (ENV.development) {\n console.log(\"Worker error: \" + e.data.message);\n }\n }\n };\n\n workerThread.worker.postMessage({\n cmd: 'init',\n size: {x: _inputStream.getWidth(), y: _inputStream.getHeight()},\n imageData: workerThread.imageData,\n config: configForWorker(_config)\n }, [workerThread.imageData.buffer]);\n }\n\n function configForWorker(config) {\n return {\n ...config,\n inputStream: {\n ...config.inputStream,\n target: null\n }\n };\n }\n\n function workerInterface(factory) {\n /* eslint-disable no-undef*/\n if (factory) {\n var Quagga = factory().default;\n if (!Quagga) {\n self.postMessage({'event': 'error', message: 'Quagga could not be created'});\n return;\n }\n }\n var imageWrapper,\n scanner = Quagga._worker.createScanner();\n\n self.onmessage = function(e) {\n if (e.data.cmd === 'init') {\n var config = e.data.config;\n config.numOfWorkers = 0;\n imageWrapper = new Quagga.ImageWrapper({\n x: e.data.size.x,\n y: e.data.size.y\n }, new Uint8Array(e.data.imageData));\n scanner.init(config, ready, imageWrapper);\n scanner.subscribe(\"processed\", onProcessed);\n } else if (e.data.cmd === 'process') {\n imageWrapper.data = new Uint8Array(e.data.imageData);\n scanner.start();\n }\n };\n\n function onProcessed(result) {\n self.postMessage({\n 'event': 'processed',\n imageData: imageWrapper.data,\n result: result\n }, [imageWrapper.data.buffer]);\n }\n\n function ready() { // eslint-disable-line\n self.postMessage({'event': 'initialized', imageData: imageWrapper.data}, [imageWrapper.data.buffer]);\n }\n\n /* eslint-enable */\n }\n\n function generateWorkerBlob() {\n var blob,\n factorySource;\n\n /* jshint ignore:start */\n if (typeof __factorySource__ !== 'undefined') {\n factorySource = __factorySource__; // eslint-disable-line no-undef\n }\n /* jshint ignore:end */\n\n blob = new Blob(['(' + workerInterface.toString() + ')(' + factorySource + ');'],\n {type: 'text/javascript'});\n\n return window.URL.createObjectURL(blob);\n }\n\n function setReaders(readers) {\n if (_decoder) {\n _decoder.setReaders(readers);\n } else if (_onUIThread && _workerPool.length > 0) {\n _workerPool.forEach(function(workerThread) {\n workerThread.worker.postMessage({cmd: 'setReaders', readers: readers});\n });\n }\n }\n\n function adjustWorkerPool(capacity, cb) {\n const increaseBy = capacity - _workerPool.length;\n if (increaseBy === 0) {\n return cb && cb();\n }\n if (increaseBy < 0) {\n const workersToTerminate = _workerPool.slice(increaseBy);\n workersToTerminate.forEach(function(workerThread) {\n workerThread.worker.terminate();\n if (ENV.development) {\n console.log(\"Worker terminated!\");\n }\n });\n _workerPool = _workerPool.slice(0, increaseBy);\n return cb && cb();\n } else {\n for (var i = 0; i < increaseBy; i++) {\n initWorker(workerInitialized);\n }\n\n function workerInitialized(workerThread) {\n _workerPool.push(workerThread);\n if (_workerPool.length >= capacity){\n cb && cb();\n }\n }\n }\n }\n\n return {\n init: function(config, cb, imageWrapper) {\n _config = merge({}, Config, config);\n\n if (imageWrapper) {\n _onUIThread = false;\n initializeData(imageWrapper);\n return cb();\n } else {\n initInputStream(cb);\n }\n },\n start: function() {\n start();\n },\n isRunning: function() {\n return !_stopped;\n },\n stop: function() {\n _stopped = true;\n adjustWorkerPool(0);\n if (_config.inputStream.type === \"LiveStream\") {\n CameraAccess.release();\n }\n _inputStream.clearEventHandlers();\n },\n pause: function() {\n _stopped = true;\n },\n subscribe(eventName, callback) {\n _events.subscribe(eventName, callback);\n },\n unsubscribe(eventName, callback) {\n _events.unsubscribe(eventName, callback);\n },\n registerResultCollector: function(resultCollector) {\n if (resultCollector && typeof resultCollector.addResult === 'function') {\n _resultCollector = resultCollector;\n }\n },\n decodeSingle: function(config, resultCallback) {\n this.init(config, () => {\n _events.once(\"processed\", (result) => {\n this.stop();\n resultCallback.call(null, result);\n }, true);\n start();\n });\n },\n canvas: _canvasContainer\n };\n}\n\nexport default createScanner;\n\n\n\n// WEBPACK FOOTER //\n// ./src/scanner.js","module.exports = copy\n\n/**\n * Copy the values from one mat2 to another\n *\n * @alias mat2.copy\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the source matrix\n * @returns {mat2} out\n */\nfunction copy(out, a) {\n out[0] = a[0]\n out[1] = a[1]\n out[2] = a[2]\n out[3] = a[3]\n return out\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gl-mat2/copy.js\n// module id = 102\n// module chunks = 0","module.exports = create\n\n/**\n * Creates a new identity mat2\n *\n * @alias mat2.create\n * @returns {mat2} a new 2x2 matrix\n */\nfunction create() {\n var out = new Float32Array(4)\n out[0] = 1\n out[1] = 0\n out[2] = 0\n out[3] = 1\n return out\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gl-mat2/create.js\n// module id = 103\n// module chunks = 0","module.exports = invert\n\n/**\n * Inverts a mat2\n *\n * @alias mat2.invert\n * @param {mat2} out the receiving matrix\n * @param {mat2} a the source matrix\n * @returns {mat2} out\n */\nfunction invert(out, a) {\n var a0 = a[0]\n var a1 = a[1]\n var a2 = a[2]\n var a3 = a[3]\n var det = a0 * a3 - a2 * a1\n\n if (!det) return null\n det = 1.0 / det\n\n out[0] = a3 * det\n out[1] = -a1 * det\n out[2] = -a2 * det\n out[3] = a0 * det\n\n return out\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gl-mat2/invert.js\n// module id = 104\n// module chunks = 0","module.exports = scale\n\n/**\n * Scales a vec2 by a scalar number\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec2} out\n */\nfunction scale(out, a, b) {\n out[0] = a[0] * b\n out[1] = a[1] * b\n return out\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gl-vec2/scale.js\n// module id = 105\n// module chunks = 0","module.exports = transformMat2\n\n/**\n * Transforms the vec2 with a mat2\n *\n * @param {vec2} out the receiving vector\n * @param {vec2} a the vector to transform\n * @param {mat2} m matrix to transform with\n * @returns {vec2} out\n */\nfunction transformMat2(out, a, m) {\n var x = a[0],\n y = a[1]\n out[0] = m[0] * x + m[2] * y\n out[1] = m[1] * x + m[3] * y\n return out\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gl-vec2/transformMat2.js\n// module id = 106\n// module chunks = 0","module.exports = clone;\n\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {vec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\nfunction clone(a) {\n var out = new Float32Array(3)\n out[0] = a[0]\n out[1] = a[1]\n out[2] = a[2]\n return out\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/gl-vec3/clone.js\n// module id = 107\n// module chunks = 0","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_DataView.js\n// module id = 108\n// module chunks = 0","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_Hash.js\n// module id = 109\n// module chunks = 0","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_Promise.js\n// module id = 110\n// module chunks = 0","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_Set.js\n// module id = 111\n// module chunks = 0","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_SetCache.js\n// module id = 112\n// module chunks = 0","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_WeakMap.js\n// module id = 113\n// module chunks = 0","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_apply.js\n// module id = 114\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_arrayFilter.js\n// module id = 115\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_arraySome.js\n// module id = 116\n// module chunks = 0","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n}());\n\nmodule.exports = baseCreate;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseCreate.js\n// module id = 117\n// module chunks = 0","var arrayPush = require('./_arrayPush'),\n isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nmodule.exports = baseFlatten;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseFlatten.js\n// module id = 118\n// module chunks = 0","var createBaseFor = require('./_createBaseFor');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseFor.js\n// module id = 119\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseHasIn.js\n// module id = 120\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIsArguments.js\n// module id = 121\n// module chunks = 0","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIsEqualDeep.js\n// module id = 122\n// module chunks = 0","var Stack = require('./_Stack'),\n baseIsEqual = require('./_baseIsEqual');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIsMatch.js\n// module id = 123\n// module chunks = 0","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIsNative.js\n// module id = 124\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseIsTypedArray.js\n// module id = 125\n// module chunks = 0","var isObject = require('./isObject'),\n isPrototype = require('./_isPrototype'),\n nativeKeysIn = require('./_nativeKeysIn');\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 `_.keysIn` 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 baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeysIn;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseKeysIn.js\n// module id = 126\n// module chunks = 0","var baseIsMatch = require('./_baseIsMatch'),\n getMatchData = require('./_getMatchData'),\n matchesStrictComparable = require('./_matchesStrictComparable');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseMatches.js\n// module id = 127\n// module chunks = 0","var baseIsEqual = require('./_baseIsEqual'),\n get = require('./get'),\n hasIn = require('./hasIn'),\n isKey = require('./_isKey'),\n isStrictComparable = require('./_isStrictComparable'),\n matchesStrictComparable = require('./_matchesStrictComparable'),\n toKey = require('./_toKey');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseMatchesProperty.js\n// module id = 128\n// module chunks = 0","var Stack = require('./_Stack'),\n assignMergeValue = require('./_assignMergeValue'),\n baseFor = require('./_baseFor'),\n baseMergeDeep = require('./_baseMergeDeep'),\n isObject = require('./isObject'),\n keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n if (isObject(srcValue)) {\n stack || (stack = new Stack);\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(object[key], srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n}\n\nmodule.exports = baseMerge;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseMerge.js\n// module id = 129\n// module chunks = 0","var assignMergeValue = require('./_assignMergeValue'),\n cloneBuffer = require('./_cloneBuffer'),\n cloneTypedArray = require('./_cloneTypedArray'),\n copyArray = require('./_copyArray'),\n initCloneObject = require('./_initCloneObject'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n isBuffer = require('./isBuffer'),\n isFunction = require('./isFunction'),\n isObject = require('./isObject'),\n isPlainObject = require('./isPlainObject'),\n isTypedArray = require('./isTypedArray'),\n toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = object[key],\n srcValue = source[key],\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseMergeDeep.js\n// module id = 130\n// module chunks = 0","var basePickBy = require('./_basePickBy'),\n hasIn = require('./hasIn');\n\n/**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nmodule.exports = basePick;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_basePick.js\n// module id = 131\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseProperty.js\n// module id = 132\n// module chunks = 0","var baseGet = require('./_baseGet');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_basePropertyDeep.js\n// module id = 133\n// module chunks = 0","var identity = require('./identity'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseRest.js\n// module id = 134\n// module chunks = 0","var assignValue = require('./_assignValue'),\n castPath = require('./_castPath'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nmodule.exports = baseSet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseSet.js\n// module id = 135\n// module chunks = 0","var constant = require('./constant'),\n defineProperty = require('./_defineProperty'),\n identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nmodule.exports = baseSetToString;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseSetToString.js\n// module id = 136\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseTimes.js\n// module id = 137\n// module chunks = 0","var Symbol = require('./_Symbol'),\n arrayMap = require('./_arrayMap'),\n isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseToString.js\n// module id = 138\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_baseUnary.js\n// module id = 139\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_cacheHas.js\n// module id = 140\n// module chunks = 0","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_cloneArrayBuffer.js\n// module id = 141\n// module chunks = 0","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && 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 allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n}\n\nmodule.exports = cloneBuffer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_cloneBuffer.js\n// module id = 142\n// module chunks = 0","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_cloneTypedArray.js\n// module id = 143\n// module chunks = 0","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = copyArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_copyArray.js\n// module id = 144\n// module chunks = 0","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_copyObject.js\n// module id = 145\n// module chunks = 0","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_coreJsData.js\n// module id = 146\n// module chunks = 0","var baseRest = require('./_baseRest'),\n isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_createAssigner.js\n// module id = 147\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_createBaseFor.js\n// module id = 148\n// module chunks = 0","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_equalByTag.js\n// module id = 149\n// module chunks = 0","var getAllKeys = require('./_getAllKeys');\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 // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_equalObjects.js\n// module id = 150\n// module chunks = 0","var flatten = require('./flatten'),\n overRest = require('./_overRest'),\n setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_flatRest.js\n// module id = 151\n// module chunks = 0","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getAllKeys.js\n// module id = 152\n// module chunks = 0","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbolsIn = require('./_getSymbolsIn'),\n keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * 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 getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getAllKeysIn.js\n// module id = 153\n// module chunks = 0","var isStrictComparable = require('./_isStrictComparable'),\n keys = require('./keys');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getMatchData.js\n// module id = 154\n// module chunks = 0","var Symbol = require('./_Symbol');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getRawTag.js\n// module id = 155\n// module chunks = 0","var arrayPush = require('./_arrayPush'),\n getPrototype = require('./_getPrototype'),\n getSymbols = require('./_getSymbols'),\n stubArray = require('./stubArray');\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 and inherited 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 getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n};\n\nmodule.exports = getSymbolsIn;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getSymbolsIn.js\n// module id = 156\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_getValue.js\n// module id = 157\n// module chunks = 0","var castPath = require('./_castPath'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isIndex = require('./_isIndex'),\n isLength = require('./isLength'),\n toKey = require('./_toKey');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_hasPath.js\n// module id = 158\n// module chunks = 0","var nativeCreate = require('./_nativeCreate');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_hashClear.js\n// module id = 159\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_hashDelete.js\n// module id = 160\n// module chunks = 0","var nativeCreate = require('./_nativeCreate');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_hashGet.js\n// module id = 161\n// module chunks = 0","var nativeCreate = require('./_nativeCreate');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_hashHas.js\n// module id = 162\n// module chunks = 0","var nativeCreate = require('./_nativeCreate');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_hashSet.js\n// module id = 163\n// module chunks = 0","var baseCreate = require('./_baseCreate'),\n getPrototype = require('./_getPrototype'),\n isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nmodule.exports = initCloneObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_initCloneObject.js\n// module id = 164\n// module chunks = 0","var Symbol = require('./_Symbol'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isFlattenable.js\n// module id = 165\n// module chunks = 0","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isIterateeCall.js\n// module id = 166\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isKeyable.js\n// module id = 167\n// module chunks = 0","var coreJsData = require('./_coreJsData');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_isMasked.js\n// module id = 168\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_listCacheClear.js\n// module id = 169\n// module chunks = 0","var assocIndexOf = require('./_assocIndexOf');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_listCacheDelete.js\n// module id = 170\n// module chunks = 0","var assocIndexOf = require('./_assocIndexOf');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_listCacheGet.js\n// module id = 171\n// module chunks = 0","var assocIndexOf = require('./_assocIndexOf');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_listCacheHas.js\n// module id = 172\n// module chunks = 0","var assocIndexOf = require('./_assocIndexOf');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_listCacheSet.js\n// module id = 173\n// module chunks = 0","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_mapCacheClear.js\n// module id = 174\n// module chunks = 0","var getMapData = require('./_getMapData');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_mapCacheDelete.js\n// module id = 175\n// module chunks = 0","var getMapData = require('./_getMapData');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_mapCacheGet.js\n// module id = 176\n// module chunks = 0","var getMapData = require('./_getMapData');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_mapCacheHas.js\n// module id = 177\n// module chunks = 0","var getMapData = require('./_getMapData');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_mapCacheSet.js\n// module id = 178\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_mapToArray.js\n// module id = 179\n// module chunks = 0","var memoize = require('./memoize');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_memoizeCapped.js\n// module id = 180\n// module chunks = 0","var overArg = require('./_overArg');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_nativeKeys.js\n// module id = 181\n// module chunks = 0","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = nativeKeysIn;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_nativeKeysIn.js\n// module id = 182\n// module chunks = 0","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && 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 return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_nodeUtil.js\n// module id = 183\n// module chunks = 0","/** 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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_objectToString.js\n// module id = 184\n// module chunks = 0","/** 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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_setCacheAdd.js\n// module id = 185\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_setCacheHas.js\n// module id = 186\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_setToArray.js\n// module id = 187\n// module chunks = 0","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nmodule.exports = shortOut;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_shortOut.js\n// module id = 188\n// module chunks = 0","var ListCache = require('./_ListCache');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_stackClear.js\n// module id = 189\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_stackDelete.js\n// module id = 190\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_stackGet.js\n// module id = 191\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_stackHas.js\n// module id = 192\n// module chunks = 0","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_stackSet.js\n// module id = 193\n// module chunks = 0","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar reLeadingDot = /^\\./,\n 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 (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nmodule.exports = stringToPath;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/_stringToPath.js\n// module id = 194\n// module chunks = 0","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = constant;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/constant.js\n// module id = 195\n// module chunks = 0","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/flatten.js\n// module id = 196\n// module chunks = 0","var baseGet = require('./_baseGet');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/get.js\n// module id = 197\n// module chunks = 0","var isArrayLike = require('./isArrayLike'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an 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 an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isArrayLikeObject.js\n// module id = 198\n// module chunks = 0","var baseKeys = require('./_baseKeys'),\n getTag = require('./_getTag'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isArrayLike = require('./isArrayLike'),\n isBuffer = require('./isBuffer'),\n isPrototype = require('./_isPrototype'),\n isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\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 `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\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 empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nmodule.exports = isEmpty;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isEmpty.js\n// module id = 199\n// module chunks = 0","var baseGetTag = require('./_baseGetTag'),\n getPrototype = require('./_getPrototype'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\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 infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/isPlainObject.js\n// module id = 200\n// module chunks = 0","var MapCache = require('./_MapCache');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/memoize.js\n// module id = 201\n// module chunks = 0","/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\nfunction negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n}\n\nmodule.exports = negate;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/negate.js\n// module id = 202\n// module chunks = 0","var baseIteratee = require('./_baseIteratee'),\n negate = require('./negate'),\n pickBy = require('./pickBy');\n\n/**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\nfunction omitBy(object, predicate) {\n return pickBy(object, negate(baseIteratee(predicate)));\n}\n\nmodule.exports = omitBy;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/omitBy.js\n// module id = 203\n// module chunks = 0","var arrayMap = require('./_arrayMap'),\n baseIteratee = require('./_baseIteratee'),\n basePickBy = require('./_basePickBy'),\n getAllKeysIn = require('./_getAllKeysIn');\n\n/**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\nfunction pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = baseIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n}\n\nmodule.exports = pickBy;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/pickBy.js\n// module id = 204\n// module chunks = 0","var baseProperty = require('./_baseProperty'),\n basePropertyDeep = require('./_basePropertyDeep'),\n isKey = require('./_isKey'),\n toKey = require('./_toKey');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/property.js\n// module id = 205\n// module chunks = 0","/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/stubFalse.js\n// module id = 206\n// module chunks = 0","var copyObject = require('./_copyObject'),\n keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/toPlainObject.js\n// module id = 207\n// module chunks = 0","var baseToString = require('./_baseToString');\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/lodash/toString.js\n// module id = 208\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/quagga.min.js b/dist/quagga.min.js index 0ee175f..d0f49cb 100644 --- a/dist/quagga.min.js +++ b/dist/quagga.min.js @@ -1,4 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(t.toString())["default"]:"object"==typeof exports?exports.Quagga=t(t.toString())["default"]:e.Quagga=t(t.toString())["default"]}(this,function(e){return function(e){function t(r){if(n[r])return n[r].e;var o=n[r]={e:{},i:r,l:!1};return e[r].call(o.e,o,o.e,t),o.l=!0,o.e}var n={};return t.m=e,t.c=n,t.p="/",t(t.s=214)}([function(e,t,n){var r=Array.isArray;e.e=r},function(e,t,n){"use strict";var r=!0,o={disableLog:function(e){return"boolean"!=typeof e?new Error("Argument type: "+typeof e+". Please use a boolean."):(r=e,e?"adapter.js logging disabled":"adapter.js logging enabled")},log:function(){if("object"==typeof window){if(r)return;"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments)}},extractVersion:function(e,t,n){var r=e.match(t);return r&&r.length>=n&&parseInt(r[n],10)},detectBrowser:function(){var e={};if(e.browser=null,e.version=null,"undefined"==typeof window||!window.navigator)return e.browser="Not a browser.",e;if(navigator.mozGetUserMedia)e.browser="firefox",e.version=this.extractVersion(navigator.userAgent,/Firefox\/([0-9]+)\./,1);else if(navigator.webkitGetUserMedia)if(window.webkitRTCPeerConnection)e.browser="chrome",e.version=this.extractVersion(navigator.userAgent,/Chrom(e|ium)\/([0-9]+)\./,2);else{if(!navigator.userAgent.match(/Version\/(\d+).(\d+)/))return e.browser="Unsupported webkit-based browser with GUM support but no WebRTC support.",e;e.browser="safari",e.version=this.extractVersion(navigator.userAgent,/AppleWebKit\/([0-9]+)\./,1)}else{if(!navigator.mediaDevices||!navigator.userAgent.match(/Edge\/(\d+).(\d+)$/))return e.browser="Not a supported browser.",e;e.browser="edge",e.version=this.extractVersion(navigator.userAgent,/Edge\/(\d+).(\d+)$/,2)}return e}};e.e={log:o.log,disableLog:o.disableLog,browserDetails:o.detectBrowser(),extractVersion:o.extractVersion}},function(e,t,n){function r(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}e.e=r},function(e,t,n){var r=n(63),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();e.e=i},function(e,t,n){function r(e,t){e=a.a.bind()(o(),e),c.a.call(this,e,t)}function o(){var e={};return Object.keys(r.CONFIG_KEYS).forEach(function(t){e[t]=r.CONFIG_KEYS[t]["default"]}),e}var i=n(15),a=i&&i.__esModule?function(){return i["default"]}:function(){return i};Object.defineProperty(a,"a",{get:a});var c=n(7),u=Object.assign||function(e){for(var t=1;ta.AVG_CODE_ERROR?null:f}s++,i[s]=1,u=!u}return null},r.prototype._findPattern=function(e,t,n,r,o){var i,a,c,u,s=[],f=this,d=0,l={error:Number.MAX_VALUE,code:-1,start:0,end:0};for(t||(t=f._nextSet(f._row)),void 0===n&&(n=!1),void 0===r&&(r=!0),void 0===o&&(o=f.AVG_CODE_ERROR),i=0;i=0&&n._matchRange(e,t.start,0))return t;r=t.end,t=null}},r.prototype._verifyTrailingWhitespace=function(e){var t,n=this;return t=e.end+(e.end-e.start),t=i.CODE_G_START?(e.code=e.code-i.CODE_G_START,a|=1<<5-r):a|=0<<5-r,t.push(e.code),n.push(e)}if(o=i._calculateFirstDigit(a),null===o)return null;if(t.unshift(o),e=i._findPattern(i.MIDDLE_PATTERN,e.end,!0,!1),null===e)return null;for(n.push(e),r=0;r<6;r++){if(e=i._decodeCode(e.end,i.CODE_G_START),!e)return null;n.push(e),t.push(e.code)}return e},r.prototype._decode=function(){var e,t,n=this,r=[],o=[],i={};if(e=n._findStart(),!e)return null;if(t={code:e.code,start:e.start,end:e.end},o.push(t),t=n._decodePayload(t,r,o),!t)return null;if(t=n._findEnd(t.end,!1),!t)return null;if(o.push(t),!n._checksum(r))return null;if(this.supplements.length>0){var a=this._decodeExtensions(t.end);if(!a)return null;var c=a.decodedCodes[a.decodedCodes.length-1],s={start:c.start+((c.end-c.start)/2|0),end:c.end};if(!n._verifyTrailingWhitespace(s))return null;i={supplement:a,code:r.join("")+a.code}}return u({code:r.join(""),start:e.start,end:t.end,codeset:"",startInfo:e,decodedCodes:o},i)},r.prototype._decodeExtensions=function(e){var t,n,r=this._nextSet(this._row,e),o=this._findPattern(this.EXTENSION_START_PATTERN,r,!1,!1);if(null===o)return null;for(t=0;t=0;t-=2)n+=e[t];for(n*=3,t=e.length-1;t>=0;t-=2)n+=e[t];return n%10===0},r.CONFIG_KEYS={supplements:{type:"arrayOf(string)","default":[],description:"Allowed extensions to be decoded (2 and/or 5)"}},t.a=r},function(e,t,n){function r(e,t){var n=i(e,t);return o(n)?n:void 0}var o=n(129),i=n(158);e.e=r},function(e,t,n){t.a={drawRect:function(e,t,n,r){n.strokeStyle=r.color,n.fillStyle=r.color,n.lineWidth=1,n.beginPath(),n.strokeRect(e.x,e.y,t.x,t.y)},drawPath:function(e,t,n,r){n.strokeStyle=r.color,n.fillStyle=r.color,n.lineWidth=r.lineWidth,n.beginPath(),n.moveTo(e[0][t.x],e[0][t.y]);for(var o=1;on)return Number.MAX_VALUE;c+=u}return c/f},r.prototype._nextSet=function(e,t){var n;for(t=t||0,n=t;n1&&(e[n[r]]=o)},r.prototype._matchTrace=function(e,t){var n,r,o=[],i=this,a=i._nextSet(i._row),c=!i._row[a],u=0,s={error:Number.MAX_VALUE,code:-1,start:0};if(e){for(n=0;n=0;r--)t=Math.floor(Math.random()*r),n=e[r],e[r]=e[t],e[t]=n;return e},toPointList:function(e){var t,n,r=[],o=[];for(t=0;t=t&&o.push(e[r]);return o},maxIndex:function(e){var t,n=0;for(t=0;te[n]&&(n=t);return n},max:function r(e){var t,r=0;for(t=0;tr&&(r=e[t]);return r},sum:function o(e){for(var t=e.length,o=0;t--;)o+=e[t];return o}}},function(e,t,n){function r(e){var t=-1,n=e?e.length:0;for(this.clear();++t0?Math.floor(this.x+.5):Math.floor(this.x-.5),this.y=this.y>0?Math.floor(this.y+.5):Math.floor(this.y-.5),this}};return n}function o(e,t,n){n||(n=e);for(var r=e.data,o=r.length,i=n.data;o--;)i[o]=r[o]>o]++;return a}function a(e,t){function n(e,t){var n,r=0;for(n=e;n<=t;n++)r+=a[n];return r}function r(e,t){var n,r=0;for(n=e;n<=t;n++)r+=n*a[n];return r}function o(){var o,c,u,s,f,d,l,p=[0],h=(1<u)for(i=s[c],i.score=o,i.item=e[r],u=Number.MAX_VALUE,a=0;at[r]?r++:n++;return o}function g(e,t){function n(e){for(var t=0,n=e[Math.floor(e.length/2)];t0&&(n=Math.abs(e[t]-l)>Math.abs(e[t-1]-l)?e[t-1]:e[t]),l/nu[f-1]/u[f]?{x:n,y:n}:null}var r,o=h(t.x),i=h(t.y),a=Math.max(t.x,t.y),c=v(o,i),u=[8,10,15,20,32,60,80],s={"x-small":5,small:4,medium:3,large:2,"x-large":1},f=s[e]||s.medium,d=u[f],l=Math.floor(a/d);return r=n(c),r||(r=n(h(a)),r||(r=n(h(l*d)))),r}function m(e){var t={value:parseFloat(e),unit:(e.indexOf("%")===e.length-1,"%")};return t}function y(e,t,n){var r={width:e,height:t},o=Object.keys(n).reduce(function(e,t){var o=n[t],i=m(o),a=E[t](i,r);return e[t]=a,e},{});return{sx:o.left,sy:o.top,sw:o.right-o.left,sh:o.bottom-o.top}}var b=n(77),_=n(16);t.f=r,t.c=c,t.d=u,t.e=s,t.i=f,t.j=d,t.g=l,t.a=p,t.b=g,t.h=y;var w={clone:n(8)},C={clone:n(109)},E={top:function(e,t){if("%"===e.unit)return Math.floor(t.height*(e.value/100))},right:function(e,t){if("%"===e.unit)return Math.floor(t.width-t.width*(e.value/100))},bottom:function(e,t){if("%"===e.unit)return Math.floor(t.height-t.height*(e.value/100))},left:function(e,t){if("%"===e.unit)return Math.floor(t.width*(e.value/100))}}},function(e,t,n){function r(e,t,n,r){t?this.data=t:n?(this.data=new n(e.x*e.y),n===Array&&r&&a.a.init(this.data,0)):(this.data=new Uint8Array(e.x*e.y),Uint8Array===Array&&r&&a.a.init(this.data,0)),this.size=e}var o=n(80),i=n(26),a=n(16),c={clone:n(8)};r.prototype.inImageWithBorder=function(e,t){return e.x>=t&&e.y>=t&&e.x0&&(a=m[r-1],a.m00+=1,a.m01+=n,a.m10+=t,a.m11+=t*n,a.m02+=o,a.m20+=t*t);for(i=0;i=0?_:-_)+b,a.theta=(180*p/b+90)%180-90,a.theta<0&&(a.theta+=180),a.rad=p>b?p-b:p,a.vec=c.clone([Math.cos(p),Math.sin(p)]),y.push(a));return y},r.prototype.show=function(e,t){var n,r,o,i,a,c,u;for(t||(t=1),n=e.getContext("2d"),e.width=this.size.x,e.height=this.size.y,r=n.getImageData(0,0,e.width,e.height),o=r.data,i=0,u=0;u360)&&(t=360);for(var r=[0,1,1],o=[0,0,0],a=[255,255,255],c=[0,0,0],u=[],s=e.getContext("2d"),f=s.getImageData(n.x,n.y,this.size.x,this.size.y),d=f.data,l=this.data.length;l--;)r[0]=this.data[l]*t,u=r[0]<=0?a:r[0]>=360?c:i.a.bind()(r,o),d[4*l+0]=u[0],d[4*l+1]=u[1],d[4*l+2]=u[2],d[4*l+3]=255;s.putImageData(f,n.x,n.y)},t.a=r},function(e,t,n){var r=n(5),o=n(3),i=r(o,"Map");e.e=i},function(e,t,n){function r(e){var t=-1,n=e?e.length:0;for(this.clear();++t-1&&e%1==0&&e-1&&e%1==0&&e<=o}var o=9007199254740991;e.e=r},function(e,t,n){function r(e){return"symbol"==typeof e||o(e)&&c.call(e)==i}var o=n(13),i="[object Symbol]",a=Object.prototype,c=a.toString;e.e=r},function(e,t,n){var r=n(130),o=n(141),i=n(183),a=i&&i.isTypedArray,c=a?o(a):r;e.e=c},function(e,t,n){function r(e,t){return!!t&&t.some(function(t){return Object.keys(t).every(function(n){return t[n]===e[n]})})}function o(e,t){return"function"!=typeof t||t(e)}var i=n(6);t.a={create:function(e){function t(t){return u&&t&&!r(t,e.blacklist)&&o(t,e.filter)}var n=document.createElement("canvas"),a=n.getContext("2d"),c=[],u=e.capacity||20,s=e.capture===!0;return{addResult:function(e,r,o){var f={};t(o)&&(u--,f.codeResult=o,s&&(n.width=r.x,n.height=r.y,i.a.drawImage(e,r,a),f.frame=n.toDataURL()),c.push(f))},getResults:function(){return c}}}}},function(e,t,n){var r=void 0;r=n(82),t.a=r},function(e,t,n){var r={searchDirections:[[0,1],[1,1],[1,0],[1,-1],[0,-1],[-1,-1],[-1,0],[-1,1]],create:function(e,t){function n(e,t,n,r){var o,f,d;for(o=0;o<7;o++){if(f=e.cy+u[e.dir][0],d=e.cx+u[e.dir][1],i=f*s+d,a[i]===t&&(0===c[i]||c[i]===n))return c[i]=n,e.cy=f,e.cx=d,!0;0===c[i]&&(c[i]=r),e.dir=(e.dir+1)%8}return!1}function r(e,t,n){return{dir:n,x:e,y:t,next:null,prev:null}}function o(e,t,o,i,a){var c,u,s,f=null,d={cx:t,cy:e,dir:0};if(n(d,i,o,a)){f=r(t,e,d.dir),c=f,s=d.dir,u=r(d.cx,d.cy,0),u.prev=c,c.next=u,u.next=null,c=u;do d.dir=(d.dir+6)%8,n(d,i,o,a),s!==d.dir?(c.dir=d.dir,u=r(d.cx,d.cy,0),u.prev=c,c.next=u,u.next=null,c=u):(c.dir=s,c.x=d.cx,c.y=d.cy),s=d.dir;while(d.cx!==t||d.cy!==e);f.prev=c.prev,c.prev.next=f}return f}var i,a=e.data,c=t.data,u=this.searchDirections,s=e.size.x;return{trace:function(e,t,r,o){return n(e,t,r,o)},contourTracing:function(e,t,n,r,i){return o(e,t,n,r,i)}}}};t.a=r},function(e,t,n){function r(){o.a.call(this)}var o=n(7),i=n(16),a={ALPHABETH_STRING:{value:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"},ALPHABET:{value:[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,45,46,32,42,36,47,43,37]},CHARACTER_ENCODINGS:{value:[52,289,97,352,49,304,112,37,292,100,265,73,328,25,280,88,13,268,76,28,259,67,322,19,274,82,7,262,70,22,385,193,448,145,400,208,133,388,196,148,168,162,138,42]},ASTERISK:{value:148},FORMAT:{value:"code_39",writeable:!1}};r.prototype=Object.create(o.a.prototype,a),r.prototype.constructor=r,r.prototype._toCounters=function(e,t){var n,r=this,o=t.length,a=r._row.length,c=!r._row[e],u=0;for(i.a.init(t,0),n=e;n=o},r.prototype._patternToChar=function(e){var t,n=this;for(t=0;tt&&(r=e[n]);return r},r.prototype._toPattern=function(e){for(var t,n,r=e.length,o=0,i=r,a=0,c=this;i>3;){for(o=c._findNextWidth(e,o),i=0,t=0,n=0;no&&(t|=1<0;n++)if(e[n]>o&&(i--,2*e[n]>=a))return-1;return t}}return-1},r.prototype._findStart=function(){var e,t,n,r=this,o=r._nextSet(r._row),i=o,a=[0,0,0,0,0,0,0,0,0],c=0,u=!1;for(e=o;ed))return!1;var p=s.get(e);if(p&&s.get(t))return p==t;var h=-1,v=!0,g=u&a?new o:void 0;for(s.set(e,t),s.set(t,e);++ht},getPoints:function(){return a},getCenter:function(){return c}}},createPoint:function(e,t,n){return{rad:e[n],point:e,id:t}}}},function(e,t,n){var r=Object.assign||function(e){for(var t=1;t>>16&65535,r=65535&e,o=t>>>16&65535,i=65535&t;return r*i+(n*i+r*o<<16>>>0)|0}},function(e,t,n){e.e={inputStream:{name:"Live",type:"LiveStream",constraints:{width:640,height:480,facingMode:"environment"},area:{top:"0%",right:"0%",left:"0%",bottom:"0%"},singleChannel:!1},locate:!0,numOfWorkers:4,decoder:{readers:["code_128_reader"]},locator:{halfSample:!0,patchSize:"medium"}}},function(e,t,n){var r=n(84),o=(n(6),n(95)),i=n(4),a=n(45),c=n(96),u=n(94),s=n(102),f=n(99),d=n(97),l=n(98),p=n(101),h=n(100),v="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},g={code_128_reader:o.a,ean_reader:i.a,ean_5_reader:l.a,ean_2_reader:d.a,ean_8_reader:f.a,code_39_reader:a.a,code_39_vin_reader:c.a,codabar_reader:u.a,upc_reader:s.a,upc_e_reader:p.a,i2of5_reader:h.a};t.a={create:function(e,t){function n(){}function o(){e.readers.forEach(function(e){var t,n={},r=[];"object"===("undefined"==typeof e?"undefined":v(e))?(t=e.format,n=e.config):"string"==typeof e&&(t=e),n.supplements&&(r=n.supplements.map(function(e){return new g[e]})),p.push(new g[t](n,r))})}function i(){}function a(e,n,r){function o(t){var r={y:t*Math.sin(n),x:t*Math.cos(n)};e[0].y-=r.y,e[0].x-=r.x,e[1].y+=r.y,e[1].x+=r.x}for(o(r);r>1&&(!t.inImageWithBorder(e[0],0)||!t.inImageWithBorder(e[1],0));)r-=Math.ceil(r/2),o(-r);return e}function c(e){return[{x:(e[1][0]-e[0][0])/2+e[0][0],y:(e[1][1]-e[0][1])/2+e[0][1]},{x:(e[3][0]-e[2][0])/2+e[2][0],y:(e[3][1]-e[2][1])/2+e[2][1]}]}function u(e){var n,o=null,i=r.a.getBarcodeLine(t,e[0],e[1]);for(r.a.toBinaryLine(i),n=0;nC?d:C,m.push(d)}var o,i,a,c,u,s,f,d,l=0|t.x,p=0|t.y,h=0|n.x,v=0|n.y,g=Math.abs(v-p)>Math.abs(h-l),m=[],y=e.data,b=e.size.x,_=0,w=255,C=0;for(g&&(s=l,l=p,p=s,s=h,h=v,v=s),l>h&&(s=l,l=h,h=s,s=p,p=v,v=s),o=h-l,i=Math.abs(v-p),a=o/2|0,u=p,c=pd?o.DIR.UP:o.DIR.DOWN,l.push({pos:0,val:f[0]}),a=0;ap&&f[a+1]>.5*d?o.DIR.UP:r,r!==i&&(l.push({pos:a,val:f[a]}),r=i);for(l.push({pos:f.length,val:f[f.length-1]}),c=l[0].pos;cd?0:1;for(a=1;al[a].val?l[a].val+(l[a+1].val-l[a].val)/3*2|0:l[a+1].val+(l[a].val-l[a+1].val)/3|0,c=l[a].pos;cp?0:1;return{line:f,threshold:p}},r.debug={printFrequency:function(e,t){var n,r=t.getContext("2d");for(t.width=e.length,t.height=256,r.beginPath(),r.strokeStyle="blue",n=0;n0?e.videoWidth>0&&e.videoHeight>0?t():window.setTimeout(r,500):n("Unable to play video stream. Is webcam working?"),o--}var o=10;r()})}function o(e,t){return navigator.mediaDevices&&"function"==typeof navigator.mediaDevices.getUserMedia?navigator.mediaDevices.getUserMedia(t).then(function(t){return new Promise(function(n){s=t,e.setAttribute("autoplay","true"),e.srcObject=t,e.addEventListener("loadedmetadata",function(){e.play(),n()})})}).then(r.bind(null,e)):Promise.reject(new Error("getUserMedia is not defined"))}function i(e){var t=u.a.bind()(e,["width","height","facingMode","aspectRatio","deviceId"]);return"undefined"!=typeof e.minAspectRatio&&e.minAspectRatio>0&&(t.aspectRatio=e.minAspectRatio,console.log("WARNING: Constraint 'minAspectRatio' is deprecated; Use 'aspectRatio' instead")),"undefined"!=typeof e.facing&&(t.facingMode=e.facing,console.log("WARNING: Constraint 'facing' is deprecated. Use 'facingMode' instead'")),t}function a(e){return{audio:!1,video:i(e)}}var c=n(73),u=c&&c.__esModule?function(){return c["default"]}:function(){return c};Object.defineProperty(u,"a",{get:u});var s;t.a={request:function(e,t){return o(e,a(t))},release:function(){var e=s&&s.getVideoTracks();e&&e.length&&e[0].stop(),s=null}}},function(e,t,n){function r(e,t,n){if(n instanceof w.a.MediaStream)return d(e,t,{srcObject:n});if(n instanceof w.a.HTMLImageElement)throw new Error('Source "HTMLImageElement": not yet supported');if(n instanceof w.a.HTMLVideoElement)throw new Error('Source "HTMLVideoElement": not yet supported');if(n instanceof w.a.HTMLCanvasElement)return s(e,t,{canvas:n});if(!(n instanceof w.a.FileList)){if(n instanceof w.a.File)return a(e,t,n);if("string"==typeof n)return c(e,t,n);if("object"!==("undefined"==typeof n?"undefined":C(n))||"undefined"==typeof n.constraints&&"undefined"==typeof n.area)throw new Error("No source given!");return l(e,n)}return n.length>0?a(e,t,n[0]):void 0}function o(e,t){var n=arguments.length<=2||void 0===arguments[2]?{}:arguments[2],r={inputStream:_.a.bind()({type:"ImageStream",sequence:!1,size:800},t),numOfWorkers:1};return _.a.bind()(e,r,{numOfWorkers:"number"==typeof e.numOfWorkers&&e.numOfWorkers>0?1:0},{inputStream:g.a.bind()(y.a.bind()(e.inputStream,["size"]),h.a)},{inputStream:n})}function i(e,t,n){var r=n.src,i=n.mime,a=i.match(/^(video|image)\/(.*)$/i)||[],c=a[1];if("video"===c)return f(e,{src:r},t);if("image"===c)return o(e,{src:r},t);throw new Error('Source with mimetype: "'+c+'" not supported')}function a(e,t,n){var r=w.a.URL.createObjectURL(n);return i(e,t,{src:r,mime:n.type})}function c(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],n=arguments[2],r=n.match(E.regex)||[],o=r[1];if(o)return i(e,t,{src:n,mime:o});var a=n.match(T.regex);if(a)throw new Error('Source "objectURL": not supported');var c=n.match(S.regex)||[],s=c[2];if(s)return u(e,t,{src:n,ext:s});throw new Error('Source "'+n+'": not recognized')}function u(e,t,n){var r=n.src,i=n.ext;if(i.match(R.regex))return o(e,{src:r},t);if(i.match(O.regex))return f(e,{src:r},t);throw new Error('Source "MediaString": not recognized')}function s(e,t){t.canvas,arguments.length<=2||void 0===arguments[2]?{}:arguments[2];throw new Error('Source "Canvas": not implemented!')}function f(e,t){var n=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];return _.a.bind()({},e,{inputStream:_.a.bind()({type:"VideoStream"},t)},{inputStream:n})}function d(e,t){t.srcObject,arguments.length<=2||void 0===arguments[2]?{}:arguments[2];throw new Error('Source "MediaStream": not implemented!')}function l(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return _.a.bind()({},e,{inputStream:{type:"LiveStream",constraints:{width:640,height:480,facingMode:"environment"}}},{inputStream:t})}var p=n(195),h=p&&p.__esModule?function(){return p["default"]}:function(){return p};Object.defineProperty(h,"a",{get:h});var v=n(199),g=v&&v.__esModule?function(){return v["default"]}:function(){return v};Object.defineProperty(g,"a",{get:g});var m=n(73),y=m&&m.__esModule?function(){return m["default"]}:function(){return m};Object.defineProperty(y,"a",{get:y});var b=n(15),_=b&&b.__esModule?function(){return b["default"]}:function(){return b};Object.defineProperty(_,"a",{get:_});var w=n(78);t.a=r;var C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},E={regex:/^\s*data:([a-z]+\/[a-z0-9\-\+]+(;[a-z\-]+\=[a-z0-9\-]+)?)?(;base64)?,[a-z0-9\!\$\&\'\,\(\)\*\+\,\;\=\-\.\_\~\:\@\/\?\%\s]*\s*$/i},T={regex:/^\s*blob:(.*)$/i},S={regex:/^(?:(?:http[s]?|ftp):\/)?\/?(?:(?:[^:\/\s]+)(?:(?:\/\w+)*\/))?([\w\-]+\.([^#?\s]+))(?:.*)?(?:#[\w\-]+)?$/i},R={regex:/(jpe?g|png|gif|tiff)(?:\s+|$)/i},O={regex:/(webm|ogg|mp4|m4v)/i}},function(e,t,n){function r(e){var t=arguments.length<=1||void 0===arguments[1]?l:arguments[1];return/^blob\:/i.test(e)?i(e).then(o).then(function(e){return a(e,t)}):Promise.resolve(null)}function o(e){return new Promise(function(t){var n=new FileReader;n.onload=function(e){return t(e.target.result)},n.readAsArrayBuffer(e)})}function i(e){return new Promise(function(t,n){var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="blob",r.onreadystatechange=function(){r.readyState!==XMLHttpRequest.DONE||200!==r.status&&0!==r.status||t(this.response)},r.onerror=n,r.send()})}function a(e){var t=arguments.length<=1||void 0===arguments[1]?l:arguments[1],n=new DataView(e),r=e.byteLength,o=t.reduce(function(e,t){var n=Object.keys(d).filter(function(e){return d[e]===t})[0];return n&&(e[n]=t),e},{}),i=2,a=void 0;if(255!==n.getUint8(0)||216!==n.getUint8(1))return!1;for(;i1?i.size:Math.floor(t/o*i.size):t,r=i.size?t/o>1?Math.floor(o/t*i.size):i.size:o,s.x=n,s.y=r}var n,r,o={},i=null,a=["canrecord","ended"],c={},u={x:0,y:0},s={x:0,y:0};return o.getRealWidth=function(){return e.videoWidth},o.getRealHeight=function(){return e.videoHeight},o.getWidth=function(){return n},o.getHeight=function(){return r},o.setWidth=function(e){n=e},o.setHeight=function(e){r=e},o.setInputStream=function(t){i=t,e.src="undefined"!=typeof t.src?t.src:""},o.ended=function(){return e.ended},o.getConfig=function(){return i},o.setAttribute=function(t,n){e.setAttribute(t,n)},o.pause=function(){e.pause()},o.play=function(){e.play()},o.setCurrentTime=function(t){"LiveStream"!==i.type&&(e.currentTime=t)},o.addEventListener=function(t,n,r){a.indexOf(t)!==-1?(c[t]||(c[t]=[]),c[t].push(n)):e.addEventListener(t,n,r)},o.clearEventHandlers=function(){a.forEach(function(t){var n=c[t];n&&n.length>0&&n.forEach(function(n){e.removeEventListener(t,n)})})},o.trigger=function(e,n){var r,i=c[e];if("canrecord"===e&&t(),i&&i.length>0)for(r=0;r1?a.size:Math.floor(c/u*a.size):c,o=a.size?c/u>1?Math.floor(u/c*a.size):a.size:u,_.x=n,_.y=o,d=!0,s=0,setTimeout(function(){t("canrecord",[])},0)},h,p,a.sequence)}function t(e,t){var n,r=y[e];if(r&&r.length>0)for(n=0;nf&&(f=o.box[r][0]),o.box[r][1]p&&(p=o.box[r][1]);for(a=[[u,s],[f,s],[f,p],[u,p]],c=j.halfSample?2:1,i=l.invert(i,i),r=0;r<4;r++)d.transformMat2(a[r],a[r],i);for(r=0;r<4;r++)d.scale(a[r],a[r],c);return a}function h(){a.c.bind()(C,P),P.zeroBorder()}function v(){var e,t,n,r,o,i,a,s=[];for(e=0;e0&&r[O.data[n]-1]++;return r=r.map(function(e,t){return{val:e,label:t+1}}),r.sort(function(e,t){return t.val-e.val}),o=r.filter(function(e){return e.val>=5})}function m(e,t){var n,r,o,i,a=[],c=[];for(n=0;n=2){for(o=0;of&&u.push(e[o]);if(u.length>=2){for(a=y(u),i=0,o=0;o1&&a.length>=u.length/4*3&&a.length>e.length/4&&(i/=a.length,c={index:t[1]*I.x+t[0],pos:{x:n,y:r},box:[d.clone([n,r]),d.clone([n+T.size.x,r]),d.clone([n+T.size.x,r+T.size.y]),d.clone([n,r+T.size.y])],moments:a,rad:i,vec:d.clone([Math.cos(i),Math.sin(i)])},s.push(c))}}return s}function w(e){function t(){var e;for(e=0;ea&&n(c)):O.data[c]=Number.MAX_VALUE}var r,o,i=0,a=.95,u=0;for(c.a.init(R.data,0),c.a.init(O.data,0),c.a.init(x.data,null),r=0;r0) {length=length - 1|0;images[outImagePtr+length|0]=(images[aImagePtr+length|0]|0) - (images[bImagePtr+length|0]|0)|0;}}function bitwiseOr(aImagePtr, bImagePtr, outImagePtr) {aImagePtr=aImagePtr|0;bImagePtr=bImagePtr|0;outImagePtr=outImagePtr|0;var length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;images[outImagePtr+length|0]=images[aImagePtr+length|0]|0|(images[bImagePtr+length|0]|0)|0;}}function countNonZero(imagePtr) {imagePtr=imagePtr|0;var sum=0,length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;sum=(sum|0)+(images[imagePtr+length|0]|0)|0;}return sum|0;}function init(imagePtr, value) {imagePtr=imagePtr|0;value=value|0;var length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;images[imagePtr+length|0]=value;}}function dilate(inImagePtr, outImagePtr) {inImagePtr=inImagePtr|0;outImagePtr=outImagePtr|0;var v=0,u=0,sum=0,yStart1=0,yStart2=0,xStart1=0,xStart2=0,offset=0;for (v=1; (v|0)<(size - 1|0); v=v+1|0) {offset=offset+size|0;for (u=1; (u|0)<(size - 1|0); u=u+1|0) {yStart1=offset - size|0;yStart2=offset+size|0;xStart1=u - 1|0;xStart2=u+1|0;sum=(images[inImagePtr+yStart1+xStart1|0]|0)+(images[inImagePtr+yStart1+xStart2|0]|0)+(images[inImagePtr+offset+u|0]|0)+(images[inImagePtr+yStart2+xStart1|0]|0)+(images[inImagePtr+yStart2+xStart2|0]|0)|0;if ((sum|0)>(0|0)) {images[outImagePtr+offset+u|0]=1;} else {images[outImagePtr+offset+u|0]=0;}}}return;}function memcpy(srcImagePtr, dstImagePtr) {srcImagePtr=srcImagePtr|0;dstImagePtr=dstImagePtr|0;var length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;images[dstImagePtr+length|0]=images[srcImagePtr+length|0]|0;}}function zeroBorder(imagePtr) {imagePtr=imagePtr|0;var x=0,y=0;for (x=0; (x|0)<(size - 1|0); x=x+1|0) {images[imagePtr+x|0]=0;images[imagePtr+y|0]=0;y=y+size - 1|0;images[imagePtr+y|0]=0;y=y+1|0;}for (x=0; (x|0)<(size|0); x=x+1|0) {images[imagePtr+y|0]=0;y=y+1|0;}}function skeletonize() {var subImagePtr=0,erodedImagePtr=0,tempImagePtr=0,skelImagePtr=0,sum=0,done=0;erodedImagePtr=imul(size, size)|0;tempImagePtr=erodedImagePtr+erodedImagePtr|0;skelImagePtr=tempImagePtr+erodedImagePtr|0;init(skelImagePtr, 0);zeroBorder(subImagePtr);do {erode(subImagePtr, erodedImagePtr);dilate(erodedImagePtr, tempImagePtr);subtract(subImagePtr, tempImagePtr, tempImagePtr);bitwiseOr(skelImagePtr, tempImagePtr, skelImagePtr);memcpy(erodedImagePtr, subImagePtr);sum=countNonZero(subImagePtr)|0;done=(sum|0) == 0|0;} while (!done);}return {skeletonize: skeletonize};} exports["a"]=Skeletonizer; },function(e,t,n){function r(){o.a.call(this),this._counters=[]}var o=n(7),i={ALPHABETH_STRING:{value:"0123456789-$:/.+ABCD"},ALPHABET:{value:[48,49,50,51,52,53,54,55,56,57,45,36,58,47,46,43,65,66,67,68]},CHARACTER_ENCODINGS:{value:[3,6,9,96,18,66,33,36,48,72,12,24,69,81,84,21,26,41,11,14]},START_END:{value:[26,41,11,14]},MIN_ENCODED_CHARS:{value:4},MAX_ACCEPTABLE:{value:2},PADDING:{value:1.5},FORMAT:{value:"codabar",writeable:!1}};r.prototype=Object.create(o.a.prototype,i),r.prototype.constructor=r,r.prototype._decode=function(){var e,t,n,r,o,i=this,a=[];if(this._counters=i._fillCounters(),e=i._findStart(),!e)return null;r=e.startCounter;do{if(n=i._toPattern(r),n<0)return null;if(t=i._patternToChar(n),t<0)return null;if(a.push(t),r+=8,a.length>1&&i._isStartEnd(n))break}while(ri._counters.length?i._counters.length:r,o=e.start+i._sumCounters(e.startCounter,r-8),{code:a.join(""),start:e.start,end:o,startInfo:e,decodedCodes:a}):null},r.prototype._verifyWhitespace=function(e,t){return(e-1<=0||this._counters[e-1]>=this._calculatePatternLength(e)/2)&&(t+8>=this._counters.length||this._counters[t+7]>=this._calculatePatternLength(t)/2)},r.prototype._calculatePatternLength=function(e){var t,n=0;for(t=e;t=0;i--)n=2===(1&i)?u.bar:u.space,r=1===(1&a)?n.wide:n.narrow,r.size+=c._counters[s+i],r.counts++,a>>=1;s+=8}return["space","bar"].forEach(function(e){var t=u[e];t.wide.min=Math.floor((t.narrow.size/t.narrow.counts+t.wide.size/t.wide.counts)/2),t.narrow.max=Math.ceil(t.wide.min),t.wide.max=Math.ceil((t.wide.size*c.MAX_ACCEPTABLE+c.PADDING)/t.wide.counts)}),u},r.prototype._charToPattern=function(e){var t,n=this,r=e.charCodeAt(0);for(t=0;t=0;r--){if(o=0===(1&r)?s.bar:s.space,i=1===(1&c)?o.wide:o.narrow,a=u._counters[f+r],ai.max)return!1;c>>=1}f+=8}return!0},r.prototype._patternToChar=function(e){var t,n=this;for(t=0;ti&&(i=r),rthis._counters.length)return-1;for(t=this._computeAlternatingThreshold(e,a),n=this._computeAlternatingThreshold(e+1,a),r=0;ro&&(u|=c),c>>=1;return u},r.prototype._isStartEnd=function(e){var t;for(t=0;tc.AVG_CODE_ERROR?null:(c.CODE_PATTERN[d.code]&&(d.correction.bar=o(c.CODE_PATTERN[d.code],a,this.MODULE_INDICES.bar),d.correction.space=o(c.CODE_PATTERN[d.code],a,this.MODULE_INDICES.space)),d)}f++,a[f]=1,s=!s}return null},r.prototype._correct=function(e,t){this._correctBars(e,t.bar,this.MODULE_INDICES.bar),this._correctBars(e,t.space,this.MODULE_INDICES.space)},r.prototype._findStart=function(){var e,t,n,r,i,a=[0,0,0,0,0,0],c=this,u=c._nextSet(c._row),s=!1,f=0,d={error:Number.MAX_VALUE,code:-1,start:0,end:0,correction:{bar:1,space:1}};for(e=u;e=this.CODE_G_START&&(r|=1<<1-o),1!=o&&(i=this._nextSet(this._row,n.end),i=this._nextUnset(this._row,i))}return 2!=c.length||parseInt(c.join(""))%4!==r?null:{code:c.join(""),decodedCodes:u,end:n.end}},t.a=r},function(e,t,n){function r(){a.a.call(this)}function o(e){var t;for(t=0;t<10;t++)if(e===u[t])return t;return null}function i(e){var t,n=e.length,r=0;for(t=n-2;t>=0;t-=2)r+=e[t];for(r*=3,t=n-1;t>=0;t-=2)r+=e[t];return r*=3,r%10}var a=n(4),c={FORMAT:{value:"ean_5",writeable:!1}},u=[24,20,18,17,12,6,3,10,9,5];r.prototype=Object.create(a.a.prototype,c),r.prototype.constructor=r,r.prototype.decode=function(e,t){this._row=e;var n,r=0,a=0,c=t,u=this._row.length,s=[],f=[];for(a=0;a<5&&c=this.CODE_G_START&&(r|=1<<4-a),4!=a&&(c=this._nextSet(this._row,n.end),c=this._nextUnset(this._row,c))}return 5!=s.length?null:i(s)!==o(r)?null:{code:s.join(""),decodedCodes:f,end:n.end}},t.a=r},function(e,t,n){function r(e,t){o.a.call(this,e,t)}var o=n(4),i={FORMAT:{value:"ean_8",writeable:!1}};r.prototype=Object.create(o.a.prototype,i),r.prototype.constructor=r,r.prototype._decodePayload=function(e,t,n){var r,o=this;for(r=0;r<4;r++){if(e=o._decodeCode(e.end,o.CODE_G_START),!e)return null;t.push(e.code),n.push(e)}if(e=o._findPattern(o.MIDDLE_PATTERN,e.end,!0,!1),null===e)return null;for(n.push(e),r=0;r<4;r++){if(e=o._decodeCode(e.end,o.CODE_G_START),!e)return null;n.push(e),t.push(e.code)}return e},t.a=r},function(e,t,n){function r(e){e=a.a.bind()(o(),e),c.a.call(this,e),this.barSpaceRatio=[1,1],e.normalizeBarSpaceWidth&&(this.SINGLE_CODE_ERROR=.38,this.AVG_CODE_ERROR=.09)}function o(){var e={};return Object.keys(r.CONFIG_KEYS).forEach(function(t){e[t]=r.CONFIG_KEYS[t]["default"]}),e}var i=n(15),a=i&&i.__esModule?function(){return i["default"]}:function(){return i};Object.defineProperty(a,"a",{get:a});var c=n(7),u=1,s=3,f={START_PATTERN:{value:[u,u,u,u]},STOP_PATTERN:{value:[u,u,s]},CODE_PATTERN:{value:[[u,u,s,s,u],[s,u,u,u,s],[u,s,u,u,s],[s,s,u,u,u],[u,u,s,u,s],[s,u,s,u,u],[u,s,s,u,u],[u,u,u,s,s],[s,u,u,s,u],[u,s,u,s,u]]},SINGLE_CODE_ERROR:{value:.78,writable:!0},AVG_CODE_ERROR:{value:.38,writable:!0},MAX_CORRECTION_FACTOR:{value:5},FORMAT:{value:"i2of5"}};r.prototype=Object.create(c.a.prototype,f),r.prototype.constructor=r,r.prototype._matchPattern=function(e,t){if(this.config.normalizeBarSpaceWidth){var n,r=[0,0],o=[0,0],i=[0,0],a=this.MAX_CORRECTION_FACTOR,u=1/a;for(n=0;n=0&&n._matchRange(e,t.start,0))return t;r=t.end,t=null}},r.prototype._verifyTrailingWhitespace=function(e){var t,n=this;return t=e.end+(e.end-e.start)/2,t=o.CODE_G_START&&(e.code=e.code-o.CODE_G_START,i|=1<<5-r),t.push(e.code),n.push(e)}return o._determineParity(i,t)?e:null},r.prototype._determineParity=function(e,t){var n,r;for(r=0;r0)for(r=0;r0){if(e=B.filter(function(e){return!e.busy})[0],!e)return;I.attachData(e.imageData)}else I.attachData(k.data);I.grab()&&(e?(e.busy=!0,e.worker.postMessage({cmd:"process",imageData:e.imageData},[e.imageData.buffer])):T())}else T()}function R(){var e=null,t=1e3/(0===V.frequency?60:V.frequency||60);F=!1,function n(r){e=e||r,F||(r>=e&&(e+=t,S()),window.requestAnimFrame(n))}(performance.now())}function O(){W&&"LiveStream"===V.inputStream.type?R():S()}function x(e){var t,n={worker:void 0,imageData:new Uint8Array(M.getWidth()*M.getHeight()),busy:!0};t=A(),n.worker=new Worker(t),n.worker.onmessage=function(r){return"initialized"===r.data.event?(URL.revokeObjectURL(t),n.busy=!1,n.imageData=new Uint8Array(r.data.imageData),e(n)):void("processed"===r.data.event?(n.imageData=new Uint8Array(r.data.imageData),n.busy=!1,E(r.data.result,n.imageData)):"error"===r.data.event)},n.worker.postMessage({cmd:"init",size:{x:M.getWidth(),y:M.getHeight()},imageData:n.imageData,config:P(V)},[n.imageData.buffer])}function P(e){return v({},e,{inputStream:v({},e.inputStream,{target:null})})}function D(e){function t(e){self.postMessage({event:"processed",imageData:o.data,result:e},[o.data.buffer])}function n(){self.postMessage({event:"initialized",imageData:o.data},[o.data.buffer])}if(e){var r=e()["default"];if(!r)return void self.postMessage({event:"error",message:"Quagga could not be created"})}var o,i=r._worker.createScanner();self.onmessage=function(e){if("init"===e.data.cmd){var a=e.data.config;a.numOfWorkers=0,o=new r.ImageWrapper({x:e.data.size.x,y:e.data.size.y},new Uint8Array(e.data.imageData)),i.init(a,n,o),i.subscribe("processed",t)}else"process"===e.data.cmd&&(o.data=new Uint8Array(e.data.imageData),i.start())}}function A(){var t,n;return"undefined"!=typeof e&&(n=e),t=new Blob(["("+D.toString()+")("+n+");"],{type:"text/javascript"}),window.URL.createObjectURL(t)}function j(e,t){var n=e-B.length;if(0===n)return t&&t();if(n<0){var r=B.slice(n);return r.forEach(function(e){e.worker.terminate()}),B=B.slice(0,n),t&&t()}for(var o=function(n){B.push(n),B.length>=e&&t&&t()},i=0;i0&&n(f)?t>1?r(f,t-1,n,a,c):o(c,f):a||(c[c.length]=f)}return c}var o=n(30),i=n(168);e.e=r},function(e,t,n){function r(e){return i.call(e)}var o=Object.prototype,i=o.toString;e.e=r},function(e,t,n){function r(e,t){return null!=e&&t in Object(e)}e.e=r},function(e,t,n){function r(e,t,n,r,g,y){var b=s(e),_=s(t),w=h,C=h;b||(w=u(e),w=w==p?v:w),_||(C=u(t),C=C==p?v:C);var E=w==v&&!f(e),T=C==v&&!f(t),S=w==C;if(S&&!E)return y||(y=new o),b||d(e)?i(e,t,n,r,g,y):a(e,t,w,n,r,g,y);if(!(g&l)){var R=E&&m.call(e,"__wrapped__"),O=T&&m.call(t,"__wrapped__");if(R||O){var x=R?e.value():e,P=O?t.value():t;return y||(y=new o),n(x,P,r,g,y)}}return!!S&&(y||(y=new o),c(e,t,n,r,g,y))}var o=n(18),i=n(62),a=n(152),c=n(153),u=n(35),s=n(0),f=n(22),d=n(41),l=2,p="[object Arguments]",h="[object Array]",v="[object Object]",g=Object.prototype,m=g.hasOwnProperty;e.e=r},function(e,t,n){function r(e,t,n,r){var u=n.length,s=u,f=!r;if(null==e)return!s;for(e=Object(e);u--;){var d=n[u];if(f&&d[2]?d[1]!==e[d[0]]:!(d[0]in e))return!1}for(;++u1?n[o-1]:void 0,c=o>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(o--,a):void 0,c&&i(n[0],n[1],c)&&(a=o<3?void 0:a,o=1),t=Object(t);++r-1}var o=n(20);e.e=r},function(e,t,n){function r(e,t){var n=this.__data__,r=o(n,e);return r<0?n.push([e,t]):n[r][1]=t,this}var o=n(20);e.e=r},function(e,t,n){function r(){this.__data__={hash:new o,map:new(a||i),string:new o}}var o=n(111),i=n(17),a=n(28);e.e=r},function(e,t,n){function r(e){return o(this,e)["delete"](e)}var o=n(21);e.e=r},function(e,t,n){function r(e){return o(this,e).get(e)}var o=n(21);e.e=r},function(e,t,n){function r(e){return o(this,e).has(e)}var o=n(21);e.e=r},function(e,t,n){function r(e,t){return o(this,e).set(e,t),this}var o=n(21);e.e=r},function(e,t,n){function r(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}e.e=r},function(e,t,n){(function(e){var r=n(63),o="object"==typeof t&&t&&!t.nodeType&&t,i=o&&"object"==typeof e&&e&&!e.nodeType&&e,a=i&&i.exports===o,c=a&&r.process,u=function(){try{return c&&c.binding("util")}catch(e){}}();e.e=u}).call(t,n(75)(e))},function(e,t,n){function r(e){return this.__data__.set(e,o),this}var o="__lodash_hash_undefined__";e.e=r},function(e,t,n){function r(e){return this.__data__.has(e)}e.e=r},function(e,t,n){function r(){this.__data__=new o}var o=n(17);e.e=r},function(e,t,n){function r(e){return this.__data__["delete"](e)}e.e=r},function(e,t,n){function r(e){return this.__data__.get(e)}e.e=r},function(e,t,n){function r(e){return this.__data__.has(e)}e.e=r},function(e,t,n){function r(e,t){var n=this.__data__;if(n instanceof o){var r=n.__data__;if(!i||r.length0?"m="+e:e).trim()+"\r\n"})},r.matchPrefix=function(e,t){return r.splitLines(e).filter(function(e){return 0===e.indexOf(t)})},r.parseCandidate=function(e){var t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");for(var n={foundation:t[0],component:t[1],protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],port:parseInt(t[5],10),type:t[7]},r=8;r-1?(n.attribute=e.substr(t+1,r-t-1),n.value=e.substr(r+1)):n.attribute=e.substr(t+1),n},r.getDtlsParameters=function(e,t){var n=r.splitLines(e);n=n.concat(r.splitLines(t));var o=n.filter(function(e){return 0===e.indexOf("a=fingerprint:")})[0].substr(14),i={role:"auto",fingerprints:[{algorithm:o.split(" ")[0],value:o.split(" ")[1]}]};return i},r.writeDtlsParameters=function(e,t){var n="a=setup:"+t+"\r\n";return e.fingerprints.forEach(function(e){n+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"}),n},r.getIceParameters=function(e,t){var n=r.splitLines(e);n=n.concat(r.splitLines(t));var o={usernameFragment:n.filter(function(e){return 0===e.indexOf("a=ice-ufrag:")})[0].substr(12),password:n.filter(function(e){return 0===e.indexOf("a=ice-pwd:")})[0].substr(10)};return o},r.writeIceParameters=function(e){return"a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n"},r.parseRtpParameters=function(e){for(var t={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},n=r.splitLines(e),o=n[0].split(" "),i=3;i0?"9":"0",n+=" UDP/TLS/RTP/SAVPF ",n+=t.codecs.map(function(e){return void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType}).join(" ")+"\r\n",n+="c=IN IP4 0.0.0.0\r\n",n+="a=rtcp:9 IN IP4 0.0.0.0\r\n",t.codecs.forEach(function(e){n+=r.writeRtpMap(e),n+=r.writeFmtp(e),n+=r.writeRtcpFb(e)}),n+="a=rtcp-mux\r\n"},r.parseRtpEncodingParameters=function(e){var t,n=[],o=r.parseRtpParameters(e),i=o.fecMechanisms.indexOf("RED")!==-1,a=o.fecMechanisms.indexOf("ULPFEC")!==-1,c=r.matchPrefix(e,"a=ssrc:").map(function(e){return r.parseSsrcMedia(e)}).filter(function(e){return"cname"===e.attribute}),u=c.length>0&&c[0].ssrc,s=r.matchPrefix(e,"a=ssrc-group:FID").map(function(e){var t=e.split(" ");return t.shift(),t.map(function(e){return parseInt(e,10)})});s.length>0&&s[0].length>1&&s[0][0]===u&&(t=s[0][1]),o.codecs.forEach(function(e){if("RTX"===e.name.toUpperCase()&&e.parameters.apt){var r={ssrc:u,codecPayloadType:parseInt(e.parameters.apt,10),rtx:{payloadType:e.payloadType,ssrc:t}};n.push(r),i&&(r=JSON.parse(JSON.stringify(r)),r.fec={ssrc:t,mechanism:a?"red+ulpfec":"red"},n.push(r))}}),0===n.length&&u&&n.push({ssrc:u});var f=r.matchPrefix(e,"b=");return f.length&&(0===f[0].indexOf("b=TIAS:")?f=parseInt(f[0].substr(7),10):0===f[0].indexOf("b=AS:")&&(f=parseInt(f[0].substr(5),10)),n.forEach(function(e){e.maxBitrate=f})),n},r.writeSessionBoilerplate=function(){return"v=0\r\no=thisisadapterortc 8169639915646943137 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},r.writeMediaSection=function(e,t,n,o){var i=r.writeRtpDescription(e.kind,t);if(i+=r.writeIceParameters(e.iceGatherer.getLocalParameters()),i+=r.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),"offer"===n?"actpass":"active"),i+="a=mid:"+e.mid+"\r\n",i+=e.rtpSender&&e.rtpReceiver?"a=sendrecv\r\n":e.rtpSender?"a=sendonly\r\n":e.rtpReceiver?"a=recvonly\r\n":"a=inactive\r\n",e.rtpSender){var a="msid:"+o.id+" "+e.rtpSender.track.id+"\r\n";i+="a="+a,i+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" "+a}return i+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" cname:"+r.localCName+"\r\n"},r.getDirection=function(e,t){for(var n=r.splitLines(e),o=0;o0&&"function"==typeof e)return o(e,t);var a=function(e){var t={},n=e.result();return n.forEach(function(e){var n={id:e.id,timestamp:e.timestamp,type:e.type};e.names().forEach(function(t){n[t]=e.stat(t)}),t[n.id]=n}),t},c=function(e,t){var n=new Map(Object.keys(e).map(function(t){return[t,e[t]]}));return t=t||e,Object.keys(t).forEach(function(e){n[e]=t[e]}),n};if(arguments.length>=2){var u=function(e){i[1](c(a(e)))};return o.apply(this,[u,arguments[0]])}return new Promise(function(t,n){1===i.length&&"object"==typeof e?o.apply(r,[function(e){t(c(a(e)))},n]):o.apply(r,[function(e){t(c(a(e),e.result()))},n])}).then(t,n)},n},window.RTCPeerConnection.prototype=webkitRTCPeerConnection.prototype,webkitRTCPeerConnection.generateCertificate&&Object.defineProperty(window.RTCPeerConnection,"generateCertificate",{get:function(){return webkitRTCPeerConnection.generateCertificate}}),["createOffer","createAnswer"].forEach(function(e){var t=webkitRTCPeerConnection.prototype[e];webkitRTCPeerConnection.prototype[e]=function(){var e=this;if(arguments.length<1||1===arguments.length&&"object"==typeof arguments[0]){var n=1===arguments.length?arguments[0]:void 0;return new Promise(function(r,o){t.apply(e,[r,o,n])})}return t.apply(this,arguments)}}),o.version<51&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(e){var t=webkitRTCPeerConnection.prototype[e];webkitRTCPeerConnection.prototype[e]=function(){var e=arguments,n=this,r=new Promise(function(r,o){t.apply(n,[e[0],r,o])});return e.length<2?r:r.then(function(){e[1].apply(null,[])},function(t){e.length>=3&&e[2].apply(null,[t])})}}),["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(e){var t=webkitRTCPeerConnection.prototype[e];webkitRTCPeerConnection.prototype[e]=function(){return arguments[0]=new("addIceCandidate"===e?RTCIceCandidate:RTCSessionDescription)(arguments[0]),t.apply(this,arguments)}});var e=RTCPeerConnection.prototype.addIceCandidate;RTCPeerConnection.prototype.addIceCandidate=function(){return null===arguments[0]?Promise.resolve():e.apply(this,arguments)}}};e.e={shimMediaStream:i.shimMediaStream,shimOnTrack:i.shimOnTrack,shimSourceObject:i.shimSourceObject,shimPeerConnection:i.shimPeerConnection,shimGetUserMedia:n(208)}},function(e,t,n){"use strict";var r=n(1).log;e.e=function(){var e=function(e){if("object"!=typeof e||e.mandatory||e.optional)return e;var t={};return Object.keys(e).forEach(function(n){if("require"!==n&&"advanced"!==n&&"mediaSource"!==n){var r="object"==typeof e[n]?e[n]:{ideal:e[n]};void 0!==r.exact&&"number"==typeof r.exact&&(r.min=r.max=r.exact);var o=function(e,t){return e?e+t.charAt(0).toUpperCase()+t.slice(1):"deviceId"===t?"sourceId":t};if(void 0!==r.ideal){t.optional=t.optional||[];var i={};"number"==typeof r.ideal?(i[o("min",n)]=r.ideal,t.optional.push(i),i={},i[o("max",n)]=r.ideal,t.optional.push(i)):(i[o("",n)]=r.ideal,t.optional.push(i))}void 0!==r.exact&&"number"!=typeof r.exact?(t.mandatory=t.mandatory||{},t.mandatory[o("",n)]=r.exact):["min","max"].forEach(function(e){void 0!==r[e]&&(t.mandatory=t.mandatory||{},t.mandatory[o(e,n)]=r[e])})}}),e.advanced&&(t.optional=(t.optional||[]).concat(e.advanced)),t},t=function(t,n){if(t=JSON.parse(JSON.stringify(t)),t&&t.audio&&(t.audio=e(t.audio)),t&&"object"==typeof t.video){var o=t.video.facingMode;if(o=o&&("object"==typeof o?o:{ideal:o}),o&&("user"===o.exact||"environment"===o.exact||"user"===o.ideal||"environment"===o.ideal)&&(!navigator.mediaDevices.getSupportedConstraints||!navigator.mediaDevices.getSupportedConstraints().facingMode)&&(delete t.video.facingMode,"environment"===o.exact||"environment"===o.ideal))return navigator.mediaDevices.enumerateDevices().then(function(i){i=i.filter(function(e){return"videoinput"===e.kind});var a=i.find(function(e){return e.label.toLowerCase().indexOf("back")!==-1})||i.length&&i[i.length-1];return a&&(t.video.deviceId=o.exact?{exact:a.deviceId}:{ideal:a.deviceId}),t.video=e(t.video),r("chrome: "+JSON.stringify(t)),n(t)});t.video=e(t.video)}return r("chrome: "+JSON.stringify(t)),n(t)},n=function(e){return{name:{PermissionDeniedError:"NotAllowedError",ConstraintNotSatisfiedError:"OverconstrainedError"}[e.name]||e.name,message:e.message,constraint:e.constraintName,toString:function(){return this.name+(this.message&&": ")+this.message}}},o=function(e,r,o){t(e,function(e){navigator.webkitGetUserMedia(e,r,function(e){o(n(e))})})};navigator.getUserMedia=o;var i=function(e){return new Promise(function(t,n){navigator.getUserMedia(e,t,n)})};if(navigator.mediaDevices||(navigator.mediaDevices={getUserMedia:i,enumerateDevices:function(){return new Promise(function(e){var t={audio:"audioinput",video:"videoinput"};return MediaStreamTrack.getSources(function(n){e(n.map(function(e){return{label:e.label,kind:t[e.kind],deviceId:e.id,groupId:""}}))})})}}),navigator.mediaDevices.getUserMedia){var a=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(e){return t(e,function(e){return a(e)["catch"](function(e){return Promise.reject(n(e))})})}}else navigator.mediaDevices.getUserMedia=function(e){return i(e)};"undefined"==typeof navigator.mediaDevices.addEventListener&&(navigator.mediaDevices.addEventListener=function(){r("Dummy mediaDevices.addEventListener called.")}),"undefined"==typeof navigator.mediaDevices.removeEventListener&&(navigator.mediaDevices.removeEventListener=function(){r("Dummy mediaDevices.removeEventListener called.")})}},function(e,t,n){"use strict";var r=n(205),o=n(1).browserDetails,i={shimPeerConnection:function(){window.RTCIceGatherer&&(window.RTCIceCandidate||(window.RTCIceCandidate=function(e){return e}),window.RTCSessionDescription||(window.RTCSessionDescription=function(e){return e})),window.RTCPeerConnection=function(e){var t=this,n=document.createDocumentFragment();if(["addEventListener","removeEventListener","dispatchEvent"].forEach(function(e){t[e]=n[e].bind(n)}),this.onicecandidate=null,this.onaddstream=null,this.ontrack=null,this.onremovestream=null,this.onsignalingstatechange=null,this.oniceconnectionstatechange=null,this.onnegotiationneeded=null,this.ondatachannel=null,this.localStreams=[],this.remoteStreams=[],this.getLocalStreams=function(){return t.localStreams},this.getRemoteStreams=function(){return t.remoteStreams},this.localDescription=new RTCSessionDescription({type:"",sdp:""}),this.remoteDescription=new RTCSessionDescription({type:"",sdp:""}),this.signalingState="stable",this.iceConnectionState="new",this.iceGatheringState="new",this.iceOptions={gatherPolicy:"all",iceServers:[]},e&&e.iceTransportPolicy)switch(e.iceTransportPolicy){case"all":case"relay":this.iceOptions.gatherPolicy=e.iceTransportPolicy;break;case"none":throw new TypeError('iceTransportPolicy "none" not supported')}if(this.usingBundle=e&&"max-bundle"===e.bundlePolicy,e&&e.iceServers){var r=JSON.parse(JSON.stringify(e.iceServers));this.iceOptions.iceServers=r.filter(function(e){if(e&&e.urls){var t=e.urls;return"string"==typeof t&&(t=[t]),t=t.filter(function(e){return 0===e.indexOf("turn:")&&e.indexOf("transport=udp")!==-1&&e.indexOf("turn:[")===-1||0===e.indexOf("stun:")&&o.version>=14393})[0],!!t}return!1})}this.transceivers=[],this._localIceCandidatesBuffer=[]},window.RTCPeerConnection.prototype._emitBufferedCandidates=function(){var e=this,t=r.splitSections(e.localDescription.sdp);this._localIceCandidatesBuffer.forEach(function(n){var r=!n.candidate||0===Object.keys(n.candidate).length;if(r)for(var o=1;o-1&&(this.localStreams.splice(t,1),this._maybeFireNegotiationNeeded())},window.RTCPeerConnection.prototype.getSenders=function(){return this.transceivers.filter(function(e){return!!e.rtpSender}).map(function(e){return e.rtpSender})},window.RTCPeerConnection.prototype.getReceivers=function(){return this.transceivers.filter(function(e){return!!e.rtpReceiver}).map(function(e){return e.rtpReceiver})},window.RTCPeerConnection.prototype._getCommonCapabilities=function(e,t){var n={codecs:[],headerExtensions:[],fecMechanisms:[]};return e.codecs.forEach(function(e){for(var r=0;r0;t.forEach(function(e,t){var a=o.transceivers[t],c=a.iceGatherer,u=a.iceTransport,s=a.dtlsTransport,f=a.localCapabilities,d=a.remoteCapabilities,l="0"===e.split("\n",1)[0].split(" ",2)[1];if(!l){var p=r.getIceParameters(e,n);if(i){var h=r.matchPrefix(e,"a=candidate:").map(function(e){return r.parseCandidate(e)}).filter(function(e){return"1"===e.component});h.length&&u.setRemoteCandidates(h)}var v=r.getDtlsParameters(e,n);i&&(v.role="server"),o.usingBundle&&0!==t||(u.start(c,p,i?"controlling":"controlled"),s.start(v));var g=o._getCommonCapabilities(f,d);o._transceive(a,g.codecs.length>0,!1)}})}switch(this.localDescription={type:e.type,sdp:e.sdp},e.type){case"offer":this._updateSignalingState("have-local-offer");break;case"answer":this._updateSignalingState("stable");break;default:throw new TypeError('unsupported type "'+e.type+'"')}var a=arguments.length>1&&"function"==typeof arguments[1];if(a){var c=arguments[1];window.setTimeout(function(){c(),"new"===o.iceGatheringState&&(o.iceGatheringState="gathering"),o._emitBufferedCandidates()},0)}var u=Promise.resolve();return u.then(function(){a||("new"===o.iceGatheringState&&(o.iceGatheringState="gathering"),window.setTimeout(o._emitBufferedCandidates.bind(o),500))}),u},window.RTCPeerConnection.prototype.setRemoteDescription=function(e){var t=this,n=new MediaStream,o=[],i=r.splitSections(e.sdp),a=i.shift(),c=r.matchPrefix(a,"a=ice-lite").length>0;switch(this.usingBundle=r.matchPrefix(a,"a=group:BUNDLE ").length>0,i.forEach(function(i,u){var s,f,d,l,p,h,v,g,m,y,b,_,w=r.splitLines(i),C=w[0].substr(2).split(" "),E=C[0],T="0"===C[1],S=r.getDirection(i,a),R=r.parseRtpParameters(i); -T||(b=r.getIceParameters(i,a),_=r.getDtlsParameters(i,a),_.role="client"),g=r.parseRtpEncodingParameters(i);var O=r.matchPrefix(i,"a=mid:");O=O.length?O[0].substr(6):r.generateIdentifier();var x,P=r.matchPrefix(i,"a=ssrc:").map(function(e){return r.parseSsrcMedia(e)}).filter(function(e){return"cname"===e.attribute})[0];P&&(x=P.value);var D=r.matchPrefix(i,"a=end-of-candidates",a).length>0,A=r.matchPrefix(i,"a=candidate:").map(function(e){return r.parseCandidate(e)}).filter(function(e){return"1"===e.component});if("offer"!==e.type||T)"answer"!==e.type||T||(s=t.transceivers[u],f=s.iceGatherer,d=s.iceTransport,l=s.dtlsTransport,p=s.rtpSender,h=s.rtpReceiver,v=s.sendEncodingParameters,m=s.localCapabilities,t.transceivers[u].recvEncodingParameters=g,t.transceivers[u].remoteCapabilities=R,t.transceivers[u].cname=x,(c||D)&&A.length&&d.setRemoteCandidates(A),t.usingBundle&&0!==u||(d.start(f,b,"controlling"),l.start(_)),t._transceive(s,"sendrecv"===S||"recvonly"===S,"sendrecv"===S||"sendonly"===S),!h||"sendrecv"!==S&&"sendonly"!==S?delete s.rtpReceiver:(y=h.track,o.push([y,h]),n.addTrack(y)));else{var j=t.usingBundle&&u>0?{iceGatherer:t.transceivers[0].iceGatherer,iceTransport:t.transceivers[0].iceTransport,dtlsTransport:t.transceivers[0].dtlsTransport}:t._createIceAndDtlsTransports(O,u);if(D&&j.iceTransport.setRemoteCandidates(A),m=RTCRtpReceiver.getCapabilities(E),v=[{ssrc:1001*(2*u+2)}],h=new RTCRtpReceiver(j.dtlsTransport,E),y=h.track,o.push([y,h]),n.addTrack(y),t.localStreams.length>0&&t.localStreams[0].getTracks().length>=u){var M;"audio"===E?M=t.localStreams[0].getAudioTracks()[0]:"video"===E&&(M=t.localStreams[0].getVideoTracks()[0]),M&&(p=new RTCRtpSender(M,j.dtlsTransport))}t.transceivers[u]={iceGatherer:j.iceGatherer,iceTransport:j.iceTransport,dtlsTransport:j.dtlsTransport,localCapabilities:m,remoteCapabilities:R,rtpSender:p,rtpReceiver:h,kind:E,mid:O,cname:x,sendEncodingParameters:v,recvEncodingParameters:g},t._transceive(t.transceivers[u],!1,"sendrecv"===S||"sendonly"===S)}}),this.remoteDescription={type:e.type,sdp:e.sdp},e.type){case"offer":this._updateSignalingState("have-remote-offer");break;case"answer":this._updateSignalingState("stable");break;default:throw new TypeError('unsupported type "'+e.type+'"')}return n.getTracks().length&&(t.remoteStreams.push(n),window.setTimeout(function(){var e=new Event("addstream");e.stream=n,t.dispatchEvent(e),null!==t.onaddstream&&window.setTimeout(function(){t.onaddstream(e)},0),o.forEach(function(r){var o=r[0],i=r[1],a=new Event("track");a.track=o,a.receiver=i,a.streams=[n],t.dispatchEvent(e),null!==t.ontrack&&window.setTimeout(function(){t.ontrack(a)},0)})},0)),arguments.length>1&&"function"==typeof arguments[1]&&window.setTimeout(arguments[1],0),Promise.resolve()},window.RTCPeerConnection.prototype.close=function(){this.transceivers.forEach(function(e){e.iceTransport&&e.iceTransport.stop(),e.dtlsTransport&&e.dtlsTransport.stop(),e.rtpSender&&e.rtpSender.stop(),e.rtpReceiver&&e.rtpReceiver.stop()}),this._updateSignalingState("closed")},window.RTCPeerConnection.prototype._updateSignalingState=function(e){this.signalingState=e;var t=new Event("signalingstatechange");this.dispatchEvent(t),null!==this.onsignalingstatechange&&this.onsignalingstatechange(t)},window.RTCPeerConnection.prototype._maybeFireNegotiationNeeded=function(){var e=new Event("negotiationneeded");this.dispatchEvent(e),null!==this.onnegotiationneeded&&this.onnegotiationneeded(e)},window.RTCPeerConnection.prototype._updateConnectionState=function(){var e,t=this,n={"new":0,closed:0,connecting:0,checking:0,connected:0,completed:0,failed:0};if(this.transceivers.forEach(function(e){n[e.iceTransport.state]++,n[e.dtlsTransport.state]++}),n.connected+=n.completed,e="new",n.failed>0?e="failed":n.connecting>0||n.checking>0?e="connecting":n.disconnected>0?e="disconnected":n["new"]>0?e="new":(n.connected>0||n.completed>0)&&(e="connected"),e!==t.iceConnectionState){t.iceConnectionState=e;var r=new Event("iceconnectionstatechange");this.dispatchEvent(r),null!==this.oniceconnectionstatechange&&this.oniceconnectionstatechange(r)}},window.RTCPeerConnection.prototype.createOffer=function(){var e=this;if(this._pendingOffer)throw new Error("createOffer called while there is a pending offer.");var t;1===arguments.length&&"function"!=typeof arguments[0]?t=arguments[0]:3===arguments.length&&(t=arguments[2]);var n=[],o=0,i=0;if(this.localStreams.length&&(o=this.localStreams[0].getAudioTracks().length,i=this.localStreams[0].getVideoTracks().length),t){if(t.mandatory||t.optional)throw new TypeError("Legacy mandatory/optional constraints not supported.");void 0!==t.offerToReceiveAudio&&(o=t.offerToReceiveAudio),void 0!==t.offerToReceiveVideo&&(i=t.offerToReceiveVideo)}for(this.localStreams.length&&this.localStreams[0].getTracks().forEach(function(e){n.push({kind:e.kind,track:e,wantReceive:"audio"===e.kind?o>0:i>0}),"audio"===e.kind?o--:"video"===e.kind&&i--});o>0||i>0;)o>0&&(n.push({kind:"audio",wantReceive:!0}),o--),i>0&&(n.push({kind:"video",wantReceive:!0}),i--);var a=r.writeSessionBoilerplate(),c=[];n.forEach(function(t,n){var o,i,a=t.track,u=t.kind,s=r.generateIdentifier(),f=e.usingBundle&&n>0?{iceGatherer:c[0].iceGatherer,iceTransport:c[0].iceTransport,dtlsTransport:c[0].dtlsTransport}:e._createIceAndDtlsTransports(s,n),d=RTCRtpSender.getCapabilities(u),l=[{ssrc:1001*(2*n+1)}];a&&(o=new RTCRtpSender(a,f.dtlsTransport)),t.wantReceive&&(i=new RTCRtpReceiver(f.dtlsTransport,u)),c[n]={iceGatherer:f.iceGatherer,iceTransport:f.iceTransport,dtlsTransport:f.dtlsTransport,localCapabilities:d,remoteCapabilities:null,rtpSender:o,rtpReceiver:i,kind:u,mid:s,sendEncodingParameters:l,recvEncodingParameters:null}}),this.usingBundle&&(a+="a=group:BUNDLE "+c.map(function(e){return e.mid}).join(" ")+"\r\n"),n.forEach(function(t,n){var o=c[n];a+=r.writeMediaSection(o,o.localCapabilities,"offer",e.localStreams[0])}),this._pendingOffer=c;var u=new RTCSessionDescription({type:"offer",sdp:a});return arguments.length&&"function"==typeof arguments[0]&&window.setTimeout(arguments[0],0,u),Promise.resolve(u)},window.RTCPeerConnection.prototype.createAnswer=function(){var e=this,t=r.writeSessionBoilerplate();this.usingBundle&&(t+="a=group:BUNDLE "+this.transceivers.map(function(e){return e.mid}).join(" ")+"\r\n"),this.transceivers.forEach(function(n){var o=e._getCommonCapabilities(n.localCapabilities,n.remoteCapabilities);t+=r.writeMediaSection(n,o,"answer",e.localStreams[0])});var n=new RTCSessionDescription({type:"answer",sdp:t});return arguments.length&&"function"==typeof arguments[0]&&window.setTimeout(arguments[0],0,n),Promise.resolve(n)},window.RTCPeerConnection.prototype.addIceCandidate=function(e){if(null===e)this.transceivers.forEach(function(e){e.iceTransport.addRemoteCandidate({})});else{var t=e.sdpMLineIndex;if(e.sdpMid)for(var n=0;n0?r.parseCandidate(e.candidate):{};if("tcp"===i.protocol&&(0===i.port||9===i.port))return;if("1"!==i.component)return;"endOfCandidates"===i.type&&(i={}),o.iceTransport.addRemoteCandidate(i);var a=r.splitSections(this.remoteDescription.sdp);a[t+1]+=(i.type?e.candidate.trim():"a=end-of-candidates")+"\r\n",this.remoteDescription.sdp=a.join("")}}return arguments.length>1&&"function"==typeof arguments[1]&&window.setTimeout(arguments[1],0),Promise.resolve()},window.RTCPeerConnection.prototype.getStats=function(){var e=[];this.transceivers.forEach(function(t){["rtpSender","rtpReceiver","iceGatherer","iceTransport","dtlsTransport"].forEach(function(n){t[n]&&e.push(t[n].getStats())})});var t=arguments.length>1&&"function"==typeof arguments[1]&&arguments[1];return new Promise(function(n){var r=new Map;Promise.all(e).then(function(e){e.forEach(function(e){Object.keys(e).forEach(function(t){r.set(t,e[t]),r[t]=e[t]})}),t&&window.setTimeout(t,0,r),n(r)})})}}};e.e={shimPeerConnection:i.shimPeerConnection,shimGetUserMedia:n(210)}},function(e,t,n){"use strict";e.e=function(){var e=function(e){return{name:{PermissionDeniedError:"NotAllowedError"}[e.name]||e.name,message:e.message,constraint:e.constraint,toString:function(){return this.name}}},t=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(n){return t(n)["catch"](function(t){return Promise.reject(e(t))})}}},function(e,t,n){"use strict";var r=n(1).browserDetails,o={shimOnTrack:function(){"object"!=typeof window||!window.RTCPeerConnection||"ontrack"in window.RTCPeerConnection.prototype||Object.defineProperty(window.RTCPeerConnection.prototype,"ontrack",{get:function(){return this._ontrack},set:function(e){this._ontrack&&(this.removeEventListener("track",this._ontrack),this.removeEventListener("addstream",this._ontrackpoly)),this.addEventListener("track",this._ontrack=e),this.addEventListener("addstream",this._ontrackpoly=function(e){e.stream.getTracks().forEach(function(t){var n=new Event("track");n.track=t,n.receiver={track:t},n.streams=[e.stream],this.dispatchEvent(n)}.bind(this))}.bind(this))}})},shimSourceObject:function(){"object"==typeof window&&(!window.HTMLMediaElement||"srcObject"in window.HTMLMediaElement.prototype||Object.defineProperty(window.HTMLMediaElement.prototype,"srcObject",{get:function(){return this.mozSrcObject},set:function(e){this.mozSrcObject=e}}))},shimPeerConnection:function(){if("object"==typeof window&&(window.RTCPeerConnection||window.mozRTCPeerConnection)){window.RTCPeerConnection||(window.RTCPeerConnection=function(e,t){if(r.version<38&&e&&e.iceServers){for(var n=[],o=0;oa.AVG_CODE_ERROR?null:f}s++,i[s]=1,c=!c}return null},r.prototype._findPattern=function(t,e,n,r,o){var i,a,u,c,s=[],f=this,l=0,d={error:Number.MAX_VALUE,code:-1,start:0,end:0};for(e||(e=f._nextSet(f._row)),void 0===n&&(n=!1),void 0===r&&(r=!0),void 0===o&&(o=f.AVG_CODE_ERROR),i=0;i=0&&n._matchRange(t,e.start,0))return e;r=e.end,e=null}},r.prototype._verifyTrailingWhitespace=function(t){var e,n=this;return e=t.end+(t.end-t.start),e=i.CODE_G_START?(t.code=t.code-i.CODE_G_START,a|=1<<5-r):a|=0<<5-r,e.push(t.code),n.push(t)}if(null===(o=i._calculateFirstDigit(a)))return null;if(e.unshift(o),null===(t=i._findPattern(i.MIDDLE_PATTERN,t.end,!0,!1)))return null;for(n.push(t),r=0;r<6;r++){if(!(t=i._decodeCode(t.end,i.CODE_G_START)))return null;n.push(t),e.push(t.code)}return t},r.prototype._decode=function(){var t,e,n=this,r=[],o=[],i={};if(!(t=n._findStart()))return null;if(e={code:t.code,start:t.start,end:t.end},o.push(e),!(e=n._decodePayload(e,r,o)))return null;if(!(e=n._findEnd(e.end,!1)))return null;if(o.push(e),!n._checksum(r))return null;if(this.supplements.length>0){var a=this._decodeExtensions(e.end);if(!a)return null;var u=a.decodedCodes[a.decodedCodes.length-1],s={start:u.start+((u.end-u.start)/2|0),end:u.end};if(!n._verifyTrailingWhitespace(s))return null;i={supplement:a,code:r.join("")+a.code}}return c({code:r.join(""),start:t.start,end:e.end,codeset:"",startInfo:t,decodedCodes:o},i)},r.prototype._decodeExtensions=function(t){var e,n,r=this._nextSet(this._row,t),o=this._findPattern(this.EXTENSION_START_PATTERN,r,!1,!1);if(null===o)return null;for(e=0;e=0;e-=2)n+=t[e];for(n*=3,e=t.length-1;e>=0;e-=2)n+=t[e];return n%10==0},r.CONFIG_KEYS={supplements:{type:"arrayOf(string)",default:[],description:"Allowed extensions to be decoded (2 and/or 5)"}},e.a=r},function(t,e,n){function r(t){return null==t?void 0===t?c:u:s&&s in Object(t)?i(t):a(t)}var o=n(10),i=n(155),a=n(184),u="[object Null]",c="[object Undefined]",s=o?o.toStringTag:void 0;t.exports=r},function(t,e,n){"use strict";e.a={drawRect:function(t,e,n,r){n.strokeStyle=r.color,n.fillStyle=r.color,n.lineWidth=1,n.beginPath(),n.strokeRect(t.x,t.y,e.x,e.y)},drawPath:function(t,e,n,r){n.strokeStyle=r.color,n.fillStyle=r.color,n.lineWidth=r.lineWidth,n.beginPath(),n.moveTo(t[0][e.x],t[0][e.y]);for(var o=1;on)return Number.MAX_VALUE;u+=c}return u/f},r.prototype._nextSet=function(t,e){var n;for(e=e||0,n=e;n1&&(t[n[r]]=o)},r.prototype._matchTrace=function(t,e){var n,r,o=[],i=this,a=i._nextSet(i._row),u=!i._row[a],c=0,s={error:Number.MAX_VALUE,code:-1,start:0};if(t){for(n=0;n=0;r--)e=Math.floor(Math.random()*r),n=t[r],t[r]=t[e],t[e]=n;return t},toPointList:function(t){var e,n,r=[],o=[];for(e=0;e=e&&o.push(t[r]);return o},maxIndex:function(t){var e,n=0;for(e=0;et[n]&&(n=e);return n},max:function t(e){var n,t=0;for(n=0;nt&&(t=e[n]);return t},sum:function t(e){for(var n=e.length,t=0;n--;)t+=e[n];return t}}},function(t,e,n){function r(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t0?Math.floor(this.x+.5):Math.floor(this.x-.5),this.y=this.y>0?Math.floor(this.y+.5):Math.floor(this.y-.5),this}}}function o(t,e,n){n||(n=t);for(var r=t.data,o=r.length,i=n.data;o--;)i[o]=r[o]>o]++;return a}function a(t,e){function n(t,e){var n,r=0;for(n=t;n<=e;n++)r+=a[n];return r}function r(t,e){var n,r=0;for(n=t;n<=e;n++)r+=n*a[n];return r}function o(){var o,u,c,s,f,l,d,h=[0],p=(1<c)for(i=s[u],i.score=o,i.item=t[r],c=Number.MAX_VALUE,a=0;ae[r]?r++:n++;return o}function g(t,e){function n(t){for(var e=0,n=t[Math.floor(t.length/2)];e0&&(n=Math.abs(t[e]-d)>Math.abs(t[e-1]-d)?t[e-1]:t[e]),d/nc[f-1]/c[f]?{x:n,y:n}:null}var r,o=p(e.x),i=p(e.y),a=Math.max(e.x,e.y),u=v(o,i),c=[8,10,15,20,32,60,80],s={"x-small":5,small:4,medium:3,large:2,"x-large":1},f=s[t]||s.medium,l=c[f],d=Math.floor(a/l);return r=n(u),r||(r=n(p(a)))||(r=n(p(d*l))),r}function y(t){return{value:parseFloat(t),unit:(t.indexOf("%"),t.length,"%")}}function _(t,e,n){var r={width:t,height:e},o=Object.keys(n).reduce(function(t,e){var o=n[e],i=y(o),a=w[e](i,r);return t[e]=a,t},{});return{sx:o.left,sy:o.top,sw:o.right-o.left,sh:o.bottom-o.top}}var m=n(74),x=n(16);e.f=r,e.c=u,e.d=c,e.e=s,e.i=f,e.j=l,e.g=d,e.a=h,e.b=g,e.h=_;var b={clone:n(9)},E={clone:n(107)},w={top:function(t,e){if("%"===t.unit)return Math.floor(e.height*(t.value/100))},right:function(t,e){if("%"===t.unit)return Math.floor(e.width-e.width*(t.value/100))},bottom:function(t,e){if("%"===t.unit)return Math.floor(e.height-e.height*(t.value/100))},left:function(t,e){if("%"===t.unit)return Math.floor(e.width*(t.value/100))}}},function(t,e,n){"use strict";function r(t,e,n,r){e?this.data=e:n?(this.data=new n(t.x*t.y),n===Array&&r&&a.a.init(this.data,0)):(this.data=new Uint8Array(t.x*t.y),Uint8Array===Array&&r&&a.a.init(this.data,0)),this.size=t}var o=n(78),i=n(26),a=n(16),u={clone:n(9)};r.prototype.inImageWithBorder=function(t,e){return t.x>=e&&t.y>=e&&t.x0&&(a=y[r-1],a.m00+=1,a.m01+=n,a.m10+=e,a.m11+=e*n,a.m02+=o,a.m20+=e*e);for(i=0;i=0?x:-x)+m,a.theta=(180*h/m+90)%180-90,a.theta<0&&(a.theta+=180),a.rad=h>m?h-m:h,a.vec=u.clone([Math.cos(h),Math.sin(h)]),_.push(a));return _},r.prototype.show=function(t,e){var n,r,o,i,a,u,c;for(e||(e=1),n=t.getContext("2d"),t.width=this.size.x,t.height=this.size.y,r=n.getImageData(0,0,t.width,t.height),o=r.data,i=0,c=0;c360)&&(e=360);for(var o=[0,1,1],a=[0,0,0],u=[255,255,255],c=[0,0,0],s=[],f=t.getContext("2d"),l=f.getImageData(r.x,r.y,this.size.x,this.size.y),d=l.data,h=this.data.length;h--;)o[0]=this.data[h]*e,s=o[0]<=0?u:o[0]>=360?c:n.i(i.a)(o,a),d[4*h+0]=s[0],d[4*h+1]=s[1],d[4*h+2]=s[2],d[4*h+3]=255;f.putImageData(l,r.x,r.y)},e.a=r},function(t,e,n){var r=n(3),o=n(1),i=r(o,"Map");t.exports=i},function(t,e,n){function r(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=r}var r=9007199254740991;t.exports=n},function(t,e,n){function r(t){return"symbol"==typeof t||i(t)&&o(t)==a}var o=n(6),i=n(4),a="[object Symbol]";t.exports=r},function(t,e,n){function r(t){return a(t)?o(t,!0):i(t)}var o=n(48),i=n(126),a=n(14);t.exports=r},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){"use strict";function r(t,e){return!!e&&e.some(function(e){return Object.keys(e).every(function(n){return e[n]===t[n]})})}function o(t,e){return"function"!=typeof e||e(t)}var i=n(7);e.a={create:function(t){function e(e){return c&&e&&!r(e,t.blacklist)&&o(e,t.filter)}var n=document.createElement("canvas"),a=n.getContext("2d"),u=[],c=t.capacity||20,s=t.capture===!0;return{addResult:function(t,r,o){var f={};e(o)&&(c--,f.codeResult=o,s&&(n.width=r.x,n.height=r.y,i.a.drawImage(t,r,a),f.frame=n.toDataURL()),u.push(f))},getResults:function(){return u}}}}},function(t,e,n){"use strict";var r=void 0;r=n(80),e.a=r},function(t,e,n){"use strict";var r={searchDirections:[[0,1],[1,1],[1,0],[1,-1],[0,-1],[-1,-1],[-1,0],[-1,1]],create:function(t,e){function n(t,e,n,r){var o,f,l;for(o=0;o<7;o++){if(f=t.cy+c[t.dir][0],l=t.cx+c[t.dir][1],i=f*s+l,a[i]===e&&(0===u[i]||u[i]===n))return u[i]=n,t.cy=f,t.cx=l,!0;0===u[i]&&(u[i]=r),t.dir=(t.dir+1)%8}return!1}function r(t,e,n){return{dir:n,x:t,y:e,next:null,prev:null}}function o(t,e,o,i,a){var u,c,s,f=null,l={cx:e,cy:t,dir:0};if(n(l,i,o,a)){f=r(e,t,l.dir),u=f,s=l.dir,c=r(l.cx,l.cy,0),c.prev=u,u.next=c,c.next=null,u=c;do l.dir=(l.dir+6)%8,n(l,i,o,a),s!==l.dir?(u.dir=l.dir,c=r(l.cx,l.cy,0),c.prev=u,u.next=c,c.next=null,u=c):(u.dir=s,u.x=l.cx,u.y=l.cy),s=l.dir;while(l.cx!==e||l.cy!==t);f.prev=u.prev,u.prev.next=f}return f}var i,a=t.data,u=e.data,c=this.searchDirections,s=t.size.x;return{trace:function(t,e,r,o){return n(t,e,r,o)},contourTracing:function(t,e,n,r,i){return o(t,e,n,r,i)}}}};e.a=r},function(t,e,n){"use strict";function r(){o.a.call(this)}var o=n(8),i=n(16),a={ALPHABETH_STRING:{value:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%"},ALPHABET:{value:[48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,45,46,32,42,36,47,43,37]},CHARACTER_ENCODINGS:{value:[52,289,97,352,49,304,112,37,292,100,265,73,328,25,280,88,13,268,76,28,259,67,322,19,274,82,7,262,70,22,385,193,448,145,400,208,133,388,196,148,168,162,138,42]},ASTERISK:{value:148},FORMAT:{value:"code_39",writeable:!1}};r.prototype=Object.create(o.a.prototype,a),r.prototype.constructor=r,r.prototype._toCounters=function(t,e){var n,r=this,o=e.length,a=r._row.length,u=!r._row[t],c=0;for(i.a.init(e,0),n=t;n=r},r.prototype._patternToChar=function(t){var e,n=this;for(e=0;ee&&(r=t[n]);return r},r.prototype._toPattern=function(t){for(var e,n,r=t.length,o=0,i=r,a=0,u=this;i>3;){for(o=u._findNextWidth(t,o),i=0,e=0,n=0;no&&(e|=1<0;n++)if(t[n]>o&&(i--,2*t[n]>=a))return-1;return e}}return-1},r.prototype._findStart=function(){var t,e,n,r=this,o=r._nextSet(r._row),i=o,a=[0,0,0,0,0,0,0,0,0],u=0,c=!1;for(t=o;td))return!1;var p=f.get(t);if(p&&f.get(e))return p==e;var v=-1,g=!0,y=n&c?new o:void 0;for(f.set(t,e),f.set(e,t);++v2&&void 0!==arguments[2]?arguments[2]:{};return t=n.i(v.a)(t,o,e),r(t)}function i(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments[1],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return a(c()({},e,(t={},t[n]=r,t)))}function a(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:p.a;return{fromSource:function(e,n){return o(t,e,n)},fromConfig:function(e){return r(c()({},t,e))},decoder:function(e){return i(t,"decoder",e)},locator:function(e){return i(t,"locator",e)},throttle:function(e){return i(t,"frequency",1e3/parseInt(e))},config:function(e){return a(c()({},t,e))},ImageWrapper:l.a,ImageDebug:d.a,ResultCollector:h.a,_worker:{createScanner:f.a}}}Object.defineProperty(e,"__esModule",{value:!0});var u=n(15),c=n.n(u),s=n(79),f=(n.n(s),n(101)),l=n(27),d=n(7),h=n(42),p=n(43),v=n(84);e.default=a()},function(t,e,n){"use strict";var r={clone:n(9),dot:n(46)};e.a={create:function(t,e){function n(){o(t),i()}function o(t){c[t.id]=t,a.push(t)}function i(){var t,e=0;for(t=0;te},getPoints:function(){return a},getCenter:function(){return u}}},createPoint:function(t,e,n){return{rad:t[n],point:t,id:e}}}},function(t,e,n){"use strict";var r=Object.assign||function(t){for(var e=1;e>>16&65535,r=65535&t,o=e>>>16&65535,i=65535&e;return r*i+(n*i+r*o<<16>>>0)|0},"function"!=typeof Object.assign&&(Object.assign=function(t){"use strict";if(null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;n1&&(!e.inImageWithBorder(t[0],0)||!e.inImageWithBorder(t[1],0));)r-=Math.ceil(r/2),o(-r);return t}function u(t){return[{x:(t[1][0]-t[0][0])/2+t[0][0],y:(t[1][1]-t[0][1])/2+t[0][1]},{x:(t[3][0]-t[2][0])/2+t[2][0],y:(t[3][1]-t[2][1])/2+t[2][1]}]}function c(t){var n,o=null,i=r.a.getBarcodeLine(e,t[0],t[1]);for(r.a.toBinaryLine(i),n=0;nE?l:E,y.push(l)}var o,i,a,u,c,s,f,l,d=0|e.x,h=0|e.y,p=0|n.x,v=0|n.y,g=Math.abs(v-h)>Math.abs(p-d),y=[],_=t.data,m=t.size.x,x=0,b=255,E=0;for(g&&(s=d,d=h,h=s,s=p,p=v,v=s),d>p&&(s=d,d=p,p=s,s=h,h=v,v=s),o=p-d,i=Math.abs(v-h),a=o/2|0,c=h,u=hl?o.DIR.UP:o.DIR.DOWN,d.push({pos:0,val:f[0]}),a=0;ah&&f[a+1]>.5*l?o.DIR.UP:r,r!==i&&(d.push({pos:a,val:f[a]}),r=i);for(d.push({pos:f.length,val:f[f.length-1]}),u=d[0].pos;ul?0:1;for(a=1;ad[a].val?d[a].val+(d[a+1].val-d[a].val)/3*2|0:d[a+1].val+(d[a].val-d[a+1].val)/3|0,u=d[a].pos;uh?0:1;return{line:f,threshold:h}},r.debug={printFrequency:function(t,e){var n,r=e.getContext("2d");for(e.width=t.length,e.height=256,r.beginPath(),r.strokeStyle="blue",n=0;n0?t.videoWidth>0&&t.videoHeight>0?e():window.setTimeout(r,500):n("Unable to play video stream. Is webcam working?"),o--}var o=10;r()})}function o(t,e){return n.i(l.a)(e).then(function(e){return new Promise(function(n){c=e,t.setAttribute("autoplay","true"),t.srcObject=e,t.addEventListener("loadedmetadata",function(){t.play(),n()})})}).then(r.bind(null,t))}function i(t){var e=f()(t,["width","height","facingMode","aspectRatio","deviceId"]);return void 0!==t.minAspectRatio&&t.minAspectRatio>0&&(e.aspectRatio=t.minAspectRatio,console.log("WARNING: Constraint 'minAspectRatio' is deprecated; Use 'aspectRatio' instead")),void 0!==t.facing&&(e.facingMode=t.facing,console.log("WARNING: Constraint 'facing' is deprecated. Use 'facingMode' instead'")),e}function a(t){var e={audio:!1,video:i(t)};return e.video.deviceId&&e.video.facingMode&&delete e.video.facingMode,Promise.resolve(e)}function u(){return n.i(l.b)().then(function(t){return t.filter(function(t){return"videoinput"===t.kind})})}var c,s=n(70),f=n.n(s),l=n(77);e.a={request:function(t,e){return a(e).then(o.bind(null,t))},release:function(){var t=c&&c.getVideoTracks();t&&t.length&&t[0].stop(),c=null},enumerateVideoDevices:u,getActiveStreamLabel:function(){if(c){var t=c.getVideoTracks();if(t&&t.length)return t[0].label}}}},function(t,e,n){"use strict";function r(t,e,n){if(n instanceof b.a.MediaStream)return l(t,e,{srcObject:n});if(n instanceof b.a.HTMLImageElement)throw new Error('Source "HTMLImageElement": not yet supported');if(n instanceof b.a.HTMLVideoElement)throw new Error('Source "HTMLVideoElement": not yet supported');if(n instanceof b.a.HTMLCanvasElement)return s(t,e,{canvas:n});if(!(n instanceof b.a.FileList)){if(n instanceof b.a.File)return a(t,e,n);if("string"==typeof n)return u(t,e,n);if("object"!==(void 0===n?"undefined":E(n))||void 0===n.constraints&&void 0===n.area)throw new Error("No source given!");return d(t,n)}return n.length>0?a(t,e,n[0]):void 0}function o(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r={inputStream:x()({type:"ImageStream",sequence:!1,size:800},e),numOfWorkers:1};return x()(t,r,{numOfWorkers:"number"==typeof t.numOfWorkers&&t.numOfWorkers>0?1:0},{inputStream:g()(_()(t.inputStream,["size"]),p.a)},{inputStream:n})}function i(t,e,n){var r=n.src,i=n.mime,a=i.match(/^(video|image)\/(.*)$/i)||[],u=a[1];if("video"===u)return f(t,{src:r},e);if("image"===u)return o(t,{src:r},e);throw new Error('Source with mimetype: "'+u+'" not supported')}function a(t,e,n){return i(t,e,{src:b.a.URL.createObjectURL(n),mime:n.type})}function u(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=n.match(w.regex)||[],o=r[1];if(o)return i(t,e,{src:n,mime:o});if(n.match(O.regex))throw new Error('Source "objectURL": not supported');var a=n.match(C.regex)||[],u=a[2];if(u)return c(t,e,{src:n,ext:u});throw new Error('Source "'+n+'": not recognized')}function c(t,e,n){var r=n.src,i=n.ext;if(i.match(R.regex))return o(t,{src:r},e);if(i.match(S.regex))return f(t,{src:r},e);throw new Error('Source "MediaString": not recognized')}function s(t,e){e.canvas,arguments.length>2&&void 0!==arguments[2]&&arguments[2];throw new Error('Source "Canvas": not implemented!')}function f(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return x()({},t,{inputStream:x()({type:"VideoStream"},e)},{inputStream:n})}function l(t,e){e.srcObject,arguments.length>2&&void 0!==arguments[2]&&arguments[2];throw new Error('Source "MediaStream": not implemented!')}function d(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return x()({},t,{inputStream:{type:"LiveStream",constraints:{width:640,height:480,facingMode:"environment"}}},{inputStream:e})}var h=n(199),p=n.n(h),v=n(203),g=n.n(v),y=n(70),_=n.n(y),m=n(15),x=n.n(m),b=n(75);e.a=r;var E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},w={regex:/^\s*data:([a-z]+\/[a-z0-9\-\+]+(;[a-z\-]+\=[a-z0-9\-]+)?)?(;base64)?,[a-z0-9\!\$\&\'\,\(\)\*\+\,\;\=\-\.\_\~\:\@\/\?\%\s]*\s*$/i},O={regex:/^\s*blob:(.*)$/i},C={regex:/^(?:(?:http[s]?|ftp):\/)?\/?(?:(?:[^:\/\s]+)(?:(?:\/\w+)*\/))?([\w\-]+\.([^#?\s]+))(?:.*)?(?:#[\w\-]+)?$/i},R={regex:/(jpe?g|png|gif|tiff)(?:\s+|$)/i},S={regex:/(webm|ogg|mp4|m4v)/i}},function(t,e,n){"use strict";function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d;return/^blob\:/i.test(t)?i(t).then(o).then(function(t){return a(t,e)}):Promise.resolve(null)}function o(t){return new Promise(function(e){var n=new FileReader;n.onload=function(t){return e(t.target.result)},n.readAsArrayBuffer(t)})}function i(t){return new Promise(function(e,n){var r=new XMLHttpRequest;r.open("GET",t,!0),r.responseType="blob",r.onreadystatechange=function(){r.readyState!==XMLHttpRequest.DONE||200!==r.status&&0!==r.status||e(this.response)},r.onerror=n,r.send()})}function a(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d,n=new DataView(t),r=t.byteLength,o=e.reduce(function(t,e){var n=Object.keys(l).filter(function(t){return l[t]===e})[0];return n&&(t[n]=e),t},{}),i=2;if(255!==n.getUint8(0)||216!==n.getUint8(1))return!1;for(;i1?i.size:Math.floor(e/o*i.size):e,r=i.size?e/o>1?Math.floor(o/e*i.size):i.size:o,s.x=n,s.y=r}var n,r,o={},i=null,a=["canrecord","ended"],u={},c={x:0,y:0},s={x:0,y:0};return o.getRealWidth=function(){return t.videoWidth},o.getRealHeight=function(){return t.videoHeight},o.getWidth=function(){return n},o.getHeight=function(){return r},o.setWidth=function(t){n=t},o.setHeight=function(t){r=t},o.setInputStream=function(e){i=e,t.src=void 0!==e.src?e.src:""},o.ended=function(){return t.ended},o.getConfig=function(){return i},o.setAttribute=function(e,n){t.setAttribute(e,n)},o.pause=function(){t.pause()},o.play=function(){t.play()},o.setCurrentTime=function(e){"LiveStream"!==i.type&&(t.currentTime=e)},o.addEventListener=function(e,n,r){a.indexOf(e)!==-1?(u[e]||(u[e]=[]),u[e].push(n)):t.addEventListener(e,n,r)},o.clearEventHandlers=function(){a.forEach(function(e){var n=u[e];n&&n.length>0&&n.forEach(function(n){t.removeEventListener(e,n)})})},o.trigger=function(t,n){var r,i=u[t];if("canrecord"===t&&e(),i&&i.length>0)for(r=0;r1?a.size:Math.floor(u/c*a.size):u,o=a.size?u/c>1?Math.floor(c/u*a.size):a.size:c,x.x=n,x.y=o,l=!0,s=0,setTimeout(function(){e("canrecord",[])},0)},p,h,a.sequence)}function e(t,e){var n,r=_[t];if(r&&r.length>0)for(n=0;nf&&(f=o.box[r][0]),o.box[r][1]h&&(h=o.box[r][1]);for(a=[[c,s],[f,s],[f,h],[c,h]],u=P.halfSample?2:1,i=d.invert(i,i),r=0;r<4;r++)l.transformMat2(a[r],a[r],i);for(r=0;r<4;r++)l.scale(a[r],a[r],u);return a}function v(){n.i(a.c)(w,D),D.zeroBorder()}function g(){var t,e,n,r,o,i,a,s=[];for(t=0;t0&&r[A.data[n]-1]++;return r=r.map(function(t,e){return{val:t,label:e+1}}),r.sort(function(t,e){return e.val-t.val}),r.filter(function(t){return t.val>=5})}function _(t,e){var n,r,o,i,a=[],u=[];for(n=0;n=2){for(o=0;of&&c.push(t[o]);if(c.length>=2){for(a=m(c),i=0,o=0;o1&&a.length>=c.length/4*3&&a.length>t.length/4&&(i/=a.length,u={index:e[1]*z.x+e[0],pos:{x:n,y:r},box:[l.clone([n,r]),l.clone([n+C.size.x,r]),l.clone([n+C.size.x,r+C.size.y]),l.clone([n,r+C.size.y])],moments:a,rad:i,vec:l.clone([Math.cos(i),Math.sin(i)])},s.push(u))}}return s}function E(t){function e(){var t;for(t=0;ta&&n(u):A.data[u]=Number.MAX_VALUE}var r,o,i=0,a=.95,c=0;for(u.a.init(S.data,0),u.a.init(A.data,0),u.a.init(T.data,null),r=0;r0) {length=length - 1|0;images[outImagePtr+length|0]=(images[aImagePtr+length|0]|0) - (images[bImagePtr+length|0]|0)|0;}}function bitwiseOr(aImagePtr, bImagePtr, outImagePtr) {aImagePtr=aImagePtr|0;bImagePtr=bImagePtr|0;outImagePtr=outImagePtr|0;var length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;images[outImagePtr+length|0]=images[aImagePtr+length|0]|0|(images[bImagePtr+length|0]|0)|0;}}function countNonZero(imagePtr) {imagePtr=imagePtr|0;var sum=0,length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;sum=(sum|0)+(images[imagePtr+length|0]|0)|0;}return sum|0;}function init(imagePtr, value) {imagePtr=imagePtr|0;value=value|0;var length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;images[imagePtr+length|0]=value;}}function dilate(inImagePtr, outImagePtr) {inImagePtr=inImagePtr|0;outImagePtr=outImagePtr|0;var v=0,u=0,sum=0,yStart1=0,yStart2=0,xStart1=0,xStart2=0,offset=0;for (v=1; (v|0)<(size - 1|0); v=v+1|0) {offset=offset+size|0;for (u=1; (u|0)<(size - 1|0); u=u+1|0) {yStart1=offset - size|0;yStart2=offset+size|0;xStart1=u - 1|0;xStart2=u+1|0;sum=(images[inImagePtr+yStart1+xStart1|0]|0)+(images[inImagePtr+yStart1+xStart2|0]|0)+(images[inImagePtr+offset+u|0]|0)+(images[inImagePtr+yStart2+xStart1|0]|0)+(images[inImagePtr+yStart2+xStart2|0]|0)|0;if ((sum|0)>(0|0)) {images[outImagePtr+offset+u|0]=1;} else {images[outImagePtr+offset+u|0]=0;}}}return;}function memcpy(srcImagePtr, dstImagePtr) {srcImagePtr=srcImagePtr|0;dstImagePtr=dstImagePtr|0;var length=0;length=imul(size, size)|0;while ((length|0)>0) {length=length - 1|0;images[dstImagePtr+length|0]=images[srcImagePtr+length|0]|0;}}function zeroBorder(imagePtr) {imagePtr=imagePtr|0;var x=0,y=0;for (x=0; (x|0)<(size - 1|0); x=x+1|0) {images[imagePtr+x|0]=0;images[imagePtr+y|0]=0;y=y+size - 1|0;images[imagePtr+y|0]=0;y=y+1|0;}for (x=0; (x|0)<(size|0); x=x+1|0) {images[imagePtr+y|0]=0;y=y+1|0;}}function skeletonize() {var subImagePtr=0,erodedImagePtr=0,tempImagePtr=0,skelImagePtr=0,sum=0,done=0;erodedImagePtr=imul(size, size)|0;tempImagePtr=erodedImagePtr+erodedImagePtr|0;skelImagePtr=tempImagePtr+erodedImagePtr|0;init(skelImagePtr, 0);zeroBorder(subImagePtr);do {erode(subImagePtr, erodedImagePtr);dilate(erodedImagePtr, tempImagePtr);subtract(subImagePtr, tempImagePtr, tempImagePtr);bitwiseOr(skelImagePtr, tempImagePtr, skelImagePtr);memcpy(erodedImagePtr, subImagePtr);sum=countNonZero(subImagePtr)|0;done=(sum|0) == 0|0;} while (!done);}return {skeletonize: skeletonize};} __webpack_exports__["a"]=Skeletonizer; },function(t,e,n){"use strict";function r(){o.a.call(this),this._counters=[]}var o=n(8),i={ALPHABETH_STRING:{value:"0123456789-$:/.+ABCD"},ALPHABET:{value:[48,49,50,51,52,53,54,55,56,57,45,36,58,47,46,43,65,66,67,68]},CHARACTER_ENCODINGS:{value:[3,6,9,96,18,66,33,36,48,72,12,24,69,81,84,21,26,41,11,14]},START_END:{value:[26,41,11,14]},MIN_ENCODED_CHARS:{value:4},MAX_ACCEPTABLE:{value:2},PADDING:{value:1.5},FORMAT:{value:"codabar",writeable:!1}};r.prototype=Object.create(o.a.prototype,i),r.prototype.constructor=r,r.prototype._decode=function(){var t,e,n,r,o,i=this,a=[];if(this._counters=i._fillCounters(),!(t=i._findStart()))return null;r=t.startCounter;do{if((n=i._toPattern(r))<0)return null;if((e=i._patternToChar(n))<0)return null;if(a.push(e),r+=8,a.length>1&&i._isStartEnd(n))break}while(ri._counters.length?i._counters.length:r,o=t.start+i._sumCounters(t.startCounter,r-8),{code:a.join(""),start:t.start,end:o,startInfo:t,decodedCodes:a}):null},r.prototype._verifyWhitespace=function(t,e){return(t-1<=0||this._counters[t-1]>=this._calculatePatternLength(t)/2)&&(e+8>=this._counters.length||this._counters[e+7]>=this._calculatePatternLength(e)/2)},r.prototype._calculatePatternLength=function(t){var e,n=0;for(e=t;e=0;i--)n=2==(1&i)?c.bar:c.space,r=1==(1&a)?n.wide:n.narrow,r.size+=u._counters[s+i],r.counts++,a>>=1;s+=8}return["space","bar"].forEach(function(t){var e=c[t];e.wide.min=Math.floor((e.narrow.size/e.narrow.counts+e.wide.size/e.wide.counts)/2),e.narrow.max=Math.ceil(e.wide.min),e.wide.max=Math.ceil((e.wide.size*u.MAX_ACCEPTABLE+u.PADDING)/e.wide.counts)}),c},r.prototype._charToPattern=function(t){var e,n=this,r=t.charCodeAt(0);for(e=0;e=0;r--){if(o=0==(1&r)?s.bar:s.space,i=1==(1&u)?o.wide:o.narrow,(a=c._counters[f+r])i.max)return!1;u>>=1}f+=8}return!0},r.prototype._patternToChar=function(t){var e,n=this;for(e=0;ei&&(i=r),rthis._counters.length)return-1;for(e=this._computeAlternatingThreshold(t,a),n=this._computeAlternatingThreshold(t+1,a),r=0;ro&&(c|=u),u>>=1;return c},r.prototype._isStartEnd=function(t){var e;for(e=0;eu.AVG_CODE_ERROR?null:(u.CODE_PATTERN[l.code]&&(l.correction.bar=o(u.CODE_PATTERN[l.code],a,this.MODULE_INDICES.bar),l.correction.space=o(u.CODE_PATTERN[l.code],a,this.MODULE_INDICES.space)),l)}f++,a[f]=1,s=!s}return null},r.prototype._correct=function(t,e){this._correctBars(t,e.bar,this.MODULE_INDICES.bar),this._correctBars(t,e.space,this.MODULE_INDICES.space)},r.prototype._findStart=function(){var t,e,n,r,i,a=[0,0,0,0,0,0],u=this,c=u._nextSet(u._row),s=!1,f=0,l={error:Number.MAX_VALUE,code:-1,start:0,end:0,correction:{bar:1,space:1}};for(t=c;t=this.CODE_G_START&&(r|=1<<1-o),1!=o&&(i=this._nextSet(this._row,n.end),i=this._nextUnset(this._row,i))}return 2!=u.length||parseInt(u.join(""))%4!==r?null:{code:u.join(""),decodedCodes:c,end:n.end}},e.a=r},function(t,e,n){"use strict";function r(){a.a.call(this)}function o(t){var e;for(e=0;e<10;e++)if(t===c[e])return e;return null}function i(t){var e,n=t.length,r=0;for(e=n-2;e>=0;e-=2)r+=t[e];for(r*=3,e=n-1;e>=0;e-=2)r+=t[e];return(r*=3)%10}var a=n(5),u={FORMAT:{value:"ean_5",writeable:!1}},c=[24,20,18,17,12,6,3,10,9,5];r.prototype=Object.create(a.a.prototype,u),r.prototype.constructor=r,r.prototype.decode=function(t,e){this._row=t;var n,r=0,a=0,u=e,c=this._row.length,s=[],f=[];for(a=0;a<5&&u=this.CODE_G_START&&(r|=1<<4-a),4!=a&&(u=this._nextSet(this._row,n.end),u=this._nextUnset(this._row,u))}return 5!=s.length?null:i(s)!==o(r)?null:{code:s.join(""),decodedCodes:f,end:n.end}},e.a=r},function(t,e,n){"use strict";function r(t,e){o.a.call(this,t,e)}var o=n(5),i={FORMAT:{value:"ean_8",writeable:!1}};r.prototype=Object.create(o.a.prototype,i),r.prototype.constructor=r,r.prototype._decodePayload=function(t,e,n){var r,o=this;for(r=0;r<4;r++){if(!(t=o._decodeCode(t.end,o.CODE_G_START)))return null;e.push(t.code),n.push(t)}if(null===(t=o._findPattern(o.MIDDLE_PATTERN,t.end,!0,!1)))return null;for(n.push(t),r=0;r<4;r++){if(!(t=o._decodeCode(t.end,o.CODE_G_START)))return null;n.push(t),e.push(t.code)}return t},e.a=r},function(t,e,n){"use strict";function r(t){t=a()(o(),t),u.a.call(this,t),this.barSpaceRatio=[1,1],t.normalizeBarSpaceWidth&&(this.SINGLE_CODE_ERROR=.38,this.AVG_CODE_ERROR=.09)}function o(){var t={};return Object.keys(r.CONFIG_KEYS).forEach(function(e){t[e]=r.CONFIG_KEYS[e].default}),t}var i=n(15),a=n.n(i),u=n(8),c=1,s=3,f={START_PATTERN:{value:[c,c,c,c]},STOP_PATTERN:{value:[c,c,s]},CODE_PATTERN:{value:[[c,c,s,s,c],[s,c,c,c,s],[c,s,c,c,s],[s,s,c,c,c],[c,c,s,c,s],[s,c,s,c,c],[c,s,s,c,c],[c,c,c,s,s],[s,c,c,s,c],[c,s,c,s,c]]},SINGLE_CODE_ERROR:{value:.78,writable:!0},AVG_CODE_ERROR:{value:.38,writable:!0},MAX_CORRECTION_FACTOR:{value:5},FORMAT:{value:"i2of5"}};r.prototype=Object.create(u.a.prototype,f),r.prototype.constructor=r,r.prototype._matchPattern=function(t,e){if(this.config.normalizeBarSpaceWidth){var n,r=[0,0],o=[0,0],i=[0,0],a=this.MAX_CORRECTION_FACTOR,c=1/a;for(n=0;n=0&&n._matchRange(t,e.start,0))return e;r=e.end,e=null}},r.prototype._verifyTrailingWhitespace=function(t){var e,n=this;return e=t.end+(t.end-t.start)/2,e=o.CODE_G_START&&(t.code=t.code-o.CODE_G_START,i|=1<<5-r),e.push(t.code),n.push(t)}return o._determineParity(i,e)?t:null},r.prototype._determineParity=function(t,e){var n,r;for(r=0;r0)for(r=0;r0){if(!(t=G.filter(function(t){return!t.busy})[0]))return;z.attachData(t.imageData)}else z.attachData(N.data);z.grab()&&(t?(t.busy=!0,t.worker.postMessage({cmd:"process",imageData:t.imageData},[t.imageData.buffer])):C())}else C()}function S(){var t=null,e=1e3/(0===H.frequency?60:H.frequency||60);W=!1,function n(r){t=t||r,W||(r>=t&&(t+=e,R()),window.requestAnimFrame(n))}(performance.now())}function A(){V&&"LiveStream"===H.inputStream.type?S():R()}function T(t){var e,n={worker:void 0,imageData:new Uint8Array(I.getWidth()*I.getHeight()),busy:!0};e=j(),n.worker=new Worker(e),n.worker.onmessage=function(r){if("initialized"===r.data.event)return URL.revokeObjectURL(e),n.busy=!1,n.imageData=new Uint8Array(r.data.imageData),t(n);"processed"===r.data.event?(n.imageData=new Uint8Array(r.data.imageData),n.busy=!1,O(r.data.result,n.imageData)):r.data.event},n.worker.postMessage({cmd:"init",size:{x:I.getWidth(),y:I.getHeight()},imageData:n.imageData,config:D(H)},[n.imageData.buffer])}function D(t){return v({},t,{inputStream:v({},t.inputStream,{target:null})})}function M(t){function e(t){self.postMessage({event:"processed",imageData:o.data,result:t},[o.data.buffer])}function n(){self.postMessage({event:"initialized",imageData:o.data},[o.data.buffer])}if(t){var r=t().default;if(!r)return void self.postMessage({event:"error",message:"Quagga could not be created"})}var o,i=r._worker.createScanner();self.onmessage=function(t){if("init"===t.data.cmd){var a=t.data.config;a.numOfWorkers=0,o=new r.ImageWrapper({x:t.data.size.x,y:t.data.size.y},new Uint8Array(t.data.imageData)),i.init(a,n,o),i.subscribe("processed",e)}else"process"===t.data.cmd&&(o.data=new Uint8Array(t.data.imageData),i.start())}}function j(){var e,n;return void 0!==t&&(n=t),e=new Blob(["("+M.toString()+")("+n+");"],{type:"text/javascript"}),window.URL.createObjectURL(e)}function P(t,e){var n=t-G.length;if(0===n)return e&&e();if(n<0){return G.slice(n).forEach(function(t){t.worker.terminate()}),G=G.slice(0,n),e&&e()}for(var r=function(n){G.push(n),G.length>=t&&e&&e()},o=0;o0&&n(f)?e>1?r(f,e-1,n,a,u):o(u,f):a||(u[u.length]=f)}return u}var o=n(31),i=n(165);t.exports=r},function(t,e,n){var r=n(148),o=r();t.exports=o},function(t,e){function n(t,e){return null!=t&&e in Object(t)}t.exports=n},function(t,e,n){function r(t){return i(t)&&o(t)==a}var o=n(6),i=n(4),a="[object Arguments]";t.exports=r},function(t,e,n){function r(t,e,n,r,g,_){var m=s(t),x=s(e),b=m?p:c(t),E=x?p:c(e);b=b==h?v:b,E=E==h?v:E;var w=b==v,O=E==v,C=b==E;if(C&&f(t)){if(!f(e))return!1;m=!0,w=!1}if(C&&!w)return _||(_=new o),m||l(t)?i(t,e,n,r,g,_):a(t,e,b,n,r,g,_);if(!(n&d)){var R=w&&y.call(t,"__wrapped__"),S=O&&y.call(e,"__wrapped__");if(R||S){var A=R?t.value():t,T=S?e.value():e;return _||(_=new o),g(A,T,n,r,_)}}return!!C&&(_||(_=new o),u(t,e,n,r,g,_))}var o=n(30),i=n(58),a=n(149),u=n(150),c=n(61),s=n(0),f=n(24),l=n(25),d=1,h="[object Arguments]",p="[object Array]",v="[object Object]",g=Object.prototype,y=g.hasOwnProperty;t.exports=r},function(t,e,n){function r(t,e,n,r){var c=n.length,s=c,f=!r;if(null==t)return!s;for(t=Object(t);c--;){var l=n[c];if(f&&l[2]?l[1]!==t[l[0]]:!(l[0]in t))return!1}for(;++c1?n[o-1]:void 0,u=o>2?n[2]:void 0;for(a=t.length>3&&"function"==typeof a?(o--,a):void 0,u&&i(n[0],n[1],u)&&(a=o<3?void 0:a,o=1),e=Object(e);++r-1}var o=n(18);t.exports=r},function(t,e,n){function r(t,e){var n=this.__data__,r=o(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}var o=n(18);t.exports=r},function(t,e,n){function r(){this.size=0,this.__data__={hash:new o,map:new(a||i),string:new o}}var o=n(109),i=n(17),a=n(28);t.exports=r},function(t,e,n){function r(t){var e=o(this,t).delete(t);return this.size-=e?1:0,e}var o=n(20);t.exports=r},function(t,e,n){function r(t){return o(this,t).get(t)}var o=n(20);t.exports=r},function(t,e,n){function r(t){return o(this,t).has(t)}var o=n(20);t.exports=r},function(t,e,n){function r(t,e){var n=o(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}var o=n(20);t.exports=r},function(t,e){function n(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}t.exports=n},function(t,e,n){function r(t){var e=o(t,function(t){return n.size===i&&n.clear(),t}),n=e.cache;return e}var o=n(201),i=500;t.exports=r},function(t,e,n){var r=n(64),o=r(Object.keys,Object);t.exports=o},function(t,e){function n(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}t.exports=n},function(t,e,n){(function(t){var r=n(59),o="object"==typeof e&&e&&!e.nodeType&&e,i=o&&"object"==typeof t&&t&&!t.nodeType&&t,a=i&&i.exports===o,u=a&&r.process,c=function(){try{return u&&u.binding&&u.binding("util")}catch(t){}}();t.exports=c}).call(e,n(41)(t))},function(t,e){function n(t){return o.call(t)}var r=Object.prototype,o=r.toString;t.exports=n},function(t,e){function n(t){return this.__data__.set(t,r),this}var r="__lodash_hash_undefined__";t.exports=n},function(t,e){function n(t){return this.__data__.has(t)}t.exports=n},function(t,e){function n(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}t.exports=n},function(t,e){function n(t){var e=0,n=0;return function(){var a=i(),u=o-(a-n);if(n=a,u>0){if(++e>=r)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var r=800,o=16,i=Date.now;t.exports=n},function(t,e,n){function r(){this.__data__=new o,this.size=0}var o=n(17);t.exports=r},function(t,e){function n(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}t.exports=n},function(t,e){function n(t){return this.__data__.get(t)}t.exports=n},function(t,e){function n(t){return this.__data__.has(t)}t.exports=n},function(t,e,n){function r(t,e){var n=this.__data__;if(n instanceof o){var r=n.__data__;if(!i||r.length8 + + Camera + + + @@ -93,11 +98,12 @@ +