{
  "fieldDBtype": "ComputationalLinguisticsDatum",
  "_id": "response",
  "dateCreated": 1594648244935,
  "version": "v5.121.19-rc0",
  "tempId": "response",
  "stats": {
    "characters": {
      "unigrams": {
        "0": 54,
        "1": 24,
        "2": 23,
        "3": 10,
        "4": 10,
        "5": 3,
        "6": 3,
        "7": 1,
        "8": 9,
        "9": 7,
        "/": 284,
        "*": 420,
        "!": 27,
        "\n": 1070,
        " ": 4747,
        "e": 1949,
        "x": 73,
        "p": 527,
        "r": 1169,
        "s": 1163,
        "C": 68,
        "o": 893,
        "y": 232,
        "i": 894,
        "g": 227,
        "h": 399,
        "t": 1333,
        "(": 408,
        "c": 519,
        ")": 408,
        "-": 71,
        "T": 66,
        "J": 12,
        "H": 18,
        "l": 599,
        "w": 86,
        "a": 1028,
        "u": 488,
        "k": 145,
        "D": 23,
        "W": 5,
        "n": 1013,
        "M": 8,
        "I": 16,
        "L": 14,
        "d": 481,
        "'": 417,
        ";": 335,
        ".": 404,
        "@": 59,
        "v": 230,
        "=": 307,
        "q": 57,
        "U": 13,
        "m": 269,
        "A": 43,
        "b": 221,
        "F": 18,
        "f": 394,
        "z": 11,
        "R": 37,
        "O": 41,
        "j": 80,
        "S": 73,
        "E": 47,
        "\\": 13,
        "`": 146,
        "{": 171,
        "N": 21,
        "}": 171,
        ":": 80,
        "?": 10,
        ",": 157,
        "|": 37,
        "+": 34,
        "<": 14,
        "[": 36,
        "]": 36,
        ">": 15,
        "\"": 32,
        "B": 16,
        "&": 36,
        "P": 11,
        "X": 3,
        "^": 1,
        "$": 1,
        "_": 24,
        "V": 4,
        "K": 1,
        "G": 1
      },
      "bigrams": {}
    },
    "words": {
      "unigrams": {
        "0": 3,
        "15": 1,
        "304": 1,
        "406": 2,
        "/*!": 1,
        "*": 334,
        "express": 1,
        "Copyright(c)": 2,
        "2009-2013": 1,
        "TJ": 1,
        "Holowaychuk": 1,
        "2014-2015": 1,
        "Douglas": 1,
        "Christopher": 1,
        "Wilson": 1,
        "MIT": 1,
        "Licensed": 1,
        "*/": 27,
        "'use": 1,
        "strict';": 1,
        "/**": 26,
        "Module": 3,
        "dependencies.": 1,
        "@private": 3,
        "var": 95,
        "contentDisposition": 1,
        "=": 179,
        "require('content-disposition');": 1,
        "deprecate": 1,
        "require('depd')('express');": 1,
        "encodeUrl": 1,
        "require('encodeurl');": 1,
        "escapeHtml": 1,
        "require('escape-html');": 1,
        "http": 1,
        "require('http');": 1,
        "isAbsolute": 1,
        "require('./utils').isAbsolute;": 1,
        "onFinished": 1,
        "require('on-finished');": 1,
        "path": 2,
        "require('path');": 1,
        "statuses": 1,
        "require('statuses')": 1,
        "merge": 2,
        "require('utils-merge');": 1,
        "sign": 2,
        "require('cookie-signature').sign;": 1,
        "normalizeType": 1,
        "require('./utils').normalizeType;": 1,
        "normalizeTypes": 1,
        "require('./utils').normalizeTypes;": 1,
        "setCharset": 1,
        "require('./utils').setCharset;": 1,
        "cookie": 4,
        "require('cookie');": 1,
        "send": 4,
        "require('send');": 1,
        "extname": 1,
        "path.extname;": 1,
        "mime": 1,
        "send.mime;": 1,
        "resolve": 1,
        "path.resolve;": 1,
        "vary": 1,
        "require('vary');": 1,
        "Response": 1,
        "prototype.": 1,
        "@public": 23,
        "res": 4,
        "Object.create(http.ServerResponse.prototype)": 1,
        "exports.": 1,
        "module.exports": 1,
        "variables.": 1,
        "charsetRegExp": 1,
        "/;\\s*charset\\s*=/;": 1,
        "Set": 8,
        "status": 11,
        "`code`.": 1,
        "@param": 21,
        "{Number}": 1,
        "code": 3,
        "@return": 12,
        "{ServerResponse}": 11,
        "res.status": 1,
        "function": 35,
        "status(code)": 1,
        "{": 100,
        "this.statusCode": 12,
        "code;": 1,
        "return": 29,
        "this;": 11,
        "};": 23,
        "Link": 1,
        "header": 13,
        "field": 6,
        "with": 13,
        "the": 44,
        "given": 10,
        "`links`.": 1,
        "Examples:": 12,
        "res.links({": 1,
        "next:": 1,
        "'http://api.example.com/users?page=2',": 1,
        "last:": 1,
        "'http://api.example.com/users?page=5'": 1,
        "});": 20,
        "{Object}": 3,
        "links": 1,
        "res.links": 1,
        "function(links){": 1,
        "link": 3,
        "this.get('Link')": 1,
        "||": 11,
        "'';": 4,
        "if": 74,
        "(link)": 1,
        "+=": 2,
        "',": 1,
        "';": 2,
        "this.set('Link',": 1,
        "+": 30,
        "Object.keys(links).map(function(rel){": 1,
        "'<'": 1,
        "links[rel]": 1,
        "'>;": 1,
        "rel=\"'": 1,
        "rel": 1,
        "'\"';": 1,
        "}).join(',": 1,
        "'));": 1,
        "Send": 4,
        "a": 9,
        "response.": 2,
        "res.send(new": 1,
        "Buffer('wahoo'));": 1,
        "res.send({": 3,
        "some:": 1,
        "'json'": 1,
        "res.send('<p>some": 1,
        "html</p>');": 1,
        "{string|number|boolean|object|Buffer}": 1,
        "body": 16,
        "res.send": 1,
        "send(body)": 1,
        "chunk": 9,
        "body;": 2,
        "encoding;": 1,
        "len;": 1,
        "req": 5,
        "this.req;": 5,
        "type;": 2,
        "//": 68,
        "settings": 3,
        "app": 4,
        "this.app;": 3,
        "allow": 4,
        "/": 4,
        "(arguments.length": 5,
        "===": 32,
        "2)": 5,
        "res.send(body,": 1,
        "status)": 3,
        "backwards": 3,
        "compat": 3,
        "(typeof": 14,
        "arguments[0]": 2,
        "!==": 9,
        "'number'": 2,
        "&&": 18,
        "typeof": 4,
        "arguments[1]": 3,
        "'number')": 4,
        "deprecate('res.send(body,": 1,
        "status):": 4,
        "Use": 9,
        "res.status(status).send(body)": 2,
        "instead');": 9,
        "arguments[1];": 8,
        "}": 77,
        "else": 13,
        "deprecate('res.send(status,": 1,
        "body):": 1,
        "arguments[0];": 4,
        "disambiguate": 1,
        "res.send(status)": 2,
        "and": 8,
        "res.send(status,": 1,
        "num)": 1,
        "arguments.length": 2,
        "1)": 1,
        "will": 4,
        "set": 6,
        "message": 1,
        "as": 12,
        "text": 1,
        "string": 4,
        "(!this.get('Content-Type'))": 5,
        "this.type('txt');": 2,
        "deprecate('res.send(status):": 1,
        "res.sendStatus(status)": 1,
        "chunk;": 1,
        "statuses[chunk]": 1,
        "switch": 1,
        "chunk)": 1,
        "defaulting": 6,
        "to": 43,
        "html": 1,
        "case": 4,
        "'string':": 1,
        "this.type('html');": 1,
        "break;": 2,
        "'boolean':": 1,
        "'number':": 1,
        "'object':": 1,
        "(chunk": 2,
        "null)": 2,
        "(Buffer.isBuffer(chunk))": 1,
        "this.type('bin');": 1,
        "this.json(chunk);": 1,
        "write": 3,
        "strings": 1,
        "in": 8,
        "utf-8": 1,
        "'string')": 2,
        "encoding": 2,
        "'utf8';": 1,
        "type": 3,
        "this.get('Content-Type');": 1,
        "reflect": 1,
        "this": 3,
        "content-type": 4,
        "this.set('Content-Type',": 6,
        "setCharset(type,": 1,
        "'utf-8'));": 1,
        "populate": 2,
        "Content-Length": 1,
        "undefined)": 1,
        "(!Buffer.isBuffer(chunk))": 1,
        "convert": 1,
        "Buffer;": 1,
        "saves": 1,
        "later": 1,
        "double": 1,
        "conversions": 1,
        "new": 11,
        "Buffer(chunk,": 1,
        "encoding);": 2,
        "undefined;": 1,
        "len": 2,
        "chunk.length;": 1,
        "this.set('Content-Length',": 2,
        "len);": 1,
        "ETag": 1,
        "etag;": 1,
        "generateETag": 2,
        "undefined": 1,
        "app.get('etag": 1,
        "fn');": 1,
        "'function'": 1,
        "!this.get('ETag'))": 1,
        "((etag": 1,
        "generateETag(chunk,": 1,
        "encoding)))": 1,
        "this.set('ETag',": 1,
        "etag);": 1,
        "freshness": 1,
        "(req.fresh)": 1,
        "304;": 1,
        "strip": 1,
        "irrelevant": 1,
        "headers": 7,
        "(204": 1,
        "this.statusCode)": 1,
        "this.removeHeader('Content-Type');": 1,
        "this.removeHeader('Content-Length');": 1,
        "this.removeHeader('Transfer-Encoding');": 1,
        "(req.method": 1,
        "'HEAD')": 2,
        "skip": 1,
        "for": 26,
        "HEAD": 1,
        "this.end();": 2,
        "respond": 2,
        "this.end(chunk,": 1,
        "JSON": 3,
        "res.json(null);": 1,
        "res.json({": 1,
        "user:": 2,
        "'tj'": 2,
        "{string|number|boolean|object}": 2,
        "obj": 4,
        "res.json": 1,
        "json(obj)": 1,
        "val": 8,
        "obj;": 2,
        "res.json(body,": 2,
        "deprecate('res.json(obj,": 1,
        "res.status(status).json(obj)": 3,
        "deprecate('res.json(status,": 1,
        "obj):": 2,
        "replacer": 3,
        "app.get('json": 4,
        "replacer');": 2,
        "spaces": 3,
        "spaces');": 2,
        "stringify(val,": 2,
        "replacer,": 4,
        "spaces);": 2,
        "'application/json');": 3,
        "this.send(body);": 3,
        "response": 9,
        "JSONP": 2,
        "callback": 21,
        "support.": 1,
        "res.jsonp(null);": 1,
        "res.jsonp({": 1,
        "res.jsonp": 1,
        "jsonp(obj)": 1,
        "deprecate('res.jsonp(obj,": 1,
        "deprecate('res.jsonp(status,": 1,
        "res.status(status).jsonp(obj)": 1,
        "this.req.query[app.get('jsonp": 1,
        "name')];": 1,
        "this.set('X-Content-Type-Options',": 2,
        "'nosniff');": 2,
        "fixup": 1,
        "(Array.isArray(callback))": 1,
        "callback[0];": 1,
        "jsonp": 1,
        "'string'": 1,
        "callback.length": 1,
        "0)": 1,
        "this.charset": 1,
        "'utf-8';": 1,
        "'text/javascript');": 1,
        "restrict": 1,
        "charset": 3,
        "callback.replace(/[^\\[\\]\\w$.]/g,": 1,
        "'');": 1,
        "replace": 1,
        "chars": 1,
        "not": 4,
        "allowed": 1,
        "JavaScript": 1,
        "that": 1,
        "are": 3,
        ".replace(/\\u2028/g,": 1,
        "'\\\\u2028')": 1,
        ".replace(/\\u2029/g,": 1,
        "'\\\\u2029');": 1,
        "/**/": 1,
        "is": 25,
        "specific": 1,
        "security": 1,
        "mitigation": 1,
        "\"Rosetta": 1,
        "Flash": 1,
        "abuse\"": 1,
        "check": 4,
        "just": 1,
        "reduce": 1,
        "client": 1,
        "error": 4,
        "noise": 1,
        "'/**/": 1,
        "'": 4,
        "\\'function\\'": 1,
        "'('": 1,
        "');';": 1,
        "HTTP": 3,
        "code.": 1,
        "Sets": 1,
        "`statusCode`": 1,
        "of": 9,
        "standard": 1,
        "description": 1,
        "from": 1,
        "node's": 1,
        "http.STATUS_CODES": 1,
        "or": 10,
        "statusCode": 2,
        "number": 1,
        "no": 2,
        "description.": 1,
        "res.sendStatus(200);": 1,
        "{number}": 1,
        "res.sendStatus": 1,
        "sendStatus(statusCode)": 1,
        "statuses[statusCode]": 1,
        "String(statusCode)": 1,
        "statusCode;": 1,
        "Transfer": 3,
        "file": 14,
        "at": 3,
        "`path`.": 2,
        "Automatically": 2,
        "sets": 2,
        "_Content-Type_": 3,
        "field.": 2,
        "The": 9,
        "`callback(err)`": 2,
        "invoked": 4,
        "when": 8,
        "transfer": 6,
        "complete": 2,
        "an": 12,
        "occurs.": 2,
        "Be": 3,
        "sure": 3,
        "`res.sentHeader`": 2,
        "you": 9,
        "wish": 2,
        "attempt": 2,
        "responding,": 2,
        "some": 2,
        "data": 3,
        "may": 6,
        "have": 2,
        "already": 3,
        "been": 2,
        "transferred.": 2,
        "Options:": 4,
        "-": 13,
        "`maxAge`": 3,
        "(can": 2,
        "be": 10,
        "converted": 3,
        "by": 5,
        "`ms`)": 2,
        "`root`": 2,
        "root": 3,
        "directory": 3,
        "relative": 3,
        "filenames": 2,
        "`headers`": 2,
        "object": 3,
        "serve": 4,
        "`dotfiles`": 2,
        "dotfiles,": 2,
        "false;": 5,
        "can": 3,
        "`\"allow\"`": 2,
        "them": 2,
        "Other": 2,
        "options": 9,
        "passed": 2,
        "along": 2,
        "`send`.": 2,
        "following": 2,
        "example": 2,
        "illustrates": 2,
        "how": 2,
        "`res.sendFile()`": 2,
        "used": 2,
        "alternative": 2,
        "`static()`": 2,
        "middleware": 2,
        "dynamic": 2,
        "situations.": 2,
        "backing": 2,
        "actually": 2,
        "same": 2,
        "code,": 2,
        "so": 3,
        "cache": 3,
        "support": 6,
        "etc": 2,
        "identical.": 2,
        "app.get('/user/:uid/photos/:file',": 2,
        "function(req,": 2,
        "res){": 2,
        "uid": 4,
        "req.params.uid": 2,
        ",": 2,
        "req.params.file;": 2,
        "req.user.mayViewFilesFrom(uid,": 2,
        "function(yes){": 2,
        "(yes)": 2,
        "res.sendFile('/uploads/'": 1,
        "'/'": 3,
        "file);": 2,
        "res.send(403,": 2,
        "'Sorry!": 2,
        "cant": 2,
        "see": 2,
        "that.');": 2,
        "res.sendFile": 2,
        "sendFile(path,": 1,
        "options,": 4,
        "callback)": 5,
        "done": 16,
        "callback;": 4,
        "next": 3,
        "req.next;": 3,
        "opts": 8,
        "{};": 6,
        "(!path)": 1,
        "throw": 3,
        "TypeError('path": 2,
        "argument": 1,
        "required": 2,
        "res.sendFile');": 2,
        "second": 4,
        "arg": 4,
        "'function')": 4,
        "options;": 3,
        "(!opts.root": 1,
        "!isAbsolute(path))": 1,
        "must": 1,
        "absolute": 1,
        "specify": 1,
        "create": 2,
        "stream": 3,
        "pathname": 1,
        "encodeURI(path);": 1,
        "send(req,": 2,
        "pathname,": 1,
        "opts);": 3,
        "sendfile(res,": 3,
        "file,": 3,
        "opts,": 3,
        "(err)": 4,
        "(done)": 8,
        "done(err);": 2,
        "(err": 5,
        "err.code": 7,
        "'EISDIR')": 2,
        "next();": 2,
        "next()": 2,
        "all": 2,
        "but": 3,
        "errors": 3,
        "'ECONNABORTED'": 1,
        "err.syscall": 2,
        "'write')": 2,
        "next(err);": 3,
        "`res.sendfile()`": 2,
        "res.sendfile('/uploads/'": 1,
        "res.sendfile": 2,
        "(path,": 1,
        "path,": 1,
        "'ECONNABORT'": 1,
        "deprecate.function(res.sendfile,": 1,
        "'res.sendfile:": 1,
        "`path`": 2,
        "attachment.": 1,
        "Optionally": 1,
        "providing": 1,
        "alternate": 1,
        "attachment": 1,
        "`filename`,": 1,
        "optional": 4,
        "`callback(err)`.": 1,
        "complete,": 1,
        "has": 1,
        "ocurred.": 1,
        "`res.headersSent`": 1,
        "plan": 1,
        "respond.": 1,
        "This": 2,
        "method": 2,
        "uses": 2,
        "`res.sendfile()`.": 1,
        "res.download": 1,
        "download(path,": 1,
        "filename,": 1,
        "name": 4,
        "filename;": 2,
        "filename": 3,
        "null;": 1,
        "Content-Disposition": 1,
        "sent": 1,
        "'Content-Disposition':": 1,
        "contentDisposition(name": 1,
        "path)": 1,
        "Resolve": 1,
        "full": 1,
        "sendFile": 1,
        "fullPath": 1,
        "resolve(path);": 1,
        "this.sendFile(fullPath,": 1,
        "headers:": 1,
        "},": 8,
        "done);": 2,
        "`type`": 2,
        "through": 1,
        "`mime.lookup()`": 1,
        "it": 4,
        "does": 1,
        "contain": 1,
        "\"/\",": 1,
        "Content-Type": 2,
        "otherwise.": 1,
        "res.type('.html');": 1,
        "res.type('html');": 1,
        "res.type('json');": 1,
        "res.type('application/json');": 1,
        "res.type('png');": 1,
        "{String}": 8,
        "chaining": 8,
        "res.contentType": 1,
        "res.type": 1,
        "contentType(type)": 1,
        "ct": 1,
        "type.indexOf('/')": 1,
        "-1": 1,
        "?": 7,
        "mime.lookup(type)": 1,
        ":": 7,
        "ct);": 1,
        "Respond": 2,
        "Acceptable": 1,
        "formats": 1,
        "using": 2,
        "`obj`": 1,
        "mime-type": 1,
        "callbacks.": 1,
        "`req.accepted`,": 1,
        "array": 1,
        "acceptable": 1,
        "types": 2,
        "ordered": 1,
        "their": 1,
        "quality": 1,
        "values.": 1,
        "When": 3,
        "\"Accept\"": 1,
        "present": 2,
        "_first_": 1,
        "invoked,": 1,
        "otherwise": 2,
        "first": 1,
        "match": 3,
        "used.": 1,
        "performed": 1,
        "server": 1,
        "responds": 1,
        "\"Not": 1,
        "Acceptable\".": 1,
        "you,": 1,
        "however": 1,
        "choose": 1,
        "alter": 1,
        "within": 1,
        "`res.type()`": 1,
        "`res.set('Content-Type',": 1,
        "...)`.": 1,
        "res.format({": 2,
        "'text/plain':": 1,
        "function(){": 9,
        "res.send('hey');": 2,
        "'text/html':": 1,
        "res.send('<p>hey</p>');": 2,
        "'appliation/json':": 1,
        "message:": 2,
        "'hey'": 2,
        "In": 1,
        "addition": 1,
        "canonicalized": 1,
        "MIME": 1,
        "also": 2,
        "use": 1,
        "extnames": 1,
        "mapped": 1,
        "these": 1,
        "types:": 1,
        "text:": 2,
        "html:": 2,
        "json:": 1,
        "By": 1,
        "default": 3,
        "Express": 1,
        "passes": 1,
        "`Error`": 1,
        "`.status`": 1,
        "`next(err)`": 1,
        "made.": 1,
        "If": 2,
        "provide": 1,
        "`.default`": 1,
        "instead.": 1,
        "res.format": 1,
        "function(obj){": 1,
        "fn": 1,
        "obj.default;": 2,
        "(fn)": 2,
        "delete": 1,
        "keys": 2,
        "Object.keys(obj);": 2,
        "key": 2,
        "keys.length": 1,
        ">": 1,
        "req.accepts(keys)": 1,
        "this.vary(\"Accept\");": 1,
        "(key)": 1,
        "normalizeType(key).value);": 1,
        "obj[key](req,": 1,
        "this,": 1,
        "next);": 1,
        "fn();": 1,
        "err": 3,
        "Error('Not": 1,
        "Acceptable');": 1,
        "err.status": 1,
        "err.statusCode": 1,
        "406;": 1,
        "err.types": 1,
        "normalizeTypes(keys).map(function(o){": 1,
        "o.value": 1,
        "_Content-Disposition_": 1,
        "_attachment_": 1,
        "`filename`.": 1,
        "res.attachment": 1,
        "attachment(filename)": 1,
        "(filename)": 1,
        "this.type(extname(filename));": 1,
        "this.set('Content-Disposition',": 1,
        "contentDisposition(filename));": 1,
        "Append": 1,
        "additional": 1,
        "`field`": 3,
        "value": 8,
        "`val`.": 1,
        "Example:": 1,
        "res.append('Link',": 1,
        "['<http://localhost/>',": 1,
        "'<http://localhost:3000/>']);": 1,
        "res.append('Set-Cookie',": 1,
        "'foo=bar;": 1,
        "Path=/;": 1,
        "HttpOnly');": 1,
        "res.append('Warning',": 1,
        "'199": 1,
        "Miscellaneous": 1,
        "warning');": 1,
        "{String|Array}": 2,
        "res.append": 1,
        "append(field,": 1,
        "val)": 2,
        "prev": 2,
        "this.get(field);": 1,
        "val;": 1,
        "(prev)": 1,
        "concat": 1,
        "vals": 1,
        "Array.isArray(prev)": 1,
        "prev.concat(val)": 1,
        "Array.isArray(val)": 2,
        "[prev].concat(val)": 1,
        "[prev,": 1,
        "val];": 1,
        "this.set(field,": 1,
        "value);": 2,
        "`val`,": 1,
        "pass": 1,
        "fields.": 1,
        "res.set('Foo',": 1,
        "['bar',": 1,
        "'baz']);": 1,
        "res.set('Accept',": 1,
        "res.set({": 1,
        "Accept:": 1,
        "'text/plain',": 1,
        "'X-API-Key':": 1,
        "'tobi'": 1,
        "Aliased": 1,
        "`res.header()`.": 1,
        "{String|Object}": 2,
        "res.set": 1,
        "res.header": 1,
        "header(field,": 1,
        "val.map(String)": 1,
        "String(val);": 1,
        "add": 1,
        "(field.toLowerCase()": 1,
        "'content-type'": 1,
        "!charsetRegExp.test(value))": 1,
        "mime.charsets.lookup(value.split(';')[0]);": 1,
        "(charset)": 1,
        "charset='": 1,
        "charset.toLowerCase();": 1,
        "this.setHeader(field,": 1,
        "(var": 2,
        "field)": 1,
        "this.set(key,": 1,
        "field[key]);": 1,
        "Get": 1,
        "`field`.": 1,
        "res.get": 1,
        "function(field){": 2,
        "this.getHeader(field);": 1,
        "Clear": 1,
        "`name`.": 1,
        "[options]": 1,
        "res.clearCookie": 1,
        "clearCookie(name,": 1,
        "options)": 2,
        "merge({": 1,
        "expires:": 2,
        "Date(1),": 1,
        "path:": 1,
        "options);": 2,
        "this.cookie(name,": 1,
        "'',": 1,
        "`name`": 1,
        "`value`,": 1,
        "`options`.": 1,
        "max-age": 1,
        "milliseconds,": 1,
        "`expires`": 1,
        "`signed`": 1,
        "defaults": 1,
        "\"/\"": 1,
        "\"Remember": 1,
        "Me\"": 1,
        "minutes": 1,
        "res.cookie('rememberme',": 2,
        "'1',": 2,
        "Date(Date.now()": 2,
        "900000),": 1,
        "httpOnly:": 2,
        "true": 2,
        "save": 1,
        "above": 1,
        "maxAge:": 1,
        "900000,": 1,
        "})": 1,
        "{Options}": 1,
        "res.cookie": 1,
        "(name,": 1,
        "value,": 1,
        "merge({},": 1,
        "secret": 1,
        "this.req.secret;": 1,
        "signed": 2,
        "opts.signed;": 1,
        "(signed": 1,
        "!secret)": 1,
        "Error('cookieParser(\"secret\")": 1,
        "cookies');": 1,
        "'object'": 1,
        "'j:'": 1,
        "JSON.stringify(value)": 1,
        "String(value);": 1,
        "(signed)": 1,
        "'s:'": 1,
        "sign(val,": 1,
        "secret);": 1,
        "('maxAge'": 1,
        "opts)": 1,
        "opts.expires": 1,
        "opts.maxAge);": 1,
        "opts.maxAge": 1,
        "/=": 1,
        "1000;": 1,
        "(opts.path": 1,
        "==": 1,
        "opts.path": 1,
        "'/';": 2,
        "this.append('Set-Cookie',": 1,
        "cookie.serialize(name,": 1,
        "String(val),": 1,
        "opts));": 1,
        "location": 3,
        "`url`.": 1,
        "`url`": 3,
        "\"back\",": 1,
        "which": 1,
        "redirects": 1,
        "_Referrer_": 1,
        "_Referer_": 1,
        "\"/\".": 1,
        "res.location('/foo/bar').;": 1,
        "res.location('http://example.com');": 1,
        "res.location('../login');": 1,
        "url": 2,
        "res.location": 1,
        "location(url)": 1,
        "loc": 2,
        "url;": 2,
        "\"back\"": 1,
        "alias": 1,
        "referrer": 1,
        "(url": 1,
        "'back')": 1,
        "this.req.get('Referrer')": 1,
        "this.set('Location',": 1,
        "encodeUrl(loc));": 1,
        "Redirect": 1,
        "`status`": 1,
        "302.": 1,
        "resulting": 1,
        "determined": 1,
        "`res.location()`,": 1,
        "play": 1,
        "nicely": 1,
        "mounted": 1,
        "apps,": 1,
        "paths,": 1,
        "`\"back\"`": 1,
        "etc.": 1,
        "res.redirect('/foo/bar');": 1,
        "res.redirect('http://example.com');": 1,
        "res.redirect(301,": 1,
        "'http://example.com');": 1,
        "res.redirect('../login');": 1,
        "/blog/post/1": 1,
        "->": 1,
        "/blog/login": 1,
        "res.redirect": 1,
        "redirect(url)": 1,
        "address": 4,
        "302;": 1,
        "deprecate('res.redirect(url,": 1,
        "res.redirect(status,": 1,
        "url)": 1,
        "this.location(address).get('Location');": 1,
        "Support": 1,
        "text/{plain,html}": 1,
        "this.format({": 1,
        "statuses[status]": 2,
        "'.": 2,
        "Redirecting": 2,
        "u": 3,
        "escapeHtml(address);": 1,
        "'<p>'": 1,
        "<a": 1,
        "href=\"'": 1,
        "'\">'": 1,
        "'</a></p>'": 1,
        "default:": 1,
        "status;": 1,
        "Buffer.byteLength(body));": 1,
        "(this.req.method": 1,
        "this.end(body);": 1,
        "Add": 1,
        "Vary.": 1,
        "Vary": 1,
        "set,": 1,
        "then": 1,
        "call": 2,
        "simply": 1,
        "ignored.": 1,
        "{Array|String}": 1,
        "res.vary": 1,
        "checks": 2,
        "back-compat": 1,
        "(!field": 1,
        "(Array.isArray(field)": 1,
        "!field.length))": 1,
        "deprecate('res.vary():": 1,
        "Provide": 1,
        "name');": 1,
        "vary(this,": 1,
        "field);": 1,
        "Render": 1,
        "`view`": 1,
        "`options`": 1,
        "`fn`.": 1,
        "_not_": 1,
        "made": 1,
        "automatically,": 1,
        "_200_": 1,
        "_text/html_": 1,
        "given.": 1,
        "`cache`": 1,
        "boolean": 1,
        "hinting": 1,
        "engine": 1,
        "should": 1,
        "`filename`": 1,
        "view": 1,
        "being": 1,
        "rendered": 1,
        "res.render": 1,
        "render(view,": 1,
        "this.req.app;": 1,
        "self": 1,
        "res.locals": 1,
        "opts._locals": 1,
        "self.locals;": 1,
        "(err,": 1,
        "str)": 1,
        "req.next(err);": 1,
        "self.send(str);": 1,
        "render": 1,
        "app.render(view,": 1,
        "pipe": 2,
        "streaming;": 1,
        "request": 1,
        "aborted": 1,
        "onaborted()": 1,
        "return;": 7,
        "true;": 6,
        "Error('Request": 1,
        "aborted');": 1,
        "'ECONNABORTED';": 1,
        "callback(err);": 3,
        "ondirectory()": 1,
        "Error('EISDIR,": 1,
        "read');": 1,
        "'EISDIR';": 1,
        "onerror(err)": 1,
        "ended": 1,
        "onend()": 1,
        "callback();": 2,
        "onfile()": 1,
        "streaming": 3,
        "finished": 1,
        "onfinish(err)": 1,
        "'ECONNRESET')": 1,
        "onaborted();": 2,
        "onerror(err);": 1,
        "setImmediate(function": 1,
        "()": 1,
        "(streaming": 1,
        "false": 1,
        "!done)": 1,
        "onstream()": 1,
        "file.on('directory',": 1,
        "ondirectory);": 1,
        "file.on('end',": 1,
        "onend);": 1,
        "file.on('error',": 1,
        "onerror);": 1,
        "file.on('file',": 1,
        "onfile);": 1,
        "file.on('stream',": 1,
        "onstream);": 1,
        "onFinished(res,": 1,
        "onfinish);": 1,
        "(options.headers)": 1,
        "on": 1,
        "successful": 1,
        "file.on('headers',": 1,
        "headers(res)": 1,
        "options.headers;": 1,
        "i": 2,
        "0;": 1,
        "<": 1,
        "keys.length;": 1,
        "i++)": 1,
        "k": 1,
        "keys[i];": 1,
        "res.setHeader(k,": 1,
        "obj[k]);": 1,
        "file.pipe(res);": 1,
        "Stringify": 1,
        "JSON,": 1,
        "like": 1,
        "JSON.stringify,": 1,
        "v8": 2,
        "optimized.": 1,
        "stringify(value,": 1,
        "spaces)": 2,
        "optimizing": 1,
        "simple": 1,
        "https://bugs.chromium.org/p/v8/issues/detail?id=4730": 1,
        "JSON.stringify(value,": 1,
        "JSON.stringify(value);": 1
      },
      "bigrams": {}
    },
    "tokens": {
      "characters": {
        "unigrams": 25154,
        "bigrams": {}
      },
      "words": {
        "unigrams": 3346,
        "bigrams": {}
      }
    },
    "types": {
      "characters": 90,
      "words": 1061
    }
  },
  "api": "datums",
  "datumFields": [
    {
      "fieldDBtype": "DatumField",
      "id": "orthography",
      "type": "DatumField",
      "version": "v5.121.19-rc0",
      "labelFieldLinguists": "Orthography",
      "value": "/*!\n * express\n * Copyright(c) 2009-2013 TJ Holowaychuk\n * Copyright(c) 2014-2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar contentDisposition = require('content-disposition');\nvar deprecate = require('depd')('express');\nvar encodeUrl = require('encodeurl');\nvar escapeHtml = require('escape-html');\nvar http = require('http');\nvar isAbsolute = require('./utils').isAbsolute;\nvar onFinished = require('on-finished');\nvar path = require('path');\nvar statuses = require('statuses')\nvar merge = require('utils-merge');\nvar sign = require('cookie-signature').sign;\nvar normalizeType = require('./utils').normalizeType;\nvar normalizeTypes = require('./utils').normalizeTypes;\nvar setCharset = require('./utils').setCharset;\nvar cookie = require('cookie');\nvar send = require('send');\nvar extname = path.extname;\nvar mime = send.mime;\nvar resolve = path.resolve;\nvar vary = require('vary');\n\n/**\n * Response prototype.\n * @public\n */\n\nvar res = Object.create(http.ServerResponse.prototype)\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = res\n\n/**\n * Module variables.\n * @private\n */\n\nvar charsetRegExp = /;\\s*charset\\s*=/;\n\n/**\n * Set status `code`.\n *\n * @param {Number} code\n * @return {ServerResponse}\n * @public\n */\n\nres.status = function status(code) {\n  this.statusCode = code;\n  return this;\n};\n\n/**\n * Set Link header field with the given `links`.\n *\n * Examples:\n *\n *    res.links({\n *      next: 'http://api.example.com/users?page=2',\n *      last: 'http://api.example.com/users?page=5'\n *    });\n *\n * @param {Object} links\n * @return {ServerResponse}\n * @public\n */\n\nres.links = function(links){\n  var link = this.get('Link') || '';\n  if (link) link += ', ';\n  return this.set('Link', link + Object.keys(links).map(function(rel){\n    return '<' + links[rel] + '>; rel=\"' + rel + '\"';\n  }).join(', '));\n};\n\n/**\n * Send a response.\n *\n * Examples:\n *\n *     res.send(new Buffer('wahoo'));\n *     res.send({ some: 'json' });\n *     res.send('<p>some html</p>');\n *\n * @param {string|number|boolean|object|Buffer} body\n * @public\n */\n\nres.send = function send(body) {\n  var chunk = body;\n  var encoding;\n  var len;\n  var req = this.req;\n  var type;\n\n  // settings\n  var app = this.app;\n\n  // allow status / body\n  if (arguments.length === 2) {\n    // res.send(body, status) backwards compat\n    if (typeof arguments[0] !== 'number' && typeof arguments[1] === 'number') {\n      deprecate('res.send(body, status): Use res.status(status).send(body) instead');\n      this.statusCode = arguments[1];\n    } else {\n      deprecate('res.send(status, body): Use res.status(status).send(body) instead');\n      this.statusCode = arguments[0];\n      chunk = arguments[1];\n    }\n  }\n\n  // disambiguate res.send(status) and res.send(status, num)\n  if (typeof chunk === 'number' && arguments.length === 1) {\n    // res.send(status) will set status message as text string\n    if (!this.get('Content-Type')) {\n      this.type('txt');\n    }\n\n    deprecate('res.send(status): Use res.sendStatus(status) instead');\n    this.statusCode = chunk;\n    chunk = statuses[chunk]\n  }\n\n  switch (typeof chunk) {\n    // string defaulting to html\n    case 'string':\n      if (!this.get('Content-Type')) {\n        this.type('html');\n      }\n      break;\n    case 'boolean':\n    case 'number':\n    case 'object':\n      if (chunk === null) {\n        chunk = '';\n      } else if (Buffer.isBuffer(chunk)) {\n        if (!this.get('Content-Type')) {\n          this.type('bin');\n        }\n      } else {\n        return this.json(chunk);\n      }\n      break;\n  }\n\n  // write strings in utf-8\n  if (typeof chunk === 'string') {\n    encoding = 'utf8';\n    type = this.get('Content-Type');\n\n    // reflect this in content-type\n    if (typeof type === 'string') {\n      this.set('Content-Type', setCharset(type, 'utf-8'));\n    }\n  }\n\n  // populate Content-Length\n  if (chunk !== undefined) {\n    if (!Buffer.isBuffer(chunk)) {\n      // convert chunk to Buffer; saves later double conversions\n      chunk = new Buffer(chunk, encoding);\n      encoding = undefined;\n    }\n\n    len = chunk.length;\n    this.set('Content-Length', len);\n  }\n\n  // populate ETag\n  var etag;\n  var generateETag = len !== undefined && app.get('etag fn');\n  if (typeof generateETag === 'function' && !this.get('ETag')) {\n    if ((etag = generateETag(chunk, encoding))) {\n      this.set('ETag', etag);\n    }\n  }\n\n  // freshness\n  if (req.fresh) this.statusCode = 304;\n\n  // strip irrelevant headers\n  if (204 === this.statusCode || 304 === this.statusCode) {\n    this.removeHeader('Content-Type');\n    this.removeHeader('Content-Length');\n    this.removeHeader('Transfer-Encoding');\n    chunk = '';\n  }\n\n  if (req.method === 'HEAD') {\n    // skip body for HEAD\n    this.end();\n  } else {\n    // respond\n    this.end(chunk, encoding);\n  }\n\n  return this;\n};\n\n/**\n * Send JSON response.\n *\n * Examples:\n *\n *     res.json(null);\n *     res.json({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.json = function json(obj) {\n  var val = obj;\n\n  // allow status / body\n  if (arguments.length === 2) {\n    // res.json(body, status) backwards compat\n    if (typeof arguments[1] === 'number') {\n      deprecate('res.json(obj, status): Use res.status(status).json(obj) instead');\n      this.statusCode = arguments[1];\n    } else {\n      deprecate('res.json(status, obj): Use res.status(status).json(obj) instead');\n      this.statusCode = arguments[0];\n      val = arguments[1];\n    }\n  }\n\n  // settings\n  var app = this.app;\n  var replacer = app.get('json replacer');\n  var spaces = app.get('json spaces');\n  var body = stringify(val, replacer, spaces);\n\n  // content-type\n  if (!this.get('Content-Type')) {\n    this.set('Content-Type', 'application/json');\n  }\n\n  return this.send(body);\n};\n\n/**\n * Send JSON response with JSONP callback support.\n *\n * Examples:\n *\n *     res.jsonp(null);\n *     res.jsonp({ user: 'tj' });\n *\n * @param {string|number|boolean|object} obj\n * @public\n */\n\nres.jsonp = function jsonp(obj) {\n  var val = obj;\n\n  // allow status / body\n  if (arguments.length === 2) {\n    // res.json(body, status) backwards compat\n    if (typeof arguments[1] === 'number') {\n      deprecate('res.jsonp(obj, status): Use res.status(status).json(obj) instead');\n      this.statusCode = arguments[1];\n    } else {\n      deprecate('res.jsonp(status, obj): Use res.status(status).jsonp(obj) instead');\n      this.statusCode = arguments[0];\n      val = arguments[1];\n    }\n  }\n\n  // settings\n  var app = this.app;\n  var replacer = app.get('json replacer');\n  var spaces = app.get('json spaces');\n  var body = stringify(val, replacer, spaces);\n  var callback = this.req.query[app.get('jsonp callback name')];\n\n  // content-type\n  if (!this.get('Content-Type')) {\n    this.set('X-Content-Type-Options', 'nosniff');\n    this.set('Content-Type', 'application/json');\n  }\n\n  // fixup callback\n  if (Array.isArray(callback)) {\n    callback = callback[0];\n  }\n\n  // jsonp\n  if (typeof callback === 'string' && callback.length !== 0) {\n    this.charset = 'utf-8';\n    this.set('X-Content-Type-Options', 'nosniff');\n    this.set('Content-Type', 'text/javascript');\n\n    // restrict callback charset\n    callback = callback.replace(/[^\\[\\]\\w$.]/g, '');\n\n    // replace chars not allowed in JavaScript that are in JSON\n    body = body\n      .replace(/\\u2028/g, '\\\\u2028')\n      .replace(/\\u2029/g, '\\\\u2029');\n\n    // the /**/ is a specific security mitigation for \"Rosetta Flash JSONP abuse\"\n    // the typeof check is just to reduce client error noise\n    body = '/**/ typeof ' + callback + ' === \\'function\\' && ' + callback + '(' + body + ');';\n  }\n\n  return this.send(body);\n};\n\n/**\n * Send given HTTP status code.\n *\n * Sets the response status to `statusCode` and the body of the\n * response to the standard description from node's http.STATUS_CODES\n * or the statusCode number if no description.\n *\n * Examples:\n *\n *     res.sendStatus(200);\n *\n * @param {number} statusCode\n * @public\n */\n\nres.sendStatus = function sendStatus(statusCode) {\n  var body = statuses[statusCode] || String(statusCode)\n\n  this.statusCode = statusCode;\n  this.type('txt');\n\n  return this.send(body);\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.sentHeader`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n *   - `maxAge`   defaulting to 0 (can be string converted by `ms`)\n *   - `root`     root directory for relative filenames\n *   - `headers`  object of headers to serve with file\n *   - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n *  The following example illustrates how `res.sendFile()` may\n *  be used as an alternative for the `static()` middleware for\n *  dynamic situations. The code backing `res.sendFile()` is actually\n *  the same code, so HTTP cache support etc is identical.\n *\n *     app.get('/user/:uid/photos/:file', function(req, res){\n *       var uid = req.params.uid\n *         , file = req.params.file;\n *\n *       req.user.mayViewFilesFrom(uid, function(yes){\n *         if (yes) {\n *           res.sendFile('/uploads/' + uid + '/' + file);\n *         } else {\n *           res.send(403, 'Sorry! you cant see that.');\n *         }\n *       });\n *     });\n *\n * @public\n */\n\nres.sendFile = function sendFile(path, options, callback) {\n  var done = callback;\n  var req = this.req;\n  var res = this;\n  var next = req.next;\n  var opts = options || {};\n\n  if (!path) {\n    throw new TypeError('path argument is required to res.sendFile');\n  }\n\n  // support function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  if (!opts.root && !isAbsolute(path)) {\n    throw new TypeError('path must be absolute or specify root to res.sendFile');\n  }\n\n  // create file stream\n  var pathname = encodeURI(path);\n  var file = send(req, pathname, opts);\n\n  // transfer\n  sendfile(res, file, opts, function (err) {\n    if (done) return done(err);\n    if (err && err.code === 'EISDIR') return next();\n\n    // next() all but write errors\n    if (err && err.code !== 'ECONNABORTED' && err.syscall !== 'write') {\n      next(err);\n    }\n  });\n};\n\n/**\n * Transfer the file at the given `path`.\n *\n * Automatically sets the _Content-Type_ response header field.\n * The callback `callback(err)` is invoked when the transfer is complete\n * or when an error occurs. Be sure to check `res.sentHeader`\n * if you wish to attempt responding, as the header and some data\n * may have already been transferred.\n *\n * Options:\n *\n *   - `maxAge`   defaulting to 0 (can be string converted by `ms`)\n *   - `root`     root directory for relative filenames\n *   - `headers`  object of headers to serve with file\n *   - `dotfiles` serve dotfiles, defaulting to false; can be `\"allow\"` to send them\n *\n * Other options are passed along to `send`.\n *\n * Examples:\n *\n *  The following example illustrates how `res.sendfile()` may\n *  be used as an alternative for the `static()` middleware for\n *  dynamic situations. The code backing `res.sendfile()` is actually\n *  the same code, so HTTP cache support etc is identical.\n *\n *     app.get('/user/:uid/photos/:file', function(req, res){\n *       var uid = req.params.uid\n *         , file = req.params.file;\n *\n *       req.user.mayViewFilesFrom(uid, function(yes){\n *         if (yes) {\n *           res.sendfile('/uploads/' + uid + '/' + file);\n *         } else {\n *           res.send(403, 'Sorry! you cant see that.');\n *         }\n *       });\n *     });\n *\n * @public\n */\n\nres.sendfile = function (path, options, callback) {\n  var done = callback;\n  var req = this.req;\n  var res = this;\n  var next = req.next;\n  var opts = options || {};\n\n  // support function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // create file stream\n  var file = send(req, path, opts);\n\n  // transfer\n  sendfile(res, file, opts, function (err) {\n    if (done) return done(err);\n    if (err && err.code === 'EISDIR') return next();\n\n    // next() all but write errors\n    if (err && err.code !== 'ECONNABORT' && err.syscall !== 'write') {\n      next(err);\n    }\n  });\n};\n\nres.sendfile = deprecate.function(res.sendfile,\n  'res.sendfile: Use res.sendFile instead');\n\n/**\n * Transfer the file at the given `path` as an attachment.\n *\n * Optionally providing an alternate attachment `filename`,\n * and optional callback `callback(err)`. The callback is invoked\n * when the data transfer is complete, or when an error has\n * ocurred. Be sure to check `res.headersSent` if you plan to respond.\n *\n * This method uses `res.sendfile()`.\n *\n * @public\n */\n\nres.download = function download(path, filename, callback) {\n  var done = callback;\n  var name = filename;\n\n  // support function as second arg\n  if (typeof filename === 'function') {\n    done = filename;\n    name = null;\n  }\n\n  // set Content-Disposition when file is sent\n  var headers = {\n    'Content-Disposition': contentDisposition(name || path)\n  };\n\n  // Resolve the full path for sendFile\n  var fullPath = resolve(path);\n\n  return this.sendFile(fullPath, { headers: headers }, done);\n};\n\n/**\n * Set _Content-Type_ response header with `type` through `mime.lookup()`\n * when it does not contain \"/\", or set the Content-Type to `type` otherwise.\n *\n * Examples:\n *\n *     res.type('.html');\n *     res.type('html');\n *     res.type('json');\n *     res.type('application/json');\n *     res.type('png');\n *\n * @param {String} type\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.contentType =\nres.type = function contentType(type) {\n  var ct = type.indexOf('/') === -1\n    ? mime.lookup(type)\n    : type;\n\n  return this.set('Content-Type', ct);\n};\n\n/**\n * Respond to the Acceptable formats using an `obj`\n * of mime-type callbacks.\n *\n * This method uses `req.accepted`, an array of\n * acceptable types ordered by their quality values.\n * When \"Accept\" is not present the _first_ callback\n * is invoked, otherwise the first match is used. When\n * no match is performed the server responds with\n * 406 \"Not Acceptable\".\n *\n * Content-Type is set for you, however if you choose\n * you may alter this within the callback using `res.type()`\n * or `res.set('Content-Type', ...)`.\n *\n *    res.format({\n *      'text/plain': function(){\n *        res.send('hey');\n *      },\n *\n *      'text/html': function(){\n *        res.send('<p>hey</p>');\n *      },\n *\n *      'appliation/json': function(){\n *        res.send({ message: 'hey' });\n *      }\n *    });\n *\n * In addition to canonicalized MIME types you may\n * also use extnames mapped to these types:\n *\n *    res.format({\n *      text: function(){\n *        res.send('hey');\n *      },\n *\n *      html: function(){\n *        res.send('<p>hey</p>');\n *      },\n *\n *      json: function(){\n *        res.send({ message: 'hey' });\n *      }\n *    });\n *\n * By default Express passes an `Error`\n * with a `.status` of 406 to `next(err)`\n * if a match is not made. If you provide\n * a `.default` callback it will be invoked\n * instead.\n *\n * @param {Object} obj\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.format = function(obj){\n  var req = this.req;\n  var next = req.next;\n\n  var fn = obj.default;\n  if (fn) delete obj.default;\n  var keys = Object.keys(obj);\n\n  var key = keys.length > 0\n    ? req.accepts(keys)\n    : false;\n\n  this.vary(\"Accept\");\n\n  if (key) {\n    this.set('Content-Type', normalizeType(key).value);\n    obj[key](req, this, next);\n  } else if (fn) {\n    fn();\n  } else {\n    var err = new Error('Not Acceptable');\n    err.status = err.statusCode = 406;\n    err.types = normalizeTypes(keys).map(function(o){ return o.value });\n    next(err);\n  }\n\n  return this;\n};\n\n/**\n * Set _Content-Disposition_ header to _attachment_ with optional `filename`.\n *\n * @param {String} filename\n * @return {ServerResponse}\n * @public\n */\n\nres.attachment = function attachment(filename) {\n  if (filename) {\n    this.type(extname(filename));\n  }\n\n  this.set('Content-Disposition', contentDisposition(filename));\n\n  return this;\n};\n\n/**\n * Append additional header `field` with value `val`.\n *\n * Example:\n *\n *    res.append('Link', ['<http://localhost/>', '<http://localhost:3000/>']);\n *    res.append('Set-Cookie', 'foo=bar; Path=/; HttpOnly');\n *    res.append('Warning', '199 Miscellaneous warning');\n *\n * @param {String} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.append = function append(field, val) {\n  var prev = this.get(field);\n  var value = val;\n\n  if (prev) {\n    // concat the new and prev vals\n    value = Array.isArray(prev) ? prev.concat(val)\n      : Array.isArray(val) ? [prev].concat(val)\n      : [prev, val];\n  }\n\n  return this.set(field, value);\n};\n\n/**\n * Set header `field` to `val`, or pass\n * an object of header fields.\n *\n * Examples:\n *\n *    res.set('Foo', ['bar', 'baz']);\n *    res.set('Accept', 'application/json');\n *    res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });\n *\n * Aliased as `res.header()`.\n *\n * @param {String|Object} field\n * @param {String|Array} val\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.set =\nres.header = function header(field, val) {\n  if (arguments.length === 2) {\n    var value = Array.isArray(val)\n      ? val.map(String)\n      : String(val);\n\n    // add charset to content-type\n    if (field.toLowerCase() === 'content-type' && !charsetRegExp.test(value)) {\n      var charset = mime.charsets.lookup(value.split(';')[0]);\n      if (charset) value += '; charset=' + charset.toLowerCase();\n    }\n\n    this.setHeader(field, value);\n  } else {\n    for (var key in field) {\n      this.set(key, field[key]);\n    }\n  }\n  return this;\n};\n\n/**\n * Get value for header `field`.\n *\n * @param {String} field\n * @return {String}\n * @public\n */\n\nres.get = function(field){\n  return this.getHeader(field);\n};\n\n/**\n * Clear cookie `name`.\n *\n * @param {String} name\n * @param {Object} [options]\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.clearCookie = function clearCookie(name, options) {\n  var opts = merge({ expires: new Date(1), path: '/' }, options);\n\n  return this.cookie(name, '', opts);\n};\n\n/**\n * Set cookie `name` to `value`, with the given `options`.\n *\n * Options:\n *\n *    - `maxAge`   max-age in milliseconds, converted to `expires`\n *    - `signed`   sign the cookie\n *    - `path`     defaults to \"/\"\n *\n * Examples:\n *\n *    // \"Remember Me\" for 15 minutes\n *    res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });\n *\n *    // save as above\n *    res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true })\n *\n * @param {String} name\n * @param {String|Object} value\n * @param {Options} options\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.cookie = function (name, value, options) {\n  var opts = merge({}, options);\n  var secret = this.req.secret;\n  var signed = opts.signed;\n\n  if (signed && !secret) {\n    throw new Error('cookieParser(\"secret\") required for signed cookies');\n  }\n\n  var val = typeof value === 'object'\n    ? 'j:' + JSON.stringify(value)\n    : String(value);\n\n  if (signed) {\n    val = 's:' + sign(val, secret);\n  }\n\n  if ('maxAge' in opts) {\n    opts.expires = new Date(Date.now() + opts.maxAge);\n    opts.maxAge /= 1000;\n  }\n\n  if (opts.path == null) {\n    opts.path = '/';\n  }\n\n  this.append('Set-Cookie', cookie.serialize(name, String(val), opts));\n\n  return this;\n};\n\n/**\n * Set the location header to `url`.\n *\n * The given `url` can also be \"back\", which redirects\n * to the _Referrer_ or _Referer_ headers or \"/\".\n *\n * Examples:\n *\n *    res.location('/foo/bar').;\n *    res.location('http://example.com');\n *    res.location('../login');\n *\n * @param {String} url\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.location = function location(url) {\n  var loc = url;\n\n  // \"back\" is an alias for the referrer\n  if (url === 'back') {\n    loc = this.req.get('Referrer') || '/';\n  }\n\n  // set location\n  return this.set('Location', encodeUrl(loc));\n};\n\n/**\n * Redirect to the given `url` with optional response `status`\n * defaulting to 302.\n *\n * The resulting `url` is determined by `res.location()`, so\n * it will play nicely with mounted apps, relative paths,\n * `\"back\"` etc.\n *\n * Examples:\n *\n *    res.redirect('/foo/bar');\n *    res.redirect('http://example.com');\n *    res.redirect(301, 'http://example.com');\n *    res.redirect('../login'); // /blog/post/1 -> /blog/login\n *\n * @public\n */\n\nres.redirect = function redirect(url) {\n  var address = url;\n  var body;\n  var status = 302;\n\n  // allow status / url\n  if (arguments.length === 2) {\n    if (typeof arguments[0] === 'number') {\n      status = arguments[0];\n      address = arguments[1];\n    } else {\n      deprecate('res.redirect(url, status): Use res.redirect(status, url) instead');\n      status = arguments[1];\n    }\n  }\n\n  // Set location header\n  address = this.location(address).get('Location');\n\n  // Support text/{plain,html} by default\n  this.format({\n    text: function(){\n      body = statuses[status] + '. Redirecting to ' + address\n    },\n\n    html: function(){\n      var u = escapeHtml(address);\n      body = '<p>' + statuses[status] + '. Redirecting to <a href=\"' + u + '\">' + u + '</a></p>'\n    },\n\n    default: function(){\n      body = '';\n    }\n  });\n\n  // Respond\n  this.statusCode = status;\n  this.set('Content-Length', Buffer.byteLength(body));\n\n  if (this.req.method === 'HEAD') {\n    this.end();\n  } else {\n    this.end(body);\n  }\n};\n\n/**\n * Add `field` to Vary. If already present in the Vary set, then\n * this call is simply ignored.\n *\n * @param {Array|String} field\n * @return {ServerResponse} for chaining\n * @public\n */\n\nres.vary = function(field){\n  // checks for back-compat\n  if (!field || (Array.isArray(field) && !field.length)) {\n    deprecate('res.vary(): Provide a field name');\n    return this;\n  }\n\n  vary(this, field);\n\n  return this;\n};\n\n/**\n * Render `view` with the given `options` and optional callback `fn`.\n * When a callback function is given a response will _not_ be made\n * automatically, otherwise a response of _200_ and _text/html_ is given.\n *\n * Options:\n *\n *  - `cache`     boolean hinting to the engine it should cache\n *  - `filename`  filename of the view being rendered\n *\n * @public\n */\n\nres.render = function render(view, options, callback) {\n  var app = this.req.app;\n  var done = callback;\n  var opts = options || {};\n  var req = this.req;\n  var self = this;\n\n  // support callback function as second arg\n  if (typeof options === 'function') {\n    done = options;\n    opts = {};\n  }\n\n  // merge res.locals\n  opts._locals = self.locals;\n\n  // default callback to respond\n  done = done || function (err, str) {\n    if (err) return req.next(err);\n    self.send(str);\n  };\n\n  // render\n  app.render(view, opts, done);\n};\n\n// pipe the send file stream\nfunction sendfile(res, file, options, callback) {\n  var done = false;\n  var streaming;\n\n  // request aborted\n  function onaborted() {\n    if (done) return;\n    done = true;\n\n    var err = new Error('Request aborted');\n    err.code = 'ECONNABORTED';\n    callback(err);\n  }\n\n  // directory\n  function ondirectory() {\n    if (done) return;\n    done = true;\n\n    var err = new Error('EISDIR, read');\n    err.code = 'EISDIR';\n    callback(err);\n  }\n\n  // errors\n  function onerror(err) {\n    if (done) return;\n    done = true;\n    callback(err);\n  }\n\n  // ended\n  function onend() {\n    if (done) return;\n    done = true;\n    callback();\n  }\n\n  // file\n  function onfile() {\n    streaming = false;\n  }\n\n  // finished\n  function onfinish(err) {\n    if (err && err.code === 'ECONNRESET') return onaborted();\n    if (err) return onerror(err);\n    if (done) return;\n\n    setImmediate(function () {\n      if (streaming !== false && !done) {\n        onaborted();\n        return;\n      }\n\n      if (done) return;\n      done = true;\n      callback();\n    });\n  }\n\n  // streaming\n  function onstream() {\n    streaming = true;\n  }\n\n  file.on('directory', ondirectory);\n  file.on('end', onend);\n  file.on('error', onerror);\n  file.on('file', onfile);\n  file.on('stream', onstream);\n  onFinished(res, onfinish);\n\n  if (options.headers) {\n    // set headers on successful transfer\n    file.on('headers', function headers(res) {\n      var obj = options.headers;\n      var keys = Object.keys(obj);\n\n      for (var i = 0; i < keys.length; i++) {\n        var k = keys[i];\n        res.setHeader(k, obj[k]);\n      }\n    });\n  }\n\n  // pipe\n  file.pipe(res);\n}\n\n/**\n * Stringify JSON, like JSON.stringify, but v8 optimized.\n * @private\n */\n\nfunction stringify(value, replacer, spaces) {\n  // v8 checks arguments.length for optimizing simple call\n  // https://bugs.chromium.org/p/v8/issues/detail?id=4730\n  return replacer || spaces\n    ? JSON.stringify(value, replacer, spaces)\n    : JSON.stringify(value);\n}",
      "label": "orthography"
    }
  ],
  "audioVideo": [],
  "comments": []
}