\n\t * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n\t */\n\t\n\t/** Used as the size to enable large array optimizations. */\n\tvar LARGE_ARRAY_SIZE = 200;\n\t\n\t/** Used to stand-in for `undefined` hash values. */\n\tvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\t\n\t/** Used to compose bitmasks for comparison styles. */\n\tvar UNORDERED_COMPARE_FLAG = 1,\n\t PARTIAL_COMPARE_FLAG = 2;\n\t\n\t/** Used as references for various `Number` constants. */\n\tvar MAX_SAFE_INTEGER = 9007199254740991;\n\t\n\t/** `Object#toString` result references. */\n\tvar argsTag = '[object Arguments]',\n\t arrayTag = '[object Array]',\n\t boolTag = '[object Boolean]',\n\t dateTag = '[object Date]',\n\t errorTag = '[object Error]',\n\t funcTag = '[object Function]',\n\t genTag = '[object GeneratorFunction]',\n\t mapTag = '[object Map]',\n\t numberTag = '[object Number]',\n\t objectTag = '[object Object]',\n\t promiseTag = '[object Promise]',\n\t regexpTag = '[object RegExp]',\n\t setTag = '[object Set]',\n\t stringTag = '[object String]',\n\t symbolTag = '[object Symbol]',\n\t weakMapTag = '[object WeakMap]';\n\t\n\tvar arrayBufferTag = '[object ArrayBuffer]',\n\t dataViewTag = '[object DataView]',\n\t float32Tag = '[object Float32Array]',\n\t float64Tag = '[object Float64Array]',\n\t int8Tag = '[object Int8Array]',\n\t int16Tag = '[object Int16Array]',\n\t int32Tag = '[object Int32Array]',\n\t uint8Tag = '[object Uint8Array]',\n\t uint8ClampedTag = '[object Uint8ClampedArray]',\n\t uint16Tag = '[object Uint16Array]',\n\t uint32Tag = '[object Uint32Array]';\n\t\n\t/**\n\t * Used to match `RegExp`\n\t * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n\t */\n\tvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\t\n\t/** Used to detect host constructors (Safari). */\n\tvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\t\n\t/** Used to detect unsigned integer values. */\n\tvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\t\n\t/** Used to identify `toStringTag` values of typed arrays. */\n\tvar typedArrayTags = {};\n\ttypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n\ttypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n\ttypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n\ttypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n\ttypedArrayTags[uint32Tag] = true;\n\ttypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n\ttypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n\ttypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n\ttypedArrayTags[errorTag] = typedArrayTags[funcTag] =\n\ttypedArrayTags[mapTag] = typedArrayTags[numberTag] =\n\ttypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n\ttypedArrayTags[setTag] = typedArrayTags[stringTag] =\n\ttypedArrayTags[weakMapTag] = false;\n\t\n\t/** Detect free variable `global` from Node.js. */\n\tvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\t\n\t/** Detect free variable `self`. */\n\tvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\t\n\t/** Used as a reference to the global object. */\n\tvar root = freeGlobal || freeSelf || Function('return this')();\n\t\n\t/** Detect free variable `exports`. */\n\tvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\t\n\t/** Detect free variable `module`. */\n\tvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\t\n\t/** Detect the popular CommonJS extension `module.exports`. */\n\tvar moduleExports = freeModule && freeModule.exports === freeExports;\n\t\n\t/** Detect free variable `process` from Node.js. */\n\tvar freeProcess = moduleExports && freeGlobal.process;\n\t\n\t/** Used to access faster Node.js helpers. */\n\tvar nodeUtil = (function() {\n\t try {\n\t return freeProcess && freeProcess.binding('util');\n\t } catch (e) {}\n\t}());\n\t\n\t/* Node.js helper references. */\n\tvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\t\n\t/**\n\t * A specialized version of `_.some` for arrays without support for iteratee\n\t * shorthands.\n\t *\n\t * @private\n\t * @param {Array} [array] The array to iterate over.\n\t * @param {Function} predicate The function invoked per iteration.\n\t * @returns {boolean} Returns `true` if any element passes the predicate check,\n\t * else `false`.\n\t */\n\tfunction arraySome(array, predicate) {\n\t var index = -1,\n\t length = array ? array.length : 0;\n\t\n\t while (++index < length) {\n\t if (predicate(array[index], index, array)) {\n\t return true;\n\t }\n\t }\n\t return false;\n\t}\n\t\n\t/**\n\t * The base implementation of `_.times` without support for iteratee shorthands\n\t * or max array length checks.\n\t *\n\t * @private\n\t * @param {number} n The number of times to invoke `iteratee`.\n\t * @param {Function} iteratee The function invoked per iteration.\n\t * @returns {Array} Returns the array of results.\n\t */\n\tfunction baseTimes(n, iteratee) {\n\t var index = -1,\n\t result = Array(n);\n\t\n\t while (++index < n) {\n\t result[index] = iteratee(index);\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * The base implementation of `_.unary` without support for storing metadata.\n\t *\n\t * @private\n\t * @param {Function} func The function to cap arguments for.\n\t * @returns {Function} Returns the new capped function.\n\t */\n\tfunction baseUnary(func) {\n\t return function(value) {\n\t return func(value);\n\t };\n\t}\n\t\n\t/**\n\t * Gets the value at `key` of `object`.\n\t *\n\t * @private\n\t * @param {Object} [object] The object to query.\n\t * @param {string} key The key of the property to get.\n\t * @returns {*} Returns the property value.\n\t */\n\tfunction getValue(object, key) {\n\t return object == null ? undefined : object[key];\n\t}\n\t\n\t/**\n\t * Checks if `value` is a host object in IE < 9.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n\t */\n\tfunction isHostObject(value) {\n\t // Many host objects are `Object` objects that can coerce to strings\n\t // despite having improperly defined `toString` methods.\n\t var result = false;\n\t if (value != null && typeof value.toString != 'function') {\n\t try {\n\t result = !!(value + '');\n\t } catch (e) {}\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Converts `map` to its key-value pairs.\n\t *\n\t * @private\n\t * @param {Object} map The map to convert.\n\t * @returns {Array} Returns the key-value pairs.\n\t */\n\tfunction mapToArray(map) {\n\t var index = -1,\n\t result = Array(map.size);\n\t\n\t map.forEach(function(value, key) {\n\t result[++index] = [key, value];\n\t });\n\t return result;\n\t}\n\t\n\t/**\n\t * Creates a unary function that invokes `func` with its argument transformed.\n\t *\n\t * @private\n\t * @param {Function} func The function to wrap.\n\t * @param {Function} transform The argument transform.\n\t * @returns {Function} Returns the new function.\n\t */\n\tfunction overArg(func, transform) {\n\t return function(arg) {\n\t return func(transform(arg));\n\t };\n\t}\n\t\n\t/**\n\t * Converts `set` to an array of its values.\n\t *\n\t * @private\n\t * @param {Object} set The set to convert.\n\t * @returns {Array} Returns the values.\n\t */\n\tfunction setToArray(set) {\n\t var index = -1,\n\t result = Array(set.size);\n\t\n\t set.forEach(function(value) {\n\t result[++index] = value;\n\t });\n\t return result;\n\t}\n\t\n\t/** Used for built-in method references. */\n\tvar arrayProto = Array.prototype,\n\t funcProto = Function.prototype,\n\t objectProto = Object.prototype;\n\t\n\t/** Used to detect overreaching core-js shims. */\n\tvar coreJsData = root['__core-js_shared__'];\n\t\n\t/** Used to detect methods masquerading as native. */\n\tvar maskSrcKey = (function() {\n\t var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n\t return uid ? ('Symbol(src)_1.' + uid) : '';\n\t}());\n\t\n\t/** Used to resolve the decompiled source of functions. */\n\tvar funcToString = funcProto.toString;\n\t\n\t/** Used to check objects for own properties. */\n\tvar hasOwnProperty = objectProto.hasOwnProperty;\n\t\n\t/**\n\t * Used to resolve the\n\t * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n\t * of values.\n\t */\n\tvar objectToString = objectProto.toString;\n\t\n\t/** Used to detect if a method is native. */\n\tvar reIsNative = RegExp('^' +\n\t funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n\t .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n\t);\n\t\n\t/** Built-in value references. */\n\tvar Symbol = root.Symbol,\n\t Uint8Array = root.Uint8Array,\n\t propertyIsEnumerable = objectProto.propertyIsEnumerable,\n\t splice = arrayProto.splice;\n\t\n\t/* Built-in method references for those with the same name as other `lodash` methods. */\n\tvar nativeKeys = overArg(Object.keys, Object);\n\t\n\t/* Built-in method references that are verified to be native. */\n\tvar DataView = getNative(root, 'DataView'),\n\t Map = getNative(root, 'Map'),\n\t Promise = getNative(root, 'Promise'),\n\t Set = getNative(root, 'Set'),\n\t WeakMap = getNative(root, 'WeakMap'),\n\t nativeCreate = getNative(Object, 'create');\n\t\n\t/** Used to detect maps, sets, and weakmaps. */\n\tvar dataViewCtorString = toSource(DataView),\n\t mapCtorString = toSource(Map),\n\t promiseCtorString = toSource(Promise),\n\t setCtorString = toSource(Set),\n\t weakMapCtorString = toSource(WeakMap);\n\t\n\t/** Used to convert symbols to primitives and strings. */\n\tvar symbolProto = Symbol ? Symbol.prototype : undefined,\n\t symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\t\n\t/**\n\t * Creates a hash object.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction Hash(entries) {\n\t var index = -1,\n\t length = entries ? entries.length : 0;\n\t\n\t this.clear();\n\t while (++index < length) {\n\t var entry = entries[index];\n\t this.set(entry[0], entry[1]);\n\t }\n\t}\n\t\n\t/**\n\t * Removes all key-value entries from the hash.\n\t *\n\t * @private\n\t * @name clear\n\t * @memberOf Hash\n\t */\n\tfunction hashClear() {\n\t this.__data__ = nativeCreate ? nativeCreate(null) : {};\n\t}\n\t\n\t/**\n\t * Removes `key` and its value from the hash.\n\t *\n\t * @private\n\t * @name delete\n\t * @memberOf Hash\n\t * @param {Object} hash The hash to modify.\n\t * @param {string} key The key of the value to remove.\n\t * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n\t */\n\tfunction hashDelete(key) {\n\t return this.has(key) && delete this.__data__[key];\n\t}\n\t\n\t/**\n\t * Gets the hash value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf Hash\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction hashGet(key) {\n\t var data = this.__data__;\n\t if (nativeCreate) {\n\t var result = data[key];\n\t return result === HASH_UNDEFINED ? undefined : result;\n\t }\n\t return hasOwnProperty.call(data, key) ? data[key] : undefined;\n\t}\n\t\n\t/**\n\t * Checks if a hash value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf Hash\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction hashHas(key) {\n\t var data = this.__data__;\n\t return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n\t}\n\t\n\t/**\n\t * Sets the hash `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf Hash\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the hash instance.\n\t */\n\tfunction hashSet(key, value) {\n\t var data = this.__data__;\n\t data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n\t return this;\n\t}\n\t\n\t// Add methods to `Hash`.\n\tHash.prototype.clear = hashClear;\n\tHash.prototype['delete'] = hashDelete;\n\tHash.prototype.get = hashGet;\n\tHash.prototype.has = hashHas;\n\tHash.prototype.set = hashSet;\n\t\n\t/**\n\t * Creates an list cache object.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction ListCache(entries) {\n\t var index = -1,\n\t length = entries ? entries.length : 0;\n\t\n\t this.clear();\n\t while (++index < length) {\n\t var entry = entries[index];\n\t this.set(entry[0], entry[1]);\n\t }\n\t}\n\t\n\t/**\n\t * Removes all key-value entries from the list cache.\n\t *\n\t * @private\n\t * @name clear\n\t * @memberOf ListCache\n\t */\n\tfunction listCacheClear() {\n\t this.__data__ = [];\n\t}\n\t\n\t/**\n\t * Removes `key` and its value from the list cache.\n\t *\n\t * @private\n\t * @name delete\n\t * @memberOf ListCache\n\t * @param {string} key The key of the value to remove.\n\t * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n\t */\n\tfunction listCacheDelete(key) {\n\t var data = this.__data__,\n\t index = assocIndexOf(data, key);\n\t\n\t if (index < 0) {\n\t return false;\n\t }\n\t var lastIndex = data.length - 1;\n\t if (index == lastIndex) {\n\t data.pop();\n\t } else {\n\t splice.call(data, index, 1);\n\t }\n\t return true;\n\t}\n\t\n\t/**\n\t * Gets the list cache value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf ListCache\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction listCacheGet(key) {\n\t var data = this.__data__,\n\t index = assocIndexOf(data, key);\n\t\n\t return index < 0 ? undefined : data[index][1];\n\t}\n\t\n\t/**\n\t * Checks if a list cache value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf ListCache\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction listCacheHas(key) {\n\t return assocIndexOf(this.__data__, key) > -1;\n\t}\n\t\n\t/**\n\t * Sets the list cache `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf ListCache\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the list cache instance.\n\t */\n\tfunction listCacheSet(key, value) {\n\t var data = this.__data__,\n\t index = assocIndexOf(data, key);\n\t\n\t if (index < 0) {\n\t data.push([key, value]);\n\t } else {\n\t data[index][1] = value;\n\t }\n\t return this;\n\t}\n\t\n\t// Add methods to `ListCache`.\n\tListCache.prototype.clear = listCacheClear;\n\tListCache.prototype['delete'] = listCacheDelete;\n\tListCache.prototype.get = listCacheGet;\n\tListCache.prototype.has = listCacheHas;\n\tListCache.prototype.set = listCacheSet;\n\t\n\t/**\n\t * Creates a map cache object to store key-value pairs.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction MapCache(entries) {\n\t var index = -1,\n\t length = entries ? entries.length : 0;\n\t\n\t this.clear();\n\t while (++index < length) {\n\t var entry = entries[index];\n\t this.set(entry[0], entry[1]);\n\t }\n\t}\n\t\n\t/**\n\t * Removes all key-value entries from the map.\n\t *\n\t * @private\n\t * @name clear\n\t * @memberOf MapCache\n\t */\n\tfunction mapCacheClear() {\n\t this.__data__ = {\n\t 'hash': new Hash,\n\t 'map': new (Map || ListCache),\n\t 'string': new Hash\n\t };\n\t}\n\t\n\t/**\n\t * Removes `key` and its value from the map.\n\t *\n\t * @private\n\t * @name delete\n\t * @memberOf MapCache\n\t * @param {string} key The key of the value to remove.\n\t * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n\t */\n\tfunction mapCacheDelete(key) {\n\t return getMapData(this, key)['delete'](key);\n\t}\n\t\n\t/**\n\t * Gets the map value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf MapCache\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction mapCacheGet(key) {\n\t return getMapData(this, key).get(key);\n\t}\n\t\n\t/**\n\t * Checks if a map value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf MapCache\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction mapCacheHas(key) {\n\t return getMapData(this, key).has(key);\n\t}\n\t\n\t/**\n\t * Sets the map `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf MapCache\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the map cache instance.\n\t */\n\tfunction mapCacheSet(key, value) {\n\t getMapData(this, key).set(key, value);\n\t return this;\n\t}\n\t\n\t// Add methods to `MapCache`.\n\tMapCache.prototype.clear = mapCacheClear;\n\tMapCache.prototype['delete'] = mapCacheDelete;\n\tMapCache.prototype.get = mapCacheGet;\n\tMapCache.prototype.has = mapCacheHas;\n\tMapCache.prototype.set = mapCacheSet;\n\t\n\t/**\n\t *\n\t * Creates an array cache object to store unique values.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [values] The values to cache.\n\t */\n\tfunction SetCache(values) {\n\t var index = -1,\n\t length = values ? values.length : 0;\n\t\n\t this.__data__ = new MapCache;\n\t while (++index < length) {\n\t this.add(values[index]);\n\t }\n\t}\n\t\n\t/**\n\t * Adds `value` to the array cache.\n\t *\n\t * @private\n\t * @name add\n\t * @memberOf SetCache\n\t * @alias push\n\t * @param {*} value The value to cache.\n\t * @returns {Object} Returns the cache instance.\n\t */\n\tfunction setCacheAdd(value) {\n\t this.__data__.set(value, HASH_UNDEFINED);\n\t return this;\n\t}\n\t\n\t/**\n\t * Checks if `value` is in the array cache.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf SetCache\n\t * @param {*} value The value to search for.\n\t * @returns {number} Returns `true` if `value` is found, else `false`.\n\t */\n\tfunction setCacheHas(value) {\n\t return this.__data__.has(value);\n\t}\n\t\n\t// Add methods to `SetCache`.\n\tSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n\tSetCache.prototype.has = setCacheHas;\n\t\n\t/**\n\t * Creates a stack cache object to store key-value pairs.\n\t *\n\t * @private\n\t * @constructor\n\t * @param {Array} [entries] The key-value pairs to cache.\n\t */\n\tfunction Stack(entries) {\n\t this.__data__ = new ListCache(entries);\n\t}\n\t\n\t/**\n\t * Removes all key-value entries from the stack.\n\t *\n\t * @private\n\t * @name clear\n\t * @memberOf Stack\n\t */\n\tfunction stackClear() {\n\t this.__data__ = new ListCache;\n\t}\n\t\n\t/**\n\t * Removes `key` and its value from the stack.\n\t *\n\t * @private\n\t * @name delete\n\t * @memberOf Stack\n\t * @param {string} key The key of the value to remove.\n\t * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n\t */\n\tfunction stackDelete(key) {\n\t return this.__data__['delete'](key);\n\t}\n\t\n\t/**\n\t * Gets the stack value for `key`.\n\t *\n\t * @private\n\t * @name get\n\t * @memberOf Stack\n\t * @param {string} key The key of the value to get.\n\t * @returns {*} Returns the entry value.\n\t */\n\tfunction stackGet(key) {\n\t return this.__data__.get(key);\n\t}\n\t\n\t/**\n\t * Checks if a stack value for `key` exists.\n\t *\n\t * @private\n\t * @name has\n\t * @memberOf Stack\n\t * @param {string} key The key of the entry to check.\n\t * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n\t */\n\tfunction stackHas(key) {\n\t return this.__data__.has(key);\n\t}\n\t\n\t/**\n\t * Sets the stack `key` to `value`.\n\t *\n\t * @private\n\t * @name set\n\t * @memberOf Stack\n\t * @param {string} key The key of the value to set.\n\t * @param {*} value The value to set.\n\t * @returns {Object} Returns the stack cache instance.\n\t */\n\tfunction stackSet(key, value) {\n\t var cache = this.__data__;\n\t if (cache instanceof ListCache) {\n\t var pairs = cache.__data__;\n\t if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n\t pairs.push([key, value]);\n\t return this;\n\t }\n\t cache = this.__data__ = new MapCache(pairs);\n\t }\n\t cache.set(key, value);\n\t return this;\n\t}\n\t\n\t// Add methods to `Stack`.\n\tStack.prototype.clear = stackClear;\n\tStack.prototype['delete'] = stackDelete;\n\tStack.prototype.get = stackGet;\n\tStack.prototype.has = stackHas;\n\tStack.prototype.set = stackSet;\n\t\n\t/**\n\t * Creates an array of the enumerable property names of the array-like `value`.\n\t *\n\t * @private\n\t * @param {*} value The value to query.\n\t * @param {boolean} inherited Specify returning inherited property names.\n\t * @returns {Array} Returns the array of property names.\n\t */\n\tfunction arrayLikeKeys(value, inherited) {\n\t // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n\t // Safari 9 makes `arguments.length` enumerable in strict mode.\n\t var result = (isArray(value) || isArguments(value))\n\t ? baseTimes(value.length, String)\n\t : [];\n\t\n\t var length = result.length,\n\t skipIndexes = !!length;\n\t\n\t for (var key in value) {\n\t if ((inherited || hasOwnProperty.call(value, key)) &&\n\t !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n\t result.push(key);\n\t }\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * Gets the index at which the `key` is found in `array` of key-value pairs.\n\t *\n\t * @private\n\t * @param {Array} array The array to inspect.\n\t * @param {*} key The key to search for.\n\t * @returns {number} Returns the index of the matched value, else `-1`.\n\t */\n\tfunction assocIndexOf(array, key) {\n\t var length = array.length;\n\t while (length--) {\n\t if (eq(array[length][0], key)) {\n\t return length;\n\t }\n\t }\n\t return -1;\n\t}\n\t\n\t/**\n\t * The base implementation of `getTag`.\n\t *\n\t * @private\n\t * @param {*} value The value to query.\n\t * @returns {string} Returns the `toStringTag`.\n\t */\n\tfunction baseGetTag(value) {\n\t return objectToString.call(value);\n\t}\n\t\n\t/**\n\t * The base implementation of `_.isEqual` which supports partial comparisons\n\t * and tracks traversed objects.\n\t *\n\t * @private\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @param {Function} [customizer] The function to customize comparisons.\n\t * @param {boolean} [bitmask] The bitmask of comparison flags.\n\t * The bitmask may be composed of the following flags:\n\t * 1 - Unordered comparison\n\t * 2 - Partial comparison\n\t * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n\t * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n\t */\n\tfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n\t if (value === other) {\n\t return true;\n\t }\n\t if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n\t return value !== value && other !== other;\n\t }\n\t return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n\t}\n\t\n\t/**\n\t * A specialized version of `baseIsEqual` for arrays and objects which performs\n\t * deep comparisons and tracks traversed objects enabling objects with circular\n\t * references to be compared.\n\t *\n\t * @private\n\t * @param {Object} object The object to compare.\n\t * @param {Object} other The other object to compare.\n\t * @param {Function} equalFunc The function to determine equivalents of values.\n\t * @param {Function} [customizer] The function to customize comparisons.\n\t * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n\t * for more details.\n\t * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n\t * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n\t */\n\tfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n\t var objIsArr = isArray(object),\n\t othIsArr = isArray(other),\n\t objTag = arrayTag,\n\t othTag = arrayTag;\n\t\n\t if (!objIsArr) {\n\t objTag = getTag(object);\n\t objTag = objTag == argsTag ? objectTag : objTag;\n\t }\n\t if (!othIsArr) {\n\t othTag = getTag(other);\n\t othTag = othTag == argsTag ? objectTag : othTag;\n\t }\n\t var objIsObj = objTag == objectTag && !isHostObject(object),\n\t othIsObj = othTag == objectTag && !isHostObject(other),\n\t isSameTag = objTag == othTag;\n\t\n\t if (isSameTag && !objIsObj) {\n\t stack || (stack = new Stack);\n\t return (objIsArr || isTypedArray(object))\n\t ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n\t : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n\t }\n\t if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n\t var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n\t othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\t\n\t if (objIsWrapped || othIsWrapped) {\n\t var objUnwrapped = objIsWrapped ? object.value() : object,\n\t othUnwrapped = othIsWrapped ? other.value() : other;\n\t\n\t stack || (stack = new Stack);\n\t return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n\t }\n\t }\n\t if (!isSameTag) {\n\t return false;\n\t }\n\t stack || (stack = new Stack);\n\t return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n\t}\n\t\n\t/**\n\t * The base implementation of `_.isNative` without bad shim checks.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a native function,\n\t * else `false`.\n\t */\n\tfunction baseIsNative(value) {\n\t if (!isObject(value) || isMasked(value)) {\n\t return false;\n\t }\n\t var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n\t return pattern.test(toSource(value));\n\t}\n\t\n\t/**\n\t * The base implementation of `_.isTypedArray` without Node.js optimizations.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n\t */\n\tfunction baseIsTypedArray(value) {\n\t return isObjectLike(value) &&\n\t isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n\t}\n\t\n\t/**\n\t * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property names.\n\t */\n\tfunction baseKeys(object) {\n\t if (!isPrototype(object)) {\n\t return nativeKeys(object);\n\t }\n\t var result = [];\n\t for (var key in Object(object)) {\n\t if (hasOwnProperty.call(object, key) && key != 'constructor') {\n\t result.push(key);\n\t }\n\t }\n\t return result;\n\t}\n\t\n\t/**\n\t * A specialized version of `baseIsEqualDeep` for arrays with support for\n\t * partial deep comparisons.\n\t *\n\t * @private\n\t * @param {Array} array The array to compare.\n\t * @param {Array} other The other array to compare.\n\t * @param {Function} equalFunc The function to determine equivalents of values.\n\t * @param {Function} customizer The function to customize comparisons.\n\t * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n\t * for more details.\n\t * @param {Object} stack Tracks traversed `array` and `other` objects.\n\t * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n\t */\n\tfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n\t var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n\t arrLength = array.length,\n\t othLength = other.length;\n\t\n\t if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n\t return false;\n\t }\n\t // Assume cyclic values are equal.\n\t var stacked = stack.get(array);\n\t if (stacked && stack.get(other)) {\n\t return stacked == other;\n\t }\n\t var index = -1,\n\t result = true,\n\t seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\t\n\t stack.set(array, other);\n\t stack.set(other, array);\n\t\n\t // Ignore non-index properties.\n\t while (++index < arrLength) {\n\t var arrValue = array[index],\n\t othValue = other[index];\n\t\n\t if (customizer) {\n\t var compared = isPartial\n\t ? customizer(othValue, arrValue, index, other, array, stack)\n\t : customizer(arrValue, othValue, index, array, other, stack);\n\t }\n\t if (compared !== undefined) {\n\t if (compared) {\n\t continue;\n\t }\n\t result = false;\n\t break;\n\t }\n\t // Recursively compare arrays (susceptible to call stack limits).\n\t if (seen) {\n\t if (!arraySome(other, function(othValue, othIndex) {\n\t if (!seen.has(othIndex) &&\n\t (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n\t return seen.add(othIndex);\n\t }\n\t })) {\n\t result = false;\n\t break;\n\t }\n\t } else if (!(\n\t arrValue === othValue ||\n\t equalFunc(arrValue, othValue, customizer, bitmask, stack)\n\t )) {\n\t result = false;\n\t break;\n\t }\n\t }\n\t stack['delete'](array);\n\t stack['delete'](other);\n\t return result;\n\t}\n\t\n\t/**\n\t * A specialized version of `baseIsEqualDeep` for comparing objects of\n\t * the same `toStringTag`.\n\t *\n\t * **Note:** This function only supports comparing values with tags of\n\t * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n\t *\n\t * @private\n\t * @param {Object} object The object to compare.\n\t * @param {Object} other The other object to compare.\n\t * @param {string} tag The `toStringTag` of the objects to compare.\n\t * @param {Function} equalFunc The function to determine equivalents of values.\n\t * @param {Function} customizer The function to customize comparisons.\n\t * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n\t * for more details.\n\t * @param {Object} stack Tracks traversed `object` and `other` objects.\n\t * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n\t */\n\tfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n\t switch (tag) {\n\t case dataViewTag:\n\t if ((object.byteLength != other.byteLength) ||\n\t (object.byteOffset != other.byteOffset)) {\n\t return false;\n\t }\n\t object = object.buffer;\n\t other = other.buffer;\n\t\n\t case arrayBufferTag:\n\t if ((object.byteLength != other.byteLength) ||\n\t !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n\t return false;\n\t }\n\t return true;\n\t\n\t case boolTag:\n\t case dateTag:\n\t case numberTag:\n\t // Coerce booleans to `1` or `0` and dates to milliseconds.\n\t // Invalid dates are coerced to `NaN`.\n\t return eq(+object, +other);\n\t\n\t case errorTag:\n\t return object.name == other.name && object.message == other.message;\n\t\n\t case regexpTag:\n\t case stringTag:\n\t // Coerce regexes to strings and treat strings, primitives and objects,\n\t // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n\t // for more details.\n\t return object == (other + '');\n\t\n\t case mapTag:\n\t var convert = mapToArray;\n\t\n\t case setTag:\n\t var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n\t convert || (convert = setToArray);\n\t\n\t if (object.size != other.size && !isPartial) {\n\t return false;\n\t }\n\t // Assume cyclic values are equal.\n\t var stacked = stack.get(object);\n\t if (stacked) {\n\t return stacked == other;\n\t }\n\t bitmask |= UNORDERED_COMPARE_FLAG;\n\t\n\t // Recursively compare objects (susceptible to call stack limits).\n\t stack.set(object, other);\n\t var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n\t stack['delete'](object);\n\t return result;\n\t\n\t case symbolTag:\n\t if (symbolValueOf) {\n\t return symbolValueOf.call(object) == symbolValueOf.call(other);\n\t }\n\t }\n\t return false;\n\t}\n\t\n\t/**\n\t * A specialized version of `baseIsEqualDeep` for objects with support for\n\t * partial deep comparisons.\n\t *\n\t * @private\n\t * @param {Object} object The object to compare.\n\t * @param {Object} other The other object to compare.\n\t * @param {Function} equalFunc The function to determine equivalents of values.\n\t * @param {Function} customizer The function to customize comparisons.\n\t * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n\t * for more details.\n\t * @param {Object} stack Tracks traversed `object` and `other` objects.\n\t * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n\t */\n\tfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n\t var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n\t objProps = keys(object),\n\t objLength = objProps.length,\n\t othProps = keys(other),\n\t othLength = othProps.length;\n\t\n\t if (objLength != othLength && !isPartial) {\n\t return false;\n\t }\n\t var index = objLength;\n\t while (index--) {\n\t var key = objProps[index];\n\t if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n\t return false;\n\t }\n\t }\n\t // Assume cyclic values are equal.\n\t var stacked = stack.get(object);\n\t if (stacked && stack.get(other)) {\n\t return stacked == other;\n\t }\n\t var result = true;\n\t stack.set(object, other);\n\t stack.set(other, object);\n\t\n\t var skipCtor = isPartial;\n\t while (++index < objLength) {\n\t key = objProps[index];\n\t var objValue = object[key],\n\t othValue = other[key];\n\t\n\t if (customizer) {\n\t var compared = isPartial\n\t ? customizer(othValue, objValue, key, other, object, stack)\n\t : customizer(objValue, othValue, key, object, other, stack);\n\t }\n\t // Recursively compare objects (susceptible to call stack limits).\n\t if (!(compared === undefined\n\t ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n\t : compared\n\t )) {\n\t result = false;\n\t break;\n\t }\n\t skipCtor || (skipCtor = key == 'constructor');\n\t }\n\t if (result && !skipCtor) {\n\t var objCtor = object.constructor,\n\t othCtor = other.constructor;\n\t\n\t // Non `Object` object instances with different constructors are not equal.\n\t if (objCtor != othCtor &&\n\t ('constructor' in object && 'constructor' in other) &&\n\t !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n\t typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n\t result = false;\n\t }\n\t }\n\t stack['delete'](object);\n\t stack['delete'](other);\n\t return result;\n\t}\n\t\n\t/**\n\t * Gets the data for `map`.\n\t *\n\t * @private\n\t * @param {Object} map The map to query.\n\t * @param {string} key The reference key.\n\t * @returns {*} Returns the map data.\n\t */\n\tfunction getMapData(map, key) {\n\t var data = map.__data__;\n\t return isKeyable(key)\n\t ? data[typeof key == 'string' ? 'string' : 'hash']\n\t : data.map;\n\t}\n\t\n\t/**\n\t * Gets the native function at `key` of `object`.\n\t *\n\t * @private\n\t * @param {Object} object The object to query.\n\t * @param {string} key The key of the method to get.\n\t * @returns {*} Returns the function if it's native, else `undefined`.\n\t */\n\tfunction getNative(object, key) {\n\t var value = getValue(object, key);\n\t return baseIsNative(value) ? value : undefined;\n\t}\n\t\n\t/**\n\t * Gets the `toStringTag` of `value`.\n\t *\n\t * @private\n\t * @param {*} value The value to query.\n\t * @returns {string} Returns the `toStringTag`.\n\t */\n\tvar getTag = baseGetTag;\n\t\n\t// Fallback for data views, maps, sets, and weak maps in IE 11,\n\t// for data views in Edge < 14, and promises in Node.js.\n\tif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n\t (Map && getTag(new Map) != mapTag) ||\n\t (Promise && getTag(Promise.resolve()) != promiseTag) ||\n\t (Set && getTag(new Set) != setTag) ||\n\t (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n\t getTag = function(value) {\n\t var result = objectToString.call(value),\n\t Ctor = result == objectTag ? value.constructor : undefined,\n\t ctorString = Ctor ? toSource(Ctor) : undefined;\n\t\n\t if (ctorString) {\n\t switch (ctorString) {\n\t case dataViewCtorString: return dataViewTag;\n\t case mapCtorString: return mapTag;\n\t case promiseCtorString: return promiseTag;\n\t case setCtorString: return setTag;\n\t case weakMapCtorString: return weakMapTag;\n\t }\n\t }\n\t return result;\n\t };\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like index.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n\t * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n\t */\n\tfunction isIndex(value, length) {\n\t length = length == null ? MAX_SAFE_INTEGER : length;\n\t return !!length &&\n\t (typeof value == 'number' || reIsUint.test(value)) &&\n\t (value > -1 && value % 1 == 0 && value < length);\n\t}\n\t\n\t/**\n\t * Checks if `value` is suitable for use as unique object key.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n\t */\n\tfunction isKeyable(value) {\n\t var type = typeof value;\n\t return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n\t ? (value !== '__proto__')\n\t : (value === null);\n\t}\n\t\n\t/**\n\t * Checks if `func` has its source masked.\n\t *\n\t * @private\n\t * @param {Function} func The function to check.\n\t * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n\t */\n\tfunction isMasked(func) {\n\t return !!maskSrcKey && (maskSrcKey in func);\n\t}\n\t\n\t/**\n\t * Checks if `value` is likely a prototype object.\n\t *\n\t * @private\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n\t */\n\tfunction isPrototype(value) {\n\t var Ctor = value && value.constructor,\n\t proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\t\n\t return value === proto;\n\t}\n\t\n\t/**\n\t * Converts `func` to its source code.\n\t *\n\t * @private\n\t * @param {Function} func The function to process.\n\t * @returns {string} Returns the source code.\n\t */\n\tfunction toSource(func) {\n\t if (func != null) {\n\t try {\n\t return funcToString.call(func);\n\t } catch (e) {}\n\t try {\n\t return (func + '');\n\t } catch (e) {}\n\t }\n\t return '';\n\t}\n\t\n\t/**\n\t * Performs a\n\t * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n\t * comparison between two values to determine if they are equivalent.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n\t * @example\n\t *\n\t * var object = { 'a': 1 };\n\t * var other = { 'a': 1 };\n\t *\n\t * _.eq(object, object);\n\t * // => true\n\t *\n\t * _.eq(object, other);\n\t * // => false\n\t *\n\t * _.eq('a', 'a');\n\t * // => true\n\t *\n\t * _.eq('a', Object('a'));\n\t * // => false\n\t *\n\t * _.eq(NaN, NaN);\n\t * // => true\n\t */\n\tfunction eq(value, other) {\n\t return value === other || (value !== value && other !== other);\n\t}\n\t\n\t/**\n\t * Checks if `value` is likely an `arguments` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.isArguments(function() { return arguments; }());\n\t * // => true\n\t *\n\t * _.isArguments([1, 2, 3]);\n\t * // => false\n\t */\n\tfunction isArguments(value) {\n\t // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n\t return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n\t (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n\t}\n\t\n\t/**\n\t * Checks if `value` is classified as an `Array` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n\t * @example\n\t *\n\t * _.isArray([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArray(document.body.children);\n\t * // => false\n\t *\n\t * _.isArray('abc');\n\t * // => false\n\t *\n\t * _.isArray(_.noop);\n\t * // => false\n\t */\n\tvar isArray = Array.isArray;\n\t\n\t/**\n\t * Checks if `value` is array-like. A value is considered array-like if it's\n\t * not a function and has a `value.length` that's an integer greater than or\n\t * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n\t * @example\n\t *\n\t * _.isArrayLike([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArrayLike(document.body.children);\n\t * // => true\n\t *\n\t * _.isArrayLike('abc');\n\t * // => true\n\t *\n\t * _.isArrayLike(_.noop);\n\t * // => false\n\t */\n\tfunction isArrayLike(value) {\n\t return value != null && isLength(value.length) && !isFunction(value);\n\t}\n\t\n\t/**\n\t * This method is like `_.isArrayLike` except that it also checks if `value`\n\t * is an object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an array-like object,\n\t * else `false`.\n\t * @example\n\t *\n\t * _.isArrayLikeObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isArrayLikeObject(document.body.children);\n\t * // => true\n\t *\n\t * _.isArrayLikeObject('abc');\n\t * // => false\n\t *\n\t * _.isArrayLikeObject(_.noop);\n\t * // => false\n\t */\n\tfunction isArrayLikeObject(value) {\n\t return isObjectLike(value) && isArrayLike(value);\n\t}\n\t\n\t/**\n\t * Performs a deep comparison between two values to determine if they are\n\t * equivalent.\n\t *\n\t * **Note:** This method supports comparing arrays, array buffers, booleans,\n\t * date objects, error objects, maps, numbers, `Object` objects, regexes,\n\t * sets, strings, symbols, and typed arrays. `Object` objects are compared\n\t * by their own, not inherited, enumerable properties. Functions and DOM\n\t * nodes are **not** supported.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to compare.\n\t * @param {*} other The other value to compare.\n\t * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n\t * @example\n\t *\n\t * var object = { 'a': 1 };\n\t * var other = { 'a': 1 };\n\t *\n\t * _.isEqual(object, other);\n\t * // => true\n\t *\n\t * object === other;\n\t * // => false\n\t */\n\tfunction isEqual(value, other) {\n\t return baseIsEqual(value, other);\n\t}\n\t\n\t/**\n\t * Checks if `value` is classified as a `Function` object.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n\t * @example\n\t *\n\t * _.isFunction(_);\n\t * // => true\n\t *\n\t * _.isFunction(/abc/);\n\t * // => false\n\t */\n\tfunction isFunction(value) {\n\t // The use of `Object#toString` avoids issues with the `typeof` operator\n\t // in Safari 8-9 which returns 'object' for typed array and other constructors.\n\t var tag = isObject(value) ? objectToString.call(value) : '';\n\t return tag == funcTag || tag == genTag;\n\t}\n\t\n\t/**\n\t * Checks if `value` is a valid array-like length.\n\t *\n\t * **Note:** This method is loosely based on\n\t * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n\t * @example\n\t *\n\t * _.isLength(3);\n\t * // => true\n\t *\n\t * _.isLength(Number.MIN_VALUE);\n\t * // => false\n\t *\n\t * _.isLength(Infinity);\n\t * // => false\n\t *\n\t * _.isLength('3');\n\t * // => false\n\t */\n\tfunction isLength(value) {\n\t return typeof value == 'number' &&\n\t value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n\t}\n\t\n\t/**\n\t * Checks if `value` is the\n\t * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n\t * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 0.1.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n\t * @example\n\t *\n\t * _.isObject({});\n\t * // => true\n\t *\n\t * _.isObject([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObject(_.noop);\n\t * // => true\n\t *\n\t * _.isObject(null);\n\t * // => false\n\t */\n\tfunction isObject(value) {\n\t var type = typeof value;\n\t return !!value && (type == 'object' || type == 'function');\n\t}\n\t\n\t/**\n\t * Checks if `value` is object-like. A value is object-like if it's not `null`\n\t * and has a `typeof` result of \"object\".\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 4.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n\t * @example\n\t *\n\t * _.isObjectLike({});\n\t * // => true\n\t *\n\t * _.isObjectLike([1, 2, 3]);\n\t * // => true\n\t *\n\t * _.isObjectLike(_.noop);\n\t * // => false\n\t *\n\t * _.isObjectLike(null);\n\t * // => false\n\t */\n\tfunction isObjectLike(value) {\n\t return !!value && typeof value == 'object';\n\t}\n\t\n\t/**\n\t * Checks if `value` is classified as a typed array.\n\t *\n\t * @static\n\t * @memberOf _\n\t * @since 3.0.0\n\t * @category Lang\n\t * @param {*} value The value to check.\n\t * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n\t * @example\n\t *\n\t * _.isTypedArray(new Uint8Array);\n\t * // => true\n\t *\n\t * _.isTypedArray([]);\n\t * // => false\n\t */\n\tvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\t\n\t/**\n\t * Creates an array of the own enumerable property names of `object`.\n\t *\n\t * **Note:** Non-object values are coerced to objects. See the\n\t * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n\t * for more details.\n\t *\n\t * @static\n\t * @since 0.1.0\n\t * @memberOf _\n\t * @category Object\n\t * @param {Object} object The object to query.\n\t * @returns {Array} Returns the array of property names.\n\t * @example\n\t *\n\t * function Foo() {\n\t * this.a = 1;\n\t * this.b = 2;\n\t * }\n\t *\n\t * Foo.prototype.c = 3;\n\t *\n\t * _.keys(new Foo);\n\t * // => ['a', 'b'] (iteration order is not guaranteed)\n\t *\n\t * _.keys('hi');\n\t * // => ['0', '1']\n\t */\n\tfunction keys(object) {\n\t return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n\t}\n\t\n\tmodule.exports = isEqual;\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(67)(module)))\n\n/***/ },\n/* 67 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(module) {\r\n\t\tif(!module.webpackPolyfill) {\r\n\t\t\tmodule.deprecate = function() {};\r\n\t\t\tmodule.paths = [];\r\n\t\t\t// module.parent = undefined by default\r\n\t\t\tmodule.children = [];\r\n\t\t\tmodule.webpackPolyfill = 1;\r\n\t\t}\r\n\t\treturn module;\r\n\t}\r\n\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** ReactMDL.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 1bd8a2d13b0cb02e642b\n **/","export { default as mdlUpgrade } from './utils/mdlUpgrade';\nexport { default as MDLComponent } from './utils/MDLComponent';\n\n// components\nexport { default as Badge } from './Badge';\nexport { default as Button } from './Button';\nexport {\n Card, CardTitle, CardActions,\n CardMedia, CardText, CardMenu\n} from './Card';\nexport { default as Checkbox } from './Checkbox';\nexport { Chip, ChipContact } from './Chip';\nexport { default as DataTable, Table, TableHeader } from './DataTable';\nexport {\n Dialog, DialogTitle, DialogContent,\n DialogActions\n} from './Dialog';\nexport { default as FABButton } from './FABButton';\nexport {\n Footer, FooterSection, FooterDropDownSection,\n FooterLinkList\n} from './Footer';\nexport { Grid, Cell } from './Grid';\nexport { default as Icon } from './Icon';\nexport { default as IconButton } from './IconButton';\nexport { default as IconToggle } from './IconToggle';\nexport {\n Layout, Header, Drawer,\n HeaderRow, HeaderTabs, Spacer,\n Navigation, Content\n} from './Layout';\nexport {\n List, ListItem,\n ListItemAction, ListItemContent\n} from './List';\nexport { default as Menu, MenuItem } from './Menu';\nexport { default as ProgressBar } from './ProgressBar';\nexport { default as Radio } from './Radio';\nexport { default as RadioGroup } from './RadioGroup';\nexport { default as Slider } from './Slider';\nexport { default as Snackbar } from './Snackbar';\nexport { default as Spinner } from './Spinner';\nexport { default as Switch } from './Switch';\nexport { Tabs, Tab, TabBar } from './Tabs';\nexport { default as Textfield } from './Textfield';\nexport { default as Tooltip } from './Tooltip';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/index.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_1__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"React\",\"commonjs2\":\"react\",\"commonjs\":\"react\",\"amd\":\"react\"}\n ** module id = 1\n ** module chunks = 0\n **/","/*!\n Copyright (c) 2016 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tclasses.push(classNames.apply(null, arg));\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/classnames/index.js\n ** module id = 2\n ** module chunks = 0\n **/","import React from 'react';\nimport MDLComponent from './MDLComponent';\n\nexport default Component => {\n const render = Component.prototype.render;\n\n Component.prototype.render = function rendr() { // eslint-disable-line no-param-reassign\n const renderBound = render.bind(this);\n return {renderBound()};\n };\n\n return Component;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/mdlUpgrade.js\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_4__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"ReactDOM\",\"commonjs2\":\"react-dom\",\"commonjs\":\"react-dom\",\"amd\":\"react-dom\"}\n ** module id = 4\n ** module chunks = 0\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nexport default (displayName, defaultClassName, element = 'div') => {\n const fn = (props) => {\n const { className, children, ...otherProps } = props;\n\n return React.createElement(element, {\n className: classNames(defaultClassName, className),\n ...otherProps\n }, children);\n };\n\n fn.displayName = displayName;\n fn.propTypes = {\n className: PropTypes.string\n };\n\n return fn;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/basicClassCreator.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nconst propTypes = {\n className: PropTypes.string,\n name: PropTypes.string.isRequired\n};\n\nconst Icon = (props) => {\n const { className, name, ...otherProps } = props;\n const classes = classNames('material-icons', className);\n\n return {name};\n};\n\nIcon.propTypes = propTypes;\n\nexport default Icon;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Icon/index.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport Tooltip from '../Tooltip';\n\nconst propTypes = {\n cellFormatter: PropTypes.func, // Used by the Table component to format the cell content for this \"column\"\n className: PropTypes.string,\n name: PropTypes.string.isRequired,\n numeric: PropTypes.bool,\n onClick: PropTypes.func,\n nosort: PropTypes.bool,\n sortFn: PropTypes.func, // Used by the Sortable component\n tooltip: PropTypes.node\n};\n\nconst TableHeader = props => {\n const { className, name, numeric, onClick,\n nosort, tooltip, children, ...otherProps } = props;\n\n // remove unwanted props\n // see https://github.com/Hacker0x01/react-datepicker/issues/517#issuecomment-230171426\n delete otherProps.cellFormatter;\n delete otherProps.sortFn;\n\n const classes = classNames({\n 'mdl-data-table__cell--non-numeric': !numeric\n }, className);\n\n const clickFn = !nosort && onClick\n ? (e) => onClick(e, name)\n : null;\n\n return (\n \n {!!tooltip ? (\n {children}\n ) : children}\n | \n );\n};\n\nTableHeader.propTypes = propTypes;\n\nexport default TableHeader;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/DataTable/TableHeader.js\n **/","import React from 'react';\n\nexport default (children, props) =>\n React.Children.map(children, child => {\n if (!child) return child;\n const newProps = typeof props === 'function' ? props(child) : props;\n return React.cloneElement(child, newProps);\n });\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/cloneChildren.js\n **/","const values = [2, 3, 4, 6, 8, 16, 24];\nexport default values.map(v => `mdl-shadow--${v}dp`);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/shadows.js\n **/","module.exports = clamp\n\nfunction clamp(value, min, max) {\n return min < max\n ? (value < min ? min : value > max ? max : value)\n : (value < max ? max : value > min ? min : value)\n}\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/clamp/index.js\n ** module id = 10\n ** module chunks = 0\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport mdlUpgrade from './utils/mdlUpgrade';\n\nconst propTypes = {\n accent: PropTypes.bool,\n className: PropTypes.string,\n colored: PropTypes.bool,\n component: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element,\n PropTypes.func\n ]),\n href: PropTypes.string,\n primary: PropTypes.bool,\n raised: PropTypes.bool,\n ripple: PropTypes.bool\n};\n\n// eslint-disable-next-line react/prefer-stateless-function\nclass Button extends React.Component {\n render() {\n const { accent, className, colored,\n primary, raised, ripple, component, href,\n children, ...otherProps } = this.props;\n\n const buttonClasses = classNames('mdl-button mdl-js-button', {\n 'mdl-js-ripple-effect': ripple,\n 'mdl-button--raised': raised,\n 'mdl-button--colored': colored,\n 'mdl-button--primary': primary,\n 'mdl-button--accent': accent\n }, className);\n\n return React.createElement(component || (href ? 'a' : 'button'), {\n className: buttonClasses,\n href,\n ...otherProps\n }, children);\n }\n}\n\nButton.propTypes = propTypes;\n\nexport default mdlUpgrade(Button);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Button.js\n **/","import basicClassCreator from '../utils/basicClassCreator';\n\nexport default basicClassCreator('Spacer', 'mdl-layout-spacer');\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Layout/Spacer.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nconst propTypes = {\n activeTab: PropTypes.number,\n className: PropTypes.string,\n cssPrefix: PropTypes.string.isRequired,\n onChange: PropTypes.func,\n};\n\nconst defaultProps = {\n activeTab: 0\n};\n\nclass TabBar extends React.Component {\n constructor(props) {\n super(props);\n\n this.handleClickTab = this.handleClickTab.bind(this);\n }\n\n handleClickTab(tabId) {\n if (this.props.onChange) {\n this.props.onChange(tabId);\n }\n }\n\n render() {\n const { activeTab, className, cssPrefix,\n children, ...otherProps } = this.props;\n\n const classes = classNames({\n [`${cssPrefix}__tab-bar`]: true\n }, className);\n\n return (\n \n {React.Children.map(children, (child, tabId) =>\n React.cloneElement(child, {\n cssPrefix,\n tabId,\n active: tabId === activeTab,\n onTabClick: this.handleClickTab,\n href: '#react-mdl-tabs-hack',\n })\n )}\n \n
\n );\n }\n}\n\nTabBar.propTypes = propTypes;\nTabBar.defaultProps = defaultProps;\n\nexport default TabBar;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Tabs/TabBar.js\n **/","import { Children, Component } from 'react';\nimport { findDOMNode } from 'react-dom';\n\nexport default class MDLComponent extends Component {\n componentDidMount() {\n window.componentHandler.upgradeElement(findDOMNode(this));\n }\n\n componentWillUnmount() {\n window.componentHandler.downgradeElements(findDOMNode(this));\n }\n\n render() {\n return Children.only(this.props.children);\n }\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/utils/MDLComponent.js\n **/","import React, { PropTypes } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport classNames from 'classnames';\nimport mdlUpgrade from './utils/mdlUpgrade';\n\nconst propTypes = {\n checked: PropTypes.bool,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n label: PropTypes.string,\n onChange: PropTypes.func,\n ripple: PropTypes.bool\n};\n\nclass Checkbox extends React.Component {\n componentDidUpdate(prevProps) {\n if (this.props.disabled !== prevProps.disabled) {\n const fnName = this.props.disabled ? 'disable' : 'enable';\n findDOMNode(this).MaterialCheckbox[fnName]();\n }\n if (this.props.checked !== prevProps.checked) {\n const fnName = this.props.checked ? 'check' : 'uncheck';\n findDOMNode(this).MaterialCheckbox[fnName]();\n }\n }\n\n render() {\n const { className, label, ripple, ...inputProps } = this.props;\n\n const classes = classNames('mdl-checkbox mdl-js-checkbox', {\n 'mdl-js-ripple-effect': ripple\n }, className);\n\n return (\n \n );\n }\n}\n\nCheckbox.propTypes = propTypes;\n\nexport default mdlUpgrade(Checkbox);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Checkbox.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport Spacer from './Spacer';\n\nconst HeaderRow = props => {\n const { className, title, children, hideSpacer, ...otherProps } = props;\n\n const classes = classNames('mdl-layout__header-row', className);\n\n return (\n \n {title && {title}}\n {title && !hideSpacer && }\n {children}\n
\n );\n};\nHeaderRow.propTypes = {\n className: PropTypes.string,\n title: PropTypes.node,\n hideSpacer: PropTypes.bool\n};\n\nexport default HeaderRow;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Layout/HeaderRow.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport TabBar from '../Tabs/TabBar';\n\nconst HeaderTabs = props => {\n const { className, ripple, children, ...otherProps } = props;\n\n const classes = classNames({\n 'mdl-js-ripple-effect': ripple\n }, className);\n\n return (\n \n {children}\n \n );\n};\nHeaderTabs.propTypes = {\n activeTab: PropTypes.number,\n className: PropTypes.string,\n onChange: PropTypes.func,\n ripple: PropTypes.bool\n};\n\nexport default HeaderTabs;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Layout/HeaderTabs.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport Icon from '../Icon';\n\nconst propTypes = {\n avatar: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element\n ]),\n children: PropTypes.node,\n className: PropTypes.string,\n icon: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element\n ]),\n subtitle: PropTypes.node,\n useBodyClass: PropTypes.bool\n};\n\nfunction createIcon(type, icon) {\n if (typeof icon === 'string') {\n return ;\n }\n return React.cloneElement(icon, { className: `mdl-list__item-${type}` });\n}\n\nconst ListItemContent = props => {\n const { avatar, children, className, icon,\n subtitle, useBodyClass, ...otherProps } = props;\n\n const classes = classNames('mdl-list__item-primary-content', className);\n const subtitleClassName = useBodyClass ? 'mdl-list__item-text-body' : 'mdl-list__item-sub-title';\n\n let iconElement = null;\n if (icon) {\n iconElement = createIcon('icon', icon);\n } else if (avatar) {\n iconElement = createIcon('avatar', avatar);\n }\n\n return (\n \n {iconElement}\n {children}\n {subtitle && {subtitle}}\n \n );\n};\n\nListItemContent.propTypes = propTypes;\n\nexport default ListItemContent;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/List/ListItemContent.js\n **/","import React, { PropTypes } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport classNames from 'classnames';\nimport mdlUpgrade from './utils/mdlUpgrade';\n\nconst propTypes = {\n checked: PropTypes.bool,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n name: PropTypes.string,\n onChange: PropTypes.func,\n ripple: PropTypes.bool,\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]).isRequired\n};\n\nclass Radio extends React.Component {\n componentDidUpdate(prevProps) {\n if (this.props.disabled !== prevProps.disabled) {\n const fnName = this.props.disabled ? 'disable' : 'enable';\n findDOMNode(this).MaterialRadio[fnName]();\n }\n if (this.props.checked !== prevProps.checked) {\n const fnName = this.props.checked ? 'check' : 'uncheck';\n findDOMNode(this).MaterialRadio[fnName]();\n }\n }\n\n render() {\n const { children, className, name, ripple, value, ...inputProps } = this.props;\n\n const classes = classNames('mdl-radio mdl-js-radio', {\n 'mdl-js-ripple-effect': ripple\n }, className);\n\n return (\n \n );\n }\n}\n\nRadio.propTypes = propTypes;\n\nexport default mdlUpgrade(Radio);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Radio.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nconst propTypes = {\n active: PropTypes.bool,\n className: PropTypes.string,\n component: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element,\n PropTypes.func\n ]),\n cssPrefix: PropTypes.string,\n onTabClick: PropTypes.func,\n style: PropTypes.object,\n tabId: PropTypes.number\n};\n\nconst defaultProps = {\n style: {}\n};\n\nconst Tab = (props) => {\n const { active, className, component, children, cssPrefix,\n onTabClick, style, tabId, ...otherProps } = props;\n\n const classes = classNames({\n [`${cssPrefix}__tab`]: true,\n 'is-active': active\n }, className);\n\n style.cursor = 'pointer';\n\n return React.createElement(component || 'a', {\n className: classes,\n onClick: () => onTabClick(tabId),\n style,\n ...otherProps\n }, children);\n};\n\nTab.propTypes = propTypes;\nTab.defaultProps = defaultProps;\n\nexport default Tab;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Tabs/Tab.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport MDLComponent from './utils/MDLComponent';\n\nconst Tooltip = (props) => {\n const { label, large, children, position, ...otherProps } = props;\n const id = Math.random().toString(36).substr(2);\n\n const newLabel = (typeof label === 'string')\n ? {label}\n : label;\n\n let element;\n if (typeof children === 'string') {\n element = {children};\n } else {\n element = React.Children.only(children);\n }\n\n return (\n \n {React.cloneElement(element, { id })}\n \n {React.cloneElement(newLabel, {\n htmlFor: id,\n className: classNames('mdl-tooltip', {\n 'mdl-tooltip--large': large,\n [`mdl-tooltip--${position}`]: typeof position !== 'undefined'\n })\n })}\n \n
\n );\n};\n\nTooltip.propTypes = {\n children: PropTypes.node.isRequired,\n label: PropTypes.node.isRequired,\n large: PropTypes.bool,\n position: PropTypes.oneOf(['left', 'right', 'top', 'bottom'])\n};\n\nexport default Tooltip;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Tooltip.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nconst propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.element,\n PropTypes.string\n ]),\n className: PropTypes.string,\n text: PropTypes.oneOfType([\n React.PropTypes.string,\n React.PropTypes.number\n ]),\n overlap: PropTypes.bool,\n noBackground: PropTypes.bool\n};\n\nconst Badge = props => {\n const { children, className, text, overlap, noBackground } = props;\n\n // No badge if no children\n // TODO: In React 15, we can return null instead\n if (!React.Children.count(children)) return ;\n\n const element = typeof children === 'string'\n ? {children}\n : React.Children.only(children);\n\n // No text -> No need of badge\n if (text === null || typeof text === 'undefined') return element;\n\n return React.cloneElement(element, {\n className: classNames(className, element.props.className, 'mdl-badge', {\n 'mdl-badge--overlap': !!overlap,\n 'mdl-badge--no-background': !!noBackground\n }),\n 'data-badge': text\n });\n};\n\nBadge.propTypes = propTypes;\n\nexport default Badge;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Badge/index.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport clamp from 'clamp';\nimport shadows from '../utils/shadows';\n\nconst propTypes = {\n className: PropTypes.string,\n shadow: PropTypes.number\n};\n\nconst Card = (props) => {\n const { className, shadow, children, ...otherProps } = props;\n\n const hasShadow = typeof shadow !== 'undefined';\n const shadowLevel = clamp(shadow || 0, 0, shadows.length - 1);\n\n const classes = classNames('mdl-card', {\n [shadows[shadowLevel]]: hasShadow\n }, className);\n\n return (\n \n {children}\n
\n );\n};\n\nCard.propTypes = propTypes;\n\nexport default Card;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Card/Card.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nconst propTypes = {\n border: PropTypes.bool,\n className: PropTypes.string\n};\n\nconst CardActions = (props) => {\n const { className, border, children, ...otherProps } = props;\n\n const classes = classNames('mdl-card__actions', {\n 'mdl-card--border': border\n }, className);\n\n return (\n \n {children}\n
\n );\n};\n\nCardActions.propTypes = propTypes;\n\nexport default CardActions;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Card/CardActions.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nconst propTypes = {\n className: PropTypes.string,\n expand: PropTypes.bool\n};\n\nconst CardTitle = props => {\n const { className, children, expand, ...otherProps } = props;\n\n const classes = classNames('mdl-card__title', {\n 'mdl-card--expand': expand\n }, className);\n\n const title = typeof children === 'string'\n ? {children}
\n : children;\n\n return (\n \n {title}\n
\n );\n};\n\nCardTitle.propTypes = propTypes;\n\nexport default CardTitle;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Card/CardTitle.js\n **/","import basicClassCreator from '../utils/basicClassCreator';\n\nexport { default as Card } from './Card';\nexport const CardText = basicClassCreator('CardText', 'mdl-card__supporting-text');\nexport const CardMenu = basicClassCreator('CardMenu', 'mdl-card__menu');\nexport { default as CardTitle } from './CardTitle';\nexport { default as CardActions } from './CardActions';\nexport const CardMedia = basicClassCreator('CardMedia', 'mdl-card__media');\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Card/index.js\n **/","import React, { PropTypes } from 'react';\nimport cx from 'classnames';\nimport basicClassCreator from '../utils/basicClassCreator';\nimport Icon from '../Icon';\n\nconst propTypes = {\n className: PropTypes.string,\n onClick: PropTypes.func,\n onClose: PropTypes.func\n};\n\nexport const ChipContact = basicClassCreator('ChipContact', 'mdl-chip__contact', 'span');\n\nexport const Chip = (props) => {\n const { className, onClick, onClose, children, ...otherProps } = props;\n\n const childrenArray = React.Children.toArray(children);\n const contactIndex = childrenArray.findIndex(c => c.type === ChipContact);\n\n const chipContent = [\n childrenArray[contactIndex],\n \n {childrenArray\n .slice(0, contactIndex)\n .concat(childrenArray.slice(contactIndex + 1))\n }\n ,\n onClose && (\n \n )\n ];\n\n const elt = onClick ? 'button' : 'span';\n\n return React.createElement(elt, {\n className: cx('mdl-chip', {\n 'mdl-chip--contact': contactIndex > -1,\n 'mdl-chip--deletable': !!onClose,\n }, className),\n type: onClick ? 'button' : null,\n onClick,\n ...otherProps\n }, chipContent);\n};\n\nChip.propTypes = propTypes;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Chip/index.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport isEqual from 'lodash.isequal';\nimport TableHeader from './TableHeader';\nimport Checkbox from '../Checkbox';\n\nconst propTypes = {\n columns: (props, propName, componentName) => (\n props[propName] && new Error(`${componentName}: \\`${propName}\\` is deprecated, please use the component \\`TableHeader\\` instead.`)\n ),\n data: (props, propName, componentName) => (\n props[propName] && new Error(`${componentName}: \\`${propName}\\` is deprecated, please use \\`rows\\` instead. \\`${propName}\\` will be removed in the next major release.`)\n ),\n onSelectionChanged: PropTypes.func,\n rowKeyColumn: PropTypes.string,\n rows: PropTypes.arrayOf(\n PropTypes.object\n ).isRequired,\n selectable: PropTypes.bool\n};\n\nconst defaultProps = {\n onSelectionChanged: () => {\n // do nothing\n }\n};\n\nexport default Component => {\n class Selectable extends React.Component {\n constructor(props) {\n super(props);\n\n this.handleChangeHeaderCheckbox = this.handleChangeHeaderCheckbox.bind(this);\n this.handleChangeRowCheckbox = this.handleChangeRowCheckbox.bind(this);\n this.builRowCheckbox = this.builRowCheckbox.bind(this);\n\n if (props.selectable) {\n this.state = {\n headerSelected: false,\n selectedRows: []\n };\n }\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.selectable) {\n const { rows, data, rowKeyColumn } = nextProps;\n const rrows = rows || data;\n\n if (!isEqual(this.props.rows || this.props.data, rrows)) {\n // keep only existing rows\n const selectedRows = this.state.selectedRows\n .filter(k => rrows\n .map((row, i) => row[rowKeyColumn] || row.key || i)\n .indexOf(k) > -1\n );\n\n this.setState({\n headerSelected: selectedRows.length === rrows.length,\n selectedRows\n });\n\n nextProps.onSelectionChanged(selectedRows);\n }\n }\n }\n\n handleChangeHeaderCheckbox(e) {\n const { rowKeyColumn, rows, data } = this.props;\n const selected = e.target.checked;\n const selectedRows = selected\n ? (rows || data).map((row, idx) => row[rowKeyColumn] || row.key || idx)\n : [];\n\n this.setState({\n headerSelected: selected,\n selectedRows\n });\n\n this.props.onSelectionChanged(selectedRows);\n }\n\n handleChangeRowCheckbox(e) {\n const { rows, data } = this.props;\n const rowId = JSON.parse(e.target.dataset.reactmdl).id;\n const rowChecked = e.target.checked;\n const selectedRows = this.state.selectedRows;\n\n if (rowChecked) {\n selectedRows.push(rowId);\n } else {\n const idx = selectedRows.indexOf(rowId);\n selectedRows.splice(idx, 1);\n }\n\n this.setState({\n headerSelected: (rows || data).length === selectedRows.length,\n selectedRows\n });\n\n this.props.onSelectionChanged(selectedRows);\n }\n\n builRowCheckbox(content, row, idx) {\n const rowKey = row[this.props.rowKeyColumn] || row.key || idx;\n const isSelected = this.state.selectedRows.indexOf(rowKey) > -1;\n return (\n \n );\n }\n\n render() {\n const { rows, data, selectable, children, rowKeyColumn, ...otherProps } = this.props;\n\n // remove unwatned props\n // see https://github.com/Hacker0x01/react-datepicker/issues/517#issuecomment-230171426\n delete otherProps.onSelectionChanged;\n\n const realRows = selectable\n ? (rows || data).map((row, idx) => {\n const rowKey = row[rowKeyColumn] || row.key || idx;\n return {\n ...row,\n className: classNames({\n 'is-selected': this.state.selectedRows.indexOf(rowKey) > -1\n }, row.className)\n };\n })\n : (rows || data);\n\n return (\n \n {selectable && (\n \n \n \n )}\n {children}\n \n );\n }\n }\n Selectable.propTypes = propTypes;\n Selectable.defaultProps = defaultProps;\n return Selectable;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/DataTable/Selectable.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport TableHeader from './TableHeader';\n\nfunction initState(props) {\n return {\n rows: (props.rows || props.data).slice(),\n sortHeader: null,\n isAsc: true\n };\n}\n\nconst propTypes = {\n columns: (props, propName, componentName) => (\n props[propName] && new Error(`${componentName}: \\`${propName}\\` is deprecated, please use the component \\`TableHeader\\` instead.`)\n ),\n data: (props, propName, componentName) => (\n props[propName] && new Error(`${componentName}: \\`${propName}\\` is deprecated, please use \\`rows\\` instead. \\`${propName}\\` will be removed in the next major release.`)\n ),\n rows: PropTypes.arrayOf(\n PropTypes.object\n ).isRequired,\n sortable: PropTypes.bool\n};\n\nexport default Component => {\n class Sortable extends React.Component {\n constructor(props) {\n super(props);\n\n this.handleClickColumn = this.handleClickColumn.bind(this);\n\n if (props.sortable) {\n this.state = initState(props);\n }\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.sortable) {\n const realRows = nextProps.rows || nextProps.data;\n const rows = this.state.sortHeader\n ? this.getSortedRowsForColumn(this.state.isAsc, this.state.sortHeader, realRows)\n : realRows;\n\n this.setState({\n rows\n });\n }\n }\n\n getColumnClass(column) {\n const { sortHeader, isAsc } = this.state;\n\n return classNames(column.className, {\n 'mdl-data-table__header--sorted-ascending': sortHeader === column.name && isAsc,\n 'mdl-data-table__header--sorted-descending': sortHeader === column.name && !isAsc\n });\n }\n\n getDefaultSortFn(a, b, isAsc) {\n return isAsc\n ? a.localeCompare(b)\n : b.localeCompare(a);\n }\n\n getSortedRowsForColumn(isAsc, columnName, rows) {\n const columns = !!this.props.children\n ? React.Children.map(this.props.children, child => child.props)\n : this.props.columns;\n\n let sortFn = this.getDefaultSortFn;\n for (let i = 0; i < columns.length; i++) {\n if (columns[i].name === columnName && columns[i].sortFn) {\n sortFn = columns[i].sortFn;\n break;\n }\n }\n\n return rows.sort((a, b) =>\n sortFn(\n String(a[columnName]),\n String(b[columnName]),\n isAsc\n )\n );\n }\n\n handleClickColumn(e, columnName) {\n const isAsc = this.state.sortHeader === columnName ? !this.state.isAsc : true;\n const rows = this.getSortedRowsForColumn(isAsc, columnName, this.state.rows);\n this.setState({\n sortHeader: columnName,\n isAsc,\n rows\n });\n }\n\n renderTableHeaders() {\n const { children, columns, sortable } = this.props;\n\n if (sortable) {\n return children\n ? React.Children.map(children, child =>\n React.cloneElement(child, {\n className: this.getColumnClass(child.props),\n onClick: this.handleClickColumn\n })\n )\n : columns.map((column) =>\n \n {column.label}\n \n );\n }\n return children;\n }\n\n render() {\n const { rows, data, ...otherProps } = this.props;\n const realRows = (this.state && this.state.rows) || rows || data;\n\n // remove unwanted props\n delete otherProps.sortable;\n\n return (\n \n {this.renderTableHeaders()}\n \n );\n }\n }\n Sortable.propTypes = propTypes;\n return Sortable;\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/DataTable/Sortable.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport clamp from 'clamp';\nimport shadows from '../utils/shadows';\nimport TableHeader from './TableHeader';\nimport makeSelectable from './Selectable';\nimport makeSortable from './Sortable';\n\nconst propTypes = {\n className: PropTypes.string,\n columns: (props, propName, componentName) => (\n props[propName] && new Error(`${componentName}: \\`${propName}\\` is deprecated, please use the component \\`TableHeader\\` instead.`)\n ),\n data: (props, propName, componentName) => (\n props[propName] && new Error(`${componentName}: \\`${propName}\\` is deprecated, please use \\`rows\\` instead. \\`${propName}\\` will be removed in the next major release.`)\n ),\n rowKeyColumn: PropTypes.string,\n rows: PropTypes.arrayOf(\n PropTypes.object\n ).isRequired,\n shadow: PropTypes.number\n};\n\nclass Table extends React.Component {\n renderCell(column, row, idx) {\n const className = !column.numeric ? 'mdl-data-table__cell--non-numeric' : '';\n return (\n \n {column.cellFormatter ? column.cellFormatter(row[column.name], row, idx) : row[column.name]}\n | \n );\n }\n\n render() {\n const { className, columns, shadow, children,\n rowKeyColumn, rows, data, ...otherProps } = this.props;\n const realRows = rows || data;\n\n const hasShadow = typeof shadow !== 'undefined';\n const shadowLevel = clamp(shadow || 0, 0, shadows.length - 1);\n\n const classes = classNames('mdl-data-table', {\n [shadows[shadowLevel]]: hasShadow\n }, className);\n\n const columnChildren = !!children\n ? React.Children.toArray(children)\n : columns.map(column =>\n \n {column.label}\n \n );\n return (\n \n \n \n {columnChildren}\n
\n \n \n {realRows.map((row, idx) =>\n \n {columnChildren.map((child) => this.renderCell(child.props, row, idx))}\n
\n )}\n \n
\n );\n }\n}\n\nTable.propTypes = propTypes;\n\nexport default makeSortable(makeSelectable(Table));\nexport const UndecoratedTable = Table;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/DataTable/Table.js\n **/","import React, { PropTypes } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport classNames from 'classnames';\n\nconst propTypes = {\n className: PropTypes.string,\n onCancel: PropTypes.func,\n open: PropTypes.bool\n};\n\nconst defaultProps = {\n onCancel: e => e.preventDefault()\n};\n\nclass Dialog extends React.Component {\n componentDidMount() {\n this.refs.dialog.addEventListener('cancel', this.props.onCancel);\n if (this.props.open) {\n findDOMNode(this).showModal();\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.open !== prevProps.open) {\n if (this.props.open) {\n findDOMNode(this).showModal();\n\n // display the dialog at the right location\n // needed for the polyfill, otherwise it's not at the right position\n const windowHeight = window.innerHeight;\n const dialogHeight = this.refs.dialog.clientHeight;\n this.refs.dialog.style.position = 'fixed';\n this.refs.dialog.style.top = `${(windowHeight - dialogHeight) / 2}px`;\n } else {\n findDOMNode(this).close();\n }\n }\n }\n\n componentWillUnmount() {\n this.refs.dialog.removeEventListener('cancel', this.props.onCancel);\n }\n\n render() {\n // We cannot set the `open` prop on the Dialog if we manage its state manually with `showModal`,\n // this the disabled eslint rule\n // eslint-disable-next-line no-unused-vars\n const { className, open, onCancel, children, ...otherProps } = this.props;\n\n const classes = classNames('mdl-dialog', className);\n\n return (\n \n );\n }\n}\n\nDialog.propTypes = propTypes;\nDialog.defaultProps = defaultProps;\n\nexport default Dialog;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Dialog/Dialog.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nconst DialogActions = (props) => {\n const { className, fullWidth, children, ...otherProps } = props;\n\n const classes = classNames('mdl-dialog__actions', {\n 'mdl-dialog__actions--full-width': fullWidth\n }, className);\n\n return (\n \n {children}\n
\n );\n};\n\nDialogActions.propTypes = {\n className: PropTypes.string,\n fullWidth: PropTypes.bool\n};\n\nexport default DialogActions;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Dialog/DialogActions.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nconst DialogTitle = (props) => {\n const { className, component, children, ...otherProps } = props;\n\n return React.createElement(component || 'h4', {\n className: classNames('mdl-dialog__title', className),\n ...otherProps\n }, children);\n};\n\nDialogTitle.propTypes = {\n className: PropTypes.string,\n component: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element,\n PropTypes.func\n ])\n};\n\nexport default DialogTitle;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Dialog/DialogTitle.js\n **/","import basicClassCreator from '../utils/basicClassCreator';\n\nexport { default as Dialog } from './Dialog';\nexport { default as DialogTitle } from './DialogTitle';\nexport const DialogContent = basicClassCreator('DialogContent', 'mdl-dialog__content');\nexport { default as DialogActions } from './DialogActions';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Dialog/index.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport Button from './Button';\n\nconst FABButton = (props) => {\n const { mini, className, children, ...otherProps } = props;\n\n const classes = classNames('mdl-button--fab', {\n 'mdl-button--mini-fab': mini\n }, className);\n\n return (\n \n );\n};\n\nFABButton.propTypes = {\n className: PropTypes.string,\n mini: PropTypes.bool\n};\n\nexport default FABButton;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/FABButton.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport cloneChildren from '../utils/cloneChildren';\n\nconst DropDownSection = (props) => {\n const { className, size, title, children, ...otherProps } = props;\n\n const classes = classNames({\n [`mdl-${size}-footer__drop-down-section`]: true\n }, className);\n\n return (\n \n \n
{title}
\n {cloneChildren(children, { size })}\n \n );\n};\n\nDropDownSection.propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(['mini', 'mega']),\n title: PropTypes.node.isRequired\n};\nDropDownSection.defaultProps = {\n size: 'mega'\n};\n\nexport default DropDownSection;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Footer/DropDownSection.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport cloneChildren from '../utils/cloneChildren';\n\nconst Footer = (props) => {\n const { className, size, children, ...otherProps } = props;\n\n const classes = classNames({\n [`mdl-${size}-footer`]: true\n }, className);\n\n return (\n \n );\n};\n\nFooter.propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(['mini', 'mega'])\n};\nFooter.defaultProps = {\n size: 'mega'\n};\n\nexport default Footer;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Footer/Footer.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nconst LinkList = (props) => {\n const { className, size, children, ...otherProps } = props;\n\n const classes = classNames({\n [`mdl-${size}-footer__link-list`]: true\n }, className);\n\n return (\n \n {React.Children.map(children, child =>\n - {child}
\n )}\n
\n );\n};\n\nLinkList.propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(['mini', 'mega'])\n};\nLinkList.defaultProps = {\n size: 'mega'\n};\n\nexport default LinkList;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Footer/LinkList.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport cloneChildren from '../utils/cloneChildren';\n\nconst Section = (props) => {\n const { className, logo, size, type, children, ...otherProps } = props;\n\n const classes = classNames({\n [`mdl-${size}-footer__${type}-section`]: true\n }, className);\n\n return (\n \n {logo ?
{logo}
: null}\n {cloneChildren(children, { size })}\n
\n );\n};\n\nSection.propTypes = {\n className: PropTypes.string,\n logo: PropTypes.node,\n size: PropTypes.oneOf(['mini', 'mega']),\n type: PropTypes.oneOf(['top', 'middle', 'bottom', 'left', 'right'])\n};\nSection.defaultProps = {\n size: 'mega',\n type: 'left'\n};\n\nexport default Section;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Footer/Section.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport clamp from 'clamp';\nimport shadows from '../utils/shadows';\n\nconst propTypes = {\n align: PropTypes.oneOf(['top', 'middle', 'bottom', 'stretch']),\n className: PropTypes.string,\n col: PropTypes.number,\n component: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element,\n PropTypes.func\n ]),\n phone: PropTypes.number,\n tablet: PropTypes.number,\n offset: PropTypes.number,\n offsetDesktop: PropTypes.number,\n offsetTablet: PropTypes.number,\n offsetPhone: PropTypes.number,\n hideDesktop: PropTypes.bool,\n hidePhone: PropTypes.bool,\n hideTablet: PropTypes.bool,\n shadow: PropTypes.number\n};\n\nfunction isDefined(data) {\n return typeof data !== 'undefined';\n}\n\nconst Cell = (props) => {\n const { align, className, children, col, phone, tablet, component,\n hideDesktop, hidePhone, hideTablet, shadow, offset, offsetDesktop,\n offsetTablet, offsetPhone, ...otherProps } = props;\n\n const hasShadow = isDefined(shadow);\n const shadowLevel = clamp(shadow || 0, 0, shadows.length - 1);\n\n const classes = classNames('mdl-cell', {\n // columns\n [`mdl-cell--${col}-col`]: isDefined(col),\n [`mdl-cell--${phone}-col-phone`]: isDefined(phone),\n [`mdl-cell--${tablet}-col-tablet`]: isDefined(tablet),\n // alignment and offsets\n [`mdl-cell--${align}`]: isDefined(align),\n [`mdl-cell--${offset}-offset`]: isDefined(offset),\n [`mdl-cell--${offsetDesktop}-offset-desktop`]: isDefined(offsetDesktop),\n [`mdl-cell--${offsetTablet}-offset-tablet`]: isDefined(offsetTablet),\n [`mdl-cell--${offsetPhone}-offset-phone`]: isDefined(offsetPhone),\n // utils\n 'mdl-cell--hide-desktop': hideDesktop,\n 'mdl-cell--hide-phone': hidePhone,\n 'mdl-cell--hide-tablet': hideTablet,\n [shadows[shadowLevel]]: hasShadow\n }, className);\n\n return React.createElement(component || 'div', {\n className: classes,\n ...otherProps\n }, children);\n};\n\nCell.propTypes = propTypes;\n\nexport default Cell;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Grid/Cell.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport clamp from 'clamp';\nimport shadows from '../utils/shadows';\n\nconst propTypes = {\n className: PropTypes.string,\n component: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element,\n PropTypes.func\n ]),\n noSpacing: PropTypes.bool,\n shadow: PropTypes.number\n};\n\nconst Grid = (props) => {\n const { noSpacing, className, children, component, shadow, ...otherProps } = props;\n\n const hasShadow = typeof shadow !== 'undefined';\n const shadowLevel = clamp(shadow || 0, 0, shadows.length - 1);\n\n const classes = classNames('mdl-grid', {\n 'mdl-grid--no-spacing': noSpacing,\n [shadows[shadowLevel]]: hasShadow\n }, className);\n\n return React.createElement(component || 'div', {\n className: classes,\n ...otherProps\n }, children);\n};\n\nGrid.propTypes = propTypes;\n\nexport default Grid;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Grid/Grid.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport Button from './Button';\nimport Icon from './Icon';\n\nconst IconButton = (props) => {\n const { className, name, ...otherProps } = props;\n\n const classes = classNames('mdl-button--icon', className);\n\n return (\n \n );\n};\n\nIconButton.propTypes = {\n className: PropTypes.string,\n name: PropTypes.string.isRequired\n};\n\nexport default IconButton;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/IconButton.js\n **/","import React, { PropTypes } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport classNames from 'classnames';\nimport Icon from './Icon';\nimport mdlUpgrade from './utils/mdlUpgrade';\n\nconst propTypes = {\n checked: PropTypes.bool,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n name: PropTypes.string.isRequired,\n onChange: PropTypes.func,\n ripple: PropTypes.bool\n};\n\nclass IconToggle extends React.Component {\n componentDidUpdate(prevProps) {\n if (this.props.disabled !== prevProps.disabled) {\n const fnName = this.props.disabled ? 'disable' : 'enable';\n findDOMNode(this).MaterialIconToggle[fnName]();\n }\n if (this.props.checked !== prevProps.checked) {\n const fnName = this.props.checked ? 'check' : 'uncheck';\n findDOMNode(this).MaterialIconToggle[fnName]();\n }\n }\n\n render() {\n const { className, name, ripple, ...inputProps } = this.props;\n\n const classes = classNames('mdl-icon-toggle mdl-js-icon-toggle', {\n 'mdl-js-ripple-effect': ripple\n }, className);\n\n return (\n \n );\n }\n}\n\nIconToggle.propTypes = propTypes;\n\nexport default mdlUpgrade(IconToggle);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/IconToggle.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nconst Content = props => {\n const { children, className, component, ...otherProps } = props;\n\n const classes = classNames('mdl-layout__content', className);\n\n return React.createElement(component || 'div', {\n className: classes,\n ...otherProps\n }, children);\n};\n\nContent.propTypes = {\n className: PropTypes.string,\n component: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element,\n PropTypes.func\n ])\n};\n\nexport default Content;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Layout/Content.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nconst Drawer = props => {\n const { className, title, children, ...otherProps } = props;\n\n const classes = classNames('mdl-layout__drawer', className);\n\n return (\n \n {title ? {title} : null}\n {children}\n
\n );\n};\nDrawer.propTypes = {\n className: PropTypes.string,\n title: PropTypes.node\n};\n\nexport default Drawer;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Layout/Drawer.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport HeaderRow from './HeaderRow';\nimport HeaderTabs from './HeaderTabs';\n\nconst Header = props => {\n const { className, scroll, seamed, title, transparent,\n waterfall, hideTop, hideSpacer, children, ...otherProps } = props;\n\n const classes = classNames('mdl-layout__header', {\n 'mdl-layout__header--scroll': scroll,\n 'mdl-layout__header--seamed': seamed,\n 'mdl-layout__header--transparent': transparent,\n 'mdl-layout__header--waterfall': waterfall,\n 'mdl-layout__header--waterfall-hide-top': waterfall && hideTop\n }, className);\n\n let isRowOrTab = false;\n React.Children.forEach(children, child => {\n if (child && (child.type === HeaderRow || child.type === HeaderTabs)) {\n isRowOrTab = true;\n }\n });\n\n return (\n \n {isRowOrTab ? children : (\n {children}\n )}\n \n );\n};\nHeader.propTypes = {\n className: PropTypes.string,\n scroll: PropTypes.bool,\n seamed: PropTypes.bool,\n title: PropTypes.node,\n transparent: PropTypes.bool,\n waterfall: PropTypes.bool,\n hideTop: PropTypes.bool,\n hideSpacer: PropTypes.bool\n};\n\nexport default Header;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Layout/Header.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport mdlUpgrade from '../utils/mdlUpgrade';\n\nconst propTypes = {\n className: PropTypes.string,\n fixedDrawer: PropTypes.bool,\n fixedHeader: PropTypes.bool,\n fixedTabs: PropTypes.bool\n};\n\n// eslint-disable-next-line react/prefer-stateless-function\nclass Layout extends React.Component {\n render() {\n const { className, fixedDrawer, fixedHeader, fixedTabs, ...otherProps } = this.props;\n\n const classes = classNames('mdl-layout mdl-js-layout', {\n 'mdl-layout--fixed-drawer': fixedDrawer,\n 'mdl-layout--fixed-header': fixedHeader,\n 'mdl-layout--fixed-tabs': fixedTabs\n }, className);\n\n return (\n \n
\n {this.props.children}\n
\n
\n );\n }\n}\n\nLayout.propTypes = propTypes;\n\nexport default mdlUpgrade(Layout);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Layout/Layout.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport cloneChildren from '../utils/cloneChildren';\nimport Spacer from './Spacer';\n\nconst Navigation = props => {\n const { className, children, ...otherProps } = props;\n\n const classes = classNames('mdl-navigation', className);\n\n return (\n \n );\n};\nNavigation.propTypes = {\n className: PropTypes.string\n};\n\nexport default Navigation;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Layout/Navigation.js\n **/","import React, { PropTypes, Children, cloneElement } from 'react';\nimport classNames from 'classnames';\nimport ListItemContent from './ListItemContent';\n\nconst propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n twoLine: PropTypes.bool,\n threeLine: PropTypes.bool\n};\n\nconst ListItem = props => {\n const { className, twoLine, threeLine, ...otherProps } = props;\n\n const classes = classNames('mdl-list__item', {\n 'mdl-list__item--two-line': twoLine && !threeLine,\n 'mdl-list__item--three-line': !twoLine && threeLine,\n }, className);\n\n const children = Children.map(otherProps.children, child => {\n if (typeof child === 'string') {\n return {child};\n }\n if (child.type === ListItemContent) {\n return cloneElement(child, {\n useBodyClass: !!threeLine\n });\n }\n return child;\n });\n\n return (\n \n {children}\n \n );\n};\n\nListItem.propTypes = propTypes;\n\nexport default ListItem;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/List/ListItem.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\nconst propTypes = {\n children: PropTypes.node,\n className: PropTypes.string,\n info: PropTypes.string\n};\n\nconst ListItemAction = props => {\n const { children, className, info, ...otherProps } = props;\n\n const classes = classNames('mdl-list__item-secondary-content', className);\n\n return (\n \n {info && {info}}\n \n {children}\n \n \n );\n};\n\nListItemAction.propTypes = propTypes;\n\nexport default ListItemAction;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/List/ListItemAction.js\n **/","import basicClassCreator from '../utils/basicClassCreator';\n\nexport const List = basicClassCreator('List', 'mdl-list', 'ul');\nexport { default as ListItem } from './ListItem';\nexport { default as ListItemAction } from './ListItemAction';\nexport { default as ListItemContent } from './ListItemContent';\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/List/index.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport mdlUpgrade from './utils/mdlUpgrade';\nimport basicClassCreator from './utils/basicClassCreator';\n\nconst propTypes = {\n align: PropTypes.oneOf(['left', 'right']),\n className: PropTypes.string,\n ripple: PropTypes.bool,\n target: PropTypes.string.isRequired,\n valign: PropTypes.oneOf(['bottom', 'top'])\n};\n\nconst defaultProps = {\n align: 'left',\n valign: 'bottom'\n};\n\n// eslint-disable-next-line react/prefer-stateless-function\nclass Menu extends React.Component {\n render() {\n const { align, children, className, ripple,\n target, valign, ...otherProps } = this.props;\n\n const classes = classNames('mdl-menu mdl-js-menu', {\n [`mdl-menu--${valign}-${align}`]: true,\n 'mdl-js-ripple-effect': ripple\n }, className);\n\n return (\n \n );\n }\n}\n\nMenu.propTypes = propTypes;\nMenu.defaultProps = defaultProps;\n\nexport default mdlUpgrade(Menu);\nexport const MenuItem = basicClassCreator('MenuItem', 'mdl-menu__item', 'li');\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Menu.js\n **/","import React, { PropTypes } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport classNames from 'classnames';\nimport mdlUpgrade from './utils/mdlUpgrade';\n\nconst propTypes = {\n buffer: PropTypes.number,\n className: PropTypes.string,\n indeterminate: PropTypes.bool,\n progress: PropTypes.number\n};\n\nclass ProgressBar extends React.Component {\n componentDidMount() {\n this.setProgress(this.props.progress);\n this.setBuffer(this.props.buffer);\n }\n\n componentDidUpdate() {\n this.setProgress(this.props.progress);\n this.setBuffer(this.props.buffer);\n }\n\n setProgress(progress) {\n if (!this.props.indeterminate && progress !== undefined) {\n findDOMNode(this).MaterialProgress.setProgress(progress);\n }\n }\n\n setBuffer(buffer) {\n if (buffer !== undefined) {\n findDOMNode(this).MaterialProgress.setBuffer(buffer);\n }\n }\n\n render() {\n const {\n className, indeterminate,\n buffer, progress, // eslint-disable-line no-unused-vars\n ...otherProps\n } = this.props;\n\n const classes = classNames('mdl-progress mdl-js-progress', {\n 'mdl-progress__indeterminate': indeterminate\n }, className);\n\n return ;\n }\n}\n\nProgressBar.propTypes = propTypes;\n\nexport default mdlUpgrade(ProgressBar);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/ProgressBar.js\n **/","import React, { PropTypes } from 'react';\nimport Radio from './Radio';\n\nconst RadioGroup = (props) => {\n const { name, value, children, container,\n childContainer, onChange, ...otherProps } = props;\n\n const hasOnChange = typeof onChange === 'function';\n const checked = hasOnChange ? 'checked' : 'defaultChecked';\n\n return React.createElement(container, otherProps,\n React.Children.map(children, child => {\n const clonedChild = React.cloneElement(child, {\n [checked]: child.props.value === value,\n name,\n onChange,\n ...otherProps\n });\n\n return childContainer ? React.createElement(childContainer, {}, clonedChild) : clonedChild;\n })\n );\n};\n\nRadioGroup.propTypes = {\n childContainer: PropTypes.string,\n children: PropTypes.arrayOf((props, propName, componentName) => {\n const prop = props[propName];\n return prop.type !== Radio && new Error(`'${componentName}' only accepts 'Radio' as children.`);\n }),\n container: PropTypes.string,\n name: PropTypes.string.isRequired,\n onChange: PropTypes.func,\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ]).isRequired\n};\n\nRadioGroup.defaultProps = {\n container: 'div'\n};\n\nexport default RadioGroup;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/RadioGroup.js\n **/","import React, { PropTypes } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport classNames from 'classnames';\nimport mdlUpgrade from './utils/mdlUpgrade';\n\nconst propTypes = {\n className: PropTypes.string,\n max: PropTypes.number.isRequired,\n min: PropTypes.number.isRequired,\n onChange: PropTypes.func,\n value: PropTypes.number\n};\n\nclass Slider extends React.Component {\n componentDidUpdate() {\n if (typeof this.props.value !== 'undefined') {\n findDOMNode(this).MaterialSlider.change(this.props.value);\n }\n }\n\n render() {\n const { className, ...otherProps } = this.props;\n\n const classes = classNames('mdl-slider mdl-js-slider', className);\n\n return (\n \n );\n }\n}\n\nSlider.propTypes = propTypes;\n\nexport default mdlUpgrade(Slider);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Slider.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\n\n// This component doesn't use the javascript from MDL.\n// This is the expected behavior and the reason is because it's not written in\n// a way to make it easy to use with React.\nconst ANIMATION_LENGTH = 250;\n\nconst propTypes = {\n action: PropTypes.string,\n active: PropTypes.bool.isRequired,\n className: PropTypes.string,\n onActionClick: PropTypes.func,\n onTimeout: PropTypes.func.isRequired,\n timeout: PropTypes.number\n};\n\nconst defaultProps = {\n timeout: 2750\n};\n\nclass Snackbar extends React.Component {\n constructor(props) {\n super(props);\n this.clearTimer = this.clearTimer.bind(this);\n this.timeoutId = null;\n this.clearTimeoutId = null;\n this.state = {\n open: false\n };\n }\n\n componentWillReceiveProps(nextProps) {\n this.setState({\n open: nextProps.active\n });\n }\n\n componentDidUpdate() {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n }\n\n if (this.props.active) {\n this.timeoutId = setTimeout(this.clearTimer, this.props.timeout);\n }\n }\n\n componentWillUnmount() {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n if (this.clearTimeoutId) {\n clearTimeout(this.clearTimeoutId);\n this.clearTimeoutId = null;\n }\n }\n\n clearTimer() {\n this.timeoutId = null;\n this.setState({ open: false });\n\n this.clearTimeoutId = setTimeout(() => {\n this.clearTimeoutId = null;\n this.props.onTimeout();\n }, ANIMATION_LENGTH);\n }\n\n render() {\n const { action, active, className, children,\n onActionClick, ...otherProps } = this.props;\n const { open } = this.state;\n\n const classes = classNames('mdl-snackbar', {\n 'mdl-snackbar--active': open\n }, className);\n\n delete otherProps.onTimeout;\n delete otherProps.timeout;\n\n return (\n \n
{active && children}
\n {active && action &&
}\n
\n );\n }\n}\n\nSnackbar.propTypes = propTypes;\nSnackbar.defaultProps = defaultProps;\n\nexport default Snackbar;\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Snackbar/index.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport mdlUpgrade from './utils/mdlUpgrade';\n\nconst propTypes = {\n className: PropTypes.string,\n singleColor: PropTypes.bool\n};\n\n// eslint-disable-next-line react/prefer-stateless-function\nclass Spinner extends React.Component {\n render() {\n const { className, singleColor, ...otherProps } = this.props;\n\n const classes = classNames('mdl-spinner mdl-js-spinner is-active', {\n 'mdl-spinner--single-color': singleColor\n }, className);\n\n return ;\n }\n}\n\nSpinner.propTypes = propTypes;\n\nexport default mdlUpgrade(Spinner);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Spinner.js\n **/","import React, { PropTypes } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport classNames from 'classnames';\nimport mdlUpgrade from './utils/mdlUpgrade';\n\nconst propTypes = {\n checked: PropTypes.bool,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n onChange: PropTypes.func,\n ripple: PropTypes.bool\n};\n\nclass Switch extends React.Component {\n componentDidUpdate(prevProps) {\n if (this.props.disabled !== prevProps.disabled) {\n const fnName = this.props.disabled ? 'disable' : 'enable';\n findDOMNode(this).MaterialSwitch[fnName]();\n }\n if (this.props.checked !== prevProps.checked) {\n const fnName = this.props.checked ? 'on' : 'off';\n findDOMNode(this).MaterialSwitch[fnName]();\n }\n }\n\n render() {\n const { className, ripple, children, ...inputProps } = this.props;\n\n const classes = classNames('mdl-switch mdl-js-switch', {\n 'mdl-js-ripple-effect': ripple\n }, className);\n\n return (\n \n );\n }\n}\n\nSwitch.propTypes = propTypes;\n\nexport default mdlUpgrade(Switch);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Switch.js\n **/","import React, { PropTypes } from 'react';\nimport classNames from 'classnames';\nimport Tab from './Tab';\nimport TabBar from './TabBar';\nimport mdlUpgrade from '../utils/mdlUpgrade';\n\nconst TabPropType = (props, propName, componentName) => {\n const prop = props[propName];\n return prop.type !== Tab && new Error(`'${componentName}' only accepts 'Tab' as children.`);\n};\n\nconst propTypes = {\n activeTab: PropTypes.number,\n children: PropTypes.oneOfType([\n TabPropType,\n PropTypes.arrayOf(TabPropType)\n ]),\n className: PropTypes.string,\n onChange: PropTypes.func,\n tabBarProps: PropTypes.object,\n ripple: PropTypes.bool,\n};\n\nconst Tabs = props => {\n const { activeTab, className, onChange,\n children, tabBarProps, ripple, ...otherProps } = props;\n\n const classes = classNames('mdl-tabs mdl-js-tabs is-upgraded', {\n 'mdl-js-ripple-effect': ripple\n }, className);\n\n return (\n \n \n {children}\n \n
\n );\n};\n\nTabs.propTypes = propTypes;\n\nexport default mdlUpgrade(Tabs);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Tabs/Tabs.js\n **/","import React, { PropTypes } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport classNames from 'classnames';\nimport mdlUpgrade from './utils/mdlUpgrade';\n\nconst propTypes = {\n className: PropTypes.string,\n disabled: PropTypes.bool,\n error: PropTypes.node,\n expandable: PropTypes.bool,\n expandableIcon: PropTypes.string,\n floatingLabel: PropTypes.bool,\n id: PropTypes.string,\n inputClassName: PropTypes.string,\n label: PropTypes.string.isRequired,\n maxRows: PropTypes.number,\n onChange: PropTypes.func,\n pattern: PropTypes.string,\n required: PropTypes.bool,\n rows: PropTypes.number,\n style: PropTypes.object,\n value: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.number\n ])\n};\n\nclass Textfield extends React.Component {\n componentDidMount() {\n if (this.props.error && !this.props.pattern) {\n this.setAsInvalid();\n }\n }\n\n componentDidUpdate(prevProps) {\n if (\n this.props.required !== prevProps.required ||\n this.props.pattern !== prevProps.pattern ||\n this.props.error !== prevProps.error\n ) {\n findDOMNode(this).MaterialTextfield.checkValidity();\n }\n if (this.props.disabled !== prevProps.disabled) {\n findDOMNode(this).MaterialTextfield.checkDisabled();\n }\n if (this.props.value !== prevProps.value && this.refs.input !== document.activeElement) {\n findDOMNode(this).MaterialTextfield.change(this.props.value);\n }\n if (this.props.error && !this.props.pattern) {\n // Every time the input gets updated by MDL (checkValidity() or change())\n // its invalid class gets reset. We have to put it again if the input is specifically set as \"invalid\"\n this.setAsInvalid();\n }\n }\n\n setAsInvalid() {\n const elt = findDOMNode(this);\n if (elt.className.indexOf('is-invalid') < 0) {\n elt.className = classNames(elt.className, 'is-invalid');\n }\n }\n\n render() {\n const { className, inputClassName, id,\n error, expandable, expandableIcon,\n floatingLabel, label, maxRows,\n rows, style, children, ...otherProps } = this.props;\n\n const hasRows = !!rows;\n const customId = id || `textfield-${label.replace(/[^a-z0-9]/gi, '')}`;\n const inputTag = hasRows || maxRows > 1 ? 'textarea' : 'input';\n\n const inputProps = {\n className: classNames('mdl-textfield__input', inputClassName),\n id: customId,\n rows,\n ref: 'input',\n ...otherProps\n };\n\n const input = React.createElement(inputTag, inputProps);\n const labelContainer = ;\n const errorContainer = !!error && {error};\n\n const containerClasses = classNames('mdl-textfield mdl-js-textfield', {\n 'mdl-textfield--floating-label': floatingLabel,\n 'mdl-textfield--expandable': expandable\n }, className);\n\n return expandable ? (\n \n
\n
\n {input}\n {labelContainer}\n {errorContainer}\n
\n\t\t\t\t{children}\n
\n ) : (\n \n {input}\n {labelContainer}\n {errorContainer}\n\t\t\t\t{children}\n
\n );\n }\n}\n\nTextfield.propTypes = propTypes;\n\nexport default mdlUpgrade(Textfield);\n\n\n\n/** WEBPACK FOOTER **\n ** ./src/Textfield.js\n **/","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\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 promiseTag = '[object Promise]',\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/**\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 to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\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/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\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\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\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\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\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\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\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\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\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\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\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\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\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/** 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/**\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 if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\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/** 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 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/**\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\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\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\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\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\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\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/**\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\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\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\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\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\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\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/**\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\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\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\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\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\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\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/**\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\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\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\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/**\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are **not** supported.\n *\n * @static\n * @memberOf _\n * @since 0.1.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 * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\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\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\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\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\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\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 = isEqual;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./~/lodash.isequal/index.js\n ** module id = 66\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\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 = 67\n ** module chunks = 0\n **/"],"sourceRoot":""}