Xdg.Directories/public/search-worker.min.js.map
2024-04-06 13:06:39 +00:00

8 lines
226 KiB
Plaintext
Executable file

{
"version": 3,
"sources": ["../../node_modules/lunr/lunr.js", "../../node_modules/lunr-languages/lunr.stemmer.support.js", "../../node_modules/lunr-languages/tinyseg.js", "../../node_modules/lunr-languages/lunr.multi.js", "../src/search-worker.ts", "../../node_modules/idb-keyval/dist/index.js"],
"sourcesContent": ["/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9\n * Copyright (C) 2020 Oliver Nightingale\n * @license MIT\n */\n\n;(function(){\n\n/**\n * A convenience function for configuring and constructing\n * a new lunr Index.\n *\n * A lunr.Builder instance is created and the pipeline setup\n * with a trimmer, stop word filter and stemmer.\n *\n * This builder object is yielded to the configuration function\n * that is passed as a parameter, allowing the list of fields\n * and other builder parameters to be customised.\n *\n * All documents _must_ be added within the passed config function.\n *\n * @example\n * var idx = lunr(function () {\n * this.field('title')\n * this.field('body')\n * this.ref('id')\n *\n * documents.forEach(function (doc) {\n * this.add(doc)\n * }, this)\n * })\n *\n * @see {@link lunr.Builder}\n * @see {@link lunr.Pipeline}\n * @see {@link lunr.trimmer}\n * @see {@link lunr.stopWordFilter}\n * @see {@link lunr.stemmer}\n * @namespace {function} lunr\n */\nvar lunr = function (config) {\n var builder = new lunr.Builder\n\n builder.pipeline.add(\n lunr.trimmer,\n lunr.stopWordFilter,\n lunr.stemmer\n )\n\n builder.searchPipeline.add(\n lunr.stemmer\n )\n\n config.call(builder, builder)\n return builder.build()\n}\n\nlunr.version = \"2.3.9\"\n/*!\n * lunr.utils\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A namespace containing utils for the rest of the lunr library\n * @namespace lunr.utils\n */\nlunr.utils = {}\n\n/**\n * Print a warning message to the console.\n *\n * @param {String} message The message to be printed.\n * @memberOf lunr.utils\n * @function\n */\nlunr.utils.warn = (function (global) {\n /* eslint-disable no-console */\n return function (message) {\n if (global.console && console.warn) {\n console.warn(message)\n }\n }\n /* eslint-enable no-console */\n})(this)\n\n/**\n * Convert an object to a string.\n *\n * In the case of `null` and `undefined` the function returns\n * the empty string, in all other cases the result of calling\n * `toString` on the passed object is returned.\n *\n * @param {Any} obj The object to convert to a string.\n * @return {String} string representation of the passed object.\n * @memberOf lunr.utils\n */\nlunr.utils.asString = function (obj) {\n if (obj === void 0 || obj === null) {\n return \"\"\n } else {\n return obj.toString()\n }\n}\n\n/**\n * Clones an object.\n *\n * Will create a copy of an existing object such that any mutations\n * on the copy cannot affect the original.\n *\n * Only shallow objects are supported, passing a nested object to this\n * function will cause a TypeError.\n *\n * Objects with primitives, and arrays of primitives are supported.\n *\n * @param {Object} obj The object to clone.\n * @return {Object} a clone of the passed object.\n * @throws {TypeError} when a nested object is passed.\n * @memberOf Utils\n */\nlunr.utils.clone = function (obj) {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n var clone = Object.create(null),\n keys = Object.keys(obj)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i],\n val = obj[key]\n\n if (Array.isArray(val)) {\n clone[key] = val.slice()\n continue\n }\n\n if (typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean') {\n clone[key] = val\n continue\n }\n\n throw new TypeError(\"clone is not deep and does not support nested objects\")\n }\n\n return clone\n}\nlunr.FieldRef = function (docRef, fieldName, stringValue) {\n this.docRef = docRef\n this.fieldName = fieldName\n this._stringValue = stringValue\n}\n\nlunr.FieldRef.joiner = \"/\"\n\nlunr.FieldRef.fromString = function (s) {\n var n = s.indexOf(lunr.FieldRef.joiner)\n\n if (n === -1) {\n throw \"malformed field ref string\"\n }\n\n var fieldRef = s.slice(0, n),\n docRef = s.slice(n + 1)\n\n return new lunr.FieldRef (docRef, fieldRef, s)\n}\n\nlunr.FieldRef.prototype.toString = function () {\n if (this._stringValue == undefined) {\n this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef\n }\n\n return this._stringValue\n}\n/*!\n * lunr.Set\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A lunr set.\n *\n * @constructor\n */\nlunr.Set = function (elements) {\n this.elements = Object.create(null)\n\n if (elements) {\n this.length = elements.length\n\n for (var i = 0; i < this.length; i++) {\n this.elements[elements[i]] = true\n }\n } else {\n this.length = 0\n }\n}\n\n/**\n * A complete set that contains all elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.complete = {\n intersect: function (other) {\n return other\n },\n\n union: function () {\n return this\n },\n\n contains: function () {\n return true\n }\n}\n\n/**\n * An empty set that contains no elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.empty = {\n intersect: function () {\n return this\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return false\n }\n}\n\n/**\n * Returns true if this set contains the specified object.\n *\n * @param {object} object - Object whose presence in this set is to be tested.\n * @returns {boolean} - True if this set contains the specified object.\n */\nlunr.Set.prototype.contains = function (object) {\n return !!this.elements[object]\n}\n\n/**\n * Returns a new set containing only the elements that are present in both\n * this set and the specified set.\n *\n * @param {lunr.Set} other - set to intersect with this set.\n * @returns {lunr.Set} a new set that is the intersection of this and the specified set.\n */\n\nlunr.Set.prototype.intersect = function (other) {\n var a, b, elements, intersection = []\n\n if (other === lunr.Set.complete) {\n return this\n }\n\n if (other === lunr.Set.empty) {\n return other\n }\n\n if (this.length < other.length) {\n a = this\n b = other\n } else {\n a = other\n b = this\n }\n\n elements = Object.keys(a.elements)\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i]\n if (element in b.elements) {\n intersection.push(element)\n }\n }\n\n return new lunr.Set (intersection)\n}\n\n/**\n * Returns a new set combining the elements of this and the specified set.\n *\n * @param {lunr.Set} other - set to union with this set.\n * @return {lunr.Set} a new set that is the union of this and the specified set.\n */\n\nlunr.Set.prototype.union = function (other) {\n if (other === lunr.Set.complete) {\n return lunr.Set.complete\n }\n\n if (other === lunr.Set.empty) {\n return this\n }\n\n return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))\n}\n/**\n * A function to calculate the inverse document frequency for\n * a posting. This is shared between the builder and the index\n *\n * @private\n * @param {object} posting - The posting for a given term\n * @param {number} documentCount - The total number of documents.\n */\nlunr.idf = function (posting, documentCount) {\n var documentsWithTerm = 0\n\n for (var fieldName in posting) {\n if (fieldName == '_index') continue // Ignore the term index, its not a field\n documentsWithTerm += Object.keys(posting[fieldName]).length\n }\n\n var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)\n\n return Math.log(1 + Math.abs(x))\n}\n\n/**\n * A token wraps a string representation of a token\n * as it is passed through the text processing pipeline.\n *\n * @constructor\n * @param {string} [str=''] - The string token being wrapped.\n * @param {object} [metadata={}] - Metadata associated with this token.\n */\nlunr.Token = function (str, metadata) {\n this.str = str || \"\"\n this.metadata = metadata || {}\n}\n\n/**\n * Returns the token string that is being wrapped by this object.\n *\n * @returns {string}\n */\nlunr.Token.prototype.toString = function () {\n return this.str\n}\n\n/**\n * A token update function is used when updating or optionally\n * when cloning a token.\n *\n * @callback lunr.Token~updateFunction\n * @param {string} str - The string representation of the token.\n * @param {Object} metadata - All metadata associated with this token.\n */\n\n/**\n * Applies the given function to the wrapped string token.\n *\n * @example\n * token.update(function (str, metadata) {\n * return str.toUpperCase()\n * })\n *\n * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.update = function (fn) {\n this.str = fn(this.str, this.metadata)\n return this\n}\n\n/**\n * Creates a clone of this token. Optionally a function can be\n * applied to the cloned token.\n *\n * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.clone = function (fn) {\n fn = fn || function (s) { return s }\n return new lunr.Token (fn(this.str, this.metadata), this.metadata)\n}\n/*!\n * lunr.tokenizer\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A function for splitting a string into tokens ready to be inserted into\n * the search index. Uses `lunr.tokenizer.separator` to split strings, change\n * the value of this property to change how strings are split into tokens.\n *\n * This tokenizer will convert its parameter to a string by calling `toString` and\n * then will split this string on the character in `lunr.tokenizer.separator`.\n * Arrays will have their elements converted to strings and wrapped in a lunr.Token.\n *\n * Optional metadata can be passed to the tokenizer, this metadata will be cloned and\n * added as metadata to every token that is created from the object to be tokenized.\n *\n * @static\n * @param {?(string|object|object[])} obj - The object to convert into tokens\n * @param {?object} metadata - Optional metadata to associate with every token\n * @returns {lunr.Token[]}\n * @see {@link lunr.Pipeline}\n */\nlunr.tokenizer = function (obj, metadata) {\n if (obj == null || obj == undefined) {\n return []\n }\n\n if (Array.isArray(obj)) {\n return obj.map(function (t) {\n return new lunr.Token(\n lunr.utils.asString(t).toLowerCase(),\n lunr.utils.clone(metadata)\n )\n })\n }\n\n var str = obj.toString().toLowerCase(),\n len = str.length,\n tokens = []\n\n for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {\n var char = str.charAt(sliceEnd),\n sliceLength = sliceEnd - sliceStart\n\n if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {\n\n if (sliceLength > 0) {\n var tokenMetadata = lunr.utils.clone(metadata) || {}\n tokenMetadata[\"position\"] = [sliceStart, sliceLength]\n tokenMetadata[\"index\"] = tokens.length\n\n tokens.push(\n new lunr.Token (\n str.slice(sliceStart, sliceEnd),\n tokenMetadata\n )\n )\n }\n\n sliceStart = sliceEnd + 1\n }\n\n }\n\n return tokens\n}\n\n/**\n * The separator used to split a string into tokens. Override this property to change the behaviour of\n * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.\n *\n * @static\n * @see lunr.tokenizer\n */\nlunr.tokenizer.separator = /[\\s\\-]+/\n/*!\n * lunr.Pipeline\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.Pipelines maintain an ordered list of functions to be applied to all\n * tokens in documents entering the search index and queries being ran against\n * the index.\n *\n * An instance of lunr.Index created with the lunr shortcut will contain a\n * pipeline with a stop word filter and an English language stemmer. Extra\n * functions can be added before or after either of these functions or these\n * default functions can be removed.\n *\n * When run the pipeline will call each function in turn, passing a token, the\n * index of that token in the original list of all tokens and finally a list of\n * all the original tokens.\n *\n * The output of functions in the pipeline will be passed to the next function\n * in the pipeline. To exclude a token from entering the index the function\n * should return undefined, the rest of the pipeline will not be called with\n * this token.\n *\n * For serialisation of pipelines to work, all functions used in an instance of\n * a pipeline should be registered with lunr.Pipeline. Registered functions can\n * then be loaded. If trying to load a serialised pipeline that uses functions\n * that are not registered an error will be thrown.\n *\n * If not planning on serialising the pipeline then registering pipeline functions\n * is not necessary.\n *\n * @constructor\n */\nlunr.Pipeline = function () {\n this._stack = []\n}\n\nlunr.Pipeline.registeredFunctions = Object.create(null)\n\n/**\n * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token\n * string as well as all known metadata. A pipeline function can mutate the token string\n * or mutate (or add) metadata for a given token.\n *\n * A pipeline function can indicate that the passed token should be discarded by returning\n * null, undefined or an empty string. This token will not be passed to any downstream pipeline\n * functions and will not be added to the index.\n *\n * Multiple tokens can be returned by returning an array of tokens. Each token will be passed\n * to any downstream pipeline functions and all will returned tokens will be added to the index.\n *\n * Any number of pipeline functions may be chained together using a lunr.Pipeline.\n *\n * @interface lunr.PipelineFunction\n * @param {lunr.Token} token - A token from the document being processed.\n * @param {number} i - The index of this token in the complete list of tokens for this document/field.\n * @param {lunr.Token[]} tokens - All tokens for this document/field.\n * @returns {(?lunr.Token|lunr.Token[])}\n */\n\n/**\n * Register a function with the pipeline.\n *\n * Functions that are used in the pipeline should be registered if the pipeline\n * needs to be serialised, or a serialised pipeline needs to be loaded.\n *\n * Registering a function does not add it to a pipeline, functions must still be\n * added to instances of the pipeline for them to be used when running a pipeline.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @param {String} label - The label to register this function with\n */\nlunr.Pipeline.registerFunction = function (fn, label) {\n if (label in this.registeredFunctions) {\n lunr.utils.warn('Overwriting existing registered function: ' + label)\n }\n\n fn.label = label\n lunr.Pipeline.registeredFunctions[fn.label] = fn\n}\n\n/**\n * Warns if the function is not registered as a Pipeline function.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @private\n */\nlunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {\n var isRegistered = fn.label && (fn.label in this.registeredFunctions)\n\n if (!isRegistered) {\n lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\\n', fn)\n }\n}\n\n/**\n * Loads a previously serialised pipeline.\n *\n * All functions to be loaded must already be registered with lunr.Pipeline.\n * If any function from the serialised data has not been registered then an\n * error will be thrown.\n *\n * @param {Object} serialised - The serialised pipeline to load.\n * @returns {lunr.Pipeline}\n */\nlunr.Pipeline.load = function (serialised) {\n var pipeline = new lunr.Pipeline\n\n serialised.forEach(function (fnName) {\n var fn = lunr.Pipeline.registeredFunctions[fnName]\n\n if (fn) {\n pipeline.add(fn)\n } else {\n throw new Error('Cannot load unregistered function: ' + fnName)\n }\n })\n\n return pipeline\n}\n\n/**\n * Adds new functions to the end of the pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.\n */\nlunr.Pipeline.prototype.add = function () {\n var fns = Array.prototype.slice.call(arguments)\n\n fns.forEach(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n this._stack.push(fn)\n }, this)\n}\n\n/**\n * Adds a single function after a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.after = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n pos = pos + 1\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Adds a single function before a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.before = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Removes a function from the pipeline.\n *\n * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.\n */\nlunr.Pipeline.prototype.remove = function (fn) {\n var pos = this._stack.indexOf(fn)\n if (pos == -1) {\n return\n }\n\n this._stack.splice(pos, 1)\n}\n\n/**\n * Runs the current list of functions that make up the pipeline against the\n * passed tokens.\n *\n * @param {Array} tokens The tokens to run through the pipeline.\n * @returns {Array}\n */\nlunr.Pipeline.prototype.run = function (tokens) {\n var stackLength = this._stack.length\n\n for (var i = 0; i < stackLength; i++) {\n var fn = this._stack[i]\n var memo = []\n\n for (var j = 0; j < tokens.length; j++) {\n var result = fn(tokens[j], j, tokens)\n\n if (result === null || result === void 0 || result === '') continue\n\n if (Array.isArray(result)) {\n for (var k = 0; k < result.length; k++) {\n memo.push(result[k])\n }\n } else {\n memo.push(result)\n }\n }\n\n tokens = memo\n }\n\n return tokens\n}\n\n/**\n * Convenience method for passing a string through a pipeline and getting\n * strings out. This method takes care of wrapping the passed string in a\n * token and mapping the resulting tokens back to strings.\n *\n * @param {string} str - The string to pass through the pipeline.\n * @param {?object} metadata - Optional metadata to associate with the token\n * passed to the pipeline.\n * @returns {string[]}\n */\nlunr.Pipeline.prototype.runString = function (str, metadata) {\n var token = new lunr.Token (str, metadata)\n\n return this.run([token]).map(function (t) {\n return t.toString()\n })\n}\n\n/**\n * Resets the pipeline by removing any existing processors.\n *\n */\nlunr.Pipeline.prototype.reset = function () {\n this._stack = []\n}\n\n/**\n * Returns a representation of the pipeline ready for serialisation.\n *\n * Logs a warning if the function has not been registered.\n *\n * @returns {Array}\n */\nlunr.Pipeline.prototype.toJSON = function () {\n return this._stack.map(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n\n return fn.label\n })\n}\n/*!\n * lunr.Vector\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A vector is used to construct the vector space of documents and queries. These\n * vectors support operations to determine the similarity between two documents or\n * a document and a query.\n *\n * Normally no parameters are required for initializing a vector, but in the case of\n * loading a previously dumped vector the raw elements can be provided to the constructor.\n *\n * For performance reasons vectors are implemented with a flat array, where an elements\n * index is immediately followed by its value. E.g. [index, value, index, value]. This\n * allows the underlying array to be as sparse as possible and still offer decent\n * performance when being used for vector calculations.\n *\n * @constructor\n * @param {Number[]} [elements] - The flat list of element index and element value pairs.\n */\nlunr.Vector = function (elements) {\n this._magnitude = 0\n this.elements = elements || []\n}\n\n\n/**\n * Calculates the position within the vector to insert a given index.\n *\n * This is used internally by insert and upsert. If there are duplicate indexes then\n * the position is returned as if the value for that index were to be updated, but it\n * is the callers responsibility to check whether there is a duplicate at that index\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @returns {Number}\n */\nlunr.Vector.prototype.positionForIndex = function (index) {\n // For an empty vector the tuple can be inserted at the beginning\n if (this.elements.length == 0) {\n return 0\n }\n\n var start = 0,\n end = this.elements.length / 2,\n sliceLength = end - start,\n pivotPoint = Math.floor(sliceLength / 2),\n pivotIndex = this.elements[pivotPoint * 2]\n\n while (sliceLength > 1) {\n if (pivotIndex < index) {\n start = pivotPoint\n }\n\n if (pivotIndex > index) {\n end = pivotPoint\n }\n\n if (pivotIndex == index) {\n break\n }\n\n sliceLength = end - start\n pivotPoint = start + Math.floor(sliceLength / 2)\n pivotIndex = this.elements[pivotPoint * 2]\n }\n\n if (pivotIndex == index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex > index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex < index) {\n return (pivotPoint + 1) * 2\n }\n}\n\n/**\n * Inserts an element at an index within the vector.\n *\n * Does not allow duplicates, will throw an error if there is already an entry\n * for this index.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n */\nlunr.Vector.prototype.insert = function (insertIdx, val) {\n this.upsert(insertIdx, val, function () {\n throw \"duplicate index\"\n })\n}\n\n/**\n * Inserts or updates an existing index within the vector.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n * @param {function} fn - A function that is called for updates, the existing value and the\n * requested value are passed as arguments\n */\nlunr.Vector.prototype.upsert = function (insertIdx, val, fn) {\n this._magnitude = 0\n var position = this.positionForIndex(insertIdx)\n\n if (this.elements[position] == insertIdx) {\n this.elements[position + 1] = fn(this.elements[position + 1], val)\n } else {\n this.elements.splice(position, 0, insertIdx, val)\n }\n}\n\n/**\n * Calculates the magnitude of this vector.\n *\n * @returns {Number}\n */\nlunr.Vector.prototype.magnitude = function () {\n if (this._magnitude) return this._magnitude\n\n var sumOfSquares = 0,\n elementsLength = this.elements.length\n\n for (var i = 1; i < elementsLength; i += 2) {\n var val = this.elements[i]\n sumOfSquares += val * val\n }\n\n return this._magnitude = Math.sqrt(sumOfSquares)\n}\n\n/**\n * Calculates the dot product of this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The vector to compute the dot product with.\n * @returns {Number}\n */\nlunr.Vector.prototype.dot = function (otherVector) {\n var dotProduct = 0,\n a = this.elements, b = otherVector.elements,\n aLen = a.length, bLen = b.length,\n aVal = 0, bVal = 0,\n i = 0, j = 0\n\n while (i < aLen && j < bLen) {\n aVal = a[i], bVal = b[j]\n if (aVal < bVal) {\n i += 2\n } else if (aVal > bVal) {\n j += 2\n } else if (aVal == bVal) {\n dotProduct += a[i + 1] * b[j + 1]\n i += 2\n j += 2\n }\n }\n\n return dotProduct\n}\n\n/**\n * Calculates the similarity between this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The other vector to calculate the\n * similarity with.\n * @returns {Number}\n */\nlunr.Vector.prototype.similarity = function (otherVector) {\n return this.dot(otherVector) / this.magnitude() || 0\n}\n\n/**\n * Converts the vector to an array of the elements within the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toArray = function () {\n var output = new Array (this.elements.length / 2)\n\n for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {\n output[j] = this.elements[i]\n }\n\n return output\n}\n\n/**\n * A JSON serializable representation of the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toJSON = function () {\n return this.elements\n}\n/* eslint-disable */\n/*!\n * lunr.stemmer\n * Copyright (C) 2020 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n\n/**\n * lunr.stemmer is an english language stemmer, this is a JavaScript\n * implementation of the PorterStemmer taken from http://tartarus.org/~martin\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token - The string to stem\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n * @function\n */\nlunr.stemmer = (function(){\n var step2list = {\n \"ational\" : \"ate\",\n \"tional\" : \"tion\",\n \"enci\" : \"ence\",\n \"anci\" : \"ance\",\n \"izer\" : \"ize\",\n \"bli\" : \"ble\",\n \"alli\" : \"al\",\n \"entli\" : \"ent\",\n \"eli\" : \"e\",\n \"ousli\" : \"ous\",\n \"ization\" : \"ize\",\n \"ation\" : \"ate\",\n \"ator\" : \"ate\",\n \"alism\" : \"al\",\n \"iveness\" : \"ive\",\n \"fulness\" : \"ful\",\n \"ousness\" : \"ous\",\n \"aliti\" : \"al\",\n \"iviti\" : \"ive\",\n \"biliti\" : \"ble\",\n \"logi\" : \"log\"\n },\n\n step3list = {\n \"icate\" : \"ic\",\n \"ative\" : \"\",\n \"alize\" : \"al\",\n \"iciti\" : \"ic\",\n \"ical\" : \"ic\",\n \"ful\" : \"\",\n \"ness\" : \"\"\n },\n\n c = \"[^aeiou]\", // consonant\n v = \"[aeiouy]\", // vowel\n C = c + \"[^aeiouy]*\", // consonant sequence\n V = v + \"[aeiou]*\", // vowel sequence\n\n mgr0 = \"^(\" + C + \")?\" + V + C, // [C]VC... is m>0\n meq1 = \"^(\" + C + \")?\" + V + C + \"(\" + V + \")?$\", // [C]VC[V] is m=1\n mgr1 = \"^(\" + C + \")?\" + V + C + V + C, // [C]VCVC... is m>1\n s_v = \"^(\" + C + \")?\" + v; // vowel in stem\n\n var re_mgr0 = new RegExp(mgr0);\n var re_mgr1 = new RegExp(mgr1);\n var re_meq1 = new RegExp(meq1);\n var re_s_v = new RegExp(s_v);\n\n var re_1a = /^(.+?)(ss|i)es$/;\n var re2_1a = /^(.+?)([^s])s$/;\n var re_1b = /^(.+?)eed$/;\n var re2_1b = /^(.+?)(ed|ing)$/;\n var re_1b_2 = /.$/;\n var re2_1b_2 = /(at|bl|iz)$/;\n var re3_1b_2 = new RegExp(\"([^aeiouylsz])\\\\1$\");\n var re4_1b_2 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var re_1c = /^(.+?[^aeiou])y$/;\n var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n\n var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n\n var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n var re2_4 = /^(.+?)(s|t)(ion)$/;\n\n var re_5 = /^(.+?)e$/;\n var re_5_1 = /ll$/;\n var re3_5 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var porterStemmer = function porterStemmer(w) {\n var stem,\n suffix,\n firstch,\n re,\n re2,\n re3,\n re4;\n\n if (w.length < 3) { return w; }\n\n firstch = w.substr(0,1);\n if (firstch == \"y\") {\n w = firstch.toUpperCase() + w.substr(1);\n }\n\n // Step 1a\n re = re_1a\n re2 = re2_1a;\n\n if (re.test(w)) { w = w.replace(re,\"$1$2\"); }\n else if (re2.test(w)) { w = w.replace(re2,\"$1$2\"); }\n\n // Step 1b\n re = re_1b;\n re2 = re2_1b;\n if (re.test(w)) {\n var fp = re.exec(w);\n re = re_mgr0;\n if (re.test(fp[1])) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1];\n re2 = re_s_v;\n if (re2.test(stem)) {\n w = stem;\n re2 = re2_1b_2;\n re3 = re3_1b_2;\n re4 = re4_1b_2;\n if (re2.test(w)) { w = w + \"e\"; }\n else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,\"\"); }\n else if (re4.test(w)) { w = w + \"e\"; }\n }\n }\n\n // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)\n re = re_1c;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n w = stem + \"i\";\n }\n\n // Step 2\n re = re_2;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step2list[suffix];\n }\n }\n\n // Step 3\n re = re_3;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step3list[suffix];\n }\n }\n\n // Step 4\n re = re_4;\n re2 = re2_4;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n if (re.test(stem)) {\n w = stem;\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1] + fp[2];\n re2 = re_mgr1;\n if (re2.test(stem)) {\n w = stem;\n }\n }\n\n // Step 5\n re = re_5;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n re2 = re_meq1;\n re3 = re3_5;\n if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {\n w = stem;\n }\n }\n\n re = re_5_1;\n re2 = re_mgr1;\n if (re.test(w) && re2.test(w)) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n\n // and turn initial Y back to y\n\n if (firstch == \"y\") {\n w = firstch.toLowerCase() + w.substr(1);\n }\n\n return w;\n };\n\n return function (token) {\n return token.update(porterStemmer);\n }\n})();\n\nlunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')\n/*!\n * lunr.stopWordFilter\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.generateStopWordFilter builds a stopWordFilter function from the provided\n * list of stop words.\n *\n * The built in lunr.stopWordFilter is built using this generator and can be used\n * to generate custom stopWordFilters for applications or non English languages.\n *\n * @function\n * @param {Array} token The token to pass through the filter\n * @returns {lunr.PipelineFunction}\n * @see lunr.Pipeline\n * @see lunr.stopWordFilter\n */\nlunr.generateStopWordFilter = function (stopWords) {\n var words = stopWords.reduce(function (memo, stopWord) {\n memo[stopWord] = stopWord\n return memo\n }, {})\n\n return function (token) {\n if (token && words[token.toString()] !== token.toString()) return token\n }\n}\n\n/**\n * lunr.stopWordFilter is an English language stop word list filter, any words\n * contained in the list will not be passed through the filter.\n *\n * This is intended to be used in the Pipeline. If the token does not pass the\n * filter then undefined will be returned.\n *\n * @function\n * @implements {lunr.PipelineFunction}\n * @params {lunr.Token} token - A token to check for being a stop word.\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n */\nlunr.stopWordFilter = lunr.generateStopWordFilter([\n 'a',\n 'able',\n 'about',\n 'across',\n 'after',\n 'all',\n 'almost',\n 'also',\n 'am',\n 'among',\n 'an',\n 'and',\n 'any',\n 'are',\n 'as',\n 'at',\n 'be',\n 'because',\n 'been',\n 'but',\n 'by',\n 'can',\n 'cannot',\n 'could',\n 'dear',\n 'did',\n 'do',\n 'does',\n 'either',\n 'else',\n 'ever',\n 'every',\n 'for',\n 'from',\n 'get',\n 'got',\n 'had',\n 'has',\n 'have',\n 'he',\n 'her',\n 'hers',\n 'him',\n 'his',\n 'how',\n 'however',\n 'i',\n 'if',\n 'in',\n 'into',\n 'is',\n 'it',\n 'its',\n 'just',\n 'least',\n 'let',\n 'like',\n 'likely',\n 'may',\n 'me',\n 'might',\n 'most',\n 'must',\n 'my',\n 'neither',\n 'no',\n 'nor',\n 'not',\n 'of',\n 'off',\n 'often',\n 'on',\n 'only',\n 'or',\n 'other',\n 'our',\n 'own',\n 'rather',\n 'said',\n 'say',\n 'says',\n 'she',\n 'should',\n 'since',\n 'so',\n 'some',\n 'than',\n 'that',\n 'the',\n 'their',\n 'them',\n 'then',\n 'there',\n 'these',\n 'they',\n 'this',\n 'tis',\n 'to',\n 'too',\n 'twas',\n 'us',\n 'wants',\n 'was',\n 'we',\n 'were',\n 'what',\n 'when',\n 'where',\n 'which',\n 'while',\n 'who',\n 'whom',\n 'why',\n 'will',\n 'with',\n 'would',\n 'yet',\n 'you',\n 'your'\n])\n\nlunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')\n/*!\n * lunr.trimmer\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.trimmer is a pipeline function for trimming non word\n * characters from the beginning and end of tokens before they\n * enter the index.\n *\n * This implementation may not work correctly for non latin\n * characters and should either be removed or adapted for use\n * with languages with non-latin characters.\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token The token to pass through the filter\n * @returns {lunr.Token}\n * @see lunr.Pipeline\n */\nlunr.trimmer = function (token) {\n return token.update(function (s) {\n return s.replace(/^\\W+/, '').replace(/\\W+$/, '')\n })\n}\n\nlunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')\n/*!\n * lunr.TokenSet\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * A token set is used to store the unique list of all tokens\n * within an index. Token sets are also used to represent an\n * incoming query to the index, this query token set and index\n * token set are then intersected to find which tokens to look\n * up in the inverted index.\n *\n * A token set can hold multiple tokens, as in the case of the\n * index token set, or it can hold a single token as in the\n * case of a simple query token set.\n *\n * Additionally token sets are used to perform wildcard matching.\n * Leading, contained and trailing wildcards are supported, and\n * from this edit distance matching can also be provided.\n *\n * Token sets are implemented as a minimal finite state automata,\n * where both common prefixes and suffixes are shared between tokens.\n * This helps to reduce the space used for storing the token set.\n *\n * @constructor\n */\nlunr.TokenSet = function () {\n this.final = false\n this.edges = {}\n this.id = lunr.TokenSet._nextId\n lunr.TokenSet._nextId += 1\n}\n\n/**\n * Keeps track of the next, auto increment, identifier to assign\n * to a new tokenSet.\n *\n * TokenSets require a unique identifier to be correctly minimised.\n *\n * @private\n */\nlunr.TokenSet._nextId = 1\n\n/**\n * Creates a TokenSet instance from the given sorted array of words.\n *\n * @param {String[]} arr - A sorted array of strings to create the set from.\n * @returns {lunr.TokenSet}\n * @throws Will throw an error if the input array is not sorted.\n */\nlunr.TokenSet.fromArray = function (arr) {\n var builder = new lunr.TokenSet.Builder\n\n for (var i = 0, len = arr.length; i < len; i++) {\n builder.insert(arr[i])\n }\n\n builder.finish()\n return builder.root\n}\n\n/**\n * Creates a token set from a query clause.\n *\n * @private\n * @param {Object} clause - A single clause from lunr.Query.\n * @param {string} clause.term - The query clause term.\n * @param {number} [clause.editDistance] - The optional edit distance for the term.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromClause = function (clause) {\n if ('editDistance' in clause) {\n return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)\n } else {\n return lunr.TokenSet.fromString(clause.term)\n }\n}\n\n/**\n * Creates a token set representing a single string with a specified\n * edit distance.\n *\n * Insertions, deletions, substitutions and transpositions are each\n * treated as an edit distance of 1.\n *\n * Increasing the allowed edit distance will have a dramatic impact\n * on the performance of both creating and intersecting these TokenSets.\n * It is advised to keep the edit distance less than 3.\n *\n * @param {string} str - The string to create the token set from.\n * @param {number} editDistance - The allowed edit distance to match.\n * @returns {lunr.Vector}\n */\nlunr.TokenSet.fromFuzzyString = function (str, editDistance) {\n var root = new lunr.TokenSet\n\n var stack = [{\n node: root,\n editsRemaining: editDistance,\n str: str\n }]\n\n while (stack.length) {\n var frame = stack.pop()\n\n // no edit\n if (frame.str.length > 0) {\n var char = frame.str.charAt(0),\n noEditNode\n\n if (char in frame.node.edges) {\n noEditNode = frame.node.edges[char]\n } else {\n noEditNode = new lunr.TokenSet\n frame.node.edges[char] = noEditNode\n }\n\n if (frame.str.length == 1) {\n noEditNode.final = true\n }\n\n stack.push({\n node: noEditNode,\n editsRemaining: frame.editsRemaining,\n str: frame.str.slice(1)\n })\n }\n\n if (frame.editsRemaining == 0) {\n continue\n }\n\n // insertion\n if (\"*\" in frame.node.edges) {\n var insertionNode = frame.node.edges[\"*\"]\n } else {\n var insertionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = insertionNode\n }\n\n if (frame.str.length == 0) {\n insertionNode.final = true\n }\n\n stack.push({\n node: insertionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str\n })\n\n // deletion\n // can only do a deletion if we have enough edits remaining\n // and if there are characters left to delete in the string\n if (frame.str.length > 1) {\n stack.push({\n node: frame.node,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // deletion\n // just removing the last character from the str\n if (frame.str.length == 1) {\n frame.node.final = true\n }\n\n // substitution\n // can only do a substitution if we have enough edits remaining\n // and if there are characters left to substitute\n if (frame.str.length >= 1) {\n if (\"*\" in frame.node.edges) {\n var substitutionNode = frame.node.edges[\"*\"]\n } else {\n var substitutionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = substitutionNode\n }\n\n if (frame.str.length == 1) {\n substitutionNode.final = true\n }\n\n stack.push({\n node: substitutionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // transposition\n // can only do a transposition if there are edits remaining\n // and there are enough characters to transpose\n if (frame.str.length > 1) {\n var charA = frame.str.charAt(0),\n charB = frame.str.charAt(1),\n transposeNode\n\n if (charB in frame.node.edges) {\n transposeNode = frame.node.edges[charB]\n } else {\n transposeNode = new lunr.TokenSet\n frame.node.edges[charB] = transposeNode\n }\n\n if (frame.str.length == 1) {\n transposeNode.final = true\n }\n\n stack.push({\n node: transposeNode,\n editsRemaining: frame.editsRemaining - 1,\n str: charA + frame.str.slice(2)\n })\n }\n }\n\n return root\n}\n\n/**\n * Creates a TokenSet from a string.\n *\n * The string may contain one or more wildcard characters (*)\n * that will allow wildcard matching when intersecting with\n * another TokenSet.\n *\n * @param {string} str - The string to create a TokenSet from.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromString = function (str) {\n var node = new lunr.TokenSet,\n root = node\n\n /*\n * Iterates through all characters within the passed string\n * appending a node for each character.\n *\n * When a wildcard character is found then a self\n * referencing edge is introduced to continually match\n * any number of any characters.\n */\n for (var i = 0, len = str.length; i < len; i++) {\n var char = str[i],\n final = (i == len - 1)\n\n if (char == \"*\") {\n node.edges[char] = node\n node.final = final\n\n } else {\n var next = new lunr.TokenSet\n next.final = final\n\n node.edges[char] = next\n node = next\n }\n }\n\n return root\n}\n\n/**\n * Converts this TokenSet into an array of strings\n * contained within the TokenSet.\n *\n * This is not intended to be used on a TokenSet that\n * contains wildcards, in these cases the results are\n * undefined and are likely to cause an infinite loop.\n *\n * @returns {string[]}\n */\nlunr.TokenSet.prototype.toArray = function () {\n var words = []\n\n var stack = [{\n prefix: \"\",\n node: this\n }]\n\n while (stack.length) {\n var frame = stack.pop(),\n edges = Object.keys(frame.node.edges),\n len = edges.length\n\n if (frame.node.final) {\n /* In Safari, at this point the prefix is sometimes corrupted, see:\n * https://github.com/olivernn/lunr.js/issues/279 Calling any\n * String.prototype method forces Safari to \"cast\" this string to what\n * it's supposed to be, fixing the bug. */\n frame.prefix.charAt(0)\n words.push(frame.prefix)\n }\n\n for (var i = 0; i < len; i++) {\n var edge = edges[i]\n\n stack.push({\n prefix: frame.prefix.concat(edge),\n node: frame.node.edges[edge]\n })\n }\n }\n\n return words\n}\n\n/**\n * Generates a string representation of a TokenSet.\n *\n * This is intended to allow TokenSets to be used as keys\n * in objects, largely to aid the construction and minimisation\n * of a TokenSet. As such it is not designed to be a human\n * friendly representation of the TokenSet.\n *\n * @returns {string}\n */\nlunr.TokenSet.prototype.toString = function () {\n // NOTE: Using Object.keys here as this.edges is very likely\n // to enter 'hash-mode' with many keys being added\n //\n // avoiding a for-in loop here as it leads to the function\n // being de-optimised (at least in V8). From some simple\n // benchmarks the performance is comparable, but allowing\n // V8 to optimize may mean easy performance wins in the future.\n\n if (this._str) {\n return this._str\n }\n\n var str = this.final ? '1' : '0',\n labels = Object.keys(this.edges).sort(),\n len = labels.length\n\n for (var i = 0; i < len; i++) {\n var label = labels[i],\n node = this.edges[label]\n\n str = str + label + node.id\n }\n\n return str\n}\n\n/**\n * Returns a new TokenSet that is the intersection of\n * this TokenSet and the passed TokenSet.\n *\n * This intersection will take into account any wildcards\n * contained within the TokenSet.\n *\n * @param {lunr.TokenSet} b - An other TokenSet to intersect with.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.prototype.intersect = function (b) {\n var output = new lunr.TokenSet,\n frame = undefined\n\n var stack = [{\n qNode: b,\n output: output,\n node: this\n }]\n\n while (stack.length) {\n frame = stack.pop()\n\n // NOTE: As with the #toString method, we are using\n // Object.keys and a for loop instead of a for-in loop\n // as both of these objects enter 'hash' mode, causing\n // the function to be de-optimised in V8\n var qEdges = Object.keys(frame.qNode.edges),\n qLen = qEdges.length,\n nEdges = Object.keys(frame.node.edges),\n nLen = nEdges.length\n\n for (var q = 0; q < qLen; q++) {\n var qEdge = qEdges[q]\n\n for (var n = 0; n < nLen; n++) {\n var nEdge = nEdges[n]\n\n if (nEdge == qEdge || qEdge == '*') {\n var node = frame.node.edges[nEdge],\n qNode = frame.qNode.edges[qEdge],\n final = node.final && qNode.final,\n next = undefined\n\n if (nEdge in frame.output.edges) {\n // an edge already exists for this character\n // no need to create a new node, just set the finality\n // bit unless this node is already final\n next = frame.output.edges[nEdge]\n next.final = next.final || final\n\n } else {\n // no edge exists yet, must create one\n // set the finality bit and insert it\n // into the output\n next = new lunr.TokenSet\n next.final = final\n frame.output.edges[nEdge] = next\n }\n\n stack.push({\n qNode: qNode,\n output: next,\n node: node\n })\n }\n }\n }\n }\n\n return output\n}\nlunr.TokenSet.Builder = function () {\n this.previousWord = \"\"\n this.root = new lunr.TokenSet\n this.uncheckedNodes = []\n this.minimizedNodes = {}\n}\n\nlunr.TokenSet.Builder.prototype.insert = function (word) {\n var node,\n commonPrefix = 0\n\n if (word < this.previousWord) {\n throw new Error (\"Out of order word insertion\")\n }\n\n for (var i = 0; i < word.length && i < this.previousWord.length; i++) {\n if (word[i] != this.previousWord[i]) break\n commonPrefix++\n }\n\n this.minimize(commonPrefix)\n\n if (this.uncheckedNodes.length == 0) {\n node = this.root\n } else {\n node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child\n }\n\n for (var i = commonPrefix; i < word.length; i++) {\n var nextNode = new lunr.TokenSet,\n char = word[i]\n\n node.edges[char] = nextNode\n\n this.uncheckedNodes.push({\n parent: node,\n char: char,\n child: nextNode\n })\n\n node = nextNode\n }\n\n node.final = true\n this.previousWord = word\n}\n\nlunr.TokenSet.Builder.prototype.finish = function () {\n this.minimize(0)\n}\n\nlunr.TokenSet.Builder.prototype.minimize = function (downTo) {\n for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {\n var node = this.uncheckedNodes[i],\n childKey = node.child.toString()\n\n if (childKey in this.minimizedNodes) {\n node.parent.edges[node.char] = this.minimizedNodes[childKey]\n } else {\n // Cache the key for this node since\n // we know it can't change anymore\n node.child._str = childKey\n\n this.minimizedNodes[childKey] = node.child\n }\n\n this.uncheckedNodes.pop()\n }\n}\n/*!\n * lunr.Index\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * An index contains the built index of all documents and provides a query interface\n * to the index.\n *\n * Usually instances of lunr.Index will not be created using this constructor, instead\n * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be\n * used to load previously built and serialized indexes.\n *\n * @constructor\n * @param {Object} attrs - The attributes of the built search index.\n * @param {Object} attrs.invertedIndex - An index of term/field to document reference.\n * @param {Object<string, lunr.Vector>} attrs.fieldVectors - Field vectors\n * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.\n * @param {string[]} attrs.fields - The names of indexed document fields.\n * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.\n */\nlunr.Index = function (attrs) {\n this.invertedIndex = attrs.invertedIndex\n this.fieldVectors = attrs.fieldVectors\n this.tokenSet = attrs.tokenSet\n this.fields = attrs.fields\n this.pipeline = attrs.pipeline\n}\n\n/**\n * A result contains details of a document matching a search query.\n * @typedef {Object} lunr.Index~Result\n * @property {string} ref - The reference of the document this result represents.\n * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.\n * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.\n */\n\n/**\n * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple\n * query language which itself is parsed into an instance of lunr.Query.\n *\n * For programmatically building queries it is advised to directly use lunr.Query, the query language\n * is best used for human entered text rather than program generated text.\n *\n * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported\n * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'\n * or 'world', though those that contain both will rank higher in the results.\n *\n * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can\n * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding\n * wildcards will increase the number of documents that will be found but can also have a negative\n * impact on query performance, especially with wildcards at the beginning of a term.\n *\n * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term\n * hello in the title field will match this query. Using a field not present in the index will lead\n * to an error being thrown.\n *\n * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term\n * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported\n * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.\n * Avoid large values for edit distance to improve query performance.\n *\n * Each term also supports a presence modifier. By default a term's presence in document is optional, however\n * this can be changed to either required or prohibited. For a term's presence to be required in a document the\n * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and\n * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not\n * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.\n *\n * To escape special characters the backslash character '\\' can be used, this allows searches to include\n * characters that would normally be considered modifiers, e.g. `foo\\~2` will search for a term \"foo~2\" instead\n * of attempting to apply a boost of 2 to the search term \"foo\".\n *\n * @typedef {string} lunr.Index~QueryString\n * @example <caption>Simple single term query</caption>\n * hello\n * @example <caption>Multiple term query</caption>\n * hello world\n * @example <caption>term scoped to a field</caption>\n * title:hello\n * @example <caption>term with a boost of 10</caption>\n * hello^10\n * @example <caption>term with an edit distance of 2</caption>\n * hello~2\n * @example <caption>terms with presence modifiers</caption>\n * -foo +bar baz\n */\n\n/**\n * Performs a search against the index using lunr query syntax.\n *\n * Results will be returned sorted by their score, the most relevant results\n * will be returned first. For details on how the score is calculated, please see\n * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.\n *\n * For more programmatic querying use lunr.Index#query.\n *\n * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.\n * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.search = function (queryString) {\n return this.query(function (query) {\n var parser = new lunr.QueryParser(queryString, query)\n parser.parse()\n })\n}\n\n/**\n * A query builder callback provides a query object to be used to express\n * the query to perform on the index.\n *\n * @callback lunr.Index~queryBuilder\n * @param {lunr.Query} query - The query object to build up.\n * @this lunr.Query\n */\n\n/**\n * Performs a query against the index using the yielded lunr.Query object.\n *\n * If performing programmatic queries against the index, this method is preferred\n * over lunr.Index#search so as to avoid the additional query parsing overhead.\n *\n * A query object is yielded to the supplied function which should be used to\n * express the query to be run against the index.\n *\n * Note that although this function takes a callback parameter it is _not_ an\n * asynchronous operation, the callback is just yielded a query object to be\n * customized.\n *\n * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.query = function (fn) {\n // for each query clause\n // * process terms\n // * expand terms from token set\n // * find matching documents and metadata\n // * get document vectors\n // * score documents\n\n var query = new lunr.Query(this.fields),\n matchingFields = Object.create(null),\n queryVectors = Object.create(null),\n termFieldCache = Object.create(null),\n requiredMatches = Object.create(null),\n prohibitedMatches = Object.create(null)\n\n /*\n * To support field level boosts a query vector is created per\n * field. An empty vector is eagerly created to support negated\n * queries.\n */\n for (var i = 0; i < this.fields.length; i++) {\n queryVectors[this.fields[i]] = new lunr.Vector\n }\n\n fn.call(query, query)\n\n for (var i = 0; i < query.clauses.length; i++) {\n /*\n * Unless the pipeline has been disabled for this term, which is\n * the case for terms with wildcards, we need to pass the clause\n * term through the search pipeline. A pipeline returns an array\n * of processed terms. Pipeline functions may expand the passed\n * term, which means we may end up performing multiple index lookups\n * for a single query term.\n */\n var clause = query.clauses[i],\n terms = null,\n clauseMatches = lunr.Set.empty\n\n if (clause.usePipeline) {\n terms = this.pipeline.runString(clause.term, {\n fields: clause.fields\n })\n } else {\n terms = [clause.term]\n }\n\n for (var m = 0; m < terms.length; m++) {\n var term = terms[m]\n\n /*\n * Each term returned from the pipeline needs to use the same query\n * clause object, e.g. the same boost and or edit distance. The\n * simplest way to do this is to re-use the clause object but mutate\n * its term property.\n */\n clause.term = term\n\n /*\n * From the term in the clause we create a token set which will then\n * be used to intersect the indexes token set to get a list of terms\n * to lookup in the inverted index\n */\n var termTokenSet = lunr.TokenSet.fromClause(clause),\n expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()\n\n /*\n * If a term marked as required does not exist in the tokenSet it is\n * impossible for the search to return any matches. We set all the field\n * scoped required matches set to empty and stop examining any further\n * clauses.\n */\n if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = lunr.Set.empty\n }\n\n break\n }\n\n for (var j = 0; j < expandedTerms.length; j++) {\n /*\n * For each term get the posting and termIndex, this is required for\n * building the query vector.\n */\n var expandedTerm = expandedTerms[j],\n posting = this.invertedIndex[expandedTerm],\n termIndex = posting._index\n\n for (var k = 0; k < clause.fields.length; k++) {\n /*\n * For each field that this query term is scoped by (by default\n * all fields are in scope) we need to get all the document refs\n * that have this term in that field.\n *\n * The posting is the entry in the invertedIndex for the matching\n * term from above.\n */\n var field = clause.fields[k],\n fieldPosting = posting[field],\n matchingDocumentRefs = Object.keys(fieldPosting),\n termField = expandedTerm + \"/\" + field,\n matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)\n\n /*\n * if the presence of this term is required ensure that the matching\n * documents are added to the set of required matches for this clause.\n *\n */\n if (clause.presence == lunr.Query.presence.REQUIRED) {\n clauseMatches = clauseMatches.union(matchingDocumentsSet)\n\n if (requiredMatches[field] === undefined) {\n requiredMatches[field] = lunr.Set.complete\n }\n }\n\n /*\n * if the presence of this term is prohibited ensure that the matching\n * documents are added to the set of prohibited matches for this field,\n * creating that set if it does not yet exist.\n */\n if (clause.presence == lunr.Query.presence.PROHIBITED) {\n if (prohibitedMatches[field] === undefined) {\n prohibitedMatches[field] = lunr.Set.empty\n }\n\n prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)\n\n /*\n * Prohibited matches should not be part of the query vector used for\n * similarity scoring and no metadata should be extracted so we continue\n * to the next field\n */\n continue\n }\n\n /*\n * The query field vector is populated using the termIndex found for\n * the term and a unit value with the appropriate boost applied.\n * Using upsert because there could already be an entry in the vector\n * for the term we are working with. In that case we just add the scores\n * together.\n */\n queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })\n\n /**\n * If we've already seen this term, field combo then we've already collected\n * the matching documents and metadata, no need to go through all that again\n */\n if (termFieldCache[termField]) {\n continue\n }\n\n for (var l = 0; l < matchingDocumentRefs.length; l++) {\n /*\n * All metadata for this term/field/document triple\n * are then extracted and collected into an instance\n * of lunr.MatchData ready to be returned in the query\n * results\n */\n var matchingDocumentRef = matchingDocumentRefs[l],\n matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),\n metadata = fieldPosting[matchingDocumentRef],\n fieldMatch\n\n if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {\n matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)\n } else {\n fieldMatch.add(expandedTerm, field, metadata)\n }\n\n }\n\n termFieldCache[termField] = true\n }\n }\n }\n\n /**\n * If the presence was required we need to update the requiredMatches field sets.\n * We do this after all fields for the term have collected their matches because\n * the clause terms presence is required in _any_ of the fields not _all_ of the\n * fields.\n */\n if (clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)\n }\n }\n }\n\n /**\n * Need to combine the field scoped required and prohibited\n * matching documents into a global set of required and prohibited\n * matches\n */\n var allRequiredMatches = lunr.Set.complete,\n allProhibitedMatches = lunr.Set.empty\n\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i]\n\n if (requiredMatches[field]) {\n allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])\n }\n\n if (prohibitedMatches[field]) {\n allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])\n }\n }\n\n var matchingFieldRefs = Object.keys(matchingFields),\n results = [],\n matches = Object.create(null)\n\n /*\n * If the query is negated (contains only prohibited terms)\n * we need to get _all_ fieldRefs currently existing in the\n * index. This is only done when we know that the query is\n * entirely prohibited terms to avoid any cost of getting all\n * fieldRefs unnecessarily.\n *\n * Additionally, blank MatchData must be created to correctly\n * populate the results.\n */\n if (query.isNegated()) {\n matchingFieldRefs = Object.keys(this.fieldVectors)\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n var matchingFieldRef = matchingFieldRefs[i]\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)\n matchingFields[matchingFieldRef] = new lunr.MatchData\n }\n }\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n /*\n * Currently we have document fields that match the query, but we\n * need to return documents. The matchData and scores are combined\n * from multiple fields belonging to the same document.\n *\n * Scores are calculated by field, using the query vectors created\n * above, and combined into a final document score using addition.\n */\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),\n docRef = fieldRef.docRef\n\n if (!allRequiredMatches.contains(docRef)) {\n continue\n }\n\n if (allProhibitedMatches.contains(docRef)) {\n continue\n }\n\n var fieldVector = this.fieldVectors[fieldRef],\n score = queryVectors[fieldRef.fieldName].similarity(fieldVector),\n docMatch\n\n if ((docMatch = matches[docRef]) !== undefined) {\n docMatch.score += score\n docMatch.matchData.combine(matchingFields[fieldRef])\n } else {\n var match = {\n ref: docRef,\n score: score,\n matchData: matchingFields[fieldRef]\n }\n matches[docRef] = match\n results.push(match)\n }\n }\n\n /*\n * Sort the results objects by score, highest first.\n */\n return results.sort(function (a, b) {\n return b.score - a.score\n })\n}\n\n/**\n * Prepares the index for JSON serialization.\n *\n * The schema for this JSON blob will be described in a\n * separate JSON schema file.\n *\n * @returns {Object}\n */\nlunr.Index.prototype.toJSON = function () {\n var invertedIndex = Object.keys(this.invertedIndex)\n .sort()\n .map(function (term) {\n return [term, this.invertedIndex[term]]\n }, this)\n\n var fieldVectors = Object.keys(this.fieldVectors)\n .map(function (ref) {\n return [ref, this.fieldVectors[ref].toJSON()]\n }, this)\n\n return {\n version: lunr.version,\n fields: this.fields,\n fieldVectors: fieldVectors,\n invertedIndex: invertedIndex,\n pipeline: this.pipeline.toJSON()\n }\n}\n\n/**\n * Loads a previously serialized lunr.Index\n *\n * @param {Object} serializedIndex - A previously serialized lunr.Index\n * @returns {lunr.Index}\n */\nlunr.Index.load = function (serializedIndex) {\n var attrs = {},\n fieldVectors = {},\n serializedVectors = serializedIndex.fieldVectors,\n invertedIndex = Object.create(null),\n serializedInvertedIndex = serializedIndex.invertedIndex,\n tokenSetBuilder = new lunr.TokenSet.Builder,\n pipeline = lunr.Pipeline.load(serializedIndex.pipeline)\n\n if (serializedIndex.version != lunr.version) {\n lunr.utils.warn(\"Version mismatch when loading serialised index. Current version of lunr '\" + lunr.version + \"' does not match serialized index '\" + serializedIndex.version + \"'\")\n }\n\n for (var i = 0; i < serializedVectors.length; i++) {\n var tuple = serializedVectors[i],\n ref = tuple[0],\n elements = tuple[1]\n\n fieldVectors[ref] = new lunr.Vector(elements)\n }\n\n for (var i = 0; i < serializedInvertedIndex.length; i++) {\n var tuple = serializedInvertedIndex[i],\n term = tuple[0],\n posting = tuple[1]\n\n tokenSetBuilder.insert(term)\n invertedIndex[term] = posting\n }\n\n tokenSetBuilder.finish()\n\n attrs.fields = serializedIndex.fields\n\n attrs.fieldVectors = fieldVectors\n attrs.invertedIndex = invertedIndex\n attrs.tokenSet = tokenSetBuilder.root\n attrs.pipeline = pipeline\n\n return new lunr.Index(attrs)\n}\n/*!\n * lunr.Builder\n * Copyright (C) 2020 Oliver Nightingale\n */\n\n/**\n * lunr.Builder performs indexing on a set of documents and\n * returns instances of lunr.Index ready for querying.\n *\n * All configuration of the index is done via the builder, the\n * fields to index, the document reference, the text processing\n * pipeline and document scoring parameters are all set on the\n * builder before indexing.\n *\n * @constructor\n * @property {string} _ref - Internal reference to the document reference field.\n * @property {string[]} _fields - Internal reference to the document fields to index.\n * @property {object} invertedIndex - The inverted index maps terms to document fields.\n * @property {object} documentTermFrequencies - Keeps track of document term frequencies.\n * @property {object} documentLengths - Keeps track of the length of documents added to the index.\n * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.\n * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.\n * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.\n * @property {number} documentCount - Keeps track of the total number of documents indexed.\n * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.\n * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.\n * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.\n * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.\n */\nlunr.Builder = function () {\n this._ref = \"id\"\n this._fields = Object.create(null)\n this._documents = Object.create(null)\n this.invertedIndex = Object.create(null)\n this.fieldTermFrequencies = {}\n this.fieldLengths = {}\n this.tokenizer = lunr.tokenizer\n this.pipeline = new lunr.Pipeline\n this.searchPipeline = new lunr.Pipeline\n this.documentCount = 0\n this._b = 0.75\n this._k1 = 1.2\n this.termIndex = 0\n this.metadataWhitelist = []\n}\n\n/**\n * Sets the document field used as the document reference. Every document must have this field.\n * The type of this field in the document should be a string, if it is not a string it will be\n * coerced into a string by calling toString.\n *\n * The default ref is 'id'.\n *\n * The ref should _not_ be changed during indexing, it should be set before any documents are\n * added to the index. Changing it during indexing can lead to inconsistent results.\n *\n * @param {string} ref - The name of the reference field in the document.\n */\nlunr.Builder.prototype.ref = function (ref) {\n this._ref = ref\n}\n\n/**\n * A function that is used to extract a field from a document.\n *\n * Lunr expects a field to be at the top level of a document, if however the field\n * is deeply nested within a document an extractor function can be used to extract\n * the right field for indexing.\n *\n * @callback fieldExtractor\n * @param {object} doc - The document being added to the index.\n * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.\n * @example <caption>Extracting a nested field</caption>\n * function (doc) { return doc.nested.field }\n */\n\n/**\n * Adds a field to the list of document fields that will be indexed. Every document being\n * indexed should have this field. Null values for this field in indexed documents will\n * not cause errors but will limit the chance of that document being retrieved by searches.\n *\n * All fields should be added before adding documents to the index. Adding fields after\n * a document has been indexed will have no effect on already indexed documents.\n *\n * Fields can be boosted at build time. This allows terms within that field to have more\n * importance when ranking search results. Use a field boost to specify that matches within\n * one field are more important than other fields.\n *\n * @param {string} fieldName - The name of a field to index in all documents.\n * @param {object} attributes - Optional attributes associated with this field.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.\n * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.\n * @throws {RangeError} fieldName cannot contain unsupported characters '/'\n */\nlunr.Builder.prototype.field = function (fieldName, attributes) {\n if (/\\//.test(fieldName)) {\n throw new RangeError (\"Field '\" + fieldName + \"' contains illegal character '/'\")\n }\n\n this._fields[fieldName] = attributes || {}\n}\n\n/**\n * A parameter to tune the amount of field length normalisation that is applied when\n * calculating relevance scores. A value of 0 will completely disable any normalisation\n * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b\n * will be clamped to the range 0 - 1.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.b = function (number) {\n if (number < 0) {\n this._b = 0\n } else if (number > 1) {\n this._b = 1\n } else {\n this._b = number\n }\n}\n\n/**\n * A parameter that controls the speed at which a rise in term frequency results in term\n * frequency saturation. The default value is 1.2. Setting this to a higher value will give\n * slower saturation levels, a lower value will result in quicker saturation.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.k1 = function (number) {\n this._k1 = number\n}\n\n/**\n * Adds a document to the index.\n *\n * Before adding fields to the index the index should have been fully setup, with the document\n * ref and all fields to index already having been specified.\n *\n * The document must have a field name as specified by the ref (by default this is 'id') and\n * it should have all fields defined for indexing, though null or undefined values will not\n * cause errors.\n *\n * Entire documents can be boosted at build time. Applying a boost to a document indicates that\n * this document should rank higher in search results than other documents.\n *\n * @param {object} doc - The document to add to the index.\n * @param {object} attributes - Optional attributes associated with this document.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.\n */\nlunr.Builder.prototype.add = function (doc, attributes) {\n var docRef = doc[this._ref],\n fields = Object.keys(this._fields)\n\n this._documents[docRef] = attributes || {}\n this.documentCount += 1\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i],\n extractor = this._fields[fieldName].extractor,\n field = extractor ? extractor(doc) : doc[fieldName],\n tokens = this.tokenizer(field, {\n fields: [fieldName]\n }),\n terms = this.pipeline.run(tokens),\n fieldRef = new lunr.FieldRef (docRef, fieldName),\n fieldTerms = Object.create(null)\n\n this.fieldTermFrequencies[fieldRef] = fieldTerms\n this.fieldLengths[fieldRef] = 0\n\n // store the length of this field for this document\n this.fieldLengths[fieldRef] += terms.length\n\n // calculate term frequencies for this field\n for (var j = 0; j < terms.length; j++) {\n var term = terms[j]\n\n if (fieldTerms[term] == undefined) {\n fieldTerms[term] = 0\n }\n\n fieldTerms[term] += 1\n\n // add to inverted index\n // create an initial posting if one doesn't exist\n if (this.invertedIndex[term] == undefined) {\n var posting = Object.create(null)\n posting[\"_index\"] = this.termIndex\n this.termIndex += 1\n\n for (var k = 0; k < fields.length; k++) {\n posting[fields[k]] = Object.create(null)\n }\n\n this.invertedIndex[term] = posting\n }\n\n // add an entry for this term/fieldName/docRef to the invertedIndex\n if (this.invertedIndex[term][fieldName][docRef] == undefined) {\n this.invertedIndex[term][fieldName][docRef] = Object.create(null)\n }\n\n // store all whitelisted metadata about this token in the\n // inverted index\n for (var l = 0; l < this.metadataWhitelist.length; l++) {\n var metadataKey = this.metadataWhitelist[l],\n metadata = term.metadata[metadataKey]\n\n if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {\n this.invertedIndex[term][fieldName][docRef][metadataKey] = []\n }\n\n this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)\n }\n }\n\n }\n}\n\n/**\n * Calculates the average document length for this index\n *\n * @private\n */\nlunr.Builder.prototype.calculateAverageFieldLengths = function () {\n\n var fieldRefs = Object.keys(this.fieldLengths),\n numberOfFields = fieldRefs.length,\n accumulator = {},\n documentsWithField = {}\n\n for (var i = 0; i < numberOfFields; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n field = fieldRef.fieldName\n\n documentsWithField[field] || (documentsWithField[field] = 0)\n documentsWithField[field] += 1\n\n accumulator[field] || (accumulator[field] = 0)\n accumulator[field] += this.fieldLengths[fieldRef]\n }\n\n var fields = Object.keys(this._fields)\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i]\n accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]\n }\n\n this.averageFieldLength = accumulator\n}\n\n/**\n * Builds a vector space model of every document using lunr.Vector\n *\n * @private\n */\nlunr.Builder.prototype.createFieldVectors = function () {\n var fieldVectors = {},\n fieldRefs = Object.keys(this.fieldTermFrequencies),\n fieldRefsLength = fieldRefs.length,\n termIdfCache = Object.create(null)\n\n for (var i = 0; i < fieldRefsLength; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n fieldName = fieldRef.fieldName,\n fieldLength = this.fieldLengths[fieldRef],\n fieldVector = new lunr.Vector,\n termFrequencies = this.fieldTermFrequencies[fieldRef],\n terms = Object.keys(termFrequencies),\n termsLength = terms.length\n\n\n var fieldBoost = this._fields[fieldName].boost || 1,\n docBoost = this._documents[fieldRef.docRef].boost || 1\n\n for (var j = 0; j < termsLength; j++) {\n var term = terms[j],\n tf = termFrequencies[term],\n termIndex = this.invertedIndex[term]._index,\n idf, score, scoreWithPrecision\n\n if (termIdfCache[term] === undefined) {\n idf = lunr.idf(this.invertedIndex[term], this.documentCount)\n termIdfCache[term] = idf\n } else {\n idf = termIdfCache[term]\n }\n\n score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)\n score *= fieldBoost\n score *= docBoost\n scoreWithPrecision = Math.round(score * 1000) / 1000\n // Converts 1.23456789 to 1.234.\n // Reducing the precision so that the vectors take up less\n // space when serialised. Doing it now so that they behave\n // the same before and after serialisation. Also, this is\n // the fastest approach to reducing a number's precision in\n // JavaScript.\n\n fieldVector.insert(termIndex, scoreWithPrecision)\n }\n\n fieldVectors[fieldRef] = fieldVector\n }\n\n this.fieldVectors = fieldVectors\n}\n\n/**\n * Creates a token set of all tokens in the index using lunr.TokenSet\n *\n * @private\n */\nlunr.Builder.prototype.createTokenSet = function () {\n this.tokenSet = lunr.TokenSet.fromArray(\n Object.keys(this.invertedIndex).sort()\n )\n}\n\n/**\n * Builds the index, creating an instance of lunr.Index.\n *\n * This completes the indexing process and should only be called\n * once all documents have been added to the index.\n *\n * @returns {lunr.Index}\n */\nlunr.Builder.prototype.build = function () {\n this.calculateAverageFieldLengths()\n this.createFieldVectors()\n this.createTokenSet()\n\n return new lunr.Index({\n invertedIndex: this.invertedIndex,\n fieldVectors: this.fieldVectors,\n tokenSet: this.tokenSet,\n fields: Object.keys(this._fields),\n pipeline: this.searchPipeline\n })\n}\n\n/**\n * Applies a plugin to the index builder.\n *\n * A plugin is a function that is called with the index builder as its context.\n * Plugins can be used to customise or extend the behaviour of the index\n * in some way. A plugin is just a function, that encapsulated the custom\n * behaviour that should be applied when building the index.\n *\n * The plugin function will be called with the index builder as its argument, additional\n * arguments can also be passed when calling use. The function will be called\n * with the index builder as its context.\n *\n * @param {Function} plugin The plugin to apply.\n */\nlunr.Builder.prototype.use = function (fn) {\n var args = Array.prototype.slice.call(arguments, 1)\n args.unshift(this)\n fn.apply(this, args)\n}\n/**\n * Contains and collects metadata about a matching document.\n * A single instance of lunr.MatchData is returned as part of every\n * lunr.Index~Result.\n *\n * @constructor\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n * @property {object} metadata - A cloned collection of metadata associated with this document.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData = function (term, field, metadata) {\n var clonedMetadata = Object.create(null),\n metadataKeys = Object.keys(metadata || {})\n\n // Cloning the metadata to prevent the original\n // being mutated during match data combination.\n // Metadata is kept in an array within the inverted\n // index so cloning the data can be done with\n // Array#slice\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n clonedMetadata[key] = metadata[key].slice()\n }\n\n this.metadata = Object.create(null)\n\n if (term !== undefined) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = clonedMetadata\n }\n}\n\n/**\n * An instance of lunr.MatchData will be created for every term that matches a\n * document. However only one instance is required in a lunr.Index~Result. This\n * method combines metadata from another instance of lunr.MatchData with this\n * objects metadata.\n *\n * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData.prototype.combine = function (otherMatchData) {\n var terms = Object.keys(otherMatchData.metadata)\n\n for (var i = 0; i < terms.length; i++) {\n var term = terms[i],\n fields = Object.keys(otherMatchData.metadata[term])\n\n if (this.metadata[term] == undefined) {\n this.metadata[term] = Object.create(null)\n }\n\n for (var j = 0; j < fields.length; j++) {\n var field = fields[j],\n keys = Object.keys(otherMatchData.metadata[term][field])\n\n if (this.metadata[term][field] == undefined) {\n this.metadata[term][field] = Object.create(null)\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k]\n\n if (this.metadata[term][field][key] == undefined) {\n this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]\n } else {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])\n }\n\n }\n }\n }\n}\n\n/**\n * Add metadata for a term/field pair to this instance of match data.\n *\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n */\nlunr.MatchData.prototype.add = function (term, field, metadata) {\n if (!(term in this.metadata)) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = metadata\n return\n }\n\n if (!(field in this.metadata[term])) {\n this.metadata[term][field] = metadata\n return\n }\n\n var metadataKeys = Object.keys(metadata)\n\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n\n if (key in this.metadata[term][field]) {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])\n } else {\n this.metadata[term][field][key] = metadata[key]\n }\n }\n}\n/**\n * A lunr.Query provides a programmatic way of defining queries to be performed\n * against a {@link lunr.Index}.\n *\n * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method\n * so the query object is pre-initialized with the right index fields.\n *\n * @constructor\n * @property {lunr.Query~Clause[]} clauses - An array of query clauses.\n * @property {string[]} allFields - An array of all available fields in a lunr.Index.\n */\nlunr.Query = function (allFields) {\n this.clauses = []\n this.allFields = allFields\n}\n\n/**\n * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.\n *\n * This allows wildcards to be added to the beginning and end of a term without having to manually do any string\n * concatenation.\n *\n * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.\n *\n * @constant\n * @default\n * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour\n * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists\n * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example <caption>query term with trailing wildcard</caption>\n * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })\n * @example <caption>query term with leading and trailing wildcard</caption>\n * query.term('foo', {\n * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING\n * })\n */\n\nlunr.Query.wildcard = new String (\"*\")\nlunr.Query.wildcard.NONE = 0\nlunr.Query.wildcard.LEADING = 1\nlunr.Query.wildcard.TRAILING = 2\n\n/**\n * Constants for indicating what kind of presence a term must have in matching documents.\n *\n * @constant\n * @enum {number}\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example <caption>query term with required presence</caption>\n * query.term('foo', { presence: lunr.Query.presence.REQUIRED })\n */\nlunr.Query.presence = {\n /**\n * Term's presence in a document is optional, this is the default value.\n */\n OPTIONAL: 1,\n\n /**\n * Term's presence in a document is required, documents that do not contain\n * this term will not be returned.\n */\n REQUIRED: 2,\n\n /**\n * Term's presence in a document is prohibited, documents that do contain\n * this term will not be returned.\n */\n PROHIBITED: 3\n}\n\n/**\n * A single clause in a {@link lunr.Query} contains a term and details on how to\n * match that term against a {@link lunr.Index}.\n *\n * @typedef {Object} lunr.Query~Clause\n * @property {string[]} fields - The fields in an index this clause should be matched against.\n * @property {number} [boost=1] - Any boost that should be applied when matching this clause.\n * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.\n * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.\n * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.\n * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.\n */\n\n/**\n * Adds a {@link lunr.Query~Clause} to this query.\n *\n * Unless the clause contains the fields to be matched all fields will be matched. In addition\n * a default boost of 1 is applied to the clause.\n *\n * @param {lunr.Query~Clause} clause - The clause to add to this query.\n * @see lunr.Query~Clause\n * @returns {lunr.Query}\n */\nlunr.Query.prototype.clause = function (clause) {\n if (!('fields' in clause)) {\n clause.fields = this.allFields\n }\n\n if (!('boost' in clause)) {\n clause.boost = 1\n }\n\n if (!('usePipeline' in clause)) {\n clause.usePipeline = true\n }\n\n if (!('wildcard' in clause)) {\n clause.wildcard = lunr.Query.wildcard.NONE\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {\n clause.term = \"*\" + clause.term\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {\n clause.term = \"\" + clause.term + \"*\"\n }\n\n if (!('presence' in clause)) {\n clause.presence = lunr.Query.presence.OPTIONAL\n }\n\n this.clauses.push(clause)\n\n return this\n}\n\n/**\n * A negated query is one in which every clause has a presence of\n * prohibited. These queries require some special processing to return\n * the expected results.\n *\n * @returns boolean\n */\nlunr.Query.prototype.isNegated = function () {\n for (var i = 0; i < this.clauses.length; i++) {\n if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}\n * to the list of clauses that make up this query.\n *\n * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion\n * to a token or token-like string should be done before calling this method.\n *\n * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an\n * array, each term in the array will share the same options.\n *\n * @param {object|object[]} term - The term(s) to add to the query.\n * @param {object} [options] - Any additional properties to add to the query clause.\n * @returns {lunr.Query}\n * @see lunr.Query#clause\n * @see lunr.Query~Clause\n * @example <caption>adding a single term to a query</caption>\n * query.term(\"foo\")\n * @example <caption>adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard</caption>\n * query.term(\"foo\", {\n * fields: [\"title\"],\n * boost: 10,\n * wildcard: lunr.Query.wildcard.TRAILING\n * })\n * @example <caption>using lunr.tokenizer to convert a string to tokens before using them as terms</caption>\n * query.term(lunr.tokenizer(\"foo bar\"))\n */\nlunr.Query.prototype.term = function (term, options) {\n if (Array.isArray(term)) {\n term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)\n return this\n }\n\n var clause = options || {}\n clause.term = term.toString()\n\n this.clause(clause)\n\n return this\n}\nlunr.QueryParseError = function (message, start, end) {\n this.name = \"QueryParseError\"\n this.message = message\n this.start = start\n this.end = end\n}\n\nlunr.QueryParseError.prototype = new Error\nlunr.QueryLexer = function (str) {\n this.lexemes = []\n this.str = str\n this.length = str.length\n this.pos = 0\n this.start = 0\n this.escapeCharPositions = []\n}\n\nlunr.QueryLexer.prototype.run = function () {\n var state = lunr.QueryLexer.lexText\n\n while (state) {\n state = state(this)\n }\n}\n\nlunr.QueryLexer.prototype.sliceString = function () {\n var subSlices = [],\n sliceStart = this.start,\n sliceEnd = this.pos\n\n for (var i = 0; i < this.escapeCharPositions.length; i++) {\n sliceEnd = this.escapeCharPositions[i]\n subSlices.push(this.str.slice(sliceStart, sliceEnd))\n sliceStart = sliceEnd + 1\n }\n\n subSlices.push(this.str.slice(sliceStart, this.pos))\n this.escapeCharPositions.length = 0\n\n return subSlices.join('')\n}\n\nlunr.QueryLexer.prototype.emit = function (type) {\n this.lexemes.push({\n type: type,\n str: this.sliceString(),\n start: this.start,\n end: this.pos\n })\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.escapeCharacter = function () {\n this.escapeCharPositions.push(this.pos - 1)\n this.pos += 1\n}\n\nlunr.QueryLexer.prototype.next = function () {\n if (this.pos >= this.length) {\n return lunr.QueryLexer.EOS\n }\n\n var char = this.str.charAt(this.pos)\n this.pos += 1\n return char\n}\n\nlunr.QueryLexer.prototype.width = function () {\n return this.pos - this.start\n}\n\nlunr.QueryLexer.prototype.ignore = function () {\n if (this.start == this.pos) {\n this.pos += 1\n }\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.backup = function () {\n this.pos -= 1\n}\n\nlunr.QueryLexer.prototype.acceptDigitRun = function () {\n var char, charCode\n\n do {\n char = this.next()\n charCode = char.charCodeAt(0)\n } while (charCode > 47 && charCode < 58)\n\n if (char != lunr.QueryLexer.EOS) {\n this.backup()\n }\n}\n\nlunr.QueryLexer.prototype.more = function () {\n return this.pos < this.length\n}\n\nlunr.QueryLexer.EOS = 'EOS'\nlunr.QueryLexer.FIELD = 'FIELD'\nlunr.QueryLexer.TERM = 'TERM'\nlunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'\nlunr.QueryLexer.BOOST = 'BOOST'\nlunr.QueryLexer.PRESENCE = 'PRESENCE'\n\nlunr.QueryLexer.lexField = function (lexer) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.FIELD)\n lexer.ignore()\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexTerm = function (lexer) {\n if (lexer.width() > 1) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.TERM)\n }\n\n lexer.ignore()\n\n if (lexer.more()) {\n return lunr.QueryLexer.lexText\n }\n}\n\nlunr.QueryLexer.lexEditDistance = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexBoost = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.BOOST)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexEOS = function (lexer) {\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n}\n\n// This matches the separator used when tokenising fields\n// within a document. These should match otherwise it is\n// not possible to search for some tokens within a document.\n//\n// It is possible for the user to change the separator on the\n// tokenizer so it _might_ clash with any other of the special\n// characters already used within the search string, e.g. :.\n//\n// This means that it is possible to change the separator in\n// such a way that makes some words unsearchable using a search\n// string.\nlunr.QueryLexer.termSeparator = lunr.tokenizer.separator\n\nlunr.QueryLexer.lexText = function (lexer) {\n while (true) {\n var char = lexer.next()\n\n if (char == lunr.QueryLexer.EOS) {\n return lunr.QueryLexer.lexEOS\n }\n\n // Escape character is '\\'\n if (char.charCodeAt(0) == 92) {\n lexer.escapeCharacter()\n continue\n }\n\n if (char == \":\") {\n return lunr.QueryLexer.lexField\n }\n\n if (char == \"~\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexEditDistance\n }\n\n if (char == \"^\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexBoost\n }\n\n // \"+\" indicates term presence is required\n // checking for length to ensure that only\n // leading \"+\" are considered\n if (char == \"+\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n // \"-\" indicates term presence is prohibited\n // checking for length to ensure that only\n // leading \"-\" are considered\n if (char == \"-\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n if (char.match(lunr.QueryLexer.termSeparator)) {\n return lunr.QueryLexer.lexTerm\n }\n }\n}\n\nlunr.QueryParser = function (str, query) {\n this.lexer = new lunr.QueryLexer (str)\n this.query = query\n this.currentClause = {}\n this.lexemeIdx = 0\n}\n\nlunr.QueryParser.prototype.parse = function () {\n this.lexer.run()\n this.lexemes = this.lexer.lexemes\n\n var state = lunr.QueryParser.parseClause\n\n while (state) {\n state = state(this)\n }\n\n return this.query\n}\n\nlunr.QueryParser.prototype.peekLexeme = function () {\n return this.lexemes[this.lexemeIdx]\n}\n\nlunr.QueryParser.prototype.consumeLexeme = function () {\n var lexeme = this.peekLexeme()\n this.lexemeIdx += 1\n return lexeme\n}\n\nlunr.QueryParser.prototype.nextClause = function () {\n var completedClause = this.currentClause\n this.query.clause(completedClause)\n this.currentClause = {}\n}\n\nlunr.QueryParser.parseClause = function (parser) {\n var lexeme = parser.peekLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.type) {\n case lunr.QueryLexer.PRESENCE:\n return lunr.QueryParser.parsePresence\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expected either a field or a term, found \" + lexeme.type\n\n if (lexeme.str.length >= 1) {\n errorMessage += \" with value '\" + lexeme.str + \"'\"\n }\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n}\n\nlunr.QueryParser.parsePresence = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.str) {\n case \"-\":\n parser.currentClause.presence = lunr.Query.presence.PROHIBITED\n break\n case \"+\":\n parser.currentClause.presence = lunr.Query.presence.REQUIRED\n break\n default:\n var errorMessage = \"unrecognised presence operator'\" + lexeme.str + \"'\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term or field, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term or field, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseField = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n if (parser.query.allFields.indexOf(lexeme.str) == -1) {\n var possibleFields = parser.query.allFields.map(function (f) { return \"'\" + f + \"'\" }).join(', '),\n errorMessage = \"unrecognised field '\" + lexeme.str + \"', possible fields: \" + possibleFields\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.fields = [lexeme.str]\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseTerm = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n parser.currentClause.term = lexeme.str.toLowerCase()\n\n if (lexeme.str.indexOf(\"*\") != -1) {\n parser.currentClause.usePipeline = false\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseEditDistance = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var editDistance = parseInt(lexeme.str, 10)\n\n if (isNaN(editDistance)) {\n var errorMessage = \"edit distance must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.editDistance = editDistance\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseBoost = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var boost = parseInt(lexeme.str, 10)\n\n if (isNaN(boost)) {\n var errorMessage = \"boost must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.boost = boost\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\n /**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n ;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory)\n } else if (typeof exports === 'object') {\n /**\n * Node. Does not work with strict CommonJS, but\n * only CommonJS-like enviroments that support module.exports,\n * like Node.\n */\n module.exports = factory()\n } else {\n // Browser globals (root is window)\n root.lunr = factory()\n }\n }(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n return lunr\n }))\n})();\n", "/*!\n * Snowball JavaScript Library v0.3\n * http://code.google.com/p/urim/\n * http://snowball.tartarus.org/\n *\n * Copyright 2010, Oleg Mazko\n * http://www.mozilla.org/MPL/\n */\n\n/**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory)\n } else if (typeof exports === 'object') {\n /**\n * Node. Does not work with strict CommonJS, but\n * only CommonJS-like environments that support module.exports,\n * like Node.\n */\n module.exports = factory()\n } else {\n // Browser globals (root is window)\n factory()(root.lunr);\n }\n}(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n return function(lunr) {\n /* provides utilities for the included stemmers */\n lunr.stemmerSupport = {\n Among: function(s, substring_i, result, method) {\n this.toCharArray = function(s) {\n var sLength = s.length, charArr = new Array(sLength);\n for (var i = 0; i < sLength; i++)\n charArr[i] = s.charCodeAt(i);\n return charArr;\n };\n\n if ((!s && s != \"\") || (!substring_i && (substring_i != 0)) || !result)\n throw (\"Bad Among initialisation: s:\" + s + \", substring_i: \"\n + substring_i + \", result: \" + result);\n this.s_size = s.length;\n this.s = this.toCharArray(s);\n this.substring_i = substring_i;\n this.result = result;\n this.method = method;\n },\n SnowballProgram: function() {\n var current;\n return {\n bra : 0,\n ket : 0,\n limit : 0,\n cursor : 0,\n limit_backward : 0,\n setCurrent : function(word) {\n current = word;\n this.cursor = 0;\n this.limit = word.length;\n this.limit_backward = 0;\n this.bra = this.cursor;\n this.ket = this.limit;\n },\n getCurrent : function() {\n var result = current;\n current = null;\n return result;\n },\n in_grouping : function(s, min, max) {\n if (this.cursor < this.limit) {\n var ch = current.charCodeAt(this.cursor);\n if (ch <= max && ch >= min) {\n ch -= min;\n if (s[ch >> 3] & (0X1 << (ch & 0X7))) {\n this.cursor++;\n return true;\n }\n }\n }\n return false;\n },\n in_grouping_b : function(s, min, max) {\n if (this.cursor > this.limit_backward) {\n var ch = current.charCodeAt(this.cursor - 1);\n if (ch <= max && ch >= min) {\n ch -= min;\n if (s[ch >> 3] & (0X1 << (ch & 0X7))) {\n this.cursor--;\n return true;\n }\n }\n }\n return false;\n },\n out_grouping : function(s, min, max) {\n if (this.cursor < this.limit) {\n var ch = current.charCodeAt(this.cursor);\n if (ch > max || ch < min) {\n this.cursor++;\n return true;\n }\n ch -= min;\n if (!(s[ch >> 3] & (0X1 << (ch & 0X7)))) {\n this.cursor++;\n return true;\n }\n }\n return false;\n },\n out_grouping_b : function(s, min, max) {\n if (this.cursor > this.limit_backward) {\n var ch = current.charCodeAt(this.cursor - 1);\n if (ch > max || ch < min) {\n this.cursor--;\n return true;\n }\n ch -= min;\n if (!(s[ch >> 3] & (0X1 << (ch & 0X7)))) {\n this.cursor--;\n return true;\n }\n }\n return false;\n },\n eq_s : function(s_size, s) {\n if (this.limit - this.cursor < s_size)\n return false;\n for (var i = 0; i < s_size; i++)\n if (current.charCodeAt(this.cursor + i) != s.charCodeAt(i))\n return false;\n this.cursor += s_size;\n return true;\n },\n eq_s_b : function(s_size, s) {\n if (this.cursor - this.limit_backward < s_size)\n return false;\n for (var i = 0; i < s_size; i++)\n if (current.charCodeAt(this.cursor - s_size + i) != s\n .charCodeAt(i))\n return false;\n this.cursor -= s_size;\n return true;\n },\n find_among : function(v, v_size) {\n var i = 0, j = v_size, c = this.cursor, l = this.limit, common_i = 0, common_j = 0, first_key_inspected = false;\n while (true) {\n var k = i + ((j - i) >> 1), diff = 0, common = common_i < common_j\n ? common_i\n : common_j, w = v[k];\n for (var i2 = common; i2 < w.s_size; i2++) {\n if (c + common == l) {\n diff = -1;\n break;\n }\n diff = current.charCodeAt(c + common) - w.s[i2];\n if (diff)\n break;\n common++;\n }\n if (diff < 0) {\n j = k;\n common_j = common;\n } else {\n i = k;\n common_i = common;\n }\n if (j - i <= 1) {\n if (i > 0 || j == i || first_key_inspected)\n break;\n first_key_inspected = true;\n }\n }\n while (true) {\n var w = v[i];\n if (common_i >= w.s_size) {\n this.cursor = c + w.s_size;\n if (!w.method)\n return w.result;\n var res = w.method();\n this.cursor = c + w.s_size;\n if (res)\n return w.result;\n }\n i = w.substring_i;\n if (i < 0)\n return 0;\n }\n },\n find_among_b : function(v, v_size) {\n var i = 0, j = v_size, c = this.cursor, lb = this.limit_backward, common_i = 0, common_j = 0, first_key_inspected = false;\n while (true) {\n var k = i + ((j - i) >> 1), diff = 0, common = common_i < common_j\n ? common_i\n : common_j, w = v[k];\n for (var i2 = w.s_size - 1 - common; i2 >= 0; i2--) {\n if (c - common == lb) {\n diff = -1;\n break;\n }\n diff = current.charCodeAt(c - 1 - common) - w.s[i2];\n if (diff)\n break;\n common++;\n }\n if (diff < 0) {\n j = k;\n common_j = common;\n } else {\n i = k;\n common_i = common;\n }\n if (j - i <= 1) {\n if (i > 0 || j == i || first_key_inspected)\n break;\n first_key_inspected = true;\n }\n }\n while (true) {\n var w = v[i];\n if (common_i >= w.s_size) {\n this.cursor = c - w.s_size;\n if (!w.method)\n return w.result;\n var res = w.method();\n this.cursor = c - w.s_size;\n if (res)\n return w.result;\n }\n i = w.substring_i;\n if (i < 0)\n return 0;\n }\n },\n replace_s : function(c_bra, c_ket, s) {\n var adjustment = s.length - (c_ket - c_bra), left = current\n .substring(0, c_bra), right = current.substring(c_ket);\n current = left + s + right;\n this.limit += adjustment;\n if (this.cursor >= c_ket)\n this.cursor += adjustment;\n else if (this.cursor > c_bra)\n this.cursor = c_bra;\n return adjustment;\n },\n slice_check : function() {\n if (this.bra < 0 || this.bra > this.ket || this.ket > this.limit\n || this.limit > current.length)\n throw (\"faulty slice operation\");\n },\n slice_from : function(s) {\n this.slice_check();\n this.replace_s(this.bra, this.ket, s);\n },\n slice_del : function() {\n this.slice_from(\"\");\n },\n insert : function(c_bra, c_ket, s) {\n var adjustment = this.replace_s(c_bra, c_ket, s);\n if (c_bra <= this.bra)\n this.bra += adjustment;\n if (c_bra <= this.ket)\n this.ket += adjustment;\n },\n slice_to : function() {\n this.slice_check();\n return current.substring(this.bra, this.ket);\n },\n eq_v_b : function(s) {\n return this.eq_s_b(s.length, s);\n }\n };\n }\n };\n\n lunr.trimmerSupport = {\n generateTrimmer: function(wordCharacters) {\n var startRegex = new RegExp(\"^[^\" + wordCharacters + \"]+\")\n var endRegex = new RegExp(\"[^\" + wordCharacters + \"]+$\")\n\n return function(token) {\n // for lunr version 2\n if (typeof token.update === \"function\") {\n return token.update(function (s) {\n return s\n .replace(startRegex, '')\n .replace(endRegex, '');\n })\n } else { // for lunr version 1\n return token\n .replace(startRegex, '')\n .replace(endRegex, '');\n }\n };\n }\n }\n }\n}));\n", "/**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory)\n } else if (typeof exports === 'object') {\n /**\n * Node. Does not work with strict CommonJS, but\n * only CommonJS-like environments that support module.exports,\n * like Node.\n */\n module.exports = factory()\n } else {\n // Browser globals (root is window)\n factory()(root.lunr);\n }\n}(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n\n return function(lunr) {\n // TinySegmenter 0.1 -- Super compact Japanese tokenizer in Javascript\n // (c) 2008 Taku Kudo <taku@chasen.org>\n // TinySegmenter is freely distributable under the terms of a new BSD licence.\n // For details, see http://chasen.org/~taku/software/TinySegmenter/LICENCE.txt\n\n function TinySegmenter() {\n var patterns = {\n \"[\u4E00\u4E8C\u4E09\u56DB\u4E94\u516D\u4E03\u516B\u4E5D\u5341\u767E\u5343\u4E07\u5104\u5146]\":\"M\",\n \"[\u4E00-\u9FA0\u3005\u3006\u30F5\u30F6]\":\"H\",\n \"[\u3041-\u3093]\":\"I\",\n \"[\u30A1-\u30F4\u30FC\uFF71-\uFF9D\uFF9E\uFF70]\":\"K\",\n \"[a-zA-Z\uFF41-\uFF5A\uFF21-\uFF3A]\":\"A\",\n \"[0-9\uFF10-\uFF19]\":\"N\"\n }\n this.chartype_ = [];\n for (var i in patterns) {\n var regexp = new RegExp(i);\n this.chartype_.push([regexp, patterns[i]]);\n }\n\n this.BIAS__ = -332\n this.BC1__ = {\"HH\":6,\"II\":2461,\"KH\":406,\"OH\":-1378};\n this.BC2__ = {\"AA\":-3267,\"AI\":2744,\"AN\":-878,\"HH\":-4070,\"HM\":-1711,\"HN\":4012,\"HO\":3761,\"IA\":1327,\"IH\":-1184,\"II\":-1332,\"IK\":1721,\"IO\":5492,\"KI\":3831,\"KK\":-8741,\"MH\":-3132,\"MK\":3334,\"OO\":-2920};\n this.BC3__ = {\"HH\":996,\"HI\":626,\"HK\":-721,\"HN\":-1307,\"HO\":-836,\"IH\":-301,\"KK\":2762,\"MK\":1079,\"MM\":4034,\"OA\":-1652,\"OH\":266};\n this.BP1__ = {\"BB\":295,\"OB\":304,\"OO\":-125,\"UB\":352};\n this.BP2__ = {\"BO\":60,\"OO\":-1762};\n this.BQ1__ = {\"BHH\":1150,\"BHM\":1521,\"BII\":-1158,\"BIM\":886,\"BMH\":1208,\"BNH\":449,\"BOH\":-91,\"BOO\":-2597,\"OHI\":451,\"OIH\":-296,\"OKA\":1851,\"OKH\":-1020,\"OKK\":904,\"OOO\":2965};\n this.BQ2__ = {\"BHH\":118,\"BHI\":-1159,\"BHM\":466,\"BIH\":-919,\"BKK\":-1720,\"BKO\":864,\"OHH\":-1139,\"OHM\":-181,\"OIH\":153,\"UHI\":-1146};\n this.BQ3__ = {\"BHH\":-792,\"BHI\":2664,\"BII\":-299,\"BKI\":419,\"BMH\":937,\"BMM\":8335,\"BNN\":998,\"BOH\":775,\"OHH\":2174,\"OHM\":439,\"OII\":280,\"OKH\":1798,\"OKI\":-793,\"OKO\":-2242,\"OMH\":-2402,\"OOO\":11699};\n this.BQ4__ = {\"BHH\":-3895,\"BIH\":3761,\"BII\":-4654,\"BIK\":1348,\"BKK\":-1806,\"BMI\":-3385,\"BOO\":-12396,\"OAH\":926,\"OHH\":266,\"OHK\":-2036,\"ONN\":-973};\n this.BW1__ = {\",\u3068\":660,\",\u540C\":727,\"B1\u3042\":1404,\"B1\u540C\":542,\"\u3001\u3068\":660,\"\u3001\u540C\":727,\"\u300D\u3068\":1682,\"\u3042\u3063\":1505,\"\u3044\u3046\":1743,\"\u3044\u3063\":-2055,\"\u3044\u308B\":672,\"\u3046\u3057\":-4817,\"\u3046\u3093\":665,\"\u304B\u3089\":3472,\"\u304C\u3089\":600,\"\u3053\u3046\":-790,\"\u3053\u3068\":2083,\"\u3053\u3093\":-1262,\"\u3055\u3089\":-4143,\"\u3055\u3093\":4573,\"\u3057\u305F\":2641,\"\u3057\u3066\":1104,\"\u3059\u3067\":-3399,\"\u305D\u3053\":1977,\"\u305D\u308C\":-871,\"\u305F\u3061\":1122,\"\u305F\u3081\":601,\"\u3063\u305F\":3463,\"\u3064\u3044\":-802,\"\u3066\u3044\":805,\"\u3066\u304D\":1249,\"\u3067\u304D\":1127,\"\u3067\u3059\":3445,\"\u3067\u306F\":844,\"\u3068\u3044\":-4915,\"\u3068\u307F\":1922,\"\u3069\u3053\":3887,\"\u306A\u3044\":5713,\"\u306A\u3063\":3015,\"\u306A\u3069\":7379,\"\u306A\u3093\":-1113,\"\u306B\u3057\":2468,\"\u306B\u306F\":1498,\"\u306B\u3082\":1671,\"\u306B\u5BFE\":-912,\"\u306E\u4E00\":-501,\"\u306E\u4E2D\":741,\"\u307E\u305B\":2448,\"\u307E\u3067\":1711,\"\u307E\u307E\":2600,\"\u307E\u308B\":-2155,\"\u3084\u3080\":-1947,\"\u3088\u3063\":-2565,\"\u308C\u305F\":2369,\"\u308C\u3067\":-913,\"\u3092\u3057\":1860,\"\u3092\u898B\":731,\"\u4EA1\u304F\":-1886,\"\u4EAC\u90FD\":2558,\"\u53D6\u308A\":-2784,\"\u5927\u304D\":-2604,\"\u5927\u962A\":1497,\"\u5E73\u65B9\":-2314,\"\u5F15\u304D\":-1336,\"\u65E5\u672C\":-195,\"\u672C\u5F53\":-2423,\"\u6BCE\u65E5\":-2113,\"\u76EE\u6307\":-724,\"\uFF22\uFF11\u3042\":1404,\"\uFF22\uFF11\u540C\":542,\"\uFF63\u3068\":1682};\n this.BW2__ = {\"..\":-11822,\"11\":-669,\"\u2015\u2015\":-5730,\"\u2212\u2212\":-13175,\"\u3044\u3046\":-1609,\"\u3046\u304B\":2490,\"\u304B\u3057\":-1350,\"\u304B\u3082\":-602,\"\u304B\u3089\":-7194,\"\u304B\u308C\":4612,\"\u304C\u3044\":853,\"\u304C\u3089\":-3198,\"\u304D\u305F\":1941,\"\u304F\u306A\":-1597,\"\u3053\u3068\":-8392,\"\u3053\u306E\":-4193,\"\u3055\u305B\":4533,\"\u3055\u308C\":13168,\"\u3055\u3093\":-3977,\"\u3057\u3044\":-1819,\"\u3057\u304B\":-545,\"\u3057\u305F\":5078,\"\u3057\u3066\":972,\"\u3057\u306A\":939,\"\u305D\u306E\":-3744,\"\u305F\u3044\":-1253,\"\u305F\u305F\":-662,\"\u305F\u3060\":-3857,\"\u305F\u3061\":-786,\"\u305F\u3068\":1224,\"\u305F\u306F\":-939,\"\u3063\u305F\":4589,\"\u3063\u3066\":1647,\"\u3063\u3068\":-2094,\"\u3066\u3044\":6144,\"\u3066\u304D\":3640,\"\u3066\u304F\":2551,\"\u3066\u306F\":-3110,\"\u3066\u3082\":-3065,\"\u3067\u3044\":2666,\"\u3067\u304D\":-1528,\"\u3067\u3057\":-3828,\"\u3067\u3059\":-4761,\"\u3067\u3082\":-4203,\"\u3068\u3044\":1890,\"\u3068\u3053\":-1746,\"\u3068\u3068\":-2279,\"\u3068\u306E\":720,\"\u3068\u307F\":5168,\"\u3068\u3082\":-3941,\"\u306A\u3044\":-2488,\"\u306A\u304C\":-1313,\"\u306A\u3069\":-6509,\"\u306A\u306E\":2614,\"\u306A\u3093\":3099,\"\u306B\u304A\":-1615,\"\u306B\u3057\":2748,\"\u306B\u306A\":2454,\"\u306B\u3088\":-7236,\"\u306B\u5BFE\":-14943,\"\u306B\u5F93\":-4688,\"\u306B\u95A2\":-11388,\"\u306E\u304B\":2093,\"\u306E\u3067\":-7059,\"\u306E\u306B\":-6041,\"\u306E\u306E\":-6125,\"\u306F\u3044\":1073,\"\u306F\u304C\":-1033,\"\u306F\u305A\":-2532,\"\u3070\u308C\":1813,\"\u307E\u3057\":-1316,\"\u307E\u3067\":-6621,\"\u307E\u308C\":5409,\"\u3081\u3066\":-3153,\"\u3082\u3044\":2230,\"\u3082\u306E\":-10713,\"\u3089\u304B\":-944,\"\u3089\u3057\":-1611,\"\u3089\u306B\":-1897,\"\u308A\u3057\":651,\"\u308A\u307E\":1620,\"\u308C\u305F\":4270,\"\u308C\u3066\":849,\"\u308C\u3070\":4114,\"\u308D\u3046\":6067,\"\u308F\u308C\":7901,\"\u3092\u901A\":-11877,\"\u3093\u3060\":728,\"\u3093\u306A\":-4115,\"\u4E00\u4EBA\":602,\"\u4E00\u65B9\":-1375,\"\u4E00\u65E5\":970,\"\u4E00\u90E8\":-1051,\"\u4E0A\u304C\":-4479,\"\u4F1A\u793E\":-1116,\"\u51FA\u3066\":2163,\"\u5206\u306E\":-7758,\"\u540C\u515A\":970,\"\u540C\u65E5\":-913,\"\u5927\u962A\":-2471,\"\u59D4\u54E1\":-1250,\"\u5C11\u306A\":-1050,\"\u5E74\u5EA6\":-8669,\"\u5E74\u9593\":-1626,\"\u5E9C\u770C\":-2363,\"\u624B\u6A29\":-1982,\"\u65B0\u805E\":-4066,\"\u65E5\u65B0\":-722,\"\u65E5\u672C\":-7068,\"\u65E5\u7C73\":3372,\"\u66DC\u65E5\":-601,\"\u671D\u9BAE\":-2355,\"\u672C\u4EBA\":-2697,\"\u6771\u4EAC\":-1543,\"\u7136\u3068\":-1384,\"\u793E\u4F1A\":-1276,\"\u7ACB\u3066\":-990,\"\u7B2C\u306B\":-1612,\"\u7C73\u56FD\":-4268,\"\uFF11\uFF11\":-669};\n this.BW3__ = {\"\u3042\u305F\":-2194,\"\u3042\u308A\":719,\"\u3042\u308B\":3846,\"\u3044.\":-1185,\"\u3044\u3002\":-1185,\"\u3044\u3044\":5308,\"\u3044\u3048\":2079,\"\u3044\u304F\":3029,\"\u3044\u305F\":2056,\"\u3044\u3063\":1883,\"\u3044\u308B\":5600,\"\u3044\u308F\":1527,\"\u3046\u3061\":1117,\"\u3046\u3068\":4798,\"\u3048\u3068\":1454,\"\u304B.\":2857,\"\u304B\u3002\":2857,\"\u304B\u3051\":-743,\"\u304B\u3063\":-4098,\"\u304B\u306B\":-669,\"\u304B\u3089\":6520,\"\u304B\u308A\":-2670,\"\u304C,\":1816,\"\u304C\u3001\":1816,\"\u304C\u304D\":-4855,\"\u304C\u3051\":-1127,\"\u304C\u3063\":-913,\"\u304C\u3089\":-4977,\"\u304C\u308A\":-2064,\"\u304D\u305F\":1645,\"\u3051\u3069\":1374,\"\u3053\u3068\":7397,\"\u3053\u306E\":1542,\"\u3053\u308D\":-2757,\"\u3055\u3044\":-714,\"\u3055\u3092\":976,\"\u3057,\":1557,\"\u3057\u3001\":1557,\"\u3057\u3044\":-3714,\"\u3057\u305F\":3562,\"\u3057\u3066\":1449,\"\u3057\u306A\":2608,\"\u3057\u307E\":1200,\"\u3059.\":-1310,\"\u3059\u3002\":-1310,\"\u3059\u308B\":6521,\"\u305A,\":3426,\"\u305A\u3001\":3426,\"\u305A\u306B\":841,\"\u305D\u3046\":428,\"\u305F.\":8875,\"\u305F\u3002\":8875,\"\u305F\u3044\":-594,\"\u305F\u306E\":812,\"\u305F\u308A\":-1183,\"\u305F\u308B\":-853,\"\u3060.\":4098,\"\u3060\u3002\":4098,\"\u3060\u3063\":1004,\"\u3063\u305F\":-4748,\"\u3063\u3066\":300,\"\u3066\u3044\":6240,\"\u3066\u304A\":855,\"\u3066\u3082\":302,\"\u3067\u3059\":1437,\"\u3067\u306B\":-1482,\"\u3067\u306F\":2295,\"\u3068\u3046\":-1387,\"\u3068\u3057\":2266,\"\u3068\u306E\":541,\"\u3068\u3082\":-3543,\"\u3069\u3046\":4664,\"\u306A\u3044\":1796,\"\u306A\u304F\":-903,\"\u306A\u3069\":2135,\"\u306B,\":-1021,\"\u306B\u3001\":-1021,\"\u306B\u3057\":1771,\"\u306B\u306A\":1906,\"\u306B\u306F\":2644,\"\u306E,\":-724,\"\u306E\u3001\":-724,\"\u306E\u5B50\":-1000,\"\u306F,\":1337,\"\u306F\u3001\":1337,\"\u3079\u304D\":2181,\"\u307E\u3057\":1113,\"\u307E\u3059\":6943,\"\u307E\u3063\":-1549,\"\u307E\u3067\":6154,\"\u307E\u308C\":-793,\"\u3089\u3057\":1479,\"\u3089\u308C\":6820,\"\u308B\u308B\":3818,\"\u308C,\":854,\"\u308C\u3001\":854,\"\u308C\u305F\":1850,\"\u308C\u3066\":1375,\"\u308C\u3070\":-3246,\"\u308C\u308B\":1091,\"\u308F\u308C\":-605,\"\u3093\u3060\":606,\"\u3093\u3067\":798,\"\u30AB\u6708\":990,\"\u4F1A\u8B70\":860,\"\u5165\u308A\":1232,\"\u5927\u4F1A\":2217,\"\u59CB\u3081\":1681,\"\u5E02\":965,\"\u65B0\u805E\":-5055,\"\u65E5,\":974,\"\u65E5\u3001\":974,\"\u793E\u4F1A\":2024,\"\uFF76\u6708\":990};\n this.TC1__ = {\"AAA\":1093,\"HHH\":1029,\"HHM\":580,\"HII\":998,\"HOH\":-390,\"HOM\":-331,\"IHI\":1169,\"IOH\":-142,\"IOI\":-1015,\"IOM\":467,\"MMH\":187,\"OOI\":-1832};\n this.TC2__ = {\"HHO\":2088,\"HII\":-1023,\"HMM\":-1154,\"IHI\":-1965,\"KKH\":703,\"OII\":-2649};\n this.TC3__ = {\"AAA\":-294,\"HHH\":346,\"HHI\":-341,\"HII\":-1088,\"HIK\":731,\"HOH\":-1486,\"IHH\":128,\"IHI\":-3041,\"IHO\":-1935,\"IIH\":-825,\"IIM\":-1035,\"IOI\":-542,\"KHH\":-1216,\"KKA\":491,\"KKH\":-1217,\"KOK\":-1009,\"MHH\":-2694,\"MHM\":-457,\"MHO\":123,\"MMH\":-471,\"NNH\":-1689,\"NNO\":662,\"OHO\":-3393};\n this.TC4__ = {\"HHH\":-203,\"HHI\":1344,\"HHK\":365,\"HHM\":-122,\"HHN\":182,\"HHO\":669,\"HIH\":804,\"HII\":679,\"HOH\":446,\"IHH\":695,\"IHO\":-2324,\"IIH\":321,\"III\":1497,\"IIO\":656,\"IOO\":54,\"KAK\":4845,\"KKA\":3386,\"KKK\":3065,\"MHH\":-405,\"MHI\":201,\"MMH\":-241,\"MMM\":661,\"MOM\":841};\n this.TQ1__ = {\"BHHH\":-227,\"BHHI\":316,\"BHIH\":-132,\"BIHH\":60,\"BIII\":1595,\"BNHH\":-744,\"BOHH\":225,\"BOOO\":-908,\"OAKK\":482,\"OHHH\":281,\"OHIH\":249,\"OIHI\":200,\"OIIH\":-68};\n this.TQ2__ = {\"BIHH\":-1401,\"BIII\":-1033,\"BKAK\":-543,\"BOOO\":-5591};\n this.TQ3__ = {\"BHHH\":478,\"BHHM\":-1073,\"BHIH\":222,\"BHII\":-504,\"BIIH\":-116,\"BIII\":-105,\"BMHI\":-863,\"BMHM\":-464,\"BOMH\":620,\"OHHH\":346,\"OHHI\":1729,\"OHII\":997,\"OHMH\":481,\"OIHH\":623,\"OIIH\":1344,\"OKAK\":2792,\"OKHH\":587,\"OKKA\":679,\"OOHH\":110,\"OOII\":-685};\n this.TQ4__ = {\"BHHH\":-721,\"BHHM\":-3604,\"BHII\":-966,\"BIIH\":-607,\"BIII\":-2181,\"OAAA\":-2763,\"OAKK\":180,\"OHHH\":-294,\"OHHI\":2446,\"OHHO\":480,\"OHIH\":-1573,\"OIHH\":1935,\"OIHI\":-493,\"OIIH\":626,\"OIII\":-4007,\"OKAK\":-8156};\n this.TW1__ = {\"\u306B\u3064\u3044\":-4681,\"\u6771\u4EAC\u90FD\":2026};\n this.TW2__ = {\"\u3042\u308B\u7A0B\":-2049,\"\u3044\u3063\u305F\":-1256,\"\u3053\u308D\u304C\":-2434,\"\u3057\u3087\u3046\":3873,\"\u305D\u306E\u5F8C\":-4430,\"\u3060\u3063\u3066\":-1049,\"\u3066\u3044\u305F\":1833,\"\u3068\u3057\u3066\":-4657,\"\u3068\u3082\u306B\":-4517,\"\u3082\u306E\u3067\":1882,\"\u4E00\u6C17\u306B\":-792,\"\u521D\u3081\u3066\":-1512,\"\u540C\u6642\u306B\":-8097,\"\u5927\u304D\u306A\":-1255,\"\u5BFE\u3057\u3066\":-2721,\"\u793E\u4F1A\u515A\":-3216};\n this.TW3__ = {\"\u3044\u305F\u3060\":-1734,\"\u3057\u3066\u3044\":1314,\"\u3068\u3057\u3066\":-4314,\"\u306B\u3064\u3044\":-5483,\"\u306B\u3068\u3063\":-5989,\"\u306B\u5F53\u305F\":-6247,\"\u306E\u3067,\":-727,\"\u306E\u3067\u3001\":-727,\"\u306E\u3082\u306E\":-600,\"\u308C\u304B\u3089\":-3752,\"\u5341\u4E8C\u6708\":-2287};\n this.TW4__ = {\"\u3044\u3046.\":8576,\"\u3044\u3046\u3002\":8576,\"\u304B\u3089\u306A\":-2348,\"\u3057\u3066\u3044\":2958,\"\u305F\u304C,\":1516,\"\u305F\u304C\u3001\":1516,\"\u3066\u3044\u308B\":1538,\"\u3068\u3044\u3046\":1349,\"\u307E\u3057\u305F\":5543,\"\u307E\u305B\u3093\":1097,\"\u3088\u3046\u3068\":-4258,\"\u3088\u308B\u3068\":5865};\n this.UC1__ = {\"A\":484,\"K\":93,\"M\":645,\"O\":-505};\n this.UC2__ = {\"A\":819,\"H\":1059,\"I\":409,\"M\":3987,\"N\":5775,\"O\":646};\n this.UC3__ = {\"A\":-1370,\"I\":2311};\n this.UC4__ = {\"A\":-2643,\"H\":1809,\"I\":-1032,\"K\":-3450,\"M\":3565,\"N\":3876,\"O\":6646};\n this.UC5__ = {\"H\":313,\"I\":-1238,\"K\":-799,\"M\":539,\"O\":-831};\n this.UC6__ = {\"H\":-506,\"I\":-253,\"K\":87,\"M\":247,\"O\":-387};\n this.UP1__ = {\"O\":-214};\n this.UP2__ = {\"B\":69,\"O\":935};\n this.UP3__ = {\"B\":189};\n this.UQ1__ = {\"BH\":21,\"BI\":-12,\"BK\":-99,\"BN\":142,\"BO\":-56,\"OH\":-95,\"OI\":477,\"OK\":410,\"OO\":-2422};\n this.UQ2__ = {\"BH\":216,\"BI\":113,\"OK\":1759};\n this.UQ3__ = {\"BA\":-479,\"BH\":42,\"BI\":1913,\"BK\":-7198,\"BM\":3160,\"BN\":6427,\"BO\":14761,\"OI\":-827,\"ON\":-3212};\n this.UW1__ = {\",\":156,\"\u3001\":156,\"\u300C\":-463,\"\u3042\":-941,\"\u3046\":-127,\"\u304C\":-553,\"\u304D\":121,\"\u3053\":505,\"\u3067\":-201,\"\u3068\":-547,\"\u3069\":-123,\"\u306B\":-789,\"\u306E\":-185,\"\u306F\":-847,\"\u3082\":-466,\"\u3084\":-470,\"\u3088\":182,\"\u3089\":-292,\"\u308A\":208,\"\u308C\":169,\"\u3092\":-446,\"\u3093\":-137,\"\u30FB\":-135,\"\u4E3B\":-402,\"\u4EAC\":-268,\"\u533A\":-912,\"\u5348\":871,\"\u56FD\":-460,\"\u5927\":561,\"\u59D4\":729,\"\u5E02\":-411,\"\u65E5\":-141,\"\u7406\":361,\"\u751F\":-408,\"\u770C\":-386,\"\u90FD\":-718,\"\uFF62\":-463,\"\uFF65\":-135};\n this.UW2__ = {\",\":-829,\"\u3001\":-829,\"\u3007\":892,\"\u300C\":-645,\"\u300D\":3145,\"\u3042\":-538,\"\u3044\":505,\"\u3046\":134,\"\u304A\":-502,\"\u304B\":1454,\"\u304C\":-856,\"\u304F\":-412,\"\u3053\":1141,\"\u3055\":878,\"\u3056\":540,\"\u3057\":1529,\"\u3059\":-675,\"\u305B\":300,\"\u305D\":-1011,\"\u305F\":188,\"\u3060\":1837,\"\u3064\":-949,\"\u3066\":-291,\"\u3067\":-268,\"\u3068\":-981,\"\u3069\":1273,\"\u306A\":1063,\"\u306B\":-1764,\"\u306E\":130,\"\u306F\":-409,\"\u3072\":-1273,\"\u3079\":1261,\"\u307E\":600,\"\u3082\":-1263,\"\u3084\":-402,\"\u3088\":1639,\"\u308A\":-579,\"\u308B\":-694,\"\u308C\":571,\"\u3092\":-2516,\"\u3093\":2095,\"\u30A2\":-587,\"\u30AB\":306,\"\u30AD\":568,\"\u30C3\":831,\"\u4E09\":-758,\"\u4E0D\":-2150,\"\u4E16\":-302,\"\u4E2D\":-968,\"\u4E3B\":-861,\"\u4E8B\":492,\"\u4EBA\":-123,\"\u4F1A\":978,\"\u4FDD\":362,\"\u5165\":548,\"\u521D\":-3025,\"\u526F\":-1566,\"\u5317\":-3414,\"\u533A\":-422,\"\u5927\":-1769,\"\u5929\":-865,\"\u592A\":-483,\"\u5B50\":-1519,\"\u5B66\":760,\"\u5B9F\":1023,\"\u5C0F\":-2009,\"\u5E02\":-813,\"\u5E74\":-1060,\"\u5F37\":1067,\"\u624B\":-1519,\"\u63FA\":-1033,\"\u653F\":1522,\"\u6587\":-1355,\"\u65B0\":-1682,\"\u65E5\":-1815,\"\u660E\":-1462,\"\u6700\":-630,\"\u671D\":-1843,\"\u672C\":-1650,\"\u6771\":-931,\"\u679C\":-665,\"\u6B21\":-2378,\"\u6C11\":-180,\"\u6C17\":-1740,\"\u7406\":752,\"\u767A\":529,\"\u76EE\":-1584,\"\u76F8\":-242,\"\u770C\":-1165,\"\u7ACB\":-763,\"\u7B2C\":810,\"\u7C73\":509,\"\u81EA\":-1353,\"\u884C\":838,\"\u897F\":-744,\"\u898B\":-3874,\"\u8ABF\":1010,\"\u8B70\":1198,\"\u8FBC\":3041,\"\u958B\":1758,\"\u9593\":-1257,\"\uFF62\":-645,\"\uFF63\":3145,\"\uFF6F\":831,\"\uFF71\":-587,\"\uFF76\":306,\"\uFF77\":568};\n this.UW3__ = {\",\":4889,\"1\":-800,\"\u2212\":-1723,\"\u3001\":4889,\"\u3005\":-2311,\"\u3007\":5827,\"\u300D\":2670,\"\u3013\":-3573,\"\u3042\":-2696,\"\u3044\":1006,\"\u3046\":2342,\"\u3048\":1983,\"\u304A\":-4864,\"\u304B\":-1163,\"\u304C\":3271,\"\u304F\":1004,\"\u3051\":388,\"\u3052\":401,\"\u3053\":-3552,\"\u3054\":-3116,\"\u3055\":-1058,\"\u3057\":-395,\"\u3059\":584,\"\u305B\":3685,\"\u305D\":-5228,\"\u305F\":842,\"\u3061\":-521,\"\u3063\":-1444,\"\u3064\":-1081,\"\u3066\":6167,\"\u3067\":2318,\"\u3068\":1691,\"\u3069\":-899,\"\u306A\":-2788,\"\u306B\":2745,\"\u306E\":4056,\"\u306F\":4555,\"\u3072\":-2171,\"\u3075\":-1798,\"\u3078\":1199,\"\u307B\":-5516,\"\u307E\":-4384,\"\u307F\":-120,\"\u3081\":1205,\"\u3082\":2323,\"\u3084\":-788,\"\u3088\":-202,\"\u3089\":727,\"\u308A\":649,\"\u308B\":5905,\"\u308C\":2773,\"\u308F\":-1207,\"\u3092\":6620,\"\u3093\":-518,\"\u30A2\":551,\"\u30B0\":1319,\"\u30B9\":874,\"\u30C3\":-1350,\"\u30C8\":521,\"\u30E0\":1109,\"\u30EB\":1591,\"\u30ED\":2201,\"\u30F3\":278,\"\u30FB\":-3794,\"\u4E00\":-1619,\"\u4E0B\":-1759,\"\u4E16\":-2087,\"\u4E21\":3815,\"\u4E2D\":653,\"\u4E3B\":-758,\"\u4E88\":-1193,\"\u4E8C\":974,\"\u4EBA\":2742,\"\u4ECA\":792,\"\u4ED6\":1889,\"\u4EE5\":-1368,\"\u4F4E\":811,\"\u4F55\":4265,\"\u4F5C\":-361,\"\u4FDD\":-2439,\"\u5143\":4858,\"\u515A\":3593,\"\u5168\":1574,\"\u516C\":-3030,\"\u516D\":755,\"\u5171\":-1880,\"\u5186\":5807,\"\u518D\":3095,\"\u5206\":457,\"\u521D\":2475,\"\u5225\":1129,\"\u524D\":2286,\"\u526F\":4437,\"\u529B\":365,\"\u52D5\":-949,\"\u52D9\":-1872,\"\u5316\":1327,\"\u5317\":-1038,\"\u533A\":4646,\"\u5343\":-2309,\"\u5348\":-783,\"\u5354\":-1006,\"\u53E3\":483,\"\u53F3\":1233,\"\u5404\":3588,\"\u5408\":-241,\"\u540C\":3906,\"\u548C\":-837,\"\u54E1\":4513,\"\u56FD\":642,\"\u578B\":1389,\"\u5834\":1219,\"\u5916\":-241,\"\u59BB\":2016,\"\u5B66\":-1356,\"\u5B89\":-423,\"\u5B9F\":-1008,\"\u5BB6\":1078,\"\u5C0F\":-513,\"\u5C11\":-3102,\"\u5DDE\":1155,\"\u5E02\":3197,\"\u5E73\":-1804,\"\u5E74\":2416,\"\u5E83\":-1030,\"\u5E9C\":1605,\"\u5EA6\":1452,\"\u5EFA\":-2352,\"\u5F53\":-3885,\"\u5F97\":1905,\"\u601D\":-1291,\"\u6027\":1822,\"\u6238\":-488,\"\u6307\":-3973,\"\u653F\":-2013,\"\u6559\":-1479,\"\u6570\":3222,\"\u6587\":-1489,\"\u65B0\":1764,\"\u65E5\":2099,\"\u65E7\":5792,\"\u6628\":-661,\"\u6642\":-1248,\"\u66DC\":-951,\"\u6700\":-937,\"\u6708\":4125,\"\u671F\":360,\"\u674E\":3094,\"\u6751\":364,\"\u6771\":-805,\"\u6838\":5156,\"\u68EE\":2438,\"\u696D\":484,\"\u6C0F\":2613,\"\u6C11\":-1694,\"\u6C7A\":-1073,\"\u6CD5\":1868,\"\u6D77\":-495,\"\u7121\":979,\"\u7269\":461,\"\u7279\":-3850,\"\u751F\":-273,\"\u7528\":914,\"\u753A\":1215,\"\u7684\":7313,\"\u76F4\":-1835,\"\u7701\":792,\"\u770C\":6293,\"\u77E5\":-1528,\"\u79C1\":4231,\"\u7A0E\":401,\"\u7ACB\":-960,\"\u7B2C\":1201,\"\u7C73\":7767,\"\u7CFB\":3066,\"\u7D04\":3663,\"\u7D1A\":1384,\"\u7D71\":-4229,\"\u7DCF\":1163,\"\u7DDA\":1255,\"\u8005\":6457,\"\u80FD\":725,\"\u81EA\":-2869,\"\u82F1\":785,\"\u898B\":1044,\"\u8ABF\":-562,\"\u8CA1\":-733,\"\u8CBB\":1777,\"\u8ECA\":1835,\"\u8ECD\":1375,\"\u8FBC\":-1504,\"\u901A\":-1136,\"\u9078\":-681,\"\u90CE\":1026,\"\u90E1\":4404,\"\u90E8\":1200,\"\u91D1\":2163,\"\u9577\":421,\"\u958B\":-1432,\"\u9593\":1302,\"\u95A2\":-1282,\"\u96E8\":2009,\"\u96FB\":-1045,\"\u975E\":2066,\"\u99C5\":1620,\"\uFF11\":-800,\"\uFF63\":2670,\"\uFF65\":-3794,\"\uFF6F\":-1350,\"\uFF71\":551,\"\uFF78\uFF9E\":1319,\"\uFF7D\":874,\"\uFF84\":521,\"\uFF91\":1109,\"\uFF99\":1591,\"\uFF9B\":2201,\"\uFF9D\":278};\n this.UW4__ = {\",\":3930,\".\":3508,\"\u2015\":-4841,\"\u3001\":3930,\"\u3002\":3508,\"\u3007\":4999,\"\u300C\":1895,\"\u300D\":3798,\"\u3013\":-5156,\"\u3042\":4752,\"\u3044\":-3435,\"\u3046\":-640,\"\u3048\":-2514,\"\u304A\":2405,\"\u304B\":530,\"\u304C\":6006,\"\u304D\":-4482,\"\u304E\":-3821,\"\u304F\":-3788,\"\u3051\":-4376,\"\u3052\":-4734,\"\u3053\":2255,\"\u3054\":1979,\"\u3055\":2864,\"\u3057\":-843,\"\u3058\":-2506,\"\u3059\":-731,\"\u305A\":1251,\"\u305B\":181,\"\u305D\":4091,\"\u305F\":5034,\"\u3060\":5408,\"\u3061\":-3654,\"\u3063\":-5882,\"\u3064\":-1659,\"\u3066\":3994,\"\u3067\":7410,\"\u3068\":4547,\"\u306A\":5433,\"\u306B\":6499,\"\u306C\":1853,\"\u306D\":1413,\"\u306E\":7396,\"\u306F\":8578,\"\u3070\":1940,\"\u3072\":4249,\"\u3073\":-4134,\"\u3075\":1345,\"\u3078\":6665,\"\u3079\":-744,\"\u307B\":1464,\"\u307E\":1051,\"\u307F\":-2082,\"\u3080\":-882,\"\u3081\":-5046,\"\u3082\":4169,\"\u3083\":-2666,\"\u3084\":2795,\"\u3087\":-1544,\"\u3088\":3351,\"\u3089\":-2922,\"\u308A\":-9726,\"\u308B\":-14896,\"\u308C\":-2613,\"\u308D\":-4570,\"\u308F\":-1783,\"\u3092\":13150,\"\u3093\":-2352,\"\u30AB\":2145,\"\u30B3\":1789,\"\u30BB\":1287,\"\u30C3\":-724,\"\u30C8\":-403,\"\u30E1\":-1635,\"\u30E9\":-881,\"\u30EA\":-541,\"\u30EB\":-856,\"\u30F3\":-3637,\"\u30FB\":-4371,\"\u30FC\":-11870,\"\u4E00\":-2069,\"\u4E2D\":2210,\"\u4E88\":782,\"\u4E8B\":-190,\"\u4E95\":-1768,\"\u4EBA\":1036,\"\u4EE5\":544,\"\u4F1A\":950,\"\u4F53\":-1286,\"\u4F5C\":530,\"\u5074\":4292,\"\u5148\":601,\"\u515A\":-2006,\"\u5171\":-1212,\"\u5185\":584,\"\u5186\":788,\"\u521D\":1347,\"\u524D\":1623,\"\u526F\":3879,\"\u529B\":-302,\"\u52D5\":-740,\"\u52D9\":-2715,\"\u5316\":776,\"\u533A\":4517,\"\u5354\":1013,\"\u53C2\":1555,\"\u5408\":-1834,\"\u548C\":-681,\"\u54E1\":-910,\"\u5668\":-851,\"\u56DE\":1500,\"\u56FD\":-619,\"\u5712\":-1200,\"\u5730\":866,\"\u5834\":-1410,\"\u5841\":-2094,\"\u58EB\":-1413,\"\u591A\":1067,\"\u5927\":571,\"\u5B50\":-4802,\"\u5B66\":-1397,\"\u5B9A\":-1057,\"\u5BFA\":-809,\"\u5C0F\":1910,\"\u5C4B\":-1328,\"\u5C71\":-1500,\"\u5CF6\":-2056,\"\u5DDD\":-2667,\"\u5E02\":2771,\"\u5E74\":374,\"\u5E81\":-4556,\"\u5F8C\":456,\"\u6027\":553,\"\u611F\":916,\"\u6240\":-1566,\"\u652F\":856,\"\u6539\":787,\"\u653F\":2182,\"\u6559\":704,\"\u6587\":522,\"\u65B9\":-856,\"\u65E5\":1798,\"\u6642\":1829,\"\u6700\":845,\"\u6708\":-9066,\"\u6728\":-485,\"\u6765\":-442,\"\u6821\":-360,\"\u696D\":-1043,\"\u6C0F\":5388,\"\u6C11\":-2716,\"\u6C17\":-910,\"\u6CA2\":-939,\"\u6E08\":-543,\"\u7269\":-735,\"\u7387\":672,\"\u7403\":-1267,\"\u751F\":-1286,\"\u7523\":-1101,\"\u7530\":-2900,\"\u753A\":1826,\"\u7684\":2586,\"\u76EE\":922,\"\u7701\":-3485,\"\u770C\":2997,\"\u7A7A\":-867,\"\u7ACB\":-2112,\"\u7B2C\":788,\"\u7C73\":2937,\"\u7CFB\":786,\"\u7D04\":2171,\"\u7D4C\":1146,\"\u7D71\":-1169,\"\u7DCF\":940,\"\u7DDA\":-994,\"\u7F72\":749,\"\u8005\":2145,\"\u80FD\":-730,\"\u822C\":-852,\"\u884C\":-792,\"\u898F\":792,\"\u8B66\":-1184,\"\u8B70\":-244,\"\u8C37\":-1000,\"\u8CDE\":730,\"\u8ECA\":-1481,\"\u8ECD\":1158,\"\u8F2A\":-1433,\"\u8FBC\":-3370,\"\u8FD1\":929,\"\u9053\":-1291,\"\u9078\":2596,\"\u90CE\":-4866,\"\u90FD\":1192,\"\u91CE\":-1100,\"\u9280\":-2213,\"\u9577\":357,\"\u9593\":-2344,\"\u9662\":-2297,\"\u969B\":-2604,\"\u96FB\":-878,\"\u9818\":-1659,\"\u984C\":-792,\"\u9928\":-1984,\"\u9996\":1749,\"\u9AD8\":2120,\"\uFF62\":1895,\"\uFF63\":3798,\"\uFF65\":-4371,\"\uFF6F\":-724,\"\uFF70\":-11870,\"\uFF76\":2145,\"\uFF7A\":1789,\"\uFF7E\":1287,\"\uFF84\":-403,\"\uFF92\":-1635,\"\uFF97\":-881,\"\uFF98\":-541,\"\uFF99\":-856,\"\uFF9D\":-3637};\n this.UW5__ = {\",\":465,\".\":-299,\"1\":-514,\"E2\":-32768,\"]\":-2762,\"\u3001\":465,\"\u3002\":-299,\"\u300C\":363,\"\u3042\":1655,\"\u3044\":331,\"\u3046\":-503,\"\u3048\":1199,\"\u304A\":527,\"\u304B\":647,\"\u304C\":-421,\"\u304D\":1624,\"\u304E\":1971,\"\u304F\":312,\"\u3052\":-983,\"\u3055\":-1537,\"\u3057\":-1371,\"\u3059\":-852,\"\u3060\":-1186,\"\u3061\":1093,\"\u3063\":52,\"\u3064\":921,\"\u3066\":-18,\"\u3067\":-850,\"\u3068\":-127,\"\u3069\":1682,\"\u306A\":-787,\"\u306B\":-1224,\"\u306E\":-635,\"\u306F\":-578,\"\u3079\":1001,\"\u307F\":502,\"\u3081\":865,\"\u3083\":3350,\"\u3087\":854,\"\u308A\":-208,\"\u308B\":429,\"\u308C\":504,\"\u308F\":419,\"\u3092\":-1264,\"\u3093\":327,\"\u30A4\":241,\"\u30EB\":451,\"\u30F3\":-343,\"\u4E2D\":-871,\"\u4EAC\":722,\"\u4F1A\":-1153,\"\u515A\":-654,\"\u52D9\":3519,\"\u533A\":-901,\"\u544A\":848,\"\u54E1\":2104,\"\u5927\":-1296,\"\u5B66\":-548,\"\u5B9A\":1785,\"\u5D50\":-1304,\"\u5E02\":-2991,\"\u5E2D\":921,\"\u5E74\":1763,\"\u601D\":872,\"\u6240\":-814,\"\u6319\":1618,\"\u65B0\":-1682,\"\u65E5\":218,\"\u6708\":-4353,\"\u67FB\":932,\"\u683C\":1356,\"\u6A5F\":-1508,\"\u6C0F\":-1347,\"\u7530\":240,\"\u753A\":-3912,\"\u7684\":-3149,\"\u76F8\":1319,\"\u7701\":-1052,\"\u770C\":-4003,\"\u7814\":-997,\"\u793E\":-278,\"\u7A7A\":-813,\"\u7D71\":1955,\"\u8005\":-2233,\"\u8868\":663,\"\u8A9E\":-1073,\"\u8B70\":1219,\"\u9078\":-1018,\"\u90CE\":-368,\"\u9577\":786,\"\u9593\":1191,\"\u984C\":2368,\"\u9928\":-689,\"\uFF11\":-514,\"\uFF25\uFF12\":-32768,\"\uFF62\":363,\"\uFF72\":241,\"\uFF99\":451,\"\uFF9D\":-343};\n this.UW6__ = {\",\":227,\".\":808,\"1\":-270,\"E1\":306,\"\u3001\":227,\"\u3002\":808,\"\u3042\":-307,\"\u3046\":189,\"\u304B\":241,\"\u304C\":-73,\"\u304F\":-121,\"\u3053\":-200,\"\u3058\":1782,\"\u3059\":383,\"\u305F\":-428,\"\u3063\":573,\"\u3066\":-1014,\"\u3067\":101,\"\u3068\":-105,\"\u306A\":-253,\"\u306B\":-149,\"\u306E\":-417,\"\u306F\":-236,\"\u3082\":-206,\"\u308A\":187,\"\u308B\":-135,\"\u3092\":195,\"\u30EB\":-673,\"\u30F3\":-496,\"\u4E00\":-277,\"\u4E2D\":201,\"\u4EF6\":-800,\"\u4F1A\":624,\"\u524D\":302,\"\u533A\":1792,\"\u54E1\":-1212,\"\u59D4\":798,\"\u5B66\":-960,\"\u5E02\":887,\"\u5E83\":-695,\"\u5F8C\":535,\"\u696D\":-697,\"\u76F8\":753,\"\u793E\":-507,\"\u798F\":974,\"\u7A7A\":-822,\"\u8005\":1811,\"\u9023\":463,\"\u90CE\":1082,\"\uFF11\":-270,\"\uFF25\uFF11\":306,\"\uFF99\":-673,\"\uFF9D\":-496};\n \n return this;\n }\n TinySegmenter.prototype.ctype_ = function(str) {\n for (var i in this.chartype_) {\n if (str.match(this.chartype_[i][0])) {\n return this.chartype_[i][1];\n }\n }\n return \"O\";\n }\n\n TinySegmenter.prototype.ts_ = function(v) {\n if (v) { return v; }\n return 0;\n }\n\n TinySegmenter.prototype.segment = function(input) {\n if (input == null || input == undefined || input == \"\") {\n return [];\n }\n var result = [];\n var seg = [\"B3\",\"B2\",\"B1\"];\n var ctype = [\"O\",\"O\",\"O\"];\n var o = input.split(\"\");\n for (i = 0; i < o.length; ++i) {\n seg.push(o[i]);\n ctype.push(this.ctype_(o[i]))\n }\n seg.push(\"E1\");\n seg.push(\"E2\");\n seg.push(\"E3\");\n ctype.push(\"O\");\n ctype.push(\"O\");\n ctype.push(\"O\");\n var word = seg[3];\n var p1 = \"U\";\n var p2 = \"U\";\n var p3 = \"U\";\n for (var i = 4; i < seg.length - 3; ++i) {\n var score = this.BIAS__;\n var w1 = seg[i-3];\n var w2 = seg[i-2];\n var w3 = seg[i-1];\n var w4 = seg[i];\n var w5 = seg[i+1];\n var w6 = seg[i+2];\n var c1 = ctype[i-3];\n var c2 = ctype[i-2];\n var c3 = ctype[i-1];\n var c4 = ctype[i];\n var c5 = ctype[i+1];\n var c6 = ctype[i+2];\n score += this.ts_(this.UP1__[p1]);\n score += this.ts_(this.UP2__[p2]);\n score += this.ts_(this.UP3__[p3]);\n score += this.ts_(this.BP1__[p1 + p2]);\n score += this.ts_(this.BP2__[p2 + p3]);\n score += this.ts_(this.UW1__[w1]);\n score += this.ts_(this.UW2__[w2]);\n score += this.ts_(this.UW3__[w3]);\n score += this.ts_(this.UW4__[w4]);\n score += this.ts_(this.UW5__[w5]);\n score += this.ts_(this.UW6__[w6]);\n score += this.ts_(this.BW1__[w2 + w3]);\n score += this.ts_(this.BW2__[w3 + w4]);\n score += this.ts_(this.BW3__[w4 + w5]);\n score += this.ts_(this.TW1__[w1 + w2 + w3]);\n score += this.ts_(this.TW2__[w2 + w3 + w4]);\n score += this.ts_(this.TW3__[w3 + w4 + w5]);\n score += this.ts_(this.TW4__[w4 + w5 + w6]);\n score += this.ts_(this.UC1__[c1]);\n score += this.ts_(this.UC2__[c2]);\n score += this.ts_(this.UC3__[c3]);\n score += this.ts_(this.UC4__[c4]);\n score += this.ts_(this.UC5__[c5]);\n score += this.ts_(this.UC6__[c6]);\n score += this.ts_(this.BC1__[c2 + c3]);\n score += this.ts_(this.BC2__[c3 + c4]);\n score += this.ts_(this.BC3__[c4 + c5]);\n score += this.ts_(this.TC1__[c1 + c2 + c3]);\n score += this.ts_(this.TC2__[c2 + c3 + c4]);\n score += this.ts_(this.TC3__[c3 + c4 + c5]);\n score += this.ts_(this.TC4__[c4 + c5 + c6]);\n // score += this.ts_(this.TC5__[c4 + c5 + c6]); \n score += this.ts_(this.UQ1__[p1 + c1]);\n score += this.ts_(this.UQ2__[p2 + c2]);\n score += this.ts_(this.UQ3__[p3 + c3]);\n score += this.ts_(this.BQ1__[p2 + c2 + c3]);\n score += this.ts_(this.BQ2__[p2 + c3 + c4]);\n score += this.ts_(this.BQ3__[p3 + c2 + c3]);\n score += this.ts_(this.BQ4__[p3 + c3 + c4]);\n score += this.ts_(this.TQ1__[p2 + c1 + c2 + c3]);\n score += this.ts_(this.TQ2__[p2 + c2 + c3 + c4]);\n score += this.ts_(this.TQ3__[p3 + c1 + c2 + c3]);\n score += this.ts_(this.TQ4__[p3 + c2 + c3 + c4]);\n var p = \"O\";\n if (score > 0) {\n result.push(word);\n word = \"\";\n p = \"B\";\n }\n p1 = p2;\n p2 = p3;\n p3 = p;\n word += seg[i];\n }\n result.push(word);\n\n return result;\n }\n\n lunr.TinySegmenter = TinySegmenter;\n };\n\n}));", "/**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory)\n } else if (typeof exports === 'object') {\n /**\n * Node. Does not work with strict CommonJS, but\n * only CommonJS-like environments that support module.exports,\n * like Node.\n */\n module.exports = factory()\n } else {\n // Browser globals (root is window)\n factory()(root.lunr);\n }\n}(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n return function(lunr) {\n /* Set up the pipeline for indexing content in multiple languages. The\n corresponding lunr.{lang} files must be loaded before calling this\n function; English ('en') is built in.\n\n Returns: a lunr plugin for use in your indexer.\n\n Known drawback: every word will be stemmed with stemmers for every\n language. This could mean that sometimes words that have the same\n stemming root will not be stemmed as such.\n */\n lunr.multiLanguage = function(/* lang1, lang2, ... */) {\n var languages = Array.prototype.slice.call(arguments);\n var nameSuffix = languages.join('-');\n var wordCharacters = \"\";\n var pipeline = [];\n var searchPipeline = [];\n for (var i = 0; i < languages.length; ++i) {\n if (languages[i] == 'en') {\n wordCharacters += '\\\\w';\n pipeline.unshift(lunr.stopWordFilter);\n pipeline.push(lunr.stemmer);\n searchPipeline.push(lunr.stemmer);\n } else {\n wordCharacters += lunr[languages[i]].wordCharacters;\n if (lunr[languages[i]].stopWordFilter) {\n pipeline.unshift(lunr[languages[i]].stopWordFilter);\n }\n if (lunr[languages[i]].stemmer) {\n pipeline.push(lunr[languages[i]].stemmer);\n searchPipeline.push(lunr[languages[i]].stemmer);\n }\n }\n };\n var multiTrimmer = lunr.trimmerSupport.generateTrimmer(wordCharacters);\n lunr.Pipeline.registerFunction(multiTrimmer, 'lunr-multi-trimmer-' + nameSuffix);\n pipeline.unshift(multiTrimmer);\n\n return function() {\n this.pipeline.reset();\n\n this.pipeline.add.apply(this.pipeline, pipeline);\n\n // for lunr version 2\n // this is necessary so that every searched word is also stemmed before\n // in lunr <= 1 this is not needed, as it is done using the normal pipeline\n if (this.searchPipeline) {\n this.searchPipeline.reset();\n this.searchPipeline.add.apply(this.searchPipeline, searchPipeline);\n }\n };\n }\n }\n}));\n", "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n\nimport lunr from 'lunr'\nimport stemmer from 'lunr-languages/lunr.stemmer.support'\nimport tinyseg from 'lunr-languages/tinyseg'\nimport multi from 'lunr-languages/lunr.multi'\nimport { get, set, createStore } from 'idb-keyval'\n\ntype SearchHit = {\n href: string\n title: string\n keywords: string\n}\n\nlet search: (q: string) => SearchHit[]\n\nasync function loadIndex({ lunrLanguages }: { lunrLanguages?: string[] }) {\n const { index, data } = await loadIndexCore()\n search = q => index.search(q).map(({ ref }) => data[ref])\n postMessage({ e: 'index-ready' })\n\n async function loadIndexCore() {\n const res = await fetch('../index.json')\n const etag = res.headers.get('etag')\n const data = await res.json() as { [key: string]: SearchHit }\n const cache = createStore('docfx', 'lunr')\n\n if (lunrLanguages && lunrLanguages.length > 0) {\n multi(lunr)\n stemmer(lunr)\n if (lunrLanguages.includes('ja')) {\n tinyseg(lunr)\n }\n await Promise.all(lunrLanguages.map(initLanguage))\n }\n\n if (etag) {\n const value = JSON.parse(await get('index', cache) || '{}')\n if (value && value.etag === etag) {\n return { index: lunr.Index.load(value), data }\n }\n }\n\n const index = lunr(function() {\n lunr.tokenizer.separator = /[\\s\\-.()]+/\n\n this.ref('href')\n this.field('title', { boost: 50 })\n this.field('keywords', { boost: 20 })\n\n if (lunrLanguages && lunrLanguages.length > 0) {\n this.use(lunr.multiLanguage(...lunrLanguages))\n }\n\n for (const key in data) {\n this.add(data[key])\n }\n })\n\n if (etag) {\n await set('index', JSON.stringify(Object.assign(index.toJSON(), { etag })), cache)\n }\n\n return { index, data }\n }\n}\n\nonmessage = function(e) {\n if (e.data.q && search) {\n postMessage({ e: 'query-ready', d: search(e.data.q) })\n } else if (e.data.init) {\n loadIndex(e.data.init).catch(console.error)\n }\n}\n\nconst langMap = {\n ar: () => import('lunr-languages/lunr.ar.js'),\n da: () => import('lunr-languages/lunr.da.js'),\n de: () => import('lunr-languages/lunr.de.js'),\n du: () => import('lunr-languages/lunr.du.js'),\n el: () => import('lunr-languages/lunr.el.js'),\n es: () => import('lunr-languages/lunr.es.js'),\n fi: () => import('lunr-languages/lunr.fi.js'),\n fr: () => import('lunr-languages/lunr.fr.js'),\n he: () => import('lunr-languages/lunr.he.js'),\n hi: () => import('lunr-languages/lunr.hi.js'),\n hu: () => import('lunr-languages/lunr.hu.js'),\n hy: () => import('lunr-languages/lunr.hy.js'),\n it: () => import('lunr-languages/lunr.it.js'),\n ja: () => import('lunr-languages/lunr.ja.js'),\n jp: () => import('lunr-languages/lunr.jp.js'),\n kn: () => import('lunr-languages/lunr.kn.js'),\n ko: () => import('lunr-languages/lunr.ko.js'),\n nl: () => import('lunr-languages/lunr.nl.js'),\n no: () => import('lunr-languages/lunr.no.js'),\n pt: () => import('lunr-languages/lunr.pt.js'),\n ro: () => import('lunr-languages/lunr.ro.js'),\n ru: () => import('lunr-languages/lunr.ru.js'),\n sa: () => import('lunr-languages/lunr.sa.js'),\n sv: () => import('lunr-languages/lunr.sv.js'),\n ta: () => import('lunr-languages/lunr.ta.js'),\n te: () => import('lunr-languages/lunr.te.js'),\n th: () => import('lunr-languages/lunr.th.js'),\n tr: () => import('lunr-languages/lunr.tr.js'),\n vi: () => import('lunr-languages/lunr.vi.js')\n\n // zh is currently not supported due to dependency on NodeJS.\n // zh: () => import('lunr-languages/lunr.zh.js')\n}\n\nasync function initLanguage(lang: string) {\n if (lang !== 'en') {\n const { default: init } = await langMap[lang]()\n init(lunr)\n }\n}\n", "function promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-ignore - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-ignore - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\nfunction createStore(dbName, storeName) {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n const dbp = promisifyRequest(request);\n return (txMode, callback) => dbp.then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName)));\n}\nlet defaultGetStoreFunc;\nfunction defaultGetStore() {\n if (!defaultGetStoreFunc) {\n defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n }\n return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction get(key, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => promisifyRequest(store.get(key)));\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction set(key, value, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic \u2013 if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction setMany(entries, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n entries.forEach((entry) => store.put(entry[1], entry[0]));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction getMany(keys, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => Promise.all(keys.map((key) => promisifyRequest(store.get(key)))));\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction update(key, updater, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => \n // Need to create the promise manually.\n // If I try to chain promises, the transaction closes in browsers\n // that use a promise polyfill (IE10/11).\n new Promise((resolve, reject) => {\n store.get(key).onsuccess = function () {\n try {\n store.put(updater(this.result), key);\n resolve(promisifyRequest(store.transaction));\n }\n catch (err) {\n reject(err);\n }\n };\n }));\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction del(key, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction delMany(keys, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n keys.forEach((key) => store.delete(key));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction clear(customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.clear();\n return promisifyRequest(store.transaction);\n });\n}\nfunction eachCursor(store, callback) {\n store.openCursor().onsuccess = function () {\n if (!this.result)\n return;\n callback(this.result);\n this.result.continue();\n };\n return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction keys(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAllKeys) {\n return promisifyRequest(store.getAllKeys());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items);\n });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction values(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAll) {\n return promisifyRequest(store.getAll());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);\n });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction entries(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n // (although, hopefully we'll get a simpler path some day)\n if (store.getAll && store.getAllKeys) {\n return Promise.all([\n promisifyRequest(store.getAllKeys()),\n promisifyRequest(store.getAll()),\n ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));\n }\n const items = [];\n return customStore('readonly', (store) => eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items));\n });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n"],
"mappings": "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KH,CAAI,GAAMI,EAAI,KAAKJ,CAAI,GAAK,CAAEK,EAAI,KAAKL,CAAI,KACrDD,EAAIC,EAER,CAEA,OAAAG,EAAKP,EACLQ,EAAMzB,EACFwB,EAAG,KAAKJ,CAAC,GAAKK,EAAI,KAAKL,CAAC,IAC1BI,EAAKjB,EACLa,EAAIA,EAAE,QAAQI,EAAG,EAAE,GAKjBD,GAAW,MACbH,EAAIG,EAAQ,YAAY,EAAIH,EAAE,OAAO,CAAC,GAGjCA,CACT,EAEA,OAAO,SAAUhD,EAAO,CACtB,OAAOA,EAAM,OAAO+C,CAAa,CACnC,CACF,EAAG,EAEHpG,EAAK,SAAS,iBAAiBA,EAAK,QAAS,SAAS,EAmBtDA,EAAK,uBAAyB,SAAU8G,EAAW,CACjD,IAAIC,EAAQD,EAAU,OAAO,SAAU7D,EAAM+D,EAAU,CACrD,OAAA/D,EAAK+D,CAAQ,EAAIA,EACV/D,CACT,EAAG,CAAC,CAAC,EAEL,OAAO,SAAUI,EAAO,CACtB,GAAIA,GAAS0D,EAAM1D,EAAM,SAAS,CAAC,IAAMA,EAAM,SAAS,EAAG,OAAOA,CACpE,CACF,EAeArD,EAAK,eAAiBA,EAAK,uBAAuB,CAChD,IACA,OACA,QACA,SACA,QACA,MACA,SACA,OACA,KACA,QACA,KACA,MACA,MACA,MACA,KACA,KACA,KACA,UACA,OACA,MACA,KACA,MACA,SACA,QACA,OACA,MACA,KACA,OACA,SACA,OACA,OACA,QACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,KACA,MACA,OACA,MACA,MACA,MACA,UACA,IACA,KACA,KACA,OACA,KACA,KACA,MACA,OACA,QACA,MACA,OACA,SACA,MACA,KACA,QACA,OACA,OACA,KACA,UACA,KACA,MACA,MACA,KACA,MACA,QACA,KACA,OACA,KACA,QACA,MACA,MACA,SACA,OACA,MACA,OACA,MACA,SACA,QACA,KACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,QACA,QACA,OACA,OACA,MACA,KACA,MACA,OACA,KACA,QACA,MACA,KACA,OACA,OACA,OACA,QACA,QACA,QACA,MACA,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OAAI,MAAM,OAAI,IAAI,OAAI,KAAK,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,IAAI,OAAI,MAAM,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,SAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,MAAM,OAAI,IAAI,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,MAAM,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,IAAI,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,IAAI,OAAI,MAAM,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,IAAI,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,MAAM,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,SAAI,KAAK,SAAI,KAAK,SAAI,MAAM,OAAI,MAAM,OAAI,IAAI,aAAK,KAAK,OAAI,IAAI,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,GAAG,EACx8D,KAAK,MAAQ,CAAC,IAAI,KAAK,IAAI,KAAK,SAAI,MAAM,SAAI,KAAK,SAAI,KAAK,SAAI,KAAK,SAAI,KAAK,SAAI,KAAK,SAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,MAAM,OAAI,OAAO,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,SAAI,MAAM,OAAI,OAAO,OAAI,MAAM,OAAI,KAAK,OAAI,IAAI,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,IAAI,OAAI,IAAI,OAAI,MAAM,OAAI,IAAI,OAAI,KAAK,OAAI,IAAI,OAAI,MAAM,OAAI,MAAM,OAAI,IAAI,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,IAAI,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,IAAI,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,IAAI,OAAI,MAAM,OAAI,IAAI,OAAI,IAAI,OAAI,IAAI,OAAI,MAAM,OAAI,IAAI,OAAI,IAAI,OAAI,KAAK,OAAI,IAAI,OAAI,IAAI,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,MAAM,OAAI,KAAK,OAAI,KAAK,OAAI,IAAI,OAAI,MAAM,OAAI,KAA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",
"names": ["require_lunr", "__commonJSMin", "exports", "module", "lunr", "config", "builder", "global", "message", "obj", "clone", "keys", "key", "val", "docRef", "fieldName", "stringValue", "s", "n", "fieldRef", "elements", "i", "other", "object", "a", "b", "intersection", "element", "posting", "documentCount", "documentsWithTerm", "x", "str", "metadata", "fn", "t", "len", "tokens", "sliceEnd", "sliceStart", "char", "sliceLength", "tokenMetadata", "label", "isRegistered", "serialised", "pipeline", "fnName", "fns", "existingFn", "newFn", "pos", "stackLength", "memo", "j", "result", "k", "token", "index", "start", "end", "pivotPoint", "pivotIndex", "insertIdx", "position", "sumOfSquares", "elementsLength", "otherVector", "dotProduct", "aLen", "bLen", "aVal", "bVal", "output", "step2list", "step3list", "c", "v", "C", "V", "mgr0", "meq1", "mgr1", "s_v", "re_mgr0", "re_mgr1", "re_meq1", "re_s_v", "re_1a", "re2_1a", "re_1b", "re2_1b", "re_1b_2", "re2_1b_2", "re3_1b_2", "re4_1b_2", "re_1c", "re_2", "re_3", "re_4", "re2_4", "re_5", "re_5_1", "re3_5", "porterStemmer", "w", "stem", "suffix", "firstch", "re", "re2", "re3", "re4", "fp", "stopWords", "words", "stopWord", "arr", "clause", "editDistance", "root", "stack", "frame", "noEditNode", "insertionNode", "substitutionNode", "charA", "charB", "transposeNode", "node", "final", "next", "edges", "edge", "labels", "qEdges", "qLen", "nEdges", "nLen", "q", "qEdge", "nEdge", "qNode", "word", "commonPrefix", "nextNode", "downTo", "childKey", "attrs", "queryString", "query", "parser", "matchingFields", "queryVectors", "termFieldCache", "requiredMatches", "prohibitedMatches", "terms", "clauseMatches", "m", "term", "termTokenSet", "expandedTerms", "field", "expandedTerm", "termIndex", "fieldPosting", "matchingDocumentRefs", "termField", "matchingDocumentsSet", "l", "matchingDocumentRef", "matchingFieldRef", "fieldMatch", "allRequiredMatches", "allProhibitedMatches", "matchingFieldRefs", "results", "matches", "fieldVector", "score", "docMatch", "match", "invertedIndex", "fieldVectors", "ref", "serializedIndex", "serializedVectors", "serializedInvertedIndex", "tokenSetBuilder", "tuple", "attributes", "number", "doc", "fields", "extractor", "fieldTerms", "metadataKey", "fieldRefs", "numberOfFields", "accumulator", "documentsWithField", "fieldRefsLength", "termIdfCache", "fieldLength", "termFrequencies", "termsLength", "fieldBoost", "docBoost", "tf", "idf", "scoreWithPrecision", "args", "clonedMetadata", "metadataKeys", "otherMatchData", "allFields", "options", "state", "subSlices", "type", "charCode", "lexer", "lexeme", "completedClause", "errorMessage", "nextLexeme", "possibleFields", "f", "boost", "factory", "require_lunr_stemmer_support", "__commonJSMin", "exports", "module", "root", "factory", "lunr", "s", "substring_i", "result", "method", "sLength", "charArr", "i", "current", "word", "min", "max", "ch", "s_size", "v", "v_size", "j", "c", "l", "common_i", "common_j", "first_key_inspected", "k", "diff", "common", "w", "i2", "res", "lb", "c_bra", "c_ket", "adjustment", "left", "right", "wordCharacters", "startRegex", "endRegex", "token", "require_tinyseg", "__commonJSMin", "exports", "module", "root", "factory", "lunr", "TinySegmenter", "patterns", "i", "regexp", "str", "v", "input", "result", "seg", "ctype", "word", "p1", "p2", "p3", "score", "w1", "w2", "w3", "w4", "w5", "w6", "c1", "c2", "c3", "c4", "c5", "c6", "p", "require_lunr_multi", "__commonJSMin", "exports", "module", "root", "factory", "lunr", "languages", "nameSuffix", "wordCharacters", "pipeline", "searchPipeline", "i", "multiTrimmer", "import_lunr", "import_lunr_stemmer", "import_tinyseg", "promisifyRequest", "request", "resolve", "reject", "createStore", "dbName", "storeName", "dbp", "txMode", "callback", "db", "defaultGetStoreFunc", "defaultGetStore", "get", "key", "customStore", "store", "set", "value", "search", "loadIndex", "lunrLanguages", "index", "data", "loadIndexCore", "q", "ref", "res", "etag", "cache", "createStore", "multi", "lunr", "stemmer", "tinyseg", "initLanguage", "value", "get", "key", "set", "e", "langMap", "lang", "init"]
}