{"version":3,"file":"bloodhound.min.js","sources":["bloodhound.js"],"sourcesContent":["/*!\n * typeahead.js 0.11.1\n * https://github.com/twitter/typeahead.js\n * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT\n */\n\n(function(root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(\"bloodhound\", [ \"jquery\" ], function(a0) {\n return root[\"Bloodhound\"] = factory(a0);\n });\n } else if (typeof exports === \"object\") {\n module.exports = factory(require(\"jquery\"));\n } else {\n root[\"Bloodhound\"] = factory(jQuery);\n }\n})(this, function($) {\n var _ = function() {\n \"use strict\";\n return {\n isMsie: function() {\n return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\\d+(.\\d+)?)/i)[2] : false;\n },\n isBlankString: function(str) {\n return !str || /^\\s*$/.test(str);\n },\n escapeRegExChars: function(str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n },\n isString: function(obj) {\n return typeof obj === \"string\";\n },\n isNumber: function(obj) {\n return typeof obj === \"number\";\n },\n isArray: $.isArray,\n isFunction: $.isFunction,\n isObject: $.isPlainObject,\n isUndefined: function(obj) {\n return typeof obj === \"undefined\";\n },\n isElement: function(obj) {\n return !!(obj && obj.nodeType === 1);\n },\n isJQuery: function(obj) {\n return obj instanceof $;\n },\n toStr: function toStr(s) {\n return _.isUndefined(s) || s === null ? \"\" : s + \"\";\n },\n bind: $.proxy,\n each: function(collection, cb) {\n $.each(collection, reverseArgs);\n function reverseArgs(index, value) {\n return cb(value, index);\n }\n },\n map: $.map,\n filter: $.grep,\n every: function(obj, test) {\n var result = true;\n if (!obj) {\n return result;\n }\n $.each(obj, function(key, val) {\n if (!(result = test.call(null, val, key, obj))) {\n return false;\n }\n });\n return !!result;\n },\n some: function(obj, test) {\n var result = false;\n if (!obj) {\n return result;\n }\n $.each(obj, function(key, val) {\n if (result = test.call(null, val, key, obj)) {\n return false;\n }\n });\n return !!result;\n },\n mixin: $.extend,\n identity: function(x) {\n return x;\n },\n clone: function(obj) {\n return $.extend(true, {}, obj);\n },\n getIdGenerator: function() {\n var counter = 0;\n return function() {\n return counter++;\n };\n },\n templatify: function templatify(obj) {\n return $.isFunction(obj) ? obj : template;\n function template() {\n return String(obj);\n }\n },\n defer: function(fn) {\n setTimeout(fn, 0);\n },\n debounce: function(func, wait, immediate) {\n var timeout, result;\n return function() {\n var context = this, args = arguments, later, callNow;\n later = function() {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n }\n };\n callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n }\n return result;\n };\n },\n throttle: function(func, wait) {\n var context, args, timeout, result, previous, later;\n previous = 0;\n later = function() {\n previous = new Date();\n timeout = null;\n result = func.apply(context, args);\n };\n return function() {\n var now = new Date(), remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n } else if (!timeout) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n },\n stringify: function(val) {\n return _.isString(val) ? val : JSON.stringify(val);\n },\n noop: function() {}\n };\n }();\n var VERSION = \"0.11.1\";\n var tokenizers = function() {\n \"use strict\";\n return {\n nonword: nonword,\n whitespace: whitespace,\n obj: {\n nonword: getObjTokenizer(nonword),\n whitespace: getObjTokenizer(whitespace)\n }\n };\n function whitespace(str) {\n str = _.toStr(str);\n return str ? str.split(/\\s+/) : [];\n }\n function nonword(str) {\n str = _.toStr(str);\n return str ? str.split(/\\W+/) : [];\n }\n function getObjTokenizer(tokenizer) {\n return function setKey(keys) {\n keys = _.isArray(keys) ? keys : [].slice.call(arguments, 0);\n return function tokenize(o) {\n var tokens = [];\n _.each(keys, function(k) {\n tokens = tokens.concat(tokenizer(_.toStr(o[k])));\n });\n return tokens;\n };\n };\n }\n }();\n var LruCache = function() {\n \"use strict\";\n function LruCache(maxSize) {\n this.maxSize = _.isNumber(maxSize) ? maxSize : 100;\n this.reset();\n if (this.maxSize <= 0) {\n this.set = this.get = $.noop;\n }\n }\n _.mixin(LruCache.prototype, {\n set: function set(key, val) {\n var tailItem = this.list.tail, node;\n if (this.size >= this.maxSize) {\n this.list.remove(tailItem);\n delete this.hash[tailItem.key];\n this.size--;\n }\n if (node = this.hash[key]) {\n node.val = val;\n this.list.moveToFront(node);\n } else {\n node = new Node(key, val);\n this.list.add(node);\n this.hash[key] = node;\n this.size++;\n }\n },\n get: function get(key) {\n var node = this.hash[key];\n if (node) {\n this.list.moveToFront(node);\n return node.val;\n }\n },\n reset: function reset() {\n this.size = 0;\n this.hash = {};\n this.list = new List();\n }\n });\n function List() {\n this.head = this.tail = null;\n }\n _.mixin(List.prototype, {\n add: function add(node) {\n if (this.head) {\n node.next = this.head;\n this.head.prev = node;\n }\n this.head = node;\n this.tail = this.tail || node;\n },\n remove: function remove(node) {\n node.prev ? node.prev.next = node.next : this.head = node.next;\n node.next ? node.next.prev = node.prev : this.tail = node.prev;\n },\n moveToFront: function(node) {\n this.remove(node);\n this.add(node);\n }\n });\n function Node(key, val) {\n this.key = key;\n this.val = val;\n this.prev = this.next = null;\n }\n return LruCache;\n }();\n var PersistentStorage = function() {\n \"use strict\";\n var LOCAL_STORAGE;\n try {\n LOCAL_STORAGE = window.localStorage;\n LOCAL_STORAGE.setItem(\"~~~\", \"!\");\n LOCAL_STORAGE.removeItem(\"~~~\");\n } catch (err) {\n LOCAL_STORAGE = null;\n }\n function PersistentStorage(namespace, override) {\n this.prefix = [ \"__\", namespace, \"__\" ].join(\"\");\n this.ttlKey = \"__ttl__\";\n this.keyMatcher = new RegExp(\"^\" + _.escapeRegExChars(this.prefix));\n this.ls = override || LOCAL_STORAGE;\n !this.ls && this._noop();\n }\n _.mixin(PersistentStorage.prototype, {\n _prefix: function(key) {\n return this.prefix + key;\n },\n _ttlKey: function(key) {\n return this._prefix(key) + this.ttlKey;\n },\n _noop: function() {\n this.get = this.set = this.remove = this.clear = this.isExpired = _.noop;\n },\n _safeSet: function(key, val) {\n try {\n this.ls.setItem(key, val);\n } catch (err) {\n if (err.name === \"QuotaExceededError\") {\n this.clear();\n this._noop();\n }\n }\n },\n get: function(key) {\n if (this.isExpired(key)) {\n this.remove(key);\n }\n return decode(this.ls.getItem(this._prefix(key)));\n },\n set: function(key, val, ttl) {\n if (_.isNumber(ttl)) {\n this._safeSet(this._ttlKey(key), encode(now() + ttl));\n } else {\n this.ls.removeItem(this._ttlKey(key));\n }\n return this._safeSet(this._prefix(key), encode(val));\n },\n remove: function(key) {\n this.ls.removeItem(this._ttlKey(key));\n this.ls.removeItem(this._prefix(key));\n return this;\n },\n clear: function() {\n var i, keys = gatherMatchingKeys(this.keyMatcher);\n for (i = keys.length; i--; ) {\n this.remove(keys[i]);\n }\n return this;\n },\n isExpired: function(key) {\n var ttl = decode(this.ls.getItem(this._ttlKey(key)));\n return _.isNumber(ttl) && now() > ttl ? true : false;\n }\n });\n return PersistentStorage;\n function now() {\n return new Date().getTime();\n }\n function encode(val) {\n return JSON.stringify(_.isUndefined(val) ? null : val);\n }\n function decode(val) {\n return $.parseJSON(val);\n }\n function gatherMatchingKeys(keyMatcher) {\n var i, key, keys = [], len = LOCAL_STORAGE.length;\n for (i = 0; i < len; i++) {\n if ((key = LOCAL_STORAGE.key(i)).match(keyMatcher)) {\n keys.push(key.replace(keyMatcher, \"\"));\n }\n }\n return keys;\n }\n }();\n var Transport = function() {\n \"use strict\";\n var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10);\n function Transport(o) {\n o = o || {};\n this.cancelled = false;\n this.lastReq = null;\n this._send = o.transport;\n this._get = o.limiter ? o.limiter(this._get) : this._get;\n this._cache = o.cache === false ? new LruCache(0) : sharedCache;\n }\n Transport.setMaxPendingRequests = function setMaxPendingRequests(num) {\n maxPendingRequests = num;\n };\n Transport.resetCache = function resetCache() {\n sharedCache.reset();\n };\n _.mixin(Transport.prototype, {\n _fingerprint: function fingerprint(o) {\n o = o || {};\n return o.url + o.type + $.param(o.data || {});\n },\n _get: function(o, cb) {\n var that = this, fingerprint, jqXhr;\n fingerprint = this._fingerprint(o);\n if (this.cancelled || fingerprint !== this.lastReq) {\n return;\n }\n if (jqXhr = pendingRequests[fingerprint]) {\n jqXhr.done(done).fail(fail);\n } else if (pendingRequestsCount < maxPendingRequests) {\n pendingRequestsCount++;\n pendingRequests[fingerprint] = this._send(o).done(done).fail(fail).always(always);\n } else {\n this.onDeckRequestArgs = [].slice.call(arguments, 0);\n }\n function done(resp) {\n cb(null, resp);\n that._cache.set(fingerprint, resp);\n }\n function fail() {\n cb(true);\n }\n function always() {\n pendingRequestsCount--;\n delete pendingRequests[fingerprint];\n if (that.onDeckRequestArgs) {\n that._get.apply(that, that.onDeckRequestArgs);\n that.onDeckRequestArgs = null;\n }\n }\n },\n get: function(o, cb) {\n var resp, fingerprint;\n cb = cb || $.noop;\n o = _.isString(o) ? {\n url: o\n } : o || {};\n fingerprint = this._fingerprint(o);\n this.cancelled = false;\n this.lastReq = fingerprint;\n if (resp = this._cache.get(fingerprint)) {\n cb(null, resp);\n } else {\n this._get(o, cb);\n }\n },\n cancel: function() {\n this.cancelled = true;\n }\n });\n return Transport;\n }();\n var SearchIndex = window.SearchIndex = function() {\n \"use strict\";\n var CHILDREN = \"c\", IDS = \"i\";\n function SearchIndex(o) {\n o = o || {};\n if (!o.datumTokenizer || !o.queryTokenizer) {\n $.error(\"datumTokenizer and queryTokenizer are both required\");\n }\n this.identify = o.identify || _.stringify;\n this.datumTokenizer = o.datumTokenizer;\n this.queryTokenizer = o.queryTokenizer;\n this.reset();\n }\n _.mixin(SearchIndex.prototype, {\n bootstrap: function bootstrap(o) {\n this.datums = o.datums;\n this.trie = o.trie;\n },\n add: function(data) {\n var that = this;\n data = _.isArray(data) ? data : [ data ];\n _.each(data, function(datum) {\n var id, tokens;\n that.datums[id = that.identify(datum)] = datum;\n tokens = normalizeTokens(that.datumTokenizer(datum));\n _.each(tokens, function(token) {\n var node, chars, ch;\n node = that.trie;\n chars = token.split(\"\");\n while (ch = chars.shift()) {\n node = node[CHILDREN][ch] || (node[CHILDREN][ch] = newNode());\n node[IDS].push(id);\n }\n });\n });\n },\n get: function get(ids) {\n var that = this;\n return _.map(ids, function(id) {\n return that.datums[id];\n });\n },\n search: function search(query) {\n var that = this, tokens, matches;\n tokens = normalizeTokens(this.queryTokenizer(query));\n _.each(tokens, function(token) {\n var node, chars, ch, ids;\n if (matches && matches.length === 0) {\n return false;\n }\n node = that.trie;\n chars = token.split(\"\");\n while (node && (ch = chars.shift())) {\n node = node[CHILDREN][ch];\n }\n if (node && chars.length === 0) {\n ids = node[IDS].slice(0);\n matches = matches ? getIntersection(matches, ids) : ids;\n } else {\n matches = [];\n return false;\n }\n });\n return matches ? _.map(unique(matches), function(id) {\n return that.datums[id];\n }) : [];\n },\n all: function all() {\n var values = [];\n for (var key in this.datums) {\n values.push(this.datums[key]);\n }\n return values;\n },\n reset: function reset() {\n this.datums = {};\n this.trie = newNode();\n },\n serialize: function serialize() {\n return {\n datums: this.datums,\n trie: this.trie\n };\n }\n });\n return SearchIndex;\n function normalizeTokens(tokens) {\n tokens = _.filter(tokens, function(token) {\n return !!token;\n });\n tokens = _.map(tokens, function(token) {\n return token.toLowerCase();\n });\n return tokens;\n }\n function newNode() {\n var node = {};\n node[IDS] = [];\n node[CHILDREN] = {};\n return node;\n }\n function unique(array) {\n var seen = {}, uniques = [];\n for (var i = 0, len = array.length; i < len; i++) {\n if (!seen[array[i]]) {\n seen[array[i]] = true;\n uniques.push(array[i]);\n }\n }\n return uniques;\n }\n function getIntersection(arrayA, arrayB) {\n var ai = 0, bi = 0, intersection = [];\n arrayA = arrayA.sort();\n arrayB = arrayB.sort();\n var lenArrayA = arrayA.length, lenArrayB = arrayB.length;\n while (ai < lenArrayA && bi < lenArrayB) {\n if (arrayA[ai] < arrayB[bi]) {\n ai++;\n } else if (arrayA[ai] > arrayB[bi]) {\n bi++;\n } else {\n intersection.push(arrayA[ai]);\n ai++;\n bi++;\n }\n }\n return intersection;\n }\n }();\n var Prefetch = function() {\n \"use strict\";\n var keys;\n keys = {\n data: \"data\",\n protocol: \"protocol\",\n thumbprint: \"thumbprint\"\n };\n function Prefetch(o) {\n this.url = o.url;\n this.ttl = o.ttl;\n this.cache = o.cache;\n this.prepare = o.prepare;\n this.transform = o.transform;\n this.transport = o.transport;\n this.thumbprint = o.thumbprint;\n this.storage = new PersistentStorage(o.cacheKey);\n }\n _.mixin(Prefetch.prototype, {\n _settings: function settings() {\n return {\n url: this.url,\n type: \"GET\",\n dataType: \"json\"\n };\n },\n store: function store(data) {\n if (!this.cache) {\n return;\n }\n this.storage.set(keys.data, data, this.ttl);\n this.storage.set(keys.protocol, location.protocol, this.ttl);\n this.storage.set(keys.thumbprint, this.thumbprint, this.ttl);\n },\n fromCache: function fromCache() {\n var stored = {}, isExpired;\n if (!this.cache) {\n return null;\n }\n stored.data = this.storage.get(keys.data);\n stored.protocol = this.storage.get(keys.protocol);\n stored.thumbprint = this.storage.get(keys.thumbprint);\n isExpired = stored.thumbprint !== this.thumbprint || stored.protocol !== location.protocol;\n return stored.data && !isExpired ? stored.data : null;\n },\n fromNetwork: function(cb) {\n var that = this, settings;\n if (!cb) {\n return;\n }\n settings = this.prepare(this._settings());\n this.transport(settings).fail(onError).done(onResponse);\n function onError() {\n cb(true);\n }\n function onResponse(resp) {\n cb(null, that.transform(resp));\n }\n },\n clear: function clear() {\n this.storage.clear();\n return this;\n }\n });\n return Prefetch;\n }();\n var Remote = function() {\n \"use strict\";\n function Remote(o) {\n this.url = o.url;\n this.prepare = o.prepare;\n this.transform = o.transform;\n this.transport = new Transport({\n cache: o.cache,\n limiter: o.limiter,\n transport: o.transport\n });\n }\n _.mixin(Remote.prototype, {\n _settings: function settings() {\n return {\n url: this.url,\n type: \"GET\",\n dataType: \"json\"\n };\n },\n get: function get(query, cb) {\n var that = this, settings;\n if (!cb) {\n return;\n }\n query = query || \"\";\n settings = this.prepare(query, this._settings());\n return this.transport.get(settings, onResponse);\n function onResponse(err, resp) {\n err ? cb([]) : cb(that.transform(resp));\n }\n },\n cancelLastRequest: function cancelLastRequest() {\n this.transport.cancel();\n }\n });\n return Remote;\n }();\n var oParser = function() {\n \"use strict\";\n return function parse(o) {\n var defaults, sorter;\n defaults = {\n initialize: true,\n identify: _.stringify,\n datumTokenizer: null,\n queryTokenizer: null,\n sufficient: 5,\n sorter: null,\n local: [],\n prefetch: null,\n remote: null\n };\n o = _.mixin(defaults, o || {});\n !o.datumTokenizer && $.error(\"datumTokenizer is required\");\n !o.queryTokenizer && $.error(\"queryTokenizer is required\");\n sorter = o.sorter;\n o.sorter = sorter ? function(x) {\n return x.sort(sorter);\n } : _.identity;\n o.local = _.isFunction(o.local) ? o.local() : o.local;\n o.prefetch = parsePrefetch(o.prefetch);\n o.remote = parseRemote(o.remote);\n return o;\n };\n function parsePrefetch(o) {\n var defaults;\n if (!o) {\n return null;\n }\n defaults = {\n url: null,\n ttl: 24 * 60 * 60 * 1e3,\n cache: true,\n cacheKey: null,\n thumbprint: \"\",\n prepare: _.identity,\n transform: _.identity,\n transport: null\n };\n o = _.isString(o) ? {\n url: o\n } : o;\n o = _.mixin(defaults, o);\n !o.url && $.error(\"prefetch requires url to be set\");\n o.transform = o.filter || o.transform;\n o.cacheKey = o.cacheKey || o.url;\n o.thumbprint = VERSION + o.thumbprint;\n o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;\n return o;\n }\n function parseRemote(o) {\n var defaults;\n if (!o) {\n return;\n }\n defaults = {\n url: null,\n cache: true,\n prepare: null,\n replace: null,\n wildcard: null,\n limiter: null,\n rateLimitBy: \"debounce\",\n rateLimitWait: 300,\n transform: _.identity,\n transport: null\n };\n o = _.isString(o) ? {\n url: o\n } : o;\n o = _.mixin(defaults, o);\n !o.url && $.error(\"remote requires url to be set\");\n o.transform = o.filter || o.transform;\n o.prepare = toRemotePrepare(o);\n o.limiter = toLimiter(o);\n o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;\n delete o.replace;\n delete o.wildcard;\n delete o.rateLimitBy;\n delete o.rateLimitWait;\n return o;\n }\n function toRemotePrepare(o) {\n var prepare, replace, wildcard;\n prepare = o.prepare;\n replace = o.replace;\n wildcard = o.wildcard;\n if (prepare) {\n return prepare;\n }\n if (replace) {\n prepare = prepareByReplace;\n } else if (o.wildcard) {\n prepare = prepareByWildcard;\n } else {\n prepare = idenityPrepare;\n }\n return prepare;\n function prepareByReplace(query, settings) {\n settings.url = replace(settings.url, query);\n return settings;\n }\n function prepareByWildcard(query, settings) {\n settings.url = settings.url.replace(wildcard, encodeURIComponent(query));\n return settings;\n }\n function idenityPrepare(query, settings) {\n return settings;\n }\n }\n function toLimiter(o) {\n var limiter, method, wait;\n limiter = o.limiter;\n method = o.rateLimitBy;\n wait = o.rateLimitWait;\n if (!limiter) {\n limiter = /^throttle$/i.test(method) ? throttle(wait) : debounce(wait);\n }\n return limiter;\n function debounce(wait) {\n return function debounce(fn) {\n return _.debounce(fn, wait);\n };\n }\n function throttle(wait) {\n return function throttle(fn) {\n return _.throttle(fn, wait);\n };\n }\n }\n function callbackToDeferred(fn) {\n return function wrapper(o) {\n var deferred = $.Deferred();\n fn(o, onSuccess, onError);\n return deferred;\n function onSuccess(resp) {\n _.defer(function() {\n deferred.resolve(resp);\n });\n }\n function onError(err) {\n _.defer(function() {\n deferred.reject(err);\n });\n }\n };\n }\n }();\n var Bloodhound = function() {\n \"use strict\";\n var old;\n old = window && window.Bloodhound;\n function Bloodhound(o) {\n o = oParser(o);\n this.sorter = o.sorter;\n this.identify = o.identify;\n this.sufficient = o.sufficient;\n this.local = o.local;\n this.remote = o.remote ? new Remote(o.remote) : null;\n this.prefetch = o.prefetch ? new Prefetch(o.prefetch) : null;\n this.index = new SearchIndex({\n identify: this.identify,\n datumTokenizer: o.datumTokenizer,\n queryTokenizer: o.queryTokenizer\n });\n o.initialize !== false && this.initialize();\n }\n Bloodhound.noConflict = function noConflict() {\n window && (window.Bloodhound = old);\n return Bloodhound;\n };\n Bloodhound.tokenizers = tokenizers;\n _.mixin(Bloodhound.prototype, {\n __ttAdapter: function ttAdapter() {\n var that = this;\n return this.remote ? withAsync : withoutAsync;\n function withAsync(query, sync, async) {\n return that.search(query, sync, async);\n }\n function withoutAsync(query, sync) {\n return that.search(query, sync);\n }\n },\n _loadPrefetch: function loadPrefetch() {\n var that = this, deferred, serialized;\n deferred = $.Deferred();\n if (!this.prefetch) {\n deferred.resolve();\n } else if (serialized = this.prefetch.fromCache()) {\n this.index.bootstrap(serialized);\n deferred.resolve();\n } else {\n this.prefetch.fromNetwork(done);\n }\n return deferred.promise();\n function done(err, data) {\n if (err) {\n return deferred.reject();\n }\n that.add(data);\n that.prefetch.store(that.index.serialize());\n deferred.resolve();\n }\n },\n _initialize: function initialize() {\n var that = this, deferred;\n this.clear();\n (this.initPromise = this._loadPrefetch()).done(addLocalToIndex);\n return this.initPromise;\n function addLocalToIndex() {\n that.add(that.local);\n }\n },\n initialize: function initialize(force) {\n return !this.initPromise || force ? this._initialize() : this.initPromise;\n },\n add: function add(data) {\n this.index.add(data);\n return this;\n },\n get: function get(ids) {\n ids = _.isArray(ids) ? ids : [].slice.call(arguments);\n return this.index.get(ids);\n },\n search: function search(query, sync, async) {\n var that = this, local;\n local = this.sorter(this.index.search(query));\n sync(this.remote ? local.slice() : local);\n if (this.remote && local.length < this.sufficient) {\n this.remote.get(query, processRemote);\n } else if (this.remote) {\n this.remote.cancelLastRequest();\n }\n return this;\n function processRemote(remote) {\n var nonDuplicates = [];\n _.each(remote, function(r) {\n !_.some(local, function(l) {\n return that.identify(r) === that.identify(l);\n }) && nonDuplicates.push(r);\n });\n async && async(nonDuplicates);\n }\n },\n all: function all() {\n return this.index.all();\n },\n clear: function clear() {\n this.index.reset();\n return this;\n },\n clearPrefetchCache: function clearPrefetchCache() {\n this.prefetch && this.prefetch.clear();\n return this;\n },\n clearRemoteCache: function clearRemoteCache() {\n Transport.resetCache();\n return this;\n },\n ttAdapter: function ttAdapter() {\n return this.__ttAdapter();\n }\n });\n return Bloodhound;\n }();\n return Bloodhound;\n});"],"names":["root","factory","define","amd","a0","exports","module","require","jQuery","this","$","_","isMsie","test","navigator","userAgent","match","isBlankString","str","escapeRegExChars","replace","isString","obj","isNumber","isArray","isFunction","isObject","isPlainObject","isUndefined","isElement","nodeType","isJQuery","toStr","s","bind","proxy","each","collection","cb","index","value","map","filter","grep","every","result","key","val","call","some","mixin","extend","identity","x","clone","getIdGenerator","counter","templatify","String","defer","fn","setTimeout","debounce","func","wait","immediate","timeout","context","args","arguments","later","apply","callNow","clearTimeout","throttle","previous","Date","now","remaining","stringify","JSON","noop","tokenizers","nonword","whitespace","getObjTokenizer","split","tokenizer","keys","slice","o","tokens","k","concat","LruCache","maxSize","reset","set","get","List","head","tail","Node","prev","next","prototype","tailItem","list","size","remove","hash","node","moveToFront","add","PersistentStorage","LOCAL_STORAGE","window","localStorage","setItem","removeItem","err","namespace","override","prefix","join","ttlKey","keyMatcher","RegExp","ls","_noop","_prefix","_ttlKey","clear","isExpired","_safeSet","name","decode","getItem","ttl","encode","i","len","length","push","getTime","parseJSON","Transport","pendingRequestsCount","pendingRequests","maxPendingRequests","sharedCache","cancelled","lastReq","_send","transport","_get","limiter","_cache","cache","setMaxPendingRequests","num","resetCache","_fingerprint","url","type","param","data","fingerprint","jqXhr","that","done","resp","fail","always","onDeckRequestArgs","cancel","SearchIndex","datumTokenizer","queryTokenizer","error","identify","bootstrap","datums","trie","datum","id","normalizeTokens","token","ch","chars","shift","newNode","ids","search","query","matches","arrayA","arrayB","ai","bi","intersection","lenArrayA","sort","lenArrayB","array","seen","uniques","all","values","serialize","toLowerCase","c","Prefetch","prepare","transform","thumbprint","storage","cacheKey","protocol","_settings","dataType","store","location","fromCache","stored","fromNetwork","settings","Remote","cancelLastRequest","oParser","sorter","defaults","initialize","sufficient","local","prefetch","remote","callbackToDeferred","ajax","wildcard","rateLimitBy","rateLimitWait","encodeURIComponent","method","deferred","Deferred","resolve","reject","old","Bloodhound","noConflict","__ttAdapter","sync","async","_loadPrefetch","serialized","promise","_initialize","initPromise","force","nonDuplicates","r","l","clearPrefetchCache","clearRemoteCache","ttAdapter"],"mappings":"AAMA,CAAA,SAAUA,EAAMC,GACU,YAAlB,OAAOC,QAAyBA,OAAOC,IACvCD,OAAO,aAAc,CAAE,UAAY,SAASE,GACxC,OAAOJ,EAAiB,WAAIC,EAAQG,CAAE,CAC1C,CAAC,EACyB,UAAnB,OAAOC,QACdC,OAAOD,QAAUJ,EAAQM,QAAQ,QAAQ,CAAC,EAE1CP,EAAiB,WAAIC,EAAQO,MAAM,CAE1C,EAAEC,KAAM,SAASC,GACd,IAAIC,EAAI,WACJ,aACA,MAAO,CACHC,OAAQ,WACJ,MAAO,CAAA,CAAA,kBAAkBC,KAAKC,UAAUC,SAAS,GAAID,UAAUC,UAAUC,MAAM,0BAA0B,EAAE,EAC/G,EACAC,cAAe,SAASC,GACpB,MAAO,CAACA,GAAO,QAAQL,KAAKK,CAAG,CACnC,EACAC,iBAAkB,SAASD,GACvB,OAAOA,EAAIE,QAAQ,sCAAuC,MAAM,CACpE,EACAC,SAAU,SAASC,GACf,MAAsB,UAAf,OAAOA,CAClB,EACAC,SAAU,SAASD,GACf,MAAsB,UAAf,OAAOA,CAClB,EACAE,QAASd,EAAEc,QACXC,WAAYf,EAAEe,WACdC,SAAUhB,EAAEiB,cACZC,YAAa,SAASN,GAClB,OAAsB,KAAA,IAARA,CAClB,EACAO,UAAW,SAASP,GAChB,MAAO,EAAGA,CAAAA,GAAwB,IAAjBA,EAAIQ,SACzB,EACAC,SAAU,SAAST,GACf,OAAOA,aAAeZ,CAC1B,EACAsB,MAAO,SAAeC,GAClB,OAAOtB,EAAEiB,YAAYK,CAAC,GAAW,OAANA,EAAa,GAAKA,EAAI,EACrD,EACAC,KAAMxB,EAAEyB,MACRC,KAAM,SAASC,EAAYC,GACvB5B,EAAE0B,KAAKC,EACP,SAAqBE,EAAOC,GACxB,OAAOF,EAAGE,EAAOD,CAAK,CAC1B,CAH8B,CAIlC,EACAE,IAAK/B,EAAE+B,IACPC,OAAQhC,EAAEiC,KACVC,MAAO,SAAStB,EAAKT,GACjB,IAAIgC,EAAS,CAAA,EACb,OAAKvB,GAGLZ,EAAE0B,KAAKd,EAAK,SAASwB,EAAKC,GACtB,GAAI,EAAEF,EAAShC,EAAKmC,KAAK,KAAMD,EAAKD,EAAKxB,CAAG,GACxC,MAAO,CAAA,CAEf,CAAC,EACM,CAAC,CAACuB,GAPEA,CAQf,EACAI,KAAM,SAAS3B,EAAKT,GAChB,IAAIgC,EAAS,CAAA,EACb,OAAKvB,GAGLZ,EAAE0B,KAAKd,EAAK,SAASwB,EAAKC,GACtB,GAAIF,EAAShC,EAAKmC,KAAK,KAAMD,EAAKD,EAAKxB,CAAG,EACtC,MAAO,CAAA,CAEf,CAAC,EACM,CAAC,CAACuB,GAPEA,CAQf,EACAK,MAAOxC,EAAEyC,OACTC,SAAU,SAASC,GACf,OAAOA,CACX,EACAC,MAAO,SAAShC,GACZ,OAAOZ,EAAEyC,OAAO,CAAA,EAAM,GAAI7B,CAAG,CACjC,EACAiC,eAAgB,WACZ,IAAIC,EAAU,EACd,OAAO,WACH,OAAOA,CAAO,EAClB,CACJ,EACAC,WAAY,SAAoBnC,GAC5B,OAAOZ,EAAEe,WAAWH,CAAG,EAAIA,EAC3B,WACI,OAAOoC,OAAOpC,CAAG,CACrB,CACJ,EACAqC,MAAO,SAASC,GACZC,WAAWD,EAAI,CAAC,CACpB,EACAE,SAAU,SAASC,EAAMC,EAAMC,GAC3B,IAAIC,EAASrB,EACb,OAAO,WACH,IAAIsB,EAAU1D,KAAM2D,EAAOC,UAC3BC,EAAQ,WACJJ,EAAU,KACLD,IACDpB,EAASkB,EAAKQ,MAAMJ,EAASC,CAAI,EAEzC,EACAI,EAAUP,GAAa,CAACC,EAMxB,OALAO,aAAaP,CAAO,EACpBA,EAAUL,WAAWS,EAAON,CAAI,EAE5BnB,EADA2B,EACST,EAAKQ,MAAMJ,EAASC,CAAI,EAE9BvB,CACX,CACJ,EACA6B,SAAU,SAASX,EAAMC,GACrB,IAAIG,EAASC,EAAMF,EAASrB,EAC5B8B,EAAW,EACXL,EAAQ,WACJK,EAAW,IAAIC,KACfV,EAAU,KACVrB,EAASkB,EAAKQ,MAAMJ,EAASC,CAAI,CACrC,EACA,OAAO,WACH,IAAIS,EAAM,IAAID,KAAQE,EAAYd,GAAQa,EAAMF,GAWhD,OAVAR,EAAU1D,KACV2D,EAAOC,UACHS,GAAa,GACbL,aAAaP,CAAO,EACpBA,EAAU,KACVS,EAAWE,EACXhC,EAASkB,EAAKQ,MAAMJ,EAASC,CAAI,GACzBF,EAAAA,GACEL,WAAWS,EAAOQ,CAAS,EAElCjC,CACX,CACJ,EACAkC,UAAW,SAAShC,GAChB,OAAOpC,EAAEU,SAAS0B,CAAG,EAAIA,EAAMiC,KAAKD,UAAUhC,CAAG,CACrD,EACAkC,KAAM,YACV,CACJ,EAAE,EAEEC,EAAa,WACb,aACA,MAAO,CACHC,QAASA,EACTC,WAAYA,EACZ9D,IAAK,CACD6D,QAASE,EAAgBF,CAAO,EAChCC,WAAYC,EAAgBD,CAAU,CAC1C,CACJ,EACA,SAASA,EAAWlE,GAEhB,OADAA,EAAMP,EAAEqB,MAAMd,CAAG,GACJA,EAAIoE,MAAM,KAAK,EAAI,EACpC,CACA,SAASH,EAAQjE,GAEb,OADAA,EAAMP,EAAEqB,MAAMd,CAAG,GACJA,EAAIoE,MAAM,KAAK,EAAI,EACpC,CACA,SAASD,EAAgBE,GACrB,OAAO,SAAgBC,GAEnB,OADAA,EAAO7E,EAAEa,QAAQgE,CAAI,EAAIA,EAAO,GAAGC,MAAMzC,KAAKqB,UAAW,CAAC,EACnD,SAAkBqB,GACrB,IAAIC,EAAS,GAIb,OAHAhF,EAAEyB,KAAKoD,EAAM,SAASI,GAClBD,EAASA,EAAOE,OAAON,EAAU5E,EAAEqB,MAAM0D,EAAEE,EAAE,CAAC,CAAC,CACnD,CAAC,EACMD,CACX,CACJ,CACJ,CACJ,EAAE,EACEG,EAAW,WACX,aACA,SAASA,EAASC,GACdtF,KAAKsF,QAAUpF,EAAEY,SAASwE,CAAO,EAAIA,EAAU,IAC/CtF,KAAKuF,MAAM,EACPvF,KAAKsF,SAAW,IAChBtF,KAAKwF,IAAMxF,KAAKyF,IAAMxF,EAAEuE,KAEhC,CAgCA,SAASkB,IACL1F,KAAK2F,KAAO3F,KAAK4F,KAAO,IAC5B,CAmBA,SAASC,EAAKxD,EAAKC,GACftC,KAAKqC,IAAMA,EACXrC,KAAKsC,IAAMA,EACXtC,KAAK8F,KAAO9F,KAAK+F,KAAO,IAC5B,CACA,OAzDA7F,EAAEuC,MAAM4C,EAASW,UAAW,CACxBR,IAAK,SAAanD,EAAKC,GACnB,IAAI2D,EAAWjG,KAAKkG,KAAKN,KACrB5F,KAAKmG,MAAQnG,KAAKsF,UAClBtF,KAAKkG,KAAKE,OAAOH,CAAQ,EACzB,OAAOjG,KAAKqG,KAAKJ,EAAS5D,KAC1BrC,KAAKmG,IAAI,KAETG,EAAOtG,KAAKqG,KAAKhE,KACjBiE,EAAKhE,IAAMA,EACXtC,KAAKkG,KAAKK,YAAYD,CAAI,IAE1BA,EAAO,IAAIT,EAAKxD,EAAKC,CAAG,EACxBtC,KAAKkG,KAAKM,IAAIF,CAAI,EAClBtG,KAAKqG,KAAKhE,GAAOiE,EACjBtG,KAAKmG,IAAI,GAEjB,EACAV,IAAK,SAAapD,GACViE,EAAOtG,KAAKqG,KAAKhE,GACrB,GAAIiE,EAEA,OADAtG,KAAKkG,KAAKK,YAAYD,CAAI,EACnBA,EAAKhE,GAEpB,EACAiD,MAAO,WACHvF,KAAKmG,KAAO,EACZnG,KAAKqG,KAAO,GACZrG,KAAKkG,KAAO,IAAIR,CACpB,CACJ,CAAC,EAIDxF,EAAEuC,MAAMiD,EAAKM,UAAW,CACpBQ,IAAK,SAAaF,GACVtG,KAAK2F,OACLW,EAAKP,KAAO/F,KAAK2F,KACjB3F,KAAK2F,KAAKG,KAAOQ,GAErBtG,KAAK2F,KAAOW,EACZtG,KAAK4F,KAAO5F,KAAK4F,MAAQU,CAC7B,EACAF,OAAQ,SAAgBE,GACpBA,EAAKR,KAAOQ,EAAKR,KAAKC,KAAOO,EAAKP,KAAO/F,KAAK2F,KAAOW,EAAKP,KAC1DO,EAAKP,KAAOO,EAAKP,KAAKD,KAAOQ,EAAKR,KAAO9F,KAAK4F,KAAOU,EAAKR,IAC9D,EACAS,YAAa,SAASD,GAClBtG,KAAKoG,OAAOE,CAAI,EAChBtG,KAAKwG,IAAIF,CAAI,CACjB,CACJ,CAAC,EAMMjB,CACX,EAAE,EACEoB,EAAoB,WACpB,aACA,IAAIC,EACJ,KACIA,EAAgBC,OAAOC,cACTC,QAAQ,MAAO,GAAG,EAChCH,EAAcI,WAAW,KAAK,CAGlC,CAFE,MAAOC,GACLL,EAAgB,IACpB,CACA,SAASD,EAAkBO,EAAWC,GAClCjH,KAAKkH,OAAS,CAAE,KAAMF,EAAW,MAAOG,KAAK,EAAE,EAC/CnH,KAAKoH,OAAS,UACdpH,KAAKqH,WAAa,IAAIC,OAAO,IAAMpH,EAAEQ,iBAAiBV,KAAKkH,MAAM,CAAC,EAClElH,KAAKuH,GAAKN,GAAYP,EACrB1G,KAAKuH,IAAMvH,KAAKwH,MAAM,CAC3B,CAoDA,OAnDAtH,EAAEuC,MAAMgE,EAAkBT,UAAW,CACjCyB,QAAS,SAASpF,GACd,OAAOrC,KAAKkH,OAAS7E,CACzB,EACAqF,QAAS,SAASrF,GACd,OAAOrC,KAAKyH,QAAQpF,CAAG,EAAIrC,KAAKoH,MACpC,EACAI,MAAO,WACHxH,KAAKyF,IAAMzF,KAAKwF,IAAMxF,KAAKoG,OAASpG,KAAK2H,MAAQ3H,KAAK4H,UAAY1H,EAAEsE,IACxE,EACAqD,SAAU,SAASxF,EAAKC,GACpB,IACItC,KAAKuH,GAAGV,QAAQxE,EAAKC,CAAG,CAM5B,CALE,MAAOyE,GACY,uBAAbA,EAAIe,OACJ9H,KAAK2H,MAAM,EACX3H,KAAKwH,MAAM,EAEnB,CACJ,EACA/B,IAAK,SAASpD,GAIV,OAHIrC,KAAK4H,UAAUvF,CAAG,GAClBrC,KAAKoG,OAAO/D,CAAG,EAEZ0F,EAAO/H,KAAKuH,GAAGS,QAAQhI,KAAKyH,QAAQpF,CAAG,CAAC,CAAC,CACpD,EACAmD,IAAK,SAASnD,EAAKC,EAAK2F,GAMpB,OALI/H,EAAEY,SAASmH,CAAG,EACdjI,KAAK6H,SAAS7H,KAAK0H,QAAQrF,CAAG,EAAG6F,EAAO9D,EAAI,EAAI6D,CAAG,CAAC,EAEpDjI,KAAKuH,GAAGT,WAAW9G,KAAK0H,QAAQrF,CAAG,CAAC,EAEjCrC,KAAK6H,SAAS7H,KAAKyH,QAAQpF,CAAG,EAAG6F,EAAO5F,CAAG,CAAC,CACvD,EACA8D,OAAQ,SAAS/D,GAGb,OAFArC,KAAKuH,GAAGT,WAAW9G,KAAK0H,QAAQrF,CAAG,CAAC,EACpCrC,KAAKuH,GAAGT,WAAW9G,KAAKyH,QAAQpF,CAAG,CAAC,EAC7BrC,IACX,EACA2H,MAAO,WAEH,IADA,IAAO5C,EAqBf,SAA4BsC,GACxB,IAAIc,EAAG9F,EAAK0C,EAAO,GAAIqD,EAAM1B,EAAc2B,OAC3C,IAAKF,EAAI,EAAGA,EAAIC,EAAKD,CAAC,IACb9F,EAAMqE,EAAcrE,IAAI8F,CAAC,GAAG5H,MAAM8G,CAAU,GAC7CtC,EAAKuD,KAAKjG,EAAI1B,QAAQ0G,EAAY,EAAE,CAAC,EAG7C,OAAOtC,CACX,EA7ByC/E,KAAKqH,UAAU,EAC3Cc,EAAIpD,EAAKsD,OAAQF,CAAC,IACnBnI,KAAKoG,OAAOrB,EAAKoD,EAAE,EAEvB,OAAOnI,IACX,EACA4H,UAAW,SAASvF,GACZ4F,EAAMF,EAAO/H,KAAKuH,GAAGS,QAAQhI,KAAK0H,QAAQrF,CAAG,CAAC,CAAC,EACnD,MAAOnC,CAAAA,EAAAA,EAAEY,SAASmH,CAAG,GAAK7D,EAAI,EAAI6D,EACtC,CACJ,CAAC,EACMxB,EACP,SAASrC,IACL,OAAO,IAAID,MAAOoE,QAAQ,CAC9B,CACA,SAASL,EAAO5F,GACZ,OAAOiC,KAAKD,UAAUpE,EAAEiB,YAAYmB,CAAG,EAAI,KAAOA,CAAG,CACzD,CACA,SAASyF,EAAOzF,GACZ,OAAOrC,EAAEuI,UAAUlG,CAAG,CAC1B,CAUJ,EAAE,EACEmG,EAAY,WACZ,aACA,IAAIC,EAAuB,EAAGC,EAAkB,GAAIC,EAAqB,EAAGC,EAAc,IAAIxD,EAAS,EAAE,EACzG,SAASoD,EAAUxD,GACfA,EAAIA,GAAK,GACTjF,KAAK8I,UAAY,CAAA,EACjB9I,KAAK+I,QAAU,KACf/I,KAAKgJ,MAAQ/D,EAAEgE,UACfjJ,KAAKkJ,KAAOjE,EAAEkE,QAAUlE,EAAEkE,QAAQnJ,KAAKkJ,IAAI,EAAIlJ,KAAKkJ,KACpDlJ,KAAKoJ,OAAqB,CAAA,IAAZnE,EAAEoE,MAAkB,IAAIhE,EAAS,CAAC,EAAIwD,CACxD,CA6DA,OA5DAJ,EAAUa,sBAAwB,SAA+BC,GAC7DX,EAAqBW,CACzB,EACAd,EAAUe,WAAa,WACnBX,EAAYtD,MAAM,CACtB,EACArF,EAAEuC,MAAMgG,EAAUzC,UAAW,CACzByD,aAAc,SAAqBxE,GAE/B,OADAA,EAAIA,GAAK,IACAyE,IAAMzE,EAAE0E,KAAO1J,EAAE2J,MAAM3E,EAAE4E,MAAQ,EAAE,CAChD,EACAX,KAAM,SAASjE,EAAGpD,GACd,IAAiBiI,EAAaC,EAA1BC,EAAOhK,KAaX,SAASiK,EAAKC,GACVrI,EAAG,KAAMqI,CAAI,EACbF,EAAKZ,OAAO5D,IAAIsE,EAAaI,CAAI,CACrC,CACA,SAASC,IACLtI,EAAG,CAAA,CAAI,CACX,CAlBAiI,EAAc9J,KAAKyJ,aAAaxE,CAAC,EAC7BjF,KAAK8I,WAAagB,IAAgB9J,KAAK+I,WAGvCgB,EAAQpB,EAAgBmB,IACxBC,EAAME,KAAKA,CAAI,EAAEE,KAAKA,CAAI,EACnBzB,EAAuBE,GAC9BF,CAAoB,GACpBC,EAAgBmB,GAAe9J,KAAKgJ,MAAM/D,CAAC,EAAEgF,KAAKA,CAAI,EAAEE,KAAKA,CAAI,EAAEC,OAWvE,WACI1B,CAAoB,GACpB,OAAOC,EAAgBmB,GACnBE,EAAKK,oBACLL,EAAKd,KAAKpF,MAAMkG,EAAMA,EAAKK,iBAAiB,EAC5CL,EAAKK,kBAAoB,KAEjC,CAlBoF,GAEhFrK,KAAKqK,kBAAoB,GAAGrF,MAAMzC,KAAKqB,UAAW,CAAC,EAiB3D,EACA6B,IAAK,SAASR,EAAGpD,GACb,IAAUiI,EACVjI,EAAKA,GAAM5B,EAAEuE,KACbS,EAAI/E,EAAEU,SAASqE,CAAC,EAAI,CAChByE,IAAKzE,CACT,EAAIA,GAAK,GACT6E,EAAc9J,KAAKyJ,aAAaxE,CAAC,EACjCjF,KAAK8I,UAAY,CAAA,EACjB9I,KAAK+I,QAAUe,GACXI,EAAOlK,KAAKoJ,OAAO3D,IAAIqE,CAAW,GAClCjI,EAAG,KAAMqI,CAAI,EAEblK,KAAKkJ,KAAKjE,EAAGpD,CAAE,CAEvB,EACAyI,OAAQ,WACJtK,KAAK8I,UAAY,CAAA,CACrB,CACJ,CAAC,EACML,CACX,EAAE,EACE8B,EAAc5D,OAAO4D,YAAc,WACnC,aAEA,SAASA,EAAYtF,IACjBA,EAAIA,GAAK,IACFuF,gBAAmBvF,EAAEwF,gBACxBxK,EAAEyK,MAAM,qDAAqD,EAEjE1K,KAAK2K,SAAW1F,EAAE0F,UAAYzK,EAAEoE,UAChCtE,KAAKwK,eAAiBvF,EAAEuF,eACxBxK,KAAKyK,eAAiBxF,EAAEwF,eACxBzK,KAAKuF,MAAM,CACf,CAyEA,OAxEArF,EAAEuC,MAAM8H,EAAYvE,UAAW,CAC3B4E,UAAW,SAAmB3F,GAC1BjF,KAAK6K,OAAS5F,EAAE4F,OAChB7K,KAAK8K,KAAO7F,EAAE6F,IAClB,EACAtE,IAAK,SAASqD,GACV,IAAIG,EAAOhK,KACX6J,EAAO3J,EAAEa,QAAQ8I,CAAI,EAAIA,EAAO,CAAEA,GAClC3J,EAAEyB,KAAKkI,EAAM,SAASkB,GAClB,IAAIC,EACJhB,EAAKa,OAAOG,EAAKhB,EAAKW,SAASI,CAAK,GAAKA,EACzC7F,EAAS+F,EAAgBjB,EAAKQ,eAAeO,CAAK,CAAC,EACnD7K,EAAEyB,KAAKuD,EAAQ,SAASgG,GAIpB,IAHA,IAAiBC,EACjB7E,EAAO0D,EAAKc,KACZM,EAAQF,EAAMrG,MAAM,EAAE,EACfsG,EAAKC,EAAMC,MAAM,IACpB/E,EAAOA,EAAa,EAAE6E,KAAQ7E,EAAa,EAAE6E,GAAMG,EAAQ,IACnD,EAAEhD,KAAK0C,CAAE,CAEzB,CAAC,CACL,CAAC,CACL,EACAvF,IAAK,SAAa8F,GACd,IAAIvB,EAAOhK,KACX,OAAOE,EAAE8B,IAAIuJ,EAAK,SAASP,GACvB,OAAOhB,EAAKa,OAAOG,EACvB,CAAC,CACL,EACAQ,OAAQ,SAAgBC,GACpB,IAAyBC,EAArB1B,EAAOhK,KACXkF,EAAS+F,EAAgBjL,KAAKyK,eAAegB,CAAK,CAAC,EAmBnD,OAlBAvL,EAAEyB,KAAKuD,EAAQ,SAASgG,GACpB,IAAI5E,EAAM8E,EAAOD,EACjB,GAAIO,GAA8B,IAAnBA,EAAQrD,OACnB,MAAO,CAAA,EAIX,IAFA/B,EAAO0D,EAAKc,KACZM,EAAQF,EAAMrG,MAAM,EAAE,EACfyB,IAAS6E,EAAKC,EAAMC,MAAM,IAC7B/E,EAAOA,EAAa,EAAE6E,GAE1B,GAAI7E,CAAAA,GAAyB,IAAjB8E,EAAM/C,OAKd,MAAO,EADPqD,EAAU,IAHVH,EAAMjF,EAAQ,EAAEtB,MAAM,CAAC,EACvB0G,EAAUA,EAsD1B,SAAyBC,EAAQC,GAC7B,IAAIC,EAAK,EAAGC,EAAK,EAAGC,EAAe,GAG/BC,GAFJL,EAASA,EAAOM,KAAK,EACrBL,EAASA,EAAOK,KAAK,EACLN,EAAOtD,QAAQ6D,EAAYN,EAAOvD,OAClD,KAAOwD,EAAKG,GAAaF,EAAKI,GACtBP,EAAOE,GAAMD,EAAOE,GACpBD,CAAE,IACKF,EAAOE,GAAMD,EAAOE,KAG3BC,EAAazD,KAAKqD,EAAOE,EAAG,EAC5BA,CAAE,IACFC,CAAE,IAGV,OAAOC,CACX,EAvEoDL,EAASH,CAAG,EAAIA,CAK5D,CAAC,EACMG,EAAUxL,EAAE8B,IAsC3B,SAAgBmK,GAEZ,IADA,IAAIC,EAAO,GAAIC,EAAU,GAChBlE,EAAI,EAAGC,EAAM+D,EAAM9D,OAAQF,EAAIC,EAAKD,CAAC,GACrCiE,EAAKD,EAAMhE,MACZiE,EAAKD,EAAMhE,IAAM,CAAA,EACjBkE,EAAQ/D,KAAK6D,EAAMhE,EAAE,GAG7B,OAAOkE,CACX,EA/CsCX,CAAO,EAAG,SAASV,GAC7C,OAAOhB,EAAKa,OAAOG,EACvB,CAAC,EAAI,EACT,EACAsB,IAAK,WACD,IACSjK,EADLkK,EAAS,GACb,IAASlK,KAAOrC,KAAK6K,OACjB0B,EAAOjE,KAAKtI,KAAK6K,OAAOxI,EAAI,EAEhC,OAAOkK,CACX,EACAhH,MAAO,WACHvF,KAAK6K,OAAS,GACd7K,KAAK8K,KAAOQ,EAAQ,CACxB,EACAkB,UAAW,WACP,MAAO,CACH3B,OAAQ7K,KAAK6K,OACbC,KAAM9K,KAAK8K,IACf,CACJ,CACJ,CAAC,EACMP,EACP,SAASU,EAAgB/F,GAOrB,OANAA,EAAShF,EAAE+B,OAAOiD,EAAQ,SAASgG,GAC/B,MAAO,CAAC,CAACA,CACb,CAAC,EACDhG,EAAShF,EAAE8B,IAAIkD,EAAQ,SAASgG,GAC5B,OAAOA,EAAMuB,YAAY,CAC7B,CAAC,CAEL,CACA,SAASnB,IACL,IAAIhF,EAAO,CACX6B,EAAY,GACZuE,EAAiB,EAFL,EAGZ,OAAOpG,CACX,CA6BJ,EAAE,EACEqG,EAAW,WACX,aACA,IAAI5H,EAMJ,SAAS4H,EAAS1H,GACdjF,KAAK0J,IAAMzE,EAAEyE,IACb1J,KAAKiI,IAAMhD,EAAEgD,IACbjI,KAAKqJ,MAAQpE,EAAEoE,MACfrJ,KAAK4M,QAAU3H,EAAE2H,QACjB5M,KAAK6M,UAAY5H,EAAE4H,UACnB7M,KAAKiJ,UAAYhE,EAAEgE,UACnBjJ,KAAK8M,WAAa7H,EAAE6H,WACpB9M,KAAK+M,QAAU,IAAItG,EAAkBxB,EAAE+H,QAAQ,CACnD,CA+CA,OA7DAjI,EAAO,CACH8E,KAAM,OACNoD,SAAU,WACVH,WAAY,YAChB,EAWA5M,EAAEuC,MAAMkK,EAAS3G,UAAW,CACxBkH,UAAW,WACP,MAAO,CACHxD,IAAK1J,KAAK0J,IACVC,KAAM,MACNwD,SAAU,MACd,CACJ,EACAC,MAAO,SAAevD,GACb7J,KAAKqJ,QAGVrJ,KAAK+M,QAAQvH,IAAIT,EAAK8E,KAAMA,EAAM7J,KAAKiI,GAAG,EAC1CjI,KAAK+M,QAAQvH,IAAIT,EAAKkI,SAAUI,SAASJ,SAAUjN,KAAKiI,GAAG,EAC3DjI,KAAK+M,QAAQvH,IAAIT,EAAK+H,WAAY9M,KAAK8M,WAAY9M,KAAKiI,GAAG,EAC/D,EACAqF,UAAW,WACP,IAAiB1F,EAAb2F,EAAS,GACb,OAAKvN,KAAKqJ,QAGVkE,EAAO1D,KAAO7J,KAAK+M,QAAQtH,IAAIV,EAAK8E,IAAI,EACxC0D,EAAON,SAAWjN,KAAK+M,QAAQtH,IAAIV,EAAKkI,QAAQ,EAChDM,EAAOT,WAAa9M,KAAK+M,QAAQtH,IAAIV,EAAK+H,UAAU,EACpDlF,EAAY2F,EAAOT,aAAe9M,KAAK8M,YAAcS,EAAON,WAAaI,SAASJ,SAC3EM,EAAO1D,OAAQ,CAACjC,EAAY2F,EAAO1D,KAN/B,IAOf,EACA2D,YAAa,SAAS3L,GAClB,IAAiB4L,EAAbzD,EAAOhK,KACN6B,IAGL4L,EAAWzN,KAAK4M,QAAQ5M,KAAKkN,UAAU,CAAC,EACxClN,KAAKiJ,UAAUwE,CAAQ,EAAEtD,KACzB,WACItI,EAAG,CAAA,CAAI,CACX,CAHqC,EAAEoI,KAIvC,SAAoBC,GAChBrI,EAAG,KAAMmI,EAAK6C,UAAU3C,CAAI,CAAC,CACjC,CANsD,EAO1D,EACAvC,MAAO,WAEH,OADA3H,KAAK+M,QAAQpF,MAAM,EACZ3H,IACX,CACJ,CAAC,EACM2M,CACX,EAAE,EACEe,EAAS,WACT,aACA,SAASA,EAAOzI,GACZjF,KAAK0J,IAAMzE,EAAEyE,IACb1J,KAAK4M,QAAU3H,EAAE2H,QACjB5M,KAAK6M,UAAY5H,EAAE4H,UACnB7M,KAAKiJ,UAAY,IAAIR,EAAU,CAC3BY,MAAOpE,EAAEoE,MACTF,QAASlE,EAAEkE,QACXF,UAAWhE,EAAEgE,SACjB,CAAC,CACL,CAyBA,OAxBA/I,EAAEuC,MAAMiL,EAAO1H,UAAW,CACtBkH,UAAW,WACP,MAAO,CACHxD,IAAK1J,KAAK0J,IACVC,KAAM,MACNwD,SAAU,MACd,CACJ,EACA1H,IAAK,SAAagG,EAAO5J,GACrB,IAAImI,EAAOhK,KACX,GAAK6B,EAKL,OADA4L,EAAWzN,KAAK4M,QADhBnB,EAAQA,GAAS,GACczL,KAAKkN,UAAU,CAAC,EACxClN,KAAKiJ,UAAUxD,IAAIgI,EAC1B,SAAoB1G,EAAKmD,GACfrI,EAANkF,EAAS,GAASiD,EAAK6C,UAAU3C,CAAI,CAA1B,CACf,CAH8C,CAIlD,EACAyD,kBAAmB,WACf3N,KAAKiJ,UAAUqB,OAAO,CAC1B,CACJ,CAAC,EACMoD,CACX,EAAE,EACEE,EAAU,WACV,aACA,OAAO,SAAe3I,GAClB,IAAc4I,EAyBVC,EAxBJA,EAAW,CACPC,WAAY,CAAA,EACZpD,SAAUzK,EAAEoE,UACZkG,eAAgB,KAChBC,eAAgB,KAChBuD,WAAY,EACZH,OAAQ,KACRI,MAAO,GACPC,SAAU,KACVC,OAAQ,IACZ,EAWA,OAVAlJ,EAAI/E,EAAEuC,MAAMqL,EAAU7I,GAAK,EAAE,GAC1BuF,gBAAkBvK,EAAEyK,MAAM,4BAA4B,EACxDzF,EAAEwF,gBAAkBxK,EAAEyK,MAAM,4BAA4B,EACzDmD,EAAS5I,EAAE4I,OACX5I,EAAE4I,OAASA,EAAS,SAASjL,GACzB,OAAOA,EAAEqJ,KAAK4B,CAAM,CACxB,EAAI3N,EAAEyC,SACNsC,EAAEgJ,MAAQ/N,EAAEc,WAAWiE,EAAEgJ,KAAK,EAAIhJ,EAAEgJ,MAAM,EAAIhJ,EAAEgJ,MAChDhJ,EAAEiJ,UAIiBjJ,EAJQA,EAAEiJ,WAS7BJ,EAAW,CACPpE,IAAK,KACLzB,IAAK,MACLoB,MAAO,CAAA,EACP2D,SAAU,KACVF,WAAY,GACZF,QAAS1M,EAAEyC,SACXkK,UAAW3M,EAAEyC,SACbsG,UAAW,IACf,EACAhE,EAAI/E,EAAEU,SAASqE,CAAC,EAAI,CAChByE,IAAKzE,CACT,EAAIA,GACJA,EAAI/E,EAAEuC,MAAMqL,EAAU7I,CAAC,GACpByE,KAAOzJ,EAAEyK,MAAM,iCAAiC,EACnDzF,EAAE4H,UAAY5H,EAAEhD,QAAUgD,EAAE4H,UAC5B5H,EAAE+H,SAAW/H,EAAE+H,UAAY/H,EAAEyE,IAC7BzE,EAAE6H,WAhiBI,SAgiBmB7H,EAAE6H,WAC3B7H,EAAEgE,UAAYhE,EAAEgE,UAAYmF,EAAmBnJ,EAAEgE,SAAS,EAAIhJ,EAAEoO,KACzDpJ,GArBI,KANXA,EAAEkJ,OA6BN,SAAqBlJ,GACjB,IAAI6I,EACJ,GAAK7I,EA4BL,OAzBA6I,EAAW,CACPpE,IAAK,KACLL,MAAO,CAAA,EACPuD,QAAS,KACTjM,QAAS,KACT2N,SAAU,KACVnF,QAAS,KACToF,YAAa,WACbC,cAAe,IACf3B,UAAW3M,EAAEyC,SACbsG,UAAW,IACf,EACAhE,EAAI/E,EAAEU,SAASqE,CAAC,EAAI,CAChByE,IAAKzE,CACT,EAAIA,GACJA,EAAI/E,EAAEuC,MAAMqL,EAAU7I,CAAC,GACpByE,KAAOzJ,EAAEyK,MAAM,+BAA+B,EACjDzF,EAAE4H,UAAY5H,EAAEhD,QAAUgD,EAAE4H,UAC5B5H,EAAE2H,QASN,SAAyB3H,GACrB,IAAI2H,EAASjM,EAAS2N,EActB,OAbA1B,EAAU3H,EAAE2H,QACZjM,EAAUsE,EAAEtE,QACZ2N,EAAWrJ,EAAEqJ,SACT1B,EAAAA,IAGAjM,EAQJ,SAA0B8K,EAAOgC,GAE7B,OADAA,EAAS/D,IAAM/I,EAAQ8M,EAAS/D,IAAK+B,CAAK,EACnCgC,CACX,EATWxI,EAAEqJ,SAUb,SAA2B7C,EAAOgC,GAE9B,OADAA,EAAS/D,IAAM+D,EAAS/D,IAAI/I,QAAQ2N,EAAUG,mBAAmBhD,CAAK,CAAC,EAChEgC,CACX,EACA,SAAwBhC,EAAOgC,GAC3B,OAAOA,CACX,EACJ,EApCgCxI,CAAC,EAC7BA,EAAEkE,QAoCN,SAAmBlE,GACf,IAAIkE,EAASuF,EACbvF,EAAUlE,EAAEkE,QACZuF,EAASzJ,EAAEsJ,YACXhL,EAAO0B,EAAEuJ,cACJrF,EAAAA,IACS,cAAc/I,KAAKsO,CAAM,EAQvC,SAAkBnL,GACd,OAAO,SAAkBJ,GACrB,OAAOjD,EAAE+D,SAASd,EAAII,CAAI,CAC9B,CACJ,EATA,SAAkBA,GACd,OAAO,SAAkBJ,GACrB,OAAOjD,EAAEmD,SAASF,EAAII,CAAI,CAC9B,CACJ,GAPoDA,CAAI,EAExD,OAAO4F,CAWX,EAvD0BlE,CAAC,EACvBA,EAAEgE,UAAYhE,EAAEgE,UAAYmF,EAAmBnJ,EAAEgE,SAAS,EAAIhJ,EAAEoO,KAChE,OAAOpJ,EAAEtE,QACT,OAAOsE,EAAEqJ,SACT,OAAOrJ,EAAEsJ,YACT,OAAOtJ,EAAEuJ,cACFvJ,CACX,EA5D2BA,EAAEkJ,MAAM,EACxBlJ,CACX,EA2GA,SAASmJ,EAAmBjL,GACxB,OAAO,SAAiB8B,GACpB,IAAI0J,EAAW1O,EAAE2O,SAAS,EAE1B,OADAzL,EAAG8B,EAEH,SAAmBiF,GACfhK,EAAEgD,MAAM,WACJyL,EAASE,QAAQ3E,CAAI,CACzB,CAAC,CACL,EACA,SAAiBnD,GACb7G,EAAEgD,MAAM,WACJyL,EAASG,OAAO/H,CAAG,CACvB,CAAC,CACL,CAXwB,EACjB4H,CAWX,CACJ,CACJ,EAAE,EAsHF,OArHiB,WACb,aACA,IAAII,EAEJ,SAASC,EAAW/J,GAChBA,EAAI2I,EAAQ3I,CAAC,EACbjF,KAAK6N,OAAS5I,EAAE4I,OAChB7N,KAAK2K,SAAW1F,EAAE0F,SAClB3K,KAAKgO,WAAa/I,EAAE+I,WACpBhO,KAAKiO,MAAQhJ,EAAEgJ,MACfjO,KAAKmO,OAASlJ,EAAEkJ,OAAS,IAAIT,EAAOzI,EAAEkJ,MAAM,EAAI,KAChDnO,KAAKkO,SAAWjJ,EAAEiJ,SAAW,IAAIvB,EAAS1H,EAAEiJ,QAAQ,EAAI,KACxDlO,KAAK8B,MAAQ,IAAIyI,EAAY,CACzBI,SAAU3K,KAAK2K,SACfH,eAAgBvF,EAAEuF,eAClBC,eAAgBxF,EAAEwF,cACtB,CAAC,EACgB,CAAA,IAAjBxF,EAAE8I,YAAwB/N,KAAK+N,WAAW,CAC9C,CAiGA,OAhHAgB,EAAMpI,QAAUA,OAAOqI,WAgBvBA,EAAWC,WAAa,WAEpB,OADAtI,SAAWA,OAAOqI,WAAaD,GACxBC,CACX,EACAA,EAAWvK,WAAaA,EACxBvE,EAAEuC,MAAMuM,EAAWhJ,UAAW,CAC1BkJ,YAAa,WACT,IAAIlF,EAAOhK,KACX,OAAOA,KAAKmO,OACZ,SAAmB1C,EAAO0D,EAAMC,GAC5B,OAAOpF,EAAKwB,OAAOC,EAAO0D,EAAMC,CAAK,CACzC,EACA,SAAsB3D,EAAO0D,GACzB,OAAOnF,EAAKwB,OAAOC,EAAO0D,CAAI,CAClC,CACJ,EACAE,cAAe,WACX,IAA2BC,EAAvBtF,EAAOhK,KACX2O,EAAW1O,EAAE2O,SAAS,EAStB,OARK5O,KAAKkO,UAECoB,EAAatP,KAAKkO,SAASZ,UAAU,IAC5CtN,KAAK8B,MAAM8I,UAAU0E,CAAU,EAC/BX,EAASE,QAAQ,GAEjB7O,KAAKkO,SAASV,YAGlB,SAAczG,EAAK8C,GACf,GAAI9C,EACA,OAAO4H,EAASG,OAAO,EAE3B9E,EAAKxD,IAAIqD,CAAI,EACbG,EAAKkE,SAASd,MAAMpD,EAAKlI,MAAM0K,UAAU,CAAC,EAC1CmC,EAASE,QAAQ,CACrB,CAVkC,EAL9BF,EAASE,QAAQ,EAOdF,EAASY,QAAQ,CAS5B,EACAC,YAAa,WACT,IAAIxF,EAAOhK,KAGX,OAFAA,KAAK2H,MAAM,GACV3H,KAAKyP,YAAczP,KAAKqP,cAAc,GAAGpF,KAE1C,WACID,EAAKxD,IAAIwD,EAAKiE,KAAK,CACvB,CAJ8D,EACvDjO,KAAKyP,WAIhB,EACA1B,WAAY,SAAoB2B,GAC5B,MAAO,CAAC1P,KAAKyP,aAAeC,EAAQ1P,KAAKwP,YAAY,EAAIxP,KAAKyP,WAClE,EACAjJ,IAAK,SAAaqD,GAEd,OADA7J,KAAK8B,MAAM0E,IAAIqD,CAAI,EACZ7J,IACX,EACAyF,IAAK,SAAa8F,GAEd,OADAA,EAAMrL,EAAEa,QAAQwK,CAAG,EAAIA,EAAM,GAAGvG,MAAMzC,KAAKqB,SAAS,EAC7C5D,KAAK8B,MAAM2D,IAAI8F,CAAG,CAC7B,EACAC,OAAQ,SAAgBC,EAAO0D,EAAMC,GACjC,IAAIpF,EAAOhK,KACXiO,EAAQjO,KAAK6N,OAAO7N,KAAK8B,MAAM0J,OAAOC,CAAK,CAAC,EAO5C,OANA0D,EAAKnP,KAAKmO,OAASF,EAAMjJ,MAAM,EAAIiJ,CAAK,EACpCjO,KAAKmO,QAAUF,EAAM5F,OAASrI,KAAKgO,WACnChO,KAAKmO,OAAO1I,IAAIgG,EAKpB,SAAuB0C,GACnB,IAAIwB,EAAgB,GACpBzP,EAAEyB,KAAKwM,EAAQ,SAASyB,GACnB1P,EAAEsC,KAAKyL,EAAO,SAAS4B,GACpB,OAAO7F,EAAKW,SAASiF,CAAC,IAAM5F,EAAKW,SAASkF,CAAC,CAC/C,CAAC,GAAKF,EAAcrH,KAAKsH,CAAC,CAC9B,CAAC,EACDR,GAASA,EAAMO,CAAa,CAChC,CAbwC,EAC7B3P,KAAKmO,QACZnO,KAAKmO,OAAOR,kBAAkB,EAE3B3N,IAUX,EACAsM,IAAK,WACD,OAAOtM,KAAK8B,MAAMwK,IAAI,CAC1B,EACA3E,MAAO,WAEH,OADA3H,KAAK8B,MAAMyD,MAAM,EACVvF,IACX,EACA8P,mBAAoB,WAEhB,OADA9P,KAAKkO,UAAYlO,KAAKkO,SAASvG,MAAM,EAC9B3H,IACX,EACA+P,iBAAkB,WAEd,OADAtH,EAAUe,WAAW,EACdxJ,IACX,EACAgQ,UAAW,WACP,OAAOhQ,KAAKkP,YAAY,CAC5B,CACJ,CAAC,EACMF,CACX,EAAE,CAEN,CAAC"}