Facebook
From ballsdotcom, 1 Month ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 139
  1. /******/ (() => { // webpackBootstrap
  2. /******/  var __webpack_modules__ = ([
  3. /* 0 */,
  4. /* 1 */
  5. /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
  6.  
  7.     "use strict";
  8.     __webpack_require__.r(__webpack_exports__);
  9.     /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  10.     /* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  11.     /* harmony export */ });
  12.     /* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
  13.     /* harmony import */ var parse5__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3);
  14.    
  15.    
  16.    
  17.     class HTML extends _events_js__WEBPACK_IMPORTED_MODULE_0__["default"] {
  18.         constructor(ctx) {
  19.             super();
  20.             this.ctx = ctx;
  21.             this.rewriteUrl = ctx.rewriteUrl;
  22.             this.sourceUrl = ctx.sourceUrl;
  23.         };
  24.         rewrite(str, options = {}) {
  25.             if (!str) return str;
  26.             return this.recast(str, node => {
  27.                 if (node.tagName) this.emit('element', node, 'rewrite');
  28.                 if (node.attr) this.emit('attr', node, 'rewrite');
  29.                 if (node.nodeName === '#text') this.emit('text', node, 'rewrite');
  30.             }, options)
  31.         };
  32.         source(str, options = {}) {
  33.             if (!str) return str;
  34.             return this.recast(str, node => {
  35.                 if (node.tagName) this.emit('element', node, 'source');
  36.                 if (node.attr) this.emit('attr', node, 'source');
  37.                 if (node.nodeName === '#text') this.emit('text', node, 'source');
  38.             }, options)
  39.         };
  40.         recast(str, fn, options = {}) {
  41.             try {
  42.                 const ast = (options.document ? parse5__WEBPACK_IMPORTED_MODULE_1__.parse : parse5__WEBPACK_IMPORTED_MODULE_1__.parseFragment)(new String(str).toString());
  43.                 this.iterate(ast, fn, options);
  44.                 return (0,parse5__WEBPACK_IMPORTED_MODULE_1__.serialize)(ast);
  45.             } catch(e) {
  46.                 return str;
  47.             };
  48.         };
  49.         iterate(ast, fn, fnOptions) {
  50.             if (!ast) return ast;
  51.        
  52.             if (ast.tagName) {
  53.                 const element = new P5Element(ast, false, fnOptions);
  54.                 fn(element);
  55.                 if (ast.attrs) {
  56.                     for (const attr of ast.attrs) {
  57.                         if (!attr.skip) fn(new AttributeEvent(element, attr, fnOptions));
  58.                     };
  59.                 };
  60.             };
  61.    
  62.             if (ast.childNodes) {
  63.                 for (const child of ast.childNodes) {
  64.                     if (!child.skip) this.iterate(child, fn, fnOptions);
  65.                 };
  66.             };
  67.    
  68.             if (ast.nodeName === '#text') {
  69.                 fn(new TextEvent(ast, new P5Element(ast[removed]), false, fnOptions));
  70.             };
  71.    
  72.             return ast;
  73.         };
  74.         wrapSrcset(str, meta = this.ctx.meta) {
  75.             return str.split(',').map(src => {
  76.                 const parts = src.trimStart().split(' ');
  77.                 if (parts[0]) parts[0] = this.ctx.rewriteUrl(parts[0], meta);
  78.                 return parts.join(' ');
  79.             }).join(', ');
  80.         };
  81.         unwrapSrcset(str, meta = this.ctx.meta) {
  82.             return str.split(',').map(src => {
  83.                 const parts = src.trimStart().split(' ');
  84.                 if (parts[0]) parts[0] = this.ctx.sourceUrl(parts[0], meta);
  85.                 return parts.join(' ');
  86.             }).join(', ');
  87.         };
  88.         static parse = parse5__WEBPACK_IMPORTED_MODULE_1__.parse;
  89.         static parseFragment = parse5__WEBPACK_IMPORTED_MODULE_1__.parseFragment;
  90.         static serialize = parse5__WEBPACK_IMPORTED_MODULE_1__.serialize;  
  91.     };
  92.    
  93.     class P5Element extends _events_js__WEBPACK_IMPORTED_MODULE_0__["default"] {
  94.         constructor(node, stream = false, options = {}) {
  95.             super();
  96.             this.stream = stream;
  97.             this.node = node;
  98.             this.options = options;
  99.         };
  100.         setAttribute(name, value) {
  101.             for (const attr of this.attrs) {
  102.                 if (attr.name === name) {
  103.                     attr.value = value;
  104.                     return true;
  105.                 };
  106.             };
  107.    
  108.             this.attrs.push(
  109.                 {
  110.                     name,
  111.                     value,
  112.                 }
  113.             );
  114.         };
  115.         getAttribute(name) {
  116.             const attr = this.attrs.find(attr => attr.name === name) || {};
  117.             return attr.value;
  118.         };
  119.         hasAttribute(name) {
  120.             return !!this.attrs.find(attr => attr.name === name);
  121.         };
  122.         removeAttribute(name) {
  123.             const i = this.attrs.findIndex(attr => attr.name === name);
  124.             if (typeof i !== 'undefined') this.attrs.splice(i, 1);
  125.         };
  126.         get tagName() {
  127.             return this.node.tagName;
  128.         };
  129.         set tagName(val) {
  130.             this.node.tagName = val;
  131.         };
  132.         get childNodes() {
  133.             return !this.stream ? this.node.childNodes : null;
  134.         };
  135.         get innerHTML() {
  136.             return !this.stream ? (0,parse5__WEBPACK_IMPORTED_MODULE_1__.serialize)(
  137.                 {
  138.                     nodeName: '#document-fragment',
  139.                     childNodes: this.childNodes,
  140.                 }
  141.             ) : null;
  142.         };
  143.         set innerHTML(val) {
  144.             if (!this.stream) this.node.childNodes = (0,parse5__WEBPACK_IMPORTED_MODULE_1__.parseFragment)(val).childNodes;
  145.         };
  146.         get outerHTML() {
  147.             return !this.stream ? (0,parse5__WEBPACK_IMPORTED_MODULE_1__.serialize)(
  148.                 {
  149.                     nodeName: '#document-fragment',
  150.                     childNodes: [ this ],
  151.                 }
  152.             ) : null;
  153.         };
  154.         set outerHTML(val) {
  155.             if (!this.stream) this[removed].childNodes.splice(this[removed].childNodes.findIndex(node => node === this.node), 1, ...(0,parse5__WEBPACK_IMPORTED_MODULE_1__.parseFragment)(val).childNodes);
  156.         };
  157.         get textContent() {
  158.             if (this.stream) return null;
  159.    
  160.             let str = '';
  161.             iterate(this.node, node => {
  162.                 if (node.nodeName === '#text') str += node.value;
  163.             });
  164.            
  165.             return str;
  166.         };
  167.         set textContent(val) {
  168.             if (!this.stream) this.node.childNodes = [
  169.                 {
  170.                     nodeName: '#text',
  171.                     value: val,
  172.                     parentNode: this.node
  173.                 }
  174.             ];
  175.         };
  176.         get nodeName() {
  177.             return this.node.nodeName;
  178.         }
  179.         get parentNode() {
  180.             return this.node[removed] ? new P5Element(this.node[removed]) : null;
  181.         };
  182.         get attrs() {
  183.             return this.node.attrs;
  184.         }
  185.         get namespaceURI() {
  186.             return this.node.namespaceURI;
  187.         }
  188.     };
  189.    
  190.     class AttributeEvent {
  191.         constructor(node, attr, options = {}) {
  192.             this.attr = attr;
  193.             this.attrs = node.attrs;
  194.             this.node = node;
  195.             this.options = options;
  196.         };
  197.         delete() {
  198.             const i = this.attrs.findIndex(attr => attr === this.attr);
  199.    
  200.             this.attrs.splice(i, 1);
  201.    
  202.             Object.defineProperty(this, 'deleted', {
  203.                 get: () => true,
  204.             });
  205.    
  206.             return true;
  207.         };
  208.         get name() {
  209.             return this.attr.name;
  210.         };
  211.    
  212.         set name(val) {
  213.             this.attr.name = val;
  214.         };
  215.         get value() {
  216.             return this.attr.value;
  217.         };
  218.    
  219.         set value(val) {
  220.             this.attr.value = val;
  221.         };
  222.         get deleted() {
  223.             return false;
  224.         };
  225.     };
  226.    
  227.     class TextEvent {
  228.         constructor(node, element, stream = false, options = {}) {
  229.             this.stream = stream;
  230.             this.node = node;
  231.             this.element = element;
  232.             this.options = options;
  233.         };
  234.         get nodeName() {
  235.             return this.node.nodeName;
  236.         }
  237.         get parentNode() {
  238.             return this.element;
  239.         };
  240.         get value() {
  241.             return this.stream ? this.node.text : this.node.value;
  242.         };
  243.         set value(val) {
  244.    
  245.             if (this.stream) this.node.text = val;
  246.             else this.node.value = val;
  247.         };
  248.     };
  249.    
  250.     /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (HTML);
  251.    
  252.     /***/ }),
  253.     /* 2 */
  254.     /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
  255.    
  256.     "use strict";
  257.     __webpack_require__.r(__webpack_exports__);
  258.     /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  259.     /* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  260.     /* harmony export */ });
  261.     // Copyright Joyent, Inc. and other Node contributors.
  262.     //
  263.     // Permission is hereby granted, free of charge, to any person obtaining a
  264.     // copy of this software and associated documentation files (the
  265.     // "Software"), to deal in the Software without restriction, including
  266.     // without limitation the rights to use, copy, modify, merge, publish,
  267.     // distribute, sublicense, and/or sell copies of the Software, and to permit
  268.     // persons to whom the Software is furnished to do so, subject to the
  269.     // following conditions:
  270.     //
  271.     // The above copyright notice and this permission notice shall be included
  272.     // in all copies or substantial portions of the Software.
  273.     //
  274.     // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  275.     // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  276.     // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  277.     // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  278.     // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  279.     // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  280.     // USE OR OTHER DEALINGS IN THE SOFTWARE.
  281.    
  282.    
  283.    
  284.     var R = typeof Reflect === 'object' ? Reflect : null
  285.     var ReflectApply = R && typeof R.apply === 'function'
  286.       ? R.apply
  287.       : function ReflectApply(target, receiver, args) {
  288.         return Function.prototype.apply.call(target, receiver, args);
  289.       }
  290.    
  291.     var ReflectOwnKeys
  292.     if (R && typeof R.ownKeys === 'function') {
  293.       ReflectOwnKeys = R.ownKeys
  294.     } else if (Object.getOwnPropertySymbols) {
  295.       ReflectOwnKeys = function ReflectOwnKeys(target) {
  296.         return Object.getOwnPropertyNames(target)
  297.           .concat(Object.getOwnPropertySymbols(target));
  298.       };
  299.     } else {
  300.       ReflectOwnKeys = function ReflectOwnKeys(target) {
  301.         return Object.getOwnPropertyNames(target);
  302.       };
  303.     }
  304.    
  305.     function ProcessEmitWarning(warning) {
  306.       if (console && console.warn) console.warn(warning);
  307.     }
  308.    
  309.     var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
  310.       return value !== value;
  311.     }
  312.    
  313.     function EventEmitter() {
  314.       EventEmitter.init.call(this);
  315.     }
  316.    
  317.     /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EventEmitter);
  318.    
  319.     // Backwards-compat with node 0.10.x
  320.     EventEmitter.EventEmitter = EventEmitter;
  321.    
  322.     EventEmitter.prototype._events = undefined;
  323.     EventEmitter.prototype._eventsCount = 0;
  324.     EventEmitter.prototype._maxListeners = undefined;
  325.    
  326.     // By default EventEmitters will print a warning if more than 10 listeners are
  327.     // added to it. This is a useful default which helps finding memory leaks.
  328.     var defaultMaxListeners = 10;
  329.    
  330.     function checkListener(listener) {
  331.       if (typeof listener !== 'function') {
  332.         throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
  333.       }
  334.     }
  335.    
  336.     Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
  337.       enumerable: true,
  338.       get: function() {
  339.         return defaultMaxListeners;
  340.       },
  341.       set: function(arg) {
  342.         if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
  343.           throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
  344.         }
  345.         defaultMaxListeners = arg;
  346.       }
  347.     });
  348.    
  349.     EventEmitter.init = function() {
  350.    
  351.       if (this._events === undefined ||
  352.           this._events === Object.getPrototypeOf(this)._events) {
  353.         this._events = Object.create(null);
  354.         this._eventsCount = 0;
  355.       }
  356.    
  357.       this._maxListeners = this._maxListeners || undefined;
  358.     };
  359.    
  360.     // Obviously not all Emitters should be limited to 10. This function allows
  361.     // that to be increased. Set to zero for unlimited.
  362.     EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
  363.       if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
  364.         throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
  365.       }
  366.       this._maxListeners = n;
  367.       return this;
  368.     };
  369.    
  370.     function _getMaxListeners(that) {
  371.       if (that._maxListeners === undefined)
  372.         return EventEmitter.defaultMaxListeners;
  373.       return that._maxListeners;
  374.     }
  375.    
  376.     EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
  377.       return _getMaxListeners(this);
  378.     };
  379.    
  380.     EventEmitter.prototype.emit = function emit(type) {
  381.       var args = [];
  382.       for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);
  383.       var doError = (type === 'error');
  384.    
  385.       var events = this._events;
  386.       if (events !== undefined)
  387.         doError = (doError && events.error === undefined);
  388.       else if (!doError)
  389.         return false;
  390.    
  391.       // If there is no 'error' event listener then throw.
  392.       if (doError) {
  393.         var er;
  394.         if (args.length > 0)
  395.           er = args[0];
  396.         if (er instanceof Error) {
  397.           // Note: The comments on the `throw` lines are intentional, they show
  398.           // up in Node's output if this results in an unhandled exception.
  399.           throw er; // Unhandled 'error' event
  400.         }
  401.         // At least give some kind of context to the user
  402.         var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
  403.         err.context = er;
  404.         throw err; // Unhandled 'error' event
  405.       }
  406.    
  407.       var handler = events[type];
  408.    
  409.       if (handler === undefined)
  410.         return false;
  411.    
  412.       if (typeof handler === 'function') {
  413.         ReflectApply(handler, this, args);
  414.       } else {
  415.         var len = handler.length;
  416.         var listeners = arrayClone(handler, len);
  417.         for (var i = 0; i < len; ++i)
  418.           ReflectApply(listeners[i], this, args);
  419.       }
  420.    
  421.       return true;
  422.     };
  423.    
  424.     function _addListener(target, type, listener, prepend) {
  425.       var m;
  426.       var events;
  427.       var existing;
  428.    
  429.       checkListener(listener);
  430.    
  431.       events = target._events;
  432.       if (events === undefined) {
  433.         events = target._events = Object.create(null);
  434.         target._eventsCount = 0;
  435.       } else {
  436.         // To avoid recursion in the case that type === "newListener"! Before
  437.         // adding it to the listeners, first emit "newListener".
  438.         if (events.newListener !== undefined) {
  439.           target.emit('newListener', type,
  440.                       listener.listener ? listener.listener : listener);
  441.    
  442.           // Re-assign `events` because a newListener handler could have caused the
  443.           // this._events to be assigned to a new object
  444.           events = target._events;
  445.         }
  446.         existing = events[type];
  447.       }
  448.    
  449.       if (existing === undefined) {
  450.         // Optimize the case of one listener. Don't need the extra array object.
  451.         existing = events[type] = listener;
  452.         ++target._eventsCount;
  453.       } else {
  454.         if (typeof existing === 'function') {
  455.           // Adding the second element, need to change to array.
  456.           existing = events[type] =
  457.             prepend ? [listener, existing] : [existing, listener];
  458.           // If we've already got an array, just append.
  459.         } else if (prepend) {
  460.           existing.unshift(listener);
  461.         } else {
  462.           existing.push(listener);
  463.         }
  464.    
  465.         // Check for listener leak
  466.         m = _getMaxListeners(target);
  467.         if (m > 0 && existing.length > m && !existing.warned) {
  468.           existing.warned = true;
  469.           // No error code for this since it is a Warning
  470.           // eslint-disable-next-line no-restricted-syntax
  471.           var w = new Error('Possible EventEmitter memory leak detected. ' +
  472.                               existing.length + ' ' + String(type) + ' listeners ' +
  473.                               'added. Use emitter.setMaxListeners() to ' +
  474.                               'increase limit');
  475.           w.name = 'MaxListenersExceededWarning';
  476.           w.emitter = target;
  477.           w.type = type;
  478.           w.count = existing.length;
  479.           ProcessEmitWarning(w);
  480.         }
  481.       }
  482.    
  483.       return target;
  484.     }
  485.    
  486.     EventEmitter.prototype.addListener = function addListener(type, listener) {
  487.       return _addListener(this, type, listener, false);
  488.     };
  489.    
  490.     EventEmitter.prototype.on = EventEmitter.prototype.addListener;
  491.    
  492.     EventEmitter.prototype.prependListener =
  493.         function prependListener(type, listener) {
  494.           return _addListener(this, type, listener, true);
  495.         };
  496.    
  497.     function onceWrapper() {
  498.       if (!this.fired) {
  499.         this.target.removeListener(this.type, this.wrapFn);
  500.         this.fired = true;
  501.         if (arguments.length === 0)
  502.           return this.listener.call(this.target);
  503.         return this.listener.apply(this.target, arguments);
  504.       }
  505.     }
  506.    
  507.     function _onceWrap(target, type, listener) {
  508.       var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
  509.       var wrapped = onceWrapper.bind(state);
  510.       wrapped.listener = listener;
  511.       state.wrapFn = wrapped;
  512.       return wrapped;
  513.     }
  514.    
  515.     EventEmitter.prototype.once = function once(type, listener) {
  516.       checkListener(listener);
  517.       this.on(type, _onceWrap(this, type, listener));
  518.       return this;
  519.     };
  520.    
  521.     EventEmitter.prototype.prependOnceListener =
  522.         function prependOnceListener(type, listener) {
  523.           checkListener(listener);
  524.           this.prependListener(type, _onceWrap(this, type, listener));
  525.           return this;
  526.         };
  527.    
  528.     // Emits a 'removeListener' event if and only if the listener was removed.
  529.     EventEmitter.prototype.removeListener =
  530.         function removeListener(type, listener) {
  531.           var list, events, position, i, originalListener;
  532.    
  533.           checkListener(listener);
  534.    
  535.           events = this._events;
  536.           if (events === undefined)
  537.             return this;
  538.    
  539.           list = events[type];
  540.           if (list === undefined)
  541.             return this;
  542.    
  543.           if (list === listener || list.listener === listener) {
  544.             if (--this._eventsCount === 0)
  545.               this._events = Object.create(null);
  546.             else {
  547.               delete events[type];
  548.               if (events.removeListener)
  549.                 this.emit('removeListener', type, list.listener || listener);
  550.             }
  551.           } else if (typeof list !== 'function') {
  552.             position = -1;
  553.    
  554.             for (i = list.length - 1; i >= 0; i--) {
  555.               if (list[i] === listener || list[i].listener === listener) {
  556.                 originalListener = list[i].listener;
  557.                 position = i;
  558.                 break;
  559.               }
  560.             }
  561.    
  562.             if (position < 0)
  563.               return this;
  564.    
  565.              if (positi 0)
  566.               list.shift();
  567.             else {
  568.               spliceOne(list, position);
  569.             }
  570.    
  571.             if (list.length === 1)
  572.               events[type] = list[0];
  573.    
  574.             if (events.removeListener !== undefined)
  575.               this.emit('removeListener', type, originalListener || listener);
  576.           }
  577.    
  578.           return this;
  579.         };
  580.    
  581.     EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
  582.    
  583.     EventEmitter.prototype.removeAllListeners =
  584.         function removeAllListeners(type) {
  585.           var listeners, events, i;
  586.    
  587.           events = this._events;
  588.           if (events === undefined)
  589.             return this;
  590.    
  591.           // not listening for removeListener, no need to emit
  592.           if (events.removeListener === undefined) {
  593.             if (arguments.length === 0) {
  594.               this._events = Object.create(null);
  595.               this._eventsCount = 0;
  596.             } else if (events[type] !== undefined) {
  597.               if (--this._eventsCount === 0)
  598.                 this._events = Object.create(null);
  599.               else
  600.                 delete events[type];
  601.             }
  602.             return this;
  603.           }
  604.    
  605.           // emit removeListener for all listeners on all events
  606.           if (arguments.length === 0) {
  607.             var keys = Object.keys(events);
  608.             var key;
  609.             for (i = 0; i < keys.length; ++i) {
  610.               key = keys[i];
  611.               if (key === 'removeListener') continue;
  612.               this.removeAllListeners(key);
  613.             }
  614.             this.removeAllListeners('removeListener');
  615.             this._events = Object.create(null);
  616.             this._eventsCount = 0;
  617.             return this;
  618.           }
  619.    
  620.           listeners = events[type];
  621.    
  622.           if (typeof listeners === 'function') {
  623.             this.removeListener(type, listeners);
  624.           } else if (listeners !== undefined) {
  625.             // LIFO order
  626.             for (i = listeners.length - 1; i >= 0; i--) {
  627.               this.removeListener(type, listeners[i]);
  628.             }
  629.           }
  630.    
  631.           return this;
  632.         };
  633.    
  634.     function _listeners(target, type, unwrap) {
  635.       var events = target._events;
  636.    
  637.       if (events === undefined)
  638.         return [];
  639.    
  640.       var evlistener = events[type];
  641.       if (evlistener === undefined)
  642.         return [];
  643.    
  644.       if (typeof evlistener === 'function')
  645.         return unwrap ? [evlistener.listener || evlistener] : [evlistener];
  646.    
  647.       return unwrap ?
  648.         unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
  649.     }
  650.    
  651.     EventEmitter.prototype.listeners = function listeners(type) {
  652.       return _listeners(this, type, true);
  653.     };
  654.    
  655.     EventEmitter.prototype.rawListeners = function rawListeners(type) {
  656.       return _listeners(this, type, false);
  657.     };
  658.    
  659.     EventEmitter.listenerCount = function(emitter, type) {
  660.       if (typeof emitter.listenerCount === 'function') {
  661.         return emitter.listenerCount(type);
  662.       } else {
  663.         return listenerCount.call(emitter, type);
  664.       }
  665.     };
  666.    
  667.     EventEmitter.prototype.listenerCount = listenerCount;
  668.     function listenerCount(type) {
  669.       var events = this._events;
  670.    
  671.       if (events !== undefined) {
  672.         var evlistener = events[type];
  673.    
  674.         if (typeof evlistener === 'function') {
  675.           return 1;
  676.         } else if (evlistener !== undefined) {
  677.           return evlistener.length;
  678.         }
  679.       }
  680.    
  681.       return 0;
  682.     }
  683.    
  684.     EventEmitter.prototype.eventNames = function eventNames() {
  685.       return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
  686.     };
  687.    
  688.     function arrayClone(arr, n) {
  689.       var copy = new Array(n);
  690.       for (var i = 0; i < n; ++i)
  691.         copy[i] = arr[i];
  692.       return copy;
  693.     }
  694.    
  695.     function spliceOne(list, index) {
  696.       for (; index + 1 < list.length; index++)
  697.         list[index] = list[index + 1];
  698.       list.pop();
  699.     }
  700.    
  701.     function unwrapListeners(arr) {
  702.       var ret = new Array(arr.length);
  703.       for (var i = 0; i < ret.length; ++i) {
  704.         ret[i] = arr[i].listener || arr[i];
  705.       }
  706.       return ret;
  707.     }
  708.    
  709.     function once(emitter, name) {
  710.       return new Promise(function (resolve, reject) {
  711.         function errorListener(err) {
  712.           emitter.removeListener(name, resolver);
  713.           reject(err);
  714.         }
  715.    
  716.         function resolver() {
  717.           if (typeof emitter.removeListener === 'function') {
  718.             emitter.removeListener('error', errorListener);
  719.           }
  720.           resolve([].slice.call(arguments));
  721.         };
  722.    
  723.         eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });
  724.         if (name !== 'error') {
  725.           addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });
  726.         }
  727.       });
  728.     }
  729.    
  730.     function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
  731.        if (typeof emitter. 'function') {
  732.         eventTargetAgnosticAddListener(emitter, 'error', handler, flags);
  733.       }
  734.     }
  735.    
  736.     function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
  737.        if (typeof emitter. 'function') {
  738.         if (flags.once) {
  739.           emitter.once(name, listener);
  740.         } else {
  741.           emitter.on(name, listener);
  742.         }
  743.       } else if (typeof emitter.addEventListener === 'function') {
  744.         // EventTarget does not have `error` event semantics like Node
  745.         // EventEmitters, we do not listen for `error` events here.
  746.         emitter.addEventListener(name, function wrapListener(arg) {
  747.           // IE does not have builtin `{ once: true }` support so we
  748.           // have to do it manually.
  749.           if (flags.once) {
  750.             emitter.removeEventListener(name, wrapListener);
  751.           }
  752.           listener(arg);
  753.         });
  754.       } else {
  755.         throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
  756.       }
  757.     }
  758.    
  759.     /***/ }),
  760.     /* 3 */
  761.     /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  762.    
  763.     "use strict";
  764.    
  765.    
  766.     const Parser = __webpack_require__(4);
  767.     const Serializer = __webpack_require__(26);
  768.    
  769.     // Shorthands
  770.     exports.parse = function parse(html, options) {
  771.         const parser = new Parser(options);
  772.    
  773.         return parser.parse(html);
  774.     };
  775.    
  776.     exports.parseFragment = function parseFragment(fragmentContext, html, options) {
  777.         if (typeof fragmentContext === 'string') {
  778.             options = html;
  779.             html = fragmentContext;
  780.             fragmentContext = null;
  781.         }
  782.    
  783.         const parser = new Parser(options);
  784.    
  785.         return parser.parseFragment(html, fragmentContext);
  786.     };
  787.    
  788.     exports.serialize = function(node, options) {
  789.         const serializer = new Serializer(node, options);
  790.    
  791.         return serializer.serialize();
  792.     };
  793.    
  794.    
  795.     /***/ }),
  796.     /* 4 */
  797.     /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  798.    
  799.     "use strict";
  800.    
  801.    
  802.     const Tokenizer = __webpack_require__(5);
  803.     const OpenElementStack = __webpack_require__(10);
  804.     const FormattingElementList = __webpack_require__(12);
  805.     const LocationInfoParserMixin = __webpack_require__(13);
  806.     const ErrorReportingParserMixin = __webpack_require__(18);
  807.     const Mixin = __webpack_require__(14);
  808.     const defaultTreeAdapter = __webpack_require__(22);
  809.     const mergeOptions = __webpack_require__(23);
  810.     const doctype = __webpack_require__(24);
  811.     const foreignContent = __webpack_require__(25);
  812.     const ERR = __webpack_require__(8);
  813.     const unicode = __webpack_require__(7);
  814.     const HTML = __webpack_require__(11);
  815.    
  816.     //Aliases
  817.     const $ = HTML.TAG_NAMES;
  818.     const NS = HTML.NAMESPACES;
  819.     const ATTRS = HTML.ATTRS;
  820.    
  821.     const DEFAULT_OPTIONS = {
  822.         scriptingEnabled: true,
  823.         sourceCodeLocationInfo: false,
  824.         onParseError: null,
  825.         treeAdapter: defaultTreeAdapter
  826.     };
  827.    
  828.     //Misc constants
  829.     const HIDDEN_INPUT_TYPE = 'hidden';
  830.    
  831.     //Adoption agency loops iteration count
  832.     const AA_OUTER_LOOP_ITER = 8;
  833.     const AA_INNER_LOOP_ITER = 3;
  834.    
  835.     //Insertion modes
  836.     const INITIAL_MODE = 'INITIAL_MODE';
  837.     const BEFORE_HTML_MODE = 'BEFORE_HTML_MODE';
  838.     const BEFORE_HEAD_MODE = 'BEFORE_HEAD_MODE';
  839.     const IN_HEAD_MODE = 'IN_HEAD_MODE';
  840.     const IN_HEAD_NO_SCRIPT_MODE = 'IN_HEAD_NO_SCRIPT_MODE';
  841.     const AFTER_HEAD_MODE = 'AFTER_HEAD_MODE';
  842.     const IN_BODY_MODE = 'IN_BODY_MODE';
  843.     const TEXT_MODE = 'TEXT_MODE';
  844.     const IN_TABLE_MODE = 'IN_TABLE_MODE';
  845.     const IN_TABLE_TEXT_MODE = 'IN_TABLE_TEXT_MODE';
  846.     const IN_CAPTION_MODE = 'IN_CAPTION_MODE';
  847.     const IN_COLUMN_GROUP_MODE = 'IN_COLUMN_GROUP_MODE';
  848.     const IN_TABLE_BODY_MODE = 'IN_TABLE_BODY_MODE';
  849.     const IN_ROW_MODE = 'IN_ROW_MODE';
  850.     const IN_CELL_MODE = 'IN_CELL_MODE';
  851.     const IN_SELECT_MODE = 'IN_SELECT_MODE';
  852.     const IN_SELECT_IN_TABLE_MODE = 'IN_SELECT_IN_TABLE_MODE';
  853.     const IN_TEMPLATE_MODE = 'IN_TEMPLATE_MODE';
  854.     const AFTER_BODY_MODE = 'AFTER_BODY_MODE';
  855.     const IN_FRAMESET_MODE = 'IN_FRAMESET_MODE';
  856.     const AFTER_FRAMESET_MODE = 'AFTER_FRAMESET_MODE';
  857.     const AFTER_AFTER_BODY_MODE = 'AFTER_AFTER_BODY_MODE';
  858.     const AFTER_AFTER_FRAMESET_MODE = 'AFTER_AFTER_FRAMESET_MODE';
  859.    
  860.     //Insertion mode reset map
  861.     const INSERTION_MODE_RESET_MAP = {
  862.         [$.TR]: IN_ROW_MODE,
  863.         [$.TBODY]: IN_TABLE_BODY_MODE,
  864.         [$.THEAD]: IN_TABLE_BODY_MODE,
  865.         [$.TFOOT]: IN_TABLE_BODY_MODE,
  866.         [$.CAPTION]: IN_CAPTION_MODE,
  867.         [$.COLGROUP]: IN_COLUMN_GROUP_MODE,
  868.         [$.TABLE]: IN_TABLE_MODE,
  869.         [$.BODY]: IN_BODY_MODE,
  870.         [$.FRAMESET]: IN_FRAMESET_MODE
  871.     };
  872.    
  873.     //Template insertion mode switch map
  874.     const TEMPLATE_INSERTION_MODE_SWITCH_MAP = {
  875.         [$.CAPTION]: IN_TABLE_MODE,
  876.         [$.COLGROUP]: IN_TABLE_MODE,
  877.         [$.TBODY]: IN_TABLE_MODE,
  878.         [$.TFOOT]: IN_TABLE_MODE,
  879.         [$.THEAD]: IN_TABLE_MODE,
  880.         [$.COL]: IN_COLUMN_GROUP_MODE,
  881.         [$.TR]: IN_TABLE_BODY_MODE,
  882.         [$.TD]: IN_ROW_MODE,
  883.         [$.TH]: IN_ROW_MODE
  884.     };
  885.    
  886.     //Token handlers map for insertion modes
  887.     const TOKEN_HANDLERS = {
  888.         [INITIAL_MODE]: {
  889.             [Tokenizer.CHARACTER_TOKEN]: tokenInInitialMode,
  890.             [Tokenizer.NULL_CHARACTER_TOKEN]: tokenInInitialMode,
  891.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: ignoreToken,
  892.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  893.             [Tokenizer.DOCTYPE_TOKEN]: doctypeInInitialMode,
  894.             [Tokenizer.START_TAG_TOKEN]: tokenInInitialMode,
  895.             [Tokenizer.END_TAG_TOKEN]: tokenInInitialMode,
  896.             [Tokenizer.EOF_TOKEN]: tokenInInitialMode
  897.         },
  898.         [BEFORE_HTML_MODE]: {
  899.             [Tokenizer.CHARACTER_TOKEN]: tokenBeforeHtml,
  900.             [Tokenizer.NULL_CHARACTER_TOKEN]: tokenBeforeHtml,
  901.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: ignoreToken,
  902.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  903.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  904.             [Tokenizer.START_TAG_TOKEN]: startTagBeforeHtml,
  905.             [Tokenizer.END_TAG_TOKEN]: endTagBeforeHtml,
  906.             [Tokenizer.EOF_TOKEN]: tokenBeforeHtml
  907.         },
  908.         [BEFORE_HEAD_MODE]: {
  909.             [Tokenizer.CHARACTER_TOKEN]: tokenBeforeHead,
  910.             [Tokenizer.NULL_CHARACTER_TOKEN]: tokenBeforeHead,
  911.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: ignoreToken,
  912.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  913.             [Tokenizer.DOCTYPE_TOKEN]: misplacedDoctype,
  914.             [Tokenizer.START_TAG_TOKEN]: startTagBeforeHead,
  915.             [Tokenizer.END_TAG_TOKEN]: endTagBeforeHead,
  916.             [Tokenizer.EOF_TOKEN]: tokenBeforeHead
  917.         },
  918.         [IN_HEAD_MODE]: {
  919.             [Tokenizer.CHARACTER_TOKEN]: tokenInHead,
  920.             [Tokenizer.NULL_CHARACTER_TOKEN]: tokenInHead,
  921.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
  922.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  923.             [Tokenizer.DOCTYPE_TOKEN]: misplacedDoctype,
  924.             [Tokenizer.START_TAG_TOKEN]: startTagInHead,
  925.             [Tokenizer.END_TAG_TOKEN]: endTagInHead,
  926.             [Tokenizer.EOF_TOKEN]: tokenInHead
  927.         },
  928.         [IN_HEAD_NO_SCRIPT_MODE]: {
  929.             [Tokenizer.CHARACTER_TOKEN]: tokenInHeadNoScript,
  930.             [Tokenizer.NULL_CHARACTER_TOKEN]: tokenInHeadNoScript,
  931.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
  932.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  933.             [Tokenizer.DOCTYPE_TOKEN]: misplacedDoctype,
  934.             [Tokenizer.START_TAG_TOKEN]: startTagInHeadNoScript,
  935.             [Tokenizer.END_TAG_TOKEN]: endTagInHeadNoScript,
  936.             [Tokenizer.EOF_TOKEN]: tokenInHeadNoScript
  937.         },
  938.         [AFTER_HEAD_MODE]: {
  939.             [Tokenizer.CHARACTER_TOKEN]: tokenAfterHead,
  940.             [Tokenizer.NULL_CHARACTER_TOKEN]: tokenAfterHead,
  941.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
  942.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  943.             [Tokenizer.DOCTYPE_TOKEN]: misplacedDoctype,
  944.             [Tokenizer.START_TAG_TOKEN]: startTagAfterHead,
  945.             [Tokenizer.END_TAG_TOKEN]: endTagAfterHead,
  946.             [Tokenizer.EOF_TOKEN]: tokenAfterHead
  947.         },
  948.         [IN_BODY_MODE]: {
  949.             [Tokenizer.CHARACTER_TOKEN]: characterInBody,
  950.             [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
  951.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
  952.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  953.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  954.             [Tokenizer.START_TAG_TOKEN]: startTagInBody,
  955.             [Tokenizer.END_TAG_TOKEN]: endTagInBody,
  956.             [Tokenizer.EOF_TOKEN]: eofInBody
  957.         },
  958.         [TEXT_MODE]: {
  959.             [Tokenizer.CHARACTER_TOKEN]: insertCharacters,
  960.             [Tokenizer.NULL_CHARACTER_TOKEN]: insertCharacters,
  961.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
  962.             [Tokenizer.COMMENT_TOKEN]: ignoreToken,
  963.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  964.             [Tokenizer.START_TAG_TOKEN]: ignoreToken,
  965.             [Tokenizer.END_TAG_TOKEN]: endTagInText,
  966.             [Tokenizer.EOF_TOKEN]: eofInText
  967.         },
  968.         [IN_TABLE_MODE]: {
  969.             [Tokenizer.CHARACTER_TOKEN]: characterInTable,
  970.             [Tokenizer.NULL_CHARACTER_TOKEN]: characterInTable,
  971.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: characterInTable,
  972.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  973.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  974.             [Tokenizer.START_TAG_TOKEN]: startTagInTable,
  975.             [Tokenizer.END_TAG_TOKEN]: endTagInTable,
  976.             [Tokenizer.EOF_TOKEN]: eofInBody
  977.         },
  978.         [IN_TABLE_TEXT_MODE]: {
  979.             [Tokenizer.CHARACTER_TOKEN]: characterInTableText,
  980.             [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
  981.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInTableText,
  982.             [Tokenizer.COMMENT_TOKEN]: tokenInTableText,
  983.             [Tokenizer.DOCTYPE_TOKEN]: tokenInTableText,
  984.             [Tokenizer.START_TAG_TOKEN]: tokenInTableText,
  985.             [Tokenizer.END_TAG_TOKEN]: tokenInTableText,
  986.             [Tokenizer.EOF_TOKEN]: tokenInTableText
  987.         },
  988.         [IN_CAPTION_MODE]: {
  989.             [Tokenizer.CHARACTER_TOKEN]: characterInBody,
  990.             [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
  991.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
  992.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  993.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  994.             [Tokenizer.START_TAG_TOKEN]: startTagInCaption,
  995.             [Tokenizer.END_TAG_TOKEN]: endTagInCaption,
  996.             [Tokenizer.EOF_TOKEN]: eofInBody
  997.         },
  998.         [IN_COLUMN_GROUP_MODE]: {
  999.             [Tokenizer.CHARACTER_TOKEN]: tokenInColumnGroup,
  1000.             [Tokenizer.NULL_CHARACTER_TOKEN]: tokenInColumnGroup,
  1001.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
  1002.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  1003.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  1004.             [Tokenizer.START_TAG_TOKEN]: startTagInColumnGroup,
  1005.             [Tokenizer.END_TAG_TOKEN]: endTagInColumnGroup,
  1006.             [Tokenizer.EOF_TOKEN]: eofInBody
  1007.         },
  1008.         [IN_TABLE_BODY_MODE]: {
  1009.             [Tokenizer.CHARACTER_TOKEN]: characterInTable,
  1010.             [Tokenizer.NULL_CHARACTER_TOKEN]: characterInTable,
  1011.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: characterInTable,
  1012.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  1013.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  1014.             [Tokenizer.START_TAG_TOKEN]: startTagInTableBody,
  1015.             [Tokenizer.END_TAG_TOKEN]: endTagInTableBody,
  1016.             [Tokenizer.EOF_TOKEN]: eofInBody
  1017.         },
  1018.         [IN_ROW_MODE]: {
  1019.             [Tokenizer.CHARACTER_TOKEN]: characterInTable,
  1020.             [Tokenizer.NULL_CHARACTER_TOKEN]: characterInTable,
  1021.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: characterInTable,
  1022.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  1023.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  1024.             [Tokenizer.START_TAG_TOKEN]: startTagInRow,
  1025.             [Tokenizer.END_TAG_TOKEN]: endTagInRow,
  1026.             [Tokenizer.EOF_TOKEN]: eofInBody
  1027.         },
  1028.         [IN_CELL_MODE]: {
  1029.             [Tokenizer.CHARACTER_TOKEN]: characterInBody,
  1030.             [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
  1031.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
  1032.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  1033.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  1034.             [Tokenizer.START_TAG_TOKEN]: startTagInCell,
  1035.             [Tokenizer.END_TAG_TOKEN]: endTagInCell,
  1036.             [Tokenizer.EOF_TOKEN]: eofInBody
  1037.         },
  1038.         [IN_SELECT_MODE]: {
  1039.             [Tokenizer.CHARACTER_TOKEN]: insertCharacters,
  1040.             [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
  1041.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
  1042.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  1043.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  1044.             [Tokenizer.START_TAG_TOKEN]: startTagInSelect,
  1045.             [Tokenizer.END_TAG_TOKEN]: endTagInSelect,
  1046.             [Tokenizer.EOF_TOKEN]: eofInBody
  1047.         },
  1048.         [IN_SELECT_IN_TABLE_MODE]: {
  1049.             [Tokenizer.CHARACTER_TOKEN]: insertCharacters,
  1050.             [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
  1051.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
  1052.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  1053.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  1054.             [Tokenizer.START_TAG_TOKEN]: startTagInSelectInTable,
  1055.             [Tokenizer.END_TAG_TOKEN]: endTagInSelectInTable,
  1056.             [Tokenizer.EOF_TOKEN]: eofInBody
  1057.         },
  1058.         [IN_TEMPLATE_MODE]: {
  1059.             [Tokenizer.CHARACTER_TOKEN]: characterInBody,
  1060.             [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
  1061.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
  1062.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  1063.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  1064.             [Tokenizer.START_TAG_TOKEN]: startTagInTemplate,
  1065.             [Tokenizer.END_TAG_TOKEN]: endTagInTemplate,
  1066.             [Tokenizer.EOF_TOKEN]: eofInTemplate
  1067.         },
  1068.         [AFTER_BODY_MODE]: {
  1069.             [Tokenizer.CHARACTER_TOKEN]: tokenAfterBody,
  1070.             [Tokenizer.NULL_CHARACTER_TOKEN]: tokenAfterBody,
  1071.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
  1072.             [Tokenizer.COMMENT_TOKEN]: appendCommentToRootHtmlElement,
  1073.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  1074.             [Tokenizer.START_TAG_TOKEN]: startTagAfterBody,
  1075.             [Tokenizer.END_TAG_TOKEN]: endTagAfterBody,
  1076.             [Tokenizer.EOF_TOKEN]: stopParsing
  1077.         },
  1078.         [IN_FRAMESET_MODE]: {
  1079.             [Tokenizer.CHARACTER_TOKEN]: ignoreToken,
  1080.             [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
  1081.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
  1082.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  1083.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  1084.             [Tokenizer.START_TAG_TOKEN]: startTagInFrameset,
  1085.             [Tokenizer.END_TAG_TOKEN]: endTagInFrameset,
  1086.             [Tokenizer.EOF_TOKEN]: stopParsing
  1087.         },
  1088.         [AFTER_FRAMESET_MODE]: {
  1089.             [Tokenizer.CHARACTER_TOKEN]: ignoreToken,
  1090.             [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
  1091.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: insertCharacters,
  1092.             [Tokenizer.COMMENT_TOKEN]: appendComment,
  1093.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  1094.             [Tokenizer.START_TAG_TOKEN]: startTagAfterFrameset,
  1095.             [Tokenizer.END_TAG_TOKEN]: endTagAfterFrameset,
  1096.             [Tokenizer.EOF_TOKEN]: stopParsing
  1097.         },
  1098.         [AFTER_AFTER_BODY_MODE]: {
  1099.             [Tokenizer.CHARACTER_TOKEN]: tokenAfterAfterBody,
  1100.             [Tokenizer.NULL_CHARACTER_TOKEN]: tokenAfterAfterBody,
  1101.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
  1102.             [Tokenizer.COMMENT_TOKEN]: appendCommentToDocument,
  1103.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  1104.             [Tokenizer.START_TAG_TOKEN]: startTagAfterAfterBody,
  1105.             [Tokenizer.END_TAG_TOKEN]: tokenAfterAfterBody,
  1106.             [Tokenizer.EOF_TOKEN]: stopParsing
  1107.         },
  1108.         [AFTER_AFTER_FRAMESET_MODE]: {
  1109.             [Tokenizer.CHARACTER_TOKEN]: ignoreToken,
  1110.             [Tokenizer.NULL_CHARACTER_TOKEN]: ignoreToken,
  1111.             [Tokenizer.WHITESPACE_CHARACTER_TOKEN]: whitespaceCharacterInBody,
  1112.             [Tokenizer.COMMENT_TOKEN]: appendCommentToDocument,
  1113.             [Tokenizer.DOCTYPE_TOKEN]: ignoreToken,
  1114.             [Tokenizer.START_TAG_TOKEN]: startTagAfterAfterFrameset,
  1115.             [Tokenizer.END_TAG_TOKEN]: ignoreToken,
  1116.             [Tokenizer.EOF_TOKEN]: stopParsing
  1117.         }
  1118.     };
  1119.    
  1120.     //Parser
  1121.     class Parser {
  1122.         constructor(options) {
  1123.             this.options = mergeOptions(DEFAULT_OPTIONS, options);
  1124.    
  1125.             this.treeAdapter = this.options.treeAdapter;
  1126.             this.pendingScript = null;
  1127.    
  1128.             if (this.options.sourceCodeLocationInfo) {
  1129.                 Mixin.install(this, LocationInfoParserMixin);
  1130.             }
  1131.    
  1132.             if (this.options.onParseError) {
  1133.                 Mixin.install(this, ErrorReportingParserMixin, { onParseError: this.options.onParseError });
  1134.             }
  1135.         }
  1136.    
  1137.         // API
  1138.         parse(html) {
  1139.             const document = this.treeAdapter.createDocument();
  1140.    
  1141.             this._bootstrap(document, null);
  1142.             this.tokenizer.write(html, true);
  1143.             this._runParsingLoop(null);
  1144.    
  1145.             return document;
  1146.         }
  1147.    
  1148.         parseFragment(html, fragmentContext) {
  1149.             //NOTE: use <template> element as a fragment context if context element was not provided,
  1150.             //so we will parse in "forgiving" manner
  1151.             if (!fragmentContext) {
  1152.                 fragmentContext = this.treeAdapter.createElement($.TEMPLATE, NS.HTML, []);
  1153.             }
  1154.    
  1155.             //NOTE: create fake element which will be used as 'document' for fragment parsing.
  1156.             //This is important for jsdom there 'document' can't be recreated, therefore
  1157.             //fragment parsing causes messing of the main `document`.
  1158.             const documentMock = this.treeAdapter.createElement('documentmock', NS.HTML, []);
  1159.    
  1160.             this._bootstrap(documentMock, fragmentContext);
  1161.    
  1162.             if (this.treeAdapter.getTagName(fragmentContext) === $.TEMPLATE) {
  1163.                 this._pushTmplInsertionMode(IN_TEMPLATE_MODE);
  1164.             }
  1165.    
  1166.             this._initTokenizerForFragmentParsing();
  1167.             this._insertFakeRootElement();
  1168.             this._resetInsertionMode();
  1169.             this._findFormInFragmentContext();
  1170.             this.tokenizer.write(html, true);
  1171.             this._runParsingLoop(null);
  1172.    
  1173.             const rootElement = this.treeAdapter.getFirstChild(documentMock);
  1174.             const fragment = this.treeAdapter.createDocumentFragment();
  1175.    
  1176.             this._adoptNodes(rootElement, fragment);
  1177.    
  1178.             return fragment;
  1179.         }
  1180.    
  1181.         //Bootstrap parser
  1182.         _bootstrap(document, fragmentContext) {
  1183.             this.tokenizer = new Tokenizer(this.options);
  1184.    
  1185.             this.stopped = false;
  1186.    
  1187.             this.insertionMode = INITIAL_MODE;
  1188.             this.originalInsertionMode = '';
  1189.    
  1190.             this.document = document;
  1191.             this.fragmentContext = fragmentContext;
  1192.    
  1193.             this.headElement = null;
  1194.             this.formElement = null;
  1195.    
  1196.             this.openElements = new OpenElementStack(this.document, this.treeAdapter);
  1197.             this.activeFormattingElements = new FormattingElementList(this.treeAdapter);
  1198.    
  1199.             this.tmplInsertionModeStack = [];
  1200.             this.tmplInsertionModeStackTop = -1;
  1201.             this.currentTmplInsertionMode = null;
  1202.    
  1203.             this.pendingCharacterTokens = [];
  1204.             this.hasNonWhitespacePendingCharacterToken = false;
  1205.    
  1206.             this.framesetOk = true;
  1207.             this.skipNextNewLine = false;
  1208.             this.fosterParentingEnabled = false;
  1209.         }
  1210.    
  1211.         //Errors
  1212.         _err() {
  1213.             // NOTE: err reporting is noop by default. Enabled by mixin.
  1214.         }
  1215.    
  1216.         //Parsing loop
  1217.         _runParsingLoop(scriptHandler) {
  1218.             while (!this.stopped) {
  1219.                 this._setupTokenizerCDATAMode();
  1220.    
  1221.                 const token = this.tokenizer.getNextToken();
  1222.    
  1223.                 if (token.type === Tokenizer.HIBERNATION_TOKEN) {
  1224.                     break;
  1225.                 }
  1226.    
  1227.                 if (this.skipNextNewLine) {
  1228.                     this.skipNextNewLine = false;
  1229.    
  1230.                     if (token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN && token.chars[0] === '\n') {
  1231.                         if (token.chars.length === 1) {
  1232.                             continue;
  1233.                         }
  1234.    
  1235.                         token.chars = token.chars.substr(1);
  1236.                     }
  1237.                 }
  1238.    
  1239.                 this._processInputToken(token);
  1240.    
  1241.                 if (scriptHandler && this.pendingScript) {
  1242.                     break;
  1243.                 }
  1244.             }
  1245.         }
  1246.    
  1247.         runParsingLoopForCurrentChunk(writeCallback, scriptHandler) {
  1248.             this._runParsingLoop(scriptHandler);
  1249.    
  1250.             if (scriptHandler && this.pendingScript) {
  1251.                 const script = this.pendingScript;
  1252.    
  1253.                 this.pendingScript = null;
  1254.    
  1255.                 scriptHandler(script);
  1256.    
  1257.                 return;
  1258.             }
  1259.    
  1260.             if (writeCallback) {
  1261.                 writeCallback();
  1262.             }
  1263.         }
  1264.    
  1265.         //Text parsing
  1266.         _setupTokenizerCDATAMode() {
  1267.             const current = this._getAdjustedCurrentElement();
  1268.    
  1269.             this.tokenizer.allowCDATA =
  1270.                 current &&
  1271.                 current !== this.document &&
  1272.                 this.treeAdapter.getNamespaceURI(current) !== NS.HTML &&
  1273.                 !this._isIntegrationPoint(current);
  1274.         }
  1275.    
  1276.         _switchToTextParsing(currentToken, nextTokenizerState) {
  1277.             this._insertElement(currentToken, NS.HTML);
  1278.             this.tokenizer.state = nextTokenizerState;
  1279.             this.originalInsertionMode = this.insertionMode;
  1280.             this.insertionMode = TEXT_MODE;
  1281.         }
  1282.    
  1283.         switchToPlaintextParsing() {
  1284.             this.insertionMode = TEXT_MODE;
  1285.             this.originalInsertionMode = IN_BODY_MODE;
  1286.             this.tokenizer.state = Tokenizer.MODE.PLAINTEXT;
  1287.         }
  1288.    
  1289.         //Fragment parsing
  1290.         _getAdjustedCurrentElement() {
  1291.             return this.openElements.stackTop === 0 && this.fragmentContext
  1292.                 ? this.fragmentContext
  1293.                 : this.openElements.current;
  1294.         }
  1295.    
  1296.         _findFormInFragmentContext() {
  1297.             let node = this.fragmentContext;
  1298.    
  1299.             do {
  1300.                 if (this.treeAdapter.getTagName(node) === $.FORM) {
  1301.                     this.formElement = node;
  1302.                     break;
  1303.                 }
  1304.    
  1305.                 node = this.treeAdapter.getParentNode(node);
  1306.             } while (node);
  1307.         }
  1308.    
  1309.         _initTokenizerForFragmentParsing() {
  1310.             if (this.treeAdapter.getNamespaceURI(this.fragmentContext) === NS.HTML) {
  1311.                 const tn = this.treeAdapter.getTagName(this.fragmentContext);
  1312.    
  1313.                 if (tn === $.TITLE || tn === $.TEXTAREA) {
  1314.                     this.tokenizer.state = Tokenizer.MODE.RCDATA;
  1315.                 } else if (
  1316.                     tn === $.STYLE ||
  1317.                     tn === $.XMP ||
  1318.                     tn === $.IFRAME ||
  1319.                     tn === $.NOEMBED ||
  1320.                     tn === $.NOFRAMES ||
  1321.                     tn === $.NOSCRIPT
  1322.                 ) {
  1323.                     this.tokenizer.state = Tokenizer.MODE.RAWTEXT;
  1324.                 } else if (tn === $.SCRIPT) {
  1325.                     this.tokenizer.state = Tokenizer.MODE.SCRIPT_DATA;
  1326.                 } else if (tn === $.PLAINTEXT) {
  1327.                     this.tokenizer.state = Tokenizer.MODE.PLAINTEXT;
  1328.                 }
  1329.             }
  1330.         }
  1331.    
  1332.         //Tree mutation
  1333.         _setDocumentType(token) {
  1334.             const name = token.name || '';
  1335.             const publicId = token.publicId || '';
  1336.             const systemId = token.systemId || '';
  1337.    
  1338.             this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);
  1339.         }
  1340.    
  1341.         _attachElementToTree(element) {
  1342.             if (this._shouldFosterParentOnInsertion()) {
  1343.                 this._fosterParentElement(element);
  1344.             } else {
  1345.                 const parent = this.openElements.currentTmplContent || this.openElements.current;
  1346.    
  1347.                 this.treeAdapter.appendChild(parent, element);
  1348.             }
  1349.         }
  1350.    
  1351.         _appendElement(token, namespaceURI) {
  1352.             const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);
  1353.    
  1354.             this._attachElementToTree(element);
  1355.         }
  1356.    
  1357.         _insertElement(token, namespaceURI) {
  1358.             const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);
  1359.    
  1360.             this._attachElementToTree(element);
  1361.             this.openElements.push(element);
  1362.         }
  1363.    
  1364.         _insertFakeElement(tagName) {
  1365.             const element = this.treeAdapter.createElement(tagName, NS.HTML, []);
  1366.    
  1367.             this._attachElementToTree(element);
  1368.             this.openElements.push(element);
  1369.         }
  1370.    
  1371.         _insertTemplate(token) {
  1372.             const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);
  1373.             const content = this.treeAdapter.createDocumentFragment();
  1374.    
  1375.             this.treeAdapter.setTemplateContent(tmpl, content);
  1376.             this._attachElementToTree(tmpl);
  1377.             this.openElements.push(tmpl);
  1378.         }
  1379.    
  1380.         _insertFakeRootElement() {
  1381.             const element = this.treeAdapter.createElement($.HTML, NS.HTML, []);
  1382.    
  1383.             this.treeAdapter.appendChild(this.openElements.current, element);
  1384.             this.openElements.push(element);
  1385.         }
  1386.    
  1387.         _appendCommentNode(token, parent) {
  1388.             const commentNode = this.treeAdapter.createCommentNode(token.data);
  1389.    
  1390.             this.treeAdapter.appendChild(parent, commentNode);
  1391.         }
  1392.    
  1393.         _insertCharacters(token) {
  1394.             if (this._shouldFosterParentOnInsertion()) {
  1395.                 this._fosterParentText(token.chars);
  1396.             } else {
  1397.                 const parent = this.openElements.currentTmplContent || this.openElements.current;
  1398.    
  1399.                 this.treeAdapter.insertText(parent, token.chars);
  1400.             }
  1401.         }
  1402.    
  1403.         _adoptNodes(donor, recipient) {
  1404.             for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {
  1405.                 this.treeAdapter.detachNode(child);
  1406.                 this.treeAdapter.appendChild(recipient, child);
  1407.             }
  1408.         }
  1409.    
  1410.         //Token processing
  1411.         _shouldProcessTokenInForeignContent(token) {
  1412.             const current = this._getAdjustedCurrentElement();
  1413.    
  1414.             if (!current || current === this.document) {
  1415.                 return false;
  1416.             }
  1417.    
  1418.             const ns = this.treeAdapter.getNamespaceURI(current);
  1419.    
  1420.             if (ns === NS.HTML) {
  1421.                 return false;
  1422.             }
  1423.    
  1424.             if (
  1425.                 this.treeAdapter.getTagName(current) === $.ANNOTATION_XML &&
  1426.                 ns === NS.MATHML &&
  1427.                 token.type === Tokenizer.START_TAG_TOKEN &&
  1428.                 token.tagName === $.SVG
  1429.             ) {
  1430.                 return false;
  1431.             }
  1432.    
  1433.             const isCharacterToken =
  1434.                 token.type === Tokenizer.CHARACTER_TOKEN ||
  1435.                 token.type === Tokenizer.NULL_CHARACTER_TOKEN ||
  1436.                 token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN;
  1437.    
  1438.             const isMathMLTextStartTag =
  1439.                 token.type === Tokenizer.START_TAG_TOKEN && token.tagName !== $.MGLYPH && token.tagName !== $.MALIGNMARK;
  1440.    
  1441.             if ((isMathMLTextStartTag || isCharacterToken) && this._isIntegrationPoint(current, NS.MATHML)) {
  1442.                 return false;
  1443.             }
  1444.    
  1445.             if (
  1446.                 (token.type === Tokenizer.START_TAG_TOKEN || isCharacterToken) &&
  1447.                 this._isIntegrationPoint(current, NS.HTML)
  1448.             ) {
  1449.                 return false;
  1450.             }
  1451.    
  1452.             return token.type !== Tokenizer.EOF_TOKEN;
  1453.         }
  1454.    
  1455.         _processToken(token) {
  1456.             TOKEN_HANDLERS[this.insertionMode][token.type](this, token);
  1457.         }
  1458.    
  1459.         _processTokenInBodyMode(token) {
  1460.             TOKEN_HANDLERS[IN_BODY_MODE][token.type](this, token);
  1461.         }
  1462.    
  1463.         _processTokenInForeignContent(token) {
  1464.             if (token.type === Tokenizer.CHARACTER_TOKEN) {
  1465.                 characterInForeignContent(this, token);
  1466.             } else if (token.type === Tokenizer.NULL_CHARACTER_TOKEN) {
  1467.                 nullCharacterInForeignContent(this, token);
  1468.             } else if (token.type === Tokenizer.WHITESPACE_CHARACTER_TOKEN) {
  1469.                 insertCharacters(this, token);
  1470.             } else if (token.type === Tokenizer.COMMENT_TOKEN) {
  1471.                 appendComment(this, token);
  1472.             } else if (token.type === Tokenizer.START_TAG_TOKEN) {
  1473.                 startTagInForeignContent(this, token);
  1474.             } else if (token.type === Tokenizer.END_TAG_TOKEN) {
  1475.                 endTagInForeignContent(this, token);
  1476.             }
  1477.         }
  1478.    
  1479.         _processInputToken(token) {
  1480.             if (this._shouldProcessTokenInForeignContent(token)) {
  1481.                 this._processTokenInForeignContent(token);
  1482.             } else {
  1483.                 this._processToken(token);
  1484.             }
  1485.    
  1486.             if (token.type === Tokenizer.START_TAG_TOKEN && token.selfClosing && !token.ackSelfClosing) {
  1487.                 this._err(ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);
  1488.             }
  1489.         }
  1490.    
  1491.         //Integration points
  1492.         _isIntegrationPoint(element, foreignNS) {
  1493.             const tn = this.treeAdapter.getTagName(element);
  1494.             const ns = this.treeAdapter.getNamespaceURI(element);
  1495.             const attrs = this.treeAdapter.getAttrList(element);
  1496.    
  1497.             return foreignContent.isIntegrationPoint(tn, ns, attrs, foreignNS);
  1498.         }
  1499.    
  1500.         //Active formatting elements reconstruction
  1501.         _reconstructActiveFormattingElements() {
  1502.             const listLength = this.activeFormattingElements.length;
  1503.    
  1504.             if (listLength) {
  1505.                 let unopenIdx = listLength;
  1506.                 let entry = null;
  1507.    
  1508.                 do {
  1509.                     unopenIdx--;
  1510.                     entry = this.activeFormattingElements.entries[unopenIdx];
  1511.    
  1512.                     if (entry.type === FormattingElementList.MARKER_ENTRY || this.openElements.contains(entry.element)) {
  1513.                         unopenIdx++;
  1514.                         break;
  1515.                     }
  1516.                 } while (unopenIdx > 0);
  1517.    
  1518.                 for (let i = unopenIdx; i < listLength; i++) {
  1519.                     entry = this.activeFormattingElements.entries[i];
  1520.                     this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));
  1521.                     entry.element = this.openElements.current;
  1522.                 }
  1523.             }
  1524.         }
  1525.    
  1526.         //Close elements
  1527.         _closeTableCell() {
  1528.             this.openElements.generateImpliedEndTags();
  1529.             this.openElements.popUntilTableCellPopped();
  1530.             this.activeFormattingElements.clearToLastMarker();
  1531.              this.inserti
  1532.         }
  1533.    
  1534.         _closePElement() {
  1535.             this.openElements.generateImpliedEndTagsWithExclusion($.P);
  1536.             this.openElements.popUntilTagNamePopped($.P);
  1537.         }
  1538.    
  1539.         //Insertion modes
  1540.         _resetInsertionMode() {
  1541.             for (let i = this.openElements.stackTop, last = false; i >= 0; i--) {
  1542.                 let element = this.openElements.items[i];
  1543.    
  1544.                 if (i === 0) {
  1545.                     last = true;
  1546.    
  1547.                     if (this.fragmentContext) {
  1548.                         element = this.fragmentContext;
  1549.                     }
  1550.                 }
  1551.    
  1552.                 const tn = this.treeAdapter.getTagName(element);
  1553.                 const newInsertionMode = INSERTION_MODE_RESET_MAP[tn];
  1554.    
  1555.                 if (newInsertionMode) {
  1556.                     this.insertionMode = newInsertionMode;
  1557.                     break;
  1558.                 } else if (!last && (tn === $.TD || tn === $.TH)) {
  1559.                     this.insertionMode = IN_CELL_MODE;
  1560.                     break;
  1561.                 } else if (!last && tn === $.HEAD) {
  1562.                     this.insertionMode = IN_HEAD_MODE;
  1563.                     break;
  1564.                 } else if (tn === $.SELECT) {
  1565.                     this._resetInsertionModeForSelect(i);
  1566.                     break;
  1567.                 } else if (tn === $.TEMPLATE) {
  1568.                     this.insertionMode = this.currentTmplInsertionMode;
  1569.                     break;
  1570.                 } else if (tn === $.HTML) {
  1571.                     this.insertionMode = this.headElement ? AFTER_HEAD_MODE : BEFORE_HEAD_MODE;
  1572.                     break;
  1573.                 } else if (last) {
  1574.                     this.insertionMode = IN_BODY_MODE;
  1575.                     break;
  1576.                 }
  1577.             }
  1578.         }
  1579.    
  1580.         _resetInsertionModeForSelect(selectIdx) {
  1581.             if (selectIdx > 0) {
  1582.                 for (let i = selectIdx - 1; i > 0; i--) {
  1583.                     const ancestor = this.openElements.items[i];
  1584.                     const tn = this.treeAdapter.getTagName(ancestor);
  1585.    
  1586.                     if (tn === $.TEMPLATE) {
  1587.                         break;
  1588.                     } else if (tn === $.TABLE) {
  1589.                         this.insertionMode = IN_SELECT_IN_TABLE_MODE;
  1590.                         return;
  1591.                     }
  1592.                 }
  1593.             }
  1594.    
  1595.             this.insertionMode = IN_SELECT_MODE;
  1596.         }
  1597.    
  1598.         _pushTmplInsertionMode(mode) {
  1599.             this.tmplInsertionModeStack.push(mode);
  1600.             this.tmplInsertionModeStackTop++;
  1601.             this.currentTmplInsertionMode = mode;
  1602.         }
  1603.    
  1604.         _popTmplInsertionMode() {
  1605.             this.tmplInsertionModeStack.pop();
  1606.             this.tmplInsertionModeStackTop--;
  1607.             this.currentTmplInsertionMode = this.tmplInsertionModeStack[this.tmplInsertionModeStackTop];
  1608.         }
  1609.    
  1610.         //Foster parenting
  1611.         _isElementCausesFosterParenting(element) {
  1612.             const tn = this.treeAdapter.getTagName(element);
  1613.    
  1614.             return tn === $.TABLE || tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD || tn === $.TR;
  1615.         }
  1616.    
  1617.         _shouldFosterParentOnInsertion() {
  1618.             return this.fosterParentingEnabled && this._isElementCausesFosterParenting(this.openElements.current);
  1619.         }
  1620.    
  1621.         _findFosterParentingLocation() {
  1622.             const location = {
  1623.                 parent: null,
  1624.                 beforeElement: null
  1625.             };
  1626.    
  1627.             for (let i = this.openElements.stackTop; i >= 0; i--) {
  1628.                 const openElement = this.openElements.items[i];
  1629.                 const tn = this.treeAdapter.getTagName(openElement);
  1630.                 const ns = this.treeAdapter.getNamespaceURI(openElement);
  1631.    
  1632.                 if (tn === $.TEMPLATE && ns === NS.HTML) {
  1633.                     location.parent = this.treeAdapter.getTemplateContent(openElement);
  1634.                     break;
  1635.                 } else if (tn === $.TABLE) {
  1636.                     location.parent = this.treeAdapter.getParentNode(openElement);
  1637.    
  1638.                     if (location.parent) {
  1639.                         location.beforeElement = openElement;
  1640.                     } else {
  1641.                         location.parent = this.openElements.items[i - 1];
  1642.                     }
  1643.    
  1644.                     break;
  1645.                 }
  1646.             }
  1647.    
  1648.             if (!location.parent) {
  1649.                 location.parent = this.openElements.items[0];
  1650.             }
  1651.    
  1652.             return location;
  1653.         }
  1654.    
  1655.         _fosterParentElement(element) {
  1656.             const location = this._findFosterParentingLocation();
  1657.    
  1658.             if (location.beforeElement) {
  1659.                 this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);
  1660.             } else {
  1661.                 this.treeAdapter.appendChild(location.parent, element);
  1662.             }
  1663.         }
  1664.    
  1665.         _fosterParentText(chars) {
  1666.             const location = this._findFosterParentingLocation();
  1667.    
  1668.             if (location.beforeElement) {
  1669.                 this.treeAdapter.insertTextBefore(location.parent, chars, location.beforeElement);
  1670.             } else {
  1671.                 this.treeAdapter.insertText(location.parent, chars);
  1672.             }
  1673.         }
  1674.    
  1675.         //Special elements
  1676.         _isSpecialElement(element) {
  1677.             const tn = this.treeAdapter.getTagName(element);
  1678.             const ns = this.treeAdapter.getNamespaceURI(element);
  1679.    
  1680.             return HTML.SPECIAL_ELEMENTS[ns][tn];
  1681.         }
  1682.     }
  1683.    
  1684.     module.exports = Parser;
  1685.    
  1686.     //Adoption agency algorithm
  1687.     //(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoptionAgency)
  1688.     //------------------------------------------------------------------
  1689.    
  1690.     //Steps 5-8 of the algorithm
  1691.     function aaObtainFormattingElementEntry(p, token) {
  1692.         let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);
  1693.    
  1694.         if (formattingElementEntry) {
  1695.             if (!p.openElements.contains(formattingElementEntry.element)) {
  1696.                 p.activeFormattingElements.removeEntry(formattingElementEntry);
  1697.                 formattingElementEntry = null;
  1698.             } else if (!p.openElements.hasInScope(token.tagName)) {
  1699.                 formattingElementEntry = null;
  1700.             }
  1701.         } else {
  1702.             genericEndTagInBody(p, token);
  1703.         }
  1704.    
  1705.         return formattingElementEntry;
  1706.     }
  1707.    
  1708.     //Steps 9 and 10 of the algorithm
  1709.     function aaObtainFurthestBlock(p, formattingElementEntry) {
  1710.         let furthestBlock = null;
  1711.    
  1712.         for (let i = p.openElements.stackTop; i >= 0; i--) {
  1713.             const element = p.openElements.items[i];
  1714.    
  1715.             if (element === formattingElementEntry.element) {
  1716.                 break;
  1717.             }
  1718.    
  1719.             if (p._isSpecialElement(element)) {
  1720.                 furthestBlock = element;
  1721.             }
  1722.         }
  1723.    
  1724.         if (!furthestBlock) {
  1725.             p.openElements.popUntilElementPopped(formattingElementEntry.element);
  1726.             p.activeFormattingElements.removeEntry(formattingElementEntry);
  1727.         }
  1728.    
  1729.         return furthestBlock;
  1730.     }
  1731.    
  1732.     //Step 13 of the algorithm
  1733.     function aaInnerLoop(p, furthestBlock, formattingElement) {
  1734.         let lastElement = furthestBlock;
  1735.         let nextElement = p.openElements.getCommonAncestor(furthestBlock);
  1736.    
  1737.         for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {
  1738.             //NOTE: store next element for the next loop iteration (it may be deleted from the stack by step 9.5)
  1739.             nextElement = p.openElements.getCommonAncestor(element);
  1740.    
  1741.             const elementEntry = p.activeFormattingElements.getElementEntry(element);
  1742.             const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;
  1743.             const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;
  1744.    
  1745.             if (shouldRemoveFromOpenElements) {
  1746.                 if (counterOverflow) {
  1747.                     p.activeFormattingElements.removeEntry(elementEntry);
  1748.                 }
  1749.    
  1750.                 p.openElements.remove(element);
  1751.             } else {
  1752.                 element = aaRecreateElementFromEntry(p, elementEntry);
  1753.    
  1754.                 if (lastElement === furthestBlock) {
  1755.                     p.activeFormattingElements.bookmark = elementEntry;
  1756.                 }
  1757.    
  1758.                 p.treeAdapter.detachNode(lastElement);
  1759.                 p.treeAdapter.appendChild(element, lastElement);
  1760.                 lastElement = element;
  1761.             }
  1762.         }
  1763.    
  1764.         return lastElement;
  1765.     }
  1766.    
  1767.     //Step 13.7 of the algorithm
  1768.     function aaRecreateElementFromEntry(p, elementEntry) {
  1769.         const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);
  1770.         const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);
  1771.    
  1772.         p.openElements.replace(elementEntry.element, newElement);
  1773.         elementEntry.element = newElement;
  1774.    
  1775.         return newElement;
  1776.     }
  1777.    
  1778.     //Step 14 of the algorithm
  1779.     function aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {
  1780.         if (p._isElementCausesFosterParenting(commonAncestor)) {
  1781.             p._fosterParentElement(lastElement);
  1782.         } else {
  1783.             const tn = p.treeAdapter.getTagName(commonAncestor);
  1784.             const ns = p.treeAdapter.getNamespaceURI(commonAncestor);
  1785.    
  1786.             if (tn === $.TEMPLATE && ns === NS.HTML) {
  1787.                 commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);
  1788.             }
  1789.    
  1790.             p.treeAdapter.appendChild(commonAncestor, lastElement);
  1791.         }
  1792.     }
  1793.    
  1794.     //Steps 15-19 of the algorithm
  1795.     function aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {
  1796.         const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);
  1797.         const token = formattingElementEntry.token;
  1798.         const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);
  1799.    
  1800.         p._adoptNodes(furthestBlock, newElement);
  1801.         p.treeAdapter.appendChild(furthestBlock, newElement);
  1802.    
  1803.         p.activeFormattingElements.insertElementAfterBookmark(newElement, formattingElementEntry.token);
  1804.         p.activeFormattingElements.removeEntry(formattingElementEntry);
  1805.    
  1806.         p.openElements.remove(formattingElementEntry.element);
  1807.         p.openElements.insertAfter(furthestBlock, newElement);
  1808.     }
  1809.    
  1810.     //Algorithm entry point
  1811.     function callAdoptionAgency(p, token) {
  1812.         let formattingElementEntry;
  1813.    
  1814.         for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {
  1815.             formattingElementEntry = aaObtainFormattingElementEntry(p, token, formattingElementEntry);
  1816.    
  1817.             if (!formattingElementEntry) {
  1818.                 break;
  1819.             }
  1820.    
  1821.             const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);
  1822.    
  1823.             if (!furthestBlock) {
  1824.                 break;
  1825.             }
  1826.    
  1827.             p.activeFormattingElements.bookmark = formattingElementEntry;
  1828.    
  1829.             const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);
  1830.              const comm
  1831.    
  1832.             p.treeAdapter.detachNode(lastElement);
  1833.             aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);
  1834.             aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);
  1835.         }
  1836.     }
  1837.    
  1838.     //Generic token handlers
  1839.     //------------------------------------------------------------------
  1840.     function ignoreToken() {
  1841.         //NOTE: do nothing =)
  1842.     }
  1843.    
  1844.     function misplacedDoctype(p) {
  1845.         p._err(ERR.misplacedDoctype);
  1846.     }
  1847.    
  1848.     function appendComment(p, token) {
  1849.         p._appendCommentNode(token, p.openElements.currentTmplContent || p.openElements.current);
  1850.     }
  1851.    
  1852.     function appendCommentToRootHtmlElement(p, token) {
  1853.         p._appendCommentNode(token, p.openElements.items[0]);
  1854.     }
  1855.    
  1856.     function appendCommentToDocument(p, token) {
  1857.         p._appendCommentNode(token, p.document);
  1858.     }
  1859.    
  1860.     function insertCharacters(p, token) {
  1861.         p._insertCharacters(token);
  1862.     }
  1863.    
  1864.     function stopParsing(p) {
  1865.         p.stopped = true;
  1866.     }
  1867.    
  1868.     // The "initial" insertion mode
  1869.     //------------------------------------------------------------------
  1870.     function doctypeInInitialMode(p, token) {
  1871.         p._setDocumentType(token);
  1872.    
  1873.         const mode = token.forceQuirks ? HTML.DOCUMENT_MODE.QUIRKS : doctype.getDocumentMode(token);
  1874.    
  1875.         if (!doctype.isConforming(token)) {
  1876.             p._err(ERR.nonConformingDoctype);
  1877.         }
  1878.    
  1879.         p.treeAdapter.setDocumentMode(p.document, mode);
  1880.    
  1881.          p.inserti
  1882.     }
  1883.    
  1884.     function tokenInInitialMode(p, token) {
  1885.         p._err(ERR.missingDoctype, { beforeToken: true });
  1886.         p.treeAdapter.setDocumentMode(p.document, HTML.DOCUMENT_MODE.QUIRKS);
  1887.          p.inserti
  1888.         p._processToken(token);
  1889.     }
  1890.    
  1891.     // The "before html" insertion mode
  1892.     //------------------------------------------------------------------
  1893.     function startTagBeforeHtml(p, token) {
  1894.         if (token.tagName === $.HTML) {
  1895.             p._insertElement(token, NS.HTML);
  1896.              p.inserti
  1897.         } else {
  1898.             tokenBeforeHtml(p, token);
  1899.         }
  1900.     }
  1901.    
  1902.     function endTagBeforeHtml(p, token) {
  1903.         const tn = token.tagName;
  1904.    
  1905.         if (tn === $.HTML || tn === $.HEAD || tn === $.BODY || tn === $.BR) {
  1906.             tokenBeforeHtml(p, token);
  1907.         }
  1908.     }
  1909.    
  1910.     function tokenBeforeHtml(p, token) {
  1911.         p._insertFakeRootElement();
  1912.          p.inserti
  1913.         p._processToken(token);
  1914.     }
  1915.    
  1916.     // The "before head" insertion mode
  1917.     //------------------------------------------------------------------
  1918.     function startTagBeforeHead(p, token) {
  1919.         const tn = token.tagName;
  1920.    
  1921.         if (tn === $.HTML) {
  1922.             startTagInBody(p, token);
  1923.         } else if (tn === $.HEAD) {
  1924.             p._insertElement(token, NS.HTML);
  1925.             p.headElement = p.openElements.current;
  1926.              p.inserti
  1927.         } else {
  1928.             tokenBeforeHead(p, token);
  1929.         }
  1930.     }
  1931.    
  1932.     function endTagBeforeHead(p, token) {
  1933.         const tn = token.tagName;
  1934.    
  1935.         if (tn === $.HEAD || tn === $.BODY || tn === $.HTML || tn === $.BR) {
  1936.             tokenBeforeHead(p, token);
  1937.         } else {
  1938.             p._err(ERR.endTagWithoutMatchingOpenElement);
  1939.         }
  1940.     }
  1941.    
  1942.     function tokenBeforeHead(p, token) {
  1943.         p._insertFakeElement($.HEAD);
  1944.         p.headElement = p.openElements.current;
  1945.          p.inserti
  1946.         p._processToken(token);
  1947.     }
  1948.    
  1949.     // The "in head" insertion mode
  1950.     //------------------------------------------------------------------
  1951.     function startTagInHead(p, token) {
  1952.         const tn = token.tagName;
  1953.    
  1954.         if (tn === $.HTML) {
  1955.             startTagInBody(p, token);
  1956.         } else if (tn === $.BASE || tn === $.BASEFONT || tn === $.BGSOUND || tn === $.LINK || tn === $.META) {
  1957.             p._appendElement(token, NS.HTML);
  1958.             token.ackSelfClosing = true;
  1959.         } else if (tn === $.TITLE) {
  1960.             p._switchToTextParsing(token, Tokenizer.MODE.RCDATA);
  1961.         } else if (tn === $.NOSCRIPT) {
  1962.             if (p.options.scriptingEnabled) {
  1963.                 p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);
  1964.             } else {
  1965.                 p._insertElement(token, NS.HTML);
  1966.                  p.inserti
  1967.             }
  1968.         } else if (tn === $.NOFRAMES || tn === $.STYLE) {
  1969.             p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);
  1970.         } else if (tn === $.SCRIPT) {
  1971.             p._switchToTextParsing(token, Tokenizer.MODE.SCRIPT_DATA);
  1972.         } else if (tn === $.TEMPLATE) {
  1973.             p._insertTemplate(token, NS.HTML);
  1974.             p.activeFormattingElements.insertMarker();
  1975.             p.framesetOk = false;
  1976.              p.inserti
  1977.             p._pushTmplInsertionMode(IN_TEMPLATE_MODE);
  1978.         } else if (tn === $.HEAD) {
  1979.             p._err(ERR.misplacedStartTagForHeadElement);
  1980.         } else {
  1981.             tokenInHead(p, token);
  1982.         }
  1983.     }
  1984.    
  1985.     function endTagInHead(p, token) {
  1986.         const tn = token.tagName;
  1987.    
  1988.         if (tn === $.HEAD) {
  1989.             p.openElements.pop();
  1990.              p.inserti
  1991.         } else if (tn === $.BODY || tn === $.BR || tn === $.HTML) {
  1992.             tokenInHead(p, token);
  1993.         } else if (tn === $.TEMPLATE) {
  1994.             if (p.openElements.tmplCount > 0) {
  1995.                 p.openElements.generateImpliedEndTagsThoroughly();
  1996.    
  1997.                 if (p.openElements.currentTagName !== $.TEMPLATE) {
  1998.                     p._err(ERR.closingOfElementWithOpenChildElements);
  1999.                 }
  2000.    
  2001.                 p.openElements.popUntilTagNamePopped($.TEMPLATE);
  2002.                 p.activeFormattingElements.clearToLastMarker();
  2003.                 p._popTmplInsertionMode();
  2004.                 p._resetInsertionMode();
  2005.             } else {
  2006.                 p._err(ERR.endTagWithoutMatchingOpenElement);
  2007.             }
  2008.         } else {
  2009.             p._err(ERR.endTagWithoutMatchingOpenElement);
  2010.         }
  2011.     }
  2012.    
  2013.     function tokenInHead(p, token) {
  2014.         p.openElements.pop();
  2015.         p.insertionMode = AFTER_HEAD_MODE;
  2016.         p._processToken(token);
  2017.     }
  2018.    
  2019.     // The "in head no script" insertion mode
  2020.     //------------------------------------------------------------------
  2021.     function startTagInHeadNoScript(p, token) {
  2022.         const tn = token.tagName;
  2023.    
  2024.         if (tn === $.HTML) {
  2025.             startTagInBody(p, token);
  2026.         } else if (
  2027.             tn === $.BASEFONT ||
  2028.             tn === $.BGSOUND ||
  2029.             tn === $.HEAD ||
  2030.             tn === $.LINK ||
  2031.             tn === $.META ||
  2032.             tn === $.NOFRAMES ||
  2033.             tn === $.STYLE
  2034.         ) {
  2035.             startTagInHead(p, token);
  2036.         } else if (tn === $.NOSCRIPT) {
  2037.             p._err(ERR.nestedNoscriptInHead);
  2038.         } else {
  2039.             tokenInHeadNoScript(p, token);
  2040.         }
  2041.     }
  2042.    
  2043.     function endTagInHeadNoScript(p, token) {
  2044.         const tn = token.tagName;
  2045.    
  2046.         if (tn === $.NOSCRIPT) {
  2047.             p.openElements.pop();
  2048.             p.insertionMode = IN_HEAD_MODE;
  2049.         } else if (tn === $.BR) {
  2050.             tokenInHeadNoScript(p, token);
  2051.         } else {
  2052.             p._err(ERR.endTagWithoutMatchingOpenElement);
  2053.         }
  2054.     }
  2055.    
  2056.     function tokenInHeadNoScript(p, token) {
  2057.         const errCode =
  2058.             token.type === Tokenizer.EOF_TOKEN ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;
  2059.    
  2060.         p._err(errCode);
  2061.         p.openElements.pop();
  2062.         p.insertionMode = IN_HEAD_MODE;
  2063.         p._processToken(token);
  2064.     }
  2065.    
  2066.     // The "after head" insertion mode
  2067.     //------------------------------------------------------------------
  2068.     function startTagAfterHead(p, token) {
  2069.         const tn = token.tagName;
  2070.    
  2071.         if (tn === $.HTML) {
  2072.             startTagInBody(p, token);
  2073.         } else if (tn === $.BODY) {
  2074.             p._insertElement(token, NS.HTML);
  2075.             p.framesetOk = false;
  2076.             p.insertionMode = IN_BODY_MODE;
  2077.         } else if (tn === $.FRAMESET) {
  2078.             p._insertElement(token, NS.HTML);
  2079.             p.insertionMode = IN_FRAMESET_MODE;
  2080.         } else if (
  2081.             tn === $.BASE ||
  2082.             tn === $.BASEFONT ||
  2083.             tn === $.BGSOUND ||
  2084.             tn === $.LINK ||
  2085.             tn === $.META ||
  2086.             tn === $.NOFRAMES ||
  2087.             tn === $.SCRIPT ||
  2088.             tn === $.STYLE ||
  2089.             tn === $.TEMPLATE ||
  2090.             tn === $.TITLE
  2091.         ) {
  2092.             p._err(ERR.abandonedHeadElementChild);
  2093.             p.openElements.push(p.headElement);
  2094.             startTagInHead(p, token);
  2095.             p.openElements.remove(p.headElement);
  2096.         } else if (tn === $.HEAD) {
  2097.             p._err(ERR.misplacedStartTagForHeadElement);
  2098.         } else {
  2099.             tokenAfterHead(p, token);
  2100.         }
  2101.     }
  2102.    
  2103.     function endTagAfterHead(p, token) {
  2104.         const tn = token.tagName;
  2105.    
  2106.         if (tn === $.BODY || tn === $.HTML || tn === $.BR) {
  2107.             tokenAfterHead(p, token);
  2108.         } else if (tn === $.TEMPLATE) {
  2109.             endTagInHead(p, token);
  2110.         } else {
  2111.             p._err(ERR.endTagWithoutMatchingOpenElement);
  2112.         }
  2113.     }
  2114.    
  2115.     function tokenAfterHead(p, token) {
  2116.         p._insertFakeElement($.BODY);
  2117.         p.insertionMode = IN_BODY_MODE;
  2118.         p._processToken(token);
  2119.     }
  2120.    
  2121.     // The "in body" insertion mode
  2122.     //------------------------------------------------------------------
  2123.     function whitespaceCharacterInBody(p, token) {
  2124.         p._reconstructActiveFormattingElements();
  2125.         p._insertCharacters(token);
  2126.     }
  2127.    
  2128.     function characterInBody(p, token) {
  2129.         p._reconstructActiveFormattingElements();
  2130.         p._insertCharacters(token);
  2131.         p.framesetOk = false;
  2132.     }
  2133.    
  2134.     function htmlStartTagInBody(p, token) {
  2135.         if (p.openElements.tmplCount === 0) {
  2136.             p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);
  2137.         }
  2138.     }
  2139.    
  2140.     function bodyStartTagInBody(p, token) {
  2141.         const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();
  2142.    
  2143.         if (bodyElement && p.openElements.tmplCount === 0) {
  2144.             p.framesetOk = false;
  2145.             p.treeAdapter.adoptAttributes(bodyElement, token.attrs);
  2146.         }
  2147.     }
  2148.    
  2149.     function framesetStartTagInBody(p, token) {
  2150.         const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();
  2151.    
  2152.         if (p.framesetOk && bodyElement) {
  2153.             p.treeAdapter.detachNode(bodyElement);
  2154.             p.openElements.popAllUpToHtmlElement();
  2155.             p._insertElement(token, NS.HTML);
  2156.             p.insertionMode = IN_FRAMESET_MODE;
  2157.         }
  2158.     }
  2159.    
  2160.     function addressStartTagInBody(p, token) {
  2161.         if (p.openElements.hasInButtonScope($.P)) {
  2162.             p._closePElement();
  2163.         }
  2164.    
  2165.         p._insertElement(token, NS.HTML);
  2166.     }
  2167.    
  2168.     function numberedHeaderStartTagInBody(p, token) {
  2169.         if (p.openElements.hasInButtonScope($.P)) {
  2170.             p._closePElement();
  2171.         }
  2172.    
  2173.         const tn = p.openElements.currentTagName;
  2174.    
  2175.         if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) {
  2176.             p.openElements.pop();
  2177.         }
  2178.    
  2179.         p._insertElement(token, NS.HTML);
  2180.     }
  2181.    
  2182.     function preStartTagInBody(p, token) {
  2183.         if (p.openElements.hasInButtonScope($.P)) {
  2184.             p._closePElement();
  2185.         }
  2186.    
  2187.         p._insertElement(token, NS.HTML);
  2188.         //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move
  2189.         //on to the next one. (Newlines at the start of pre blocks are ignored as an authoring convenience.)
  2190.         p.skipNextNewLine = true;
  2191.         p.framesetOk = false;
  2192.     }
  2193.    
  2194.     function formStartTagInBody(p, token) {
  2195.         const inTemplate = p.openElements.tmplCount > 0;
  2196.    
  2197.         if (!p.formElement || inTemplate) {
  2198.             if (p.openElements.hasInButtonScope($.P)) {
  2199.                 p._closePElement();
  2200.             }
  2201.    
  2202.             p._insertElement(token, NS.HTML);
  2203.    
  2204.             if (!inTemplate) {
  2205.                 p.formElement = p.openElements.current;
  2206.             }
  2207.         }
  2208.     }
  2209.    
  2210.     function listItemStartTagInBody(p, token) {
  2211.         p.framesetOk = false;
  2212.    
  2213.         const tn = token.tagName;
  2214.    
  2215.         for (let i = p.openElements.stackTop; i >= 0; i--) {
  2216.             const element = p.openElements.items[i];
  2217.             const elementTn = p.treeAdapter.getTagName(element);
  2218.             let closeTn = null;
  2219.    
  2220.             if (tn === $.LI && elementTn === $.LI) {
  2221.                 closeTn = $.LI;
  2222.             } else if ((tn === $.DD || tn === $.DT) && (elementTn === $.DD || elementTn === $.DT)) {
  2223.                 closeTn = elementTn;
  2224.             }
  2225.    
  2226.             if (closeTn) {
  2227.                 p.openElements.generateImpliedEndTagsWithExclusion(closeTn);
  2228.                 p.openElements.popUntilTagNamePopped(closeTn);
  2229.                 break;
  2230.             }
  2231.    
  2232.             if (elementTn !== $.ADDRESS && elementTn !== $.DIV && elementTn !== $.P && p._isSpecialElement(element)) {
  2233.                 break;
  2234.             }
  2235.         }
  2236.    
  2237.         if (p.openElements.hasInButtonScope($.P)) {
  2238.             p._closePElement();
  2239.         }
  2240.    
  2241.         p._insertElement(token, NS.HTML);
  2242.     }
  2243.    
  2244.     function plaintextStartTagInBody(p, token) {
  2245.         if (p.openElements.hasInButtonScope($.P)) {
  2246.             p._closePElement();
  2247.         }
  2248.    
  2249.         p._insertElement(token, NS.HTML);
  2250.         p.tokenizer.state = Tokenizer.MODE.PLAINTEXT;
  2251.     }
  2252.    
  2253.     function buttonStartTagInBody(p, token) {
  2254.         if (p.openElements.hasInScope($.BUTTON)) {
  2255.             p.openElements.generateImpliedEndTags();
  2256.             p.openElements.popUntilTagNamePopped($.BUTTON);
  2257.         }
  2258.    
  2259.         p._reconstructActiveFormattingElements();
  2260.         p._insertElement(token, NS.HTML);
  2261.         p.framesetOk = false;
  2262.     }
  2263.    
  2264.     function aStartTagInBody(p, token) {
  2265.         const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName($.A);
  2266.    
  2267.         if (activeElementEntry) {
  2268.             callAdoptionAgency(p, token);
  2269.             p.openElements.remove(activeElementEntry.element);
  2270.             p.activeFormattingElements.removeEntry(activeElementEntry);
  2271.         }
  2272.    
  2273.         p._reconstructActiveFormattingElements();
  2274.         p._insertElement(token, NS.HTML);
  2275.         p.activeFormattingElements.pushElement(p.openElements.current, token);
  2276.     }
  2277.    
  2278.     function bStartTagInBody(p, token) {
  2279.         p._reconstructActiveFormattingElements();
  2280.         p._insertElement(token, NS.HTML);
  2281.         p.activeFormattingElements.pushElement(p.openElements.current, token);
  2282.     }
  2283.    
  2284.     function nobrStartTagInBody(p, token) {
  2285.         p._reconstructActiveFormattingElements();
  2286.    
  2287.         if (p.openElements.hasInScope($.NOBR)) {
  2288.             callAdoptionAgency(p, token);
  2289.             p._reconstructActiveFormattingElements();
  2290.         }
  2291.    
  2292.         p._insertElement(token, NS.HTML);
  2293.         p.activeFormattingElements.pushElement(p.openElements.current, token);
  2294.     }
  2295.    
  2296.     function appletStartTagInBody(p, token) {
  2297.         p._reconstructActiveFormattingElements();
  2298.         p._insertElement(token, NS.HTML);
  2299.         p.activeFormattingElements.insertMarker();
  2300.         p.framesetOk = false;
  2301.     }
  2302.    
  2303.     function tableStartTagInBody(p, token) {
  2304.         if (
  2305.             p.treeAdapter.getDocumentMode(p.document) !== HTML.DOCUMENT_MODE.QUIRKS &&
  2306.             p.openElements.hasInButtonScope($.P)
  2307.         ) {
  2308.             p._closePElement();
  2309.         }
  2310.    
  2311.         p._insertElement(token, NS.HTML);
  2312.         p.framesetOk = false;
  2313.         p.insertionMode = IN_TABLE_MODE;
  2314.     }
  2315.    
  2316.     function areaStartTagInBody(p, token) {
  2317.         p._reconstructActiveFormattingElements();
  2318.         p._appendElement(token, NS.HTML);
  2319.         p.framesetOk = false;
  2320.         token.ackSelfClosing = true;
  2321.     }
  2322.    
  2323.     function inputStartTagInBody(p, token) {
  2324.         p._reconstructActiveFormattingElements();
  2325.         p._appendElement(token, NS.HTML);
  2326.    
  2327.         const inputType = Tokenizer.getTokenAttr(token, ATTRS.TYPE);
  2328.    
  2329.         if (!inputType || inputType.toLowerCase() !== HIDDEN_INPUT_TYPE) {
  2330.             p.framesetOk = false;
  2331.         }
  2332.    
  2333.         token.ackSelfClosing = true;
  2334.     }
  2335.    
  2336.     function paramStartTagInBody(p, token) {
  2337.         p._appendElement(token, NS.HTML);
  2338.         token.ackSelfClosing = true;
  2339.     }
  2340.    
  2341.     function hrStartTagInBody(p, token) {
  2342.         if (p.openElements.hasInButtonScope($.P)) {
  2343.             p._closePElement();
  2344.         }
  2345.    
  2346.         p._appendElement(token, NS.HTML);
  2347.         p.framesetOk = false;
  2348.         token.ackSelfClosing = true;
  2349.     }
  2350.    
  2351.     function imageStartTagInBody(p, token) {
  2352.         token.tagName = $.IMG;
  2353.         areaStartTagInBody(p, token);
  2354.     }
  2355.    
  2356.     function textareaStartTagInBody(p, token) {
  2357.         p._insertElement(token, NS.HTML);
  2358.         //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move
  2359.         //on to the next one. (Newlines at the start of textarea elements are ignored as an authoring convenience.)
  2360.         p.skipNextNewLine = true;
  2361.         p.tokenizer.state = Tokenizer.MODE.RCDATA;
  2362.         p.originalInsertionMode = p.insertionMode;
  2363.         p.framesetOk = false;
  2364.         p.insertionMode = TEXT_MODE;
  2365.     }
  2366.    
  2367.     function xmpStartTagInBody(p, token) {
  2368.         if (p.openElements.hasInButtonScope($.P)) {
  2369.             p._closePElement();
  2370.         }
  2371.    
  2372.         p._reconstructActiveFormattingElements();
  2373.         p.framesetOk = false;
  2374.         p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);
  2375.     }
  2376.    
  2377.     function iframeStartTagInBody(p, token) {
  2378.         p.framesetOk = false;
  2379.         p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);
  2380.     }
  2381.    
  2382.     //NOTE: here we assume that we always act as an user agent with enabled plugins, so we parse
  2383.     //<noembed> as a rawtext.
  2384.     function noembedStartTagInBody(p, token) {
  2385.         p._switchToTextParsing(token, Tokenizer.MODE.RAWTEXT);
  2386.     }
  2387.    
  2388.     function selectStartTagInBody(p, token) {
  2389.         p._reconstructActiveFormattingElements();
  2390.         p._insertElement(token, NS.HTML);
  2391.         p.framesetOk = false;
  2392.    
  2393.         if (
  2394.             p.insertionMode === IN_TABLE_MODE ||
  2395.             p.insertionMode === IN_CAPTION_MODE ||
  2396.             p.insertionMode === IN_TABLE_BODY_MODE ||
  2397.             p.insertionMode === IN_ROW_MODE ||
  2398.             p.insertionMode === IN_CELL_MODE
  2399.         ) {
  2400.             p.insertionMode = IN_SELECT_IN_TABLE_MODE;
  2401.         } else {
  2402.             p.insertionMode = IN_SELECT_MODE;
  2403.         }
  2404.     }
  2405.    
  2406.     function optgroupStartTagInBody(p, token) {
  2407.         if (p.openElements.currentTagName === $.OPTION) {
  2408.             p.openElements.pop();
  2409.         }
  2410.    
  2411.         p._reconstructActiveFormattingElements();
  2412.         p._insertElement(token, NS.HTML);
  2413.     }
  2414.    
  2415.     function rbStartTagInBody(p, token) {
  2416.         if (p.openElements.hasInScope($.RUBY)) {
  2417.             p.openElements.generateImpliedEndTags();
  2418.         }
  2419.    
  2420.         p._insertElement(token, NS.HTML);
  2421.     }
  2422.    
  2423.     function rtStartTagInBody(p, token) {
  2424.         if (p.openElements.hasInScope($.RUBY)) {
  2425.             p.openElements.generateImpliedEndTagsWithExclusion($.RTC);
  2426.         }
  2427.    
  2428.         p._insertElement(token, NS.HTML);
  2429.     }
  2430.    
  2431.     function menuStartTagInBody(p, token) {
  2432.         if (p.openElements.hasInButtonScope($.P)) {
  2433.             p._closePElement();
  2434.         }
  2435.    
  2436.         p._insertElement(token, NS.HTML);
  2437.     }
  2438.    
  2439.     function mathStartTagInBody(p, token) {
  2440.         p._reconstructActiveFormattingElements();
  2441.    
  2442.         foreignContent.adjustTokenMathMLAttrs(token);
  2443.         foreignContent.adjustTokenXMLAttrs(token);
  2444.    
  2445.         if (token.selfClosing) {
  2446.             p._appendElement(token, NS.MATHML);
  2447.         } else {
  2448.             p._insertElement(token, NS.MATHML);
  2449.         }
  2450.    
  2451.         token.ackSelfClosing = true;
  2452.     }
  2453.    
  2454.     function svgStartTagInBody(p, token) {
  2455.         p._reconstructActiveFormattingElements();
  2456.    
  2457.         foreignContent.adjustTokenSVGAttrs(token);
  2458.         foreignContent.adjustTokenXMLAttrs(token);
  2459.    
  2460.         if (token.selfClosing) {
  2461.             p._appendElement(token, NS.SVG);
  2462.         } else {
  2463.             p._insertElement(token, NS.SVG);
  2464.         }
  2465.    
  2466.         token.ackSelfClosing = true;
  2467.     }
  2468.    
  2469.     function genericStartTagInBody(p, token) {
  2470.         p._reconstructActiveFormattingElements();
  2471.         p._insertElement(token, NS.HTML);
  2472.     }
  2473.    
  2474.     //OPTIMIZATION: Integer comparisons are low-cost, so we can use very fast tag name length filters here.
  2475.     //It's faster than using dictionary.
  2476.     function startTagInBody(p, token) {
  2477.         const tn = token.tagName;
  2478.    
  2479.         switch (tn.length) {
  2480.             case 1:
  2481.                 if (tn === $.I || tn === $.S || tn === $.B || tn === $.U) {
  2482.                     bStartTagInBody(p, token);
  2483.                 } else if (tn === $.P) {
  2484.                     addressStartTagInBody(p, token);
  2485.                 } else if (tn === $.A) {
  2486.                     aStartTagInBody(p, token);
  2487.                 } else {
  2488.                     genericStartTagInBody(p, token);
  2489.                 }
  2490.    
  2491.                 break;
  2492.    
  2493.             case 2:
  2494.                 if (tn === $.DL || tn === $.OL || tn === $.UL) {
  2495.                     addressStartTagInBody(p, token);
  2496.                 } else if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) {
  2497.                     numberedHeaderStartTagInBody(p, token);
  2498.                 } else if (tn === $.LI || tn === $.DD || tn === $.DT) {
  2499.                     listItemStartTagInBody(p, token);
  2500.                 } else if (tn === $.EM || tn === $.TT) {
  2501.                     bStartTagInBody(p, token);
  2502.                 } else if (tn === $.BR) {
  2503.                     areaStartTagInBody(p, token);
  2504.                 } else if (tn === $.HR) {
  2505.                     hrStartTagInBody(p, token);
  2506.                 } else if (tn === $.RB) {
  2507.                     rbStartTagInBody(p, token);
  2508.                 } else if (tn === $.RT || tn === $.RP) {
  2509.                     rtStartTagInBody(p, token);
  2510.                 } else if (tn !== $.TH && tn !== $.TD && tn !== $.TR) {
  2511.                     genericStartTagInBody(p, token);
  2512.                 }
  2513.    
  2514.                 break;
  2515.    
  2516.             case 3:
  2517.                 if (tn === $.DIV || tn === $.DIR || tn === $.NAV) {
  2518.                     addressStartTagInBody(p, token);
  2519.                 } else if (tn === $.PRE) {
  2520.                     preStartTagInBody(p, token);
  2521.                 } else if (tn === $.BIG) {
  2522.                     bStartTagInBody(p, token);
  2523.                 } else if (tn === $.IMG || tn === $.WBR) {
  2524.                     areaStartTagInBody(p, token);
  2525.                 } else if (tn === $.XMP) {
  2526.                     xmpStartTagInBody(p, token);
  2527.                 } else if (tn === $.SVG) {
  2528.                     svgStartTagInBody(p, token);
  2529.                 } else if (tn === $.RTC) {
  2530.                     rbStartTagInBody(p, token);
  2531.                 } else if (tn !== $.COL) {
  2532.                     genericStartTagInBody(p, token);
  2533.                 }
  2534.    
  2535.                 break;
  2536.    
  2537.             case 4:
  2538.                 if (tn === $.HTML) {
  2539.                     htmlStartTagInBody(p, token);
  2540.                 } else if (tn === $.BASE || tn === $.LINK || tn === $.META) {
  2541.                     startTagInHead(p, token);
  2542.                 } else if (tn === $.BODY) {
  2543.                     bodyStartTagInBody(p, token);
  2544.                 } else if (tn === $.MAIN || tn === $.MENU) {
  2545.                     addressStartTagInBody(p, token);
  2546.                 } else if (tn === $.FORM) {
  2547.                     formStartTagInBody(p, token);
  2548.                 } else if (tn === $.CODE || tn === $.FONT) {
  2549.                     bStartTagInBody(p, token);
  2550.                 } else if (tn === $.NOBR) {
  2551.                     nobrStartTagInBody(p, token);
  2552.                 } else if (tn === $.AREA) {
  2553.                     areaStartTagInBody(p, token);
  2554.                 } else if (tn === $.MATH) {
  2555.                     mathStartTagInBody(p, token);
  2556.                 } else if (tn === $.MENU) {
  2557.                     menuStartTagInBody(p, token);
  2558.                 } else if (tn !== $.HEAD) {
  2559.                     genericStartTagInBody(p, token);
  2560.                 }
  2561.    
  2562.                 break;
  2563.    
  2564.             case 5:
  2565.                 if (tn === $.STYLE || tn === $.TITLE) {
  2566.                     startTagInHead(p, token);
  2567.                 } else if (tn === $.ASIDE) {
  2568.                     addressStartTagInBody(p, token);
  2569.                 } else if (tn === $.SMALL) {
  2570.                     bStartTagInBody(p, token);
  2571.                 } else if (tn === $.TABLE) {
  2572.                     tableStartTagInBody(p, token);
  2573.                 } else if (tn === $.EMBED) {
  2574.                     areaStartTagInBody(p, token);
  2575.                 } else if (tn === $.INPUT) {
  2576.                     inputStartTagInBody(p, token);
  2577.                 } else if (tn === $.PARAM || tn === $.TRACK) {
  2578.                     paramStartTagInBody(p, token);
  2579.                 } else if (tn === $.IMAGE) {
  2580.                     imageStartTagInBody(p, token);
  2581.                 } else if (tn !== $.FRAME && tn !== $.TBODY && tn !== $.TFOOT && tn !== $.THEAD) {
  2582.                     genericStartTagInBody(p, token);
  2583.                 }
  2584.    
  2585.                 break;
  2586.    
  2587.             case 6:
  2588.                 if (tn === $.SCRIPT) {
  2589.                     startTagInHead(p, token);
  2590.                 } else if (
  2591.                     tn === $.CENTER ||
  2592.                     tn === $.FIGURE ||
  2593.                     tn === $.FOOTER ||
  2594.                     tn === $.HEADER ||
  2595.                     tn === $.HGROUP ||
  2596.                     tn === $.DIALOG
  2597.                 ) {
  2598.                     addressStartTagInBody(p, token);
  2599.                 } else if (tn === $.BUTTON) {
  2600.                     buttonStartTagInBody(p, token);
  2601.                 } else if (tn === $.STRIKE || tn === $.STRONG) {
  2602.                     bStartTagInBody(p, token);
  2603.                 } else if (tn === $.APPLET || tn === $.OBJECT) {
  2604.                     appletStartTagInBody(p, token);
  2605.                 } else if (tn === $.KEYGEN) {
  2606.                     areaStartTagInBody(p, token);
  2607.                 } else if (tn === $.SOURCE) {
  2608.                     paramStartTagInBody(p, token);
  2609.                 } else if (tn === $.IFRAME) {
  2610.                     iframeStartTagInBody(p, token);
  2611.                 } else if (tn === $.SELECT) {
  2612.                     selectStartTagInBody(p, token);
  2613.                 } else if (tn === $.OPTION) {
  2614.                     optgroupStartTagInBody(p, token);
  2615.                 } else {
  2616.                     genericStartTagInBody(p, token);
  2617.                 }
  2618.    
  2619.                 break;
  2620.    
  2621.             case 7:
  2622.                 if (tn === $.BGSOUND) {
  2623.                     startTagInHead(p, token);
  2624.                 } else if (
  2625.                     tn === $.DETAILS ||
  2626.                     tn === $.ADDRESS ||
  2627.                     tn === $.ARTICLE ||
  2628.                     tn === $.SECTION ||
  2629.                     tn === $.SUMMARY
  2630.                 ) {
  2631.                     addressStartTagInBody(p, token);
  2632.                 } else if (tn === $.LISTING) {
  2633.                     preStartTagInBody(p, token);
  2634.                 } else if (tn === $.MARQUEE) {
  2635.                     appletStartTagInBody(p, token);
  2636.                 } else if (tn === $.NOEMBED) {
  2637.                     noembedStartTagInBody(p, token);
  2638.                 } else if (tn !== $.CAPTION) {
  2639.                     genericStartTagInBody(p, token);
  2640.                 }
  2641.    
  2642.                 break;
  2643.    
  2644.             case 8:
  2645.                 if (tn === $.BASEFONT) {
  2646.                     startTagInHead(p, token);
  2647.                 } else if (tn === $.FRAMESET) {
  2648.                     framesetStartTagInBody(p, token);
  2649.                 } else if (tn === $.FIELDSET) {
  2650.                     addressStartTagInBody(p, token);
  2651.                 } else if (tn === $.TEXTAREA) {
  2652.                     textareaStartTagInBody(p, token);
  2653.                 } else if (tn === $.TEMPLATE) {
  2654.                     startTagInHead(p, token);
  2655.                 } else if (tn === $.NOSCRIPT) {
  2656.                     if (p.options.scriptingEnabled) {
  2657.                         noembedStartTagInBody(p, token);
  2658.                     } else {
  2659.                         genericStartTagInBody(p, token);
  2660.                     }
  2661.                 } else if (tn === $.OPTGROUP) {
  2662.                     optgroupStartTagInBody(p, token);
  2663.                 } else if (tn !== $.COLGROUP) {
  2664.                     genericStartTagInBody(p, token);
  2665.                 }
  2666.    
  2667.                 break;
  2668.    
  2669.             case 9:
  2670.                 if (tn === $.PLAINTEXT) {
  2671.                     plaintextStartTagInBody(p, token);
  2672.                 } else {
  2673.                     genericStartTagInBody(p, token);
  2674.                 }
  2675.    
  2676.                 break;
  2677.    
  2678.             case 10:
  2679.                 if (tn === $.BLOCKQUOTE || tn === $.FIGCAPTION) {
  2680.                     addressStartTagInBody(p, token);
  2681.                 } else {
  2682.                     genericStartTagInBody(p, token);
  2683.                 }
  2684.    
  2685.                 break;
  2686.    
  2687.             default:
  2688.                 genericStartTagInBody(p, token);
  2689.         }
  2690.     }
  2691.    
  2692.     function bodyEndTagInBody(p) {
  2693.         if (p.openElements.hasInScope($.BODY)) {
  2694.             p.insertionMode = AFTER_BODY_MODE;
  2695.         }
  2696.     }
  2697.    
  2698.     function htmlEndTagInBody(p, token) {
  2699.         if (p.openElements.hasInScope($.BODY)) {
  2700.             p.insertionMode = AFTER_BODY_MODE;
  2701.             p._processToken(token);
  2702.         }
  2703.     }
  2704.    
  2705.     function addressEndTagInBody(p, token) {
  2706.         const tn = token.tagName;
  2707.    
  2708.         if (p.openElements.hasInScope(tn)) {
  2709.             p.openElements.generateImpliedEndTags();
  2710.             p.openElements.popUntilTagNamePopped(tn);
  2711.         }
  2712.     }
  2713.    
  2714.     function formEndTagInBody(p) {
  2715.         const inTemplate = p.openElements.tmplCount > 0;
  2716.         const formElement = p.formElement;
  2717.    
  2718.         if (!inTemplate) {
  2719.             p.formElement = null;
  2720.         }
  2721.    
  2722.         if ((formElement || inTemplate) && p.openElements.hasInScope($.FORM)) {
  2723.             p.openElements.generateImpliedEndTags();
  2724.    
  2725.             if (inTemplate) {
  2726.                 p.openElements.popUntilTagNamePopped($.FORM);
  2727.             } else {
  2728.                 p.openElements.remove(formElement);
  2729.             }
  2730.         }
  2731.     }
  2732.    
  2733.     function pEndTagInBody(p) {
  2734.         if (!p.openElements.hasInButtonScope($.P)) {
  2735.             p._insertFakeElement($.P);
  2736.         }
  2737.    
  2738.         p._closePElement();
  2739.     }
  2740.    
  2741.     function liEndTagInBody(p) {
  2742.         if (p.openElements.hasInListItemScope($.LI)) {
  2743.             p.openElements.generateImpliedEndTagsWithExclusion($.LI);
  2744.             p.openElements.popUntilTagNamePopped($.LI);
  2745.         }
  2746.     }
  2747.    
  2748.     function ddEndTagInBody(p, token) {
  2749.         const tn = token.tagName;
  2750.    
  2751.         if (p.openElements.hasInScope(tn)) {
  2752.             p.openElements.generateImpliedEndTagsWithExclusion(tn);
  2753.             p.openElements.popUntilTagNamePopped(tn);
  2754.         }
  2755.     }
  2756.    
  2757.     function numberedHeaderEndTagInBody(p) {
  2758.         if (p.openElements.hasNumberedHeaderInScope()) {
  2759.             p.openElements.generateImpliedEndTags();
  2760.             p.openElements.popUntilNumberedHeaderPopped();
  2761.         }
  2762.     }
  2763.    
  2764.     function appletEndTagInBody(p, token) {
  2765.         const tn = token.tagName;
  2766.    
  2767.         if (p.openElements.hasInScope(tn)) {
  2768.             p.openElements.generateImpliedEndTags();
  2769.             p.openElements.popUntilTagNamePopped(tn);
  2770.             p.activeFormattingElements.clearToLastMarker();
  2771.         }
  2772.     }
  2773.    
  2774.     function brEndTagInBody(p) {
  2775.         p._reconstructActiveFormattingElements();
  2776.         p._insertFakeElement($.BR);
  2777.         p.openElements.pop();
  2778.         p.framesetOk = false;
  2779.     }
  2780.    
  2781.     function genericEndTagInBody(p, token) {
  2782.         const tn = token.tagName;
  2783.    
  2784.         for (let i = p.openElements.stackTop; i > 0; i--) {
  2785.             const element = p.openElements.items[i];
  2786.    
  2787.             if (p.treeAdapter.getTagName(element) === tn) {
  2788.                 p.openElements.generateImpliedEndTagsWithExclusion(tn);
  2789.                 p.openElements.popUntilElementPopped(element);
  2790.                 break;
  2791.             }
  2792.    
  2793.             if (p._isSpecialElement(element)) {
  2794.                 break;
  2795.             }
  2796.         }
  2797.     }
  2798.    
  2799.     //OPTIMIZATION: Integer comparisons are low-cost, so we can use very fast tag name length filters here.
  2800.     //It's faster than using dictionary.
  2801.     function endTagInBody(p, token) {
  2802.         const tn = token.tagName;
  2803.    
  2804.         switch (tn.length) {
  2805.             case 1:
  2806.                 if (tn === $.A || tn === $.B || tn === $.I || tn === $.S || tn === $.U) {
  2807.                     callAdoptionAgency(p, token);
  2808.                 } else if (tn === $.P) {
  2809.                     pEndTagInBody(p, token);
  2810.                 } else {
  2811.                     genericEndTagInBody(p, token);
  2812.                 }
  2813.    
  2814.                 break;
  2815.    
  2816.             case 2:
  2817.                 if (tn === $.DL || tn === $.UL || tn === $.OL) {
  2818.                     addressEndTagInBody(p, token);
  2819.                 } else if (tn === $.LI) {
  2820.                     liEndTagInBody(p, token);
  2821.                 } else if (tn === $.DD || tn === $.DT) {
  2822.                     ddEndTagInBody(p, token);
  2823.                 } else if (tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6) {
  2824.                     numberedHeaderEndTagInBody(p, token);
  2825.                 } else if (tn === $.BR) {
  2826.                     brEndTagInBody(p, token);
  2827.                 } else if (tn === $.EM || tn === $.TT) {
  2828.                     callAdoptionAgency(p, token);
  2829.                 } else {
  2830.                     genericEndTagInBody(p, token);
  2831.                 }
  2832.    
  2833.                 break;
  2834.    
  2835.             case 3:
  2836.                 if (tn === $.BIG) {
  2837.                     callAdoptionAgency(p, token);
  2838.                 } else if (tn === $.DIR || tn === $.DIV || tn === $.NAV || tn === $.PRE) {
  2839.                     addressEndTagInBody(p, token);
  2840.                 } else {
  2841.                     genericEndTagInBody(p, token);
  2842.                 }
  2843.    
  2844.                 break;
  2845.    
  2846.             case 4:
  2847.                 if (tn === $.BODY) {
  2848.                     bodyEndTagInBody(p, token);
  2849.                 } else if (tn === $.HTML) {
  2850.                     htmlEndTagInBody(p, token);
  2851.                 } else if (tn === $.FORM) {
  2852.                     formEndTagInBody(p, token);
  2853.                 } else if (tn === $.CODE || tn === $.FONT || tn === $.NOBR) {
  2854.                     callAdoptionAgency(p, token);
  2855.                 } else if (tn === $.MAIN || tn === $.MENU) {
  2856.                     addressEndTagInBody(p, token);
  2857.                 } else {
  2858.                     genericEndTagInBody(p, token);
  2859.                 }
  2860.    
  2861.                 break;
  2862.    
  2863.             case 5:
  2864.                 if (tn === $.ASIDE) {
  2865.                     addressEndTagInBody(p, token);
  2866.                 } else if (tn === $.SMALL) {
  2867.                     callAdoptionAgency(p, token);
  2868.                 } else {
  2869.                     genericEndTagInBody(p, token);
  2870.                 }
  2871.    
  2872.                 break;
  2873.    
  2874.             case 6:
  2875.                 if (
  2876.                     tn === $.CENTER ||
  2877.                     tn === $.FIGURE ||
  2878.                     tn === $.FOOTER ||
  2879.                     tn === $.HEADER ||
  2880.                     tn === $.HGROUP ||
  2881.                     tn === $.DIALOG
  2882.                 ) {
  2883.                     addressEndTagInBody(p, token);
  2884.                 } else if (tn === $.APPLET || tn === $.OBJECT) {
  2885.                     appletEndTagInBody(p, token);
  2886.                 } else if (tn === $.STRIKE || tn === $.STRONG) {
  2887.                     callAdoptionAgency(p, token);
  2888.                 } else {
  2889.                     genericEndTagInBody(p, token);
  2890.                 }
  2891.    
  2892.                 break;
  2893.    
  2894.             case 7:
  2895.                 if (
  2896.                     tn === $.ADDRESS ||
  2897.                     tn === $.ARTICLE ||
  2898.                     tn === $.DETAILS ||
  2899.                     tn === $.SECTION ||
  2900.                     tn === $.SUMMARY ||
  2901.                     tn === $.LISTING
  2902.                 ) {
  2903.                     addressEndTagInBody(p, token);
  2904.                 } else if (tn === $.MARQUEE) {
  2905.                     appletEndTagInBody(p, token);
  2906.                 } else {
  2907.                     genericEndTagInBody(p, token);
  2908.                 }
  2909.    
  2910.                 break;
  2911.    
  2912.             case 8:
  2913.                 if (tn === $.FIELDSET) {
  2914.                     addressEndTagInBody(p, token);
  2915.                 } else if (tn === $.TEMPLATE) {
  2916.                     endTagInHead(p, token);
  2917.                 } else {
  2918.                     genericEndTagInBody(p, token);
  2919.                 }
  2920.    
  2921.                 break;
  2922.    
  2923.             case 10:
  2924.                 if (tn === $.BLOCKQUOTE || tn === $.FIGCAPTION) {
  2925.                     addressEndTagInBody(p, token);
  2926.                 } else {
  2927.                     genericEndTagInBody(p, token);
  2928.                 }
  2929.    
  2930.                 break;
  2931.    
  2932.             default:
  2933.                 genericEndTagInBody(p, token);
  2934.         }
  2935.     }
  2936.    
  2937.     function eofInBody(p, token) {
  2938.         if (p.tmplInsertionModeStackTop > -1) {
  2939.             eofInTemplate(p, token);
  2940.         } else {
  2941.             p.stopped = true;
  2942.         }
  2943.     }
  2944.    
  2945.     // The "text" insertion mode
  2946.     //------------------------------------------------------------------
  2947.     function endTagInText(p, token) {
  2948.         if (token.tagName === $.SCRIPT) {
  2949.             p.pendingScript = p.openElements.current;
  2950.         }
  2951.    
  2952.         p.openElements.pop();
  2953.         p.insertionMode = p.originalInsertionMode;
  2954.     }
  2955.    
  2956.     function eofInText(p, token) {
  2957.         p._err(ERR.eofInElementThatCanContainOnlyText);
  2958.         p.openElements.pop();
  2959.         p.insertionMode = p.originalInsertionMode;
  2960.         p._processToken(token);
  2961.     }
  2962.    
  2963.     // The "in table" insertion mode
  2964.     //------------------------------------------------------------------
  2965.     function characterInTable(p, token) {
  2966.         const curTn = p.openElements.currentTagName;
  2967.    
  2968.         if (curTn === $.TABLE || curTn === $.TBODY || curTn === $.TFOOT || curTn === $.THEAD || curTn === $.TR) {
  2969.             p.pendingCharacterTokens = [];
  2970.             p.hasNonWhitespacePendingCharacterToken = false;
  2971.             p.originalInsertionMode = p.insertionMode;
  2972.             p.insertionMode = IN_TABLE_TEXT_MODE;
  2973.             p._processToken(token);
  2974.         } else {
  2975.             tokenInTable(p, token);
  2976.         }
  2977.     }
  2978.    
  2979.     function captionStartTagInTable(p, token) {
  2980.         p.openElements.clearBackToTableContext();
  2981.         p.activeFormattingElements.insertMarker();
  2982.         p._insertElement(token, NS.HTML);
  2983.         p.insertionMode = IN_CAPTION_MODE;
  2984.     }
  2985.    
  2986.     function colgroupStartTagInTable(p, token) {
  2987.         p.openElements.clearBackToTableContext();
  2988.         p._insertElement(token, NS.HTML);
  2989.         p.insertionMode = IN_COLUMN_GROUP_MODE;
  2990.     }
  2991.    
  2992.     function colStartTagInTable(p, token) {
  2993.         p.openElements.clearBackToTableContext();
  2994.         p._insertFakeElement($.COLGROUP);
  2995.         p.insertionMode = IN_COLUMN_GROUP_MODE;
  2996.         p._processToken(token);
  2997.     }
  2998.    
  2999.     function tbodyStartTagInTable(p, token) {
  3000.         p.openElements.clearBackToTableContext();
  3001.         p._insertElement(token, NS.HTML);
  3002.         p.insertionMode = IN_TABLE_BODY_MODE;
  3003.     }
  3004.    
  3005.     function tdStartTagInTable(p, token) {
  3006.         p.openElements.clearBackToTableContext();
  3007.         p._insertFakeElement($.TBODY);
  3008.         p.insertionMode = IN_TABLE_BODY_MODE;
  3009.         p._processToken(token);
  3010.     }
  3011.    
  3012.     function tableStartTagInTable(p, token) {
  3013.         if (p.openElements.hasInTableScope($.TABLE)) {
  3014.             p.openElements.popUntilTagNamePopped($.TABLE);
  3015.             p._resetInsertionMode();
  3016.             p._processToken(token);
  3017.         }
  3018.     }
  3019.    
  3020.     function inputStartTagInTable(p, token) {
  3021.         const inputType = Tokenizer.getTokenAttr(token, ATTRS.TYPE);
  3022.    
  3023.         if (inputType && inputType.toLowerCase() === HIDDEN_INPUT_TYPE) {
  3024.             p._appendElement(token, NS.HTML);
  3025.         } else {
  3026.             tokenInTable(p, token);
  3027.         }
  3028.    
  3029.         token.ackSelfClosing = true;
  3030.     }
  3031.    
  3032.     function formStartTagInTable(p, token) {
  3033.         if (!p.formElement && p.openElements.tmplCount === 0) {
  3034.             p._insertElement(token, NS.HTML);
  3035.             p.formElement = p.openElements.current;
  3036.             p.openElements.pop();
  3037.         }
  3038.     }
  3039.    
  3040.     function startTagInTable(p, token) {
  3041.         const tn = token.tagName;
  3042.    
  3043.         switch (tn.length) {
  3044.             case 2:
  3045.                 if (tn === $.TD || tn === $.TH || tn === $.TR) {
  3046.                     tdStartTagInTable(p, token);
  3047.                 } else {
  3048.                     tokenInTable(p, token);
  3049.                 }
  3050.    
  3051.                 break;
  3052.    
  3053.             case 3:
  3054.                 if (tn === $.COL) {
  3055.                     colStartTagInTable(p, token);
  3056.                 } else {
  3057.                     tokenInTable(p, token);
  3058.                 }
  3059.    
  3060.                 break;
  3061.    
  3062.             case 4:
  3063.                 if (tn === $.FORM) {
  3064.                     formStartTagInTable(p, token);
  3065.                 } else {
  3066.                     tokenInTable(p, token);
  3067.                 }
  3068.    
  3069.                 break;
  3070.    
  3071.             case 5:
  3072.                 if (tn === $.TABLE) {
  3073.                     tableStartTagInTable(p, token);
  3074.                 } else if (tn === $.STYLE) {
  3075.                     startTagInHead(p, token);
  3076.                 } else if (tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD) {
  3077.                     tbodyStartTagInTable(p, token);
  3078.                 } else if (tn === $.INPUT) {
  3079.                     inputStartTagInTable(p, token);
  3080.                 } else {
  3081.                     tokenInTable(p, token);
  3082.                 }
  3083.    
  3084.                 break;
  3085.    
  3086.             case 6:
  3087.                 if (tn === $.SCRIPT) {
  3088.                     startTagInHead(p, token);
  3089.                 } else {
  3090.                     tokenInTable(p, token);
  3091.                 }
  3092.    
  3093.                 break;
  3094.    
  3095.             case 7:
  3096.                 if (tn === $.CAPTION) {
  3097.                     captionStartTagInTable(p, token);
  3098.                 } else {
  3099.                     tokenInTable(p, token);
  3100.                 }
  3101.    
  3102.                 break;
  3103.    
  3104.             case 8:
  3105.                 if (tn === $.COLGROUP) {
  3106.                     colgroupStartTagInTable(p, token);
  3107.                 } else if (tn === $.TEMPLATE) {
  3108.                     startTagInHead(p, token);
  3109.                 } else {
  3110.                     tokenInTable(p, token);
  3111.                 }
  3112.    
  3113.                 break;
  3114.    
  3115.             default:
  3116.                 tokenInTable(p, token);
  3117.         }
  3118.     }
  3119.    
  3120.     function endTagInTable(p, token) {
  3121.         const tn = token.tagName;
  3122.    
  3123.         if (tn === $.TABLE) {
  3124.             if (p.openElements.hasInTableScope($.TABLE)) {
  3125.                 p.openElements.popUntilTagNamePopped($.TABLE);
  3126.                 p._resetInsertionMode();
  3127.             }
  3128.         } else if (tn === $.TEMPLATE) {
  3129.             endTagInHead(p, token);
  3130.         } else if (
  3131.             tn !== $.BODY &&
  3132.             tn !== $.CAPTION &&
  3133.             tn !== $.COL &&
  3134.             tn !== $.COLGROUP &&
  3135.             tn !== $.HTML &&
  3136.             tn !== $.TBODY &&
  3137.             tn !== $.TD &&
  3138.             tn !== $.TFOOT &&
  3139.             tn !== $.TH &&
  3140.             tn !== $.THEAD &&
  3141.             tn !== $.TR
  3142.         ) {
  3143.             tokenInTable(p, token);
  3144.         }
  3145.     }
  3146.    
  3147.     function tokenInTable(p, token) {
  3148.         const savedFosterParentingState = p.fosterParentingEnabled;
  3149.    
  3150.         p.fosterParentingEnabled = true;
  3151.         p._processTokenInBodyMode(token);
  3152.         p.fosterParentingEnabled = savedFosterParentingState;
  3153.     }
  3154.    
  3155.     // The "in table text" insertion mode
  3156.     //------------------------------------------------------------------
  3157.     function whitespaceCharacterInTableText(p, token) {
  3158.         p.pendingCharacterTokens.push(token);
  3159.     }
  3160.    
  3161.     function characterInTableText(p, token) {
  3162.         p.pendingCharacterTokens.push(token);
  3163.         p.hasNonWhitespacePendingCharacterToken = true;
  3164.     }
  3165.    
  3166.     function tokenInTableText(p, token) {
  3167.         let i = 0;
  3168.    
  3169.         if (p.hasNonWhitespacePendingCharacterToken) {
  3170.             for (; i < p.pendingCharacterTokens.length; i++) {
  3171.                 tokenInTable(p, p.pendingCharacterTokens[i]);
  3172.             }
  3173.         } else {
  3174.             for (; i < p.pendingCharacterTokens.length; i++) {
  3175.                 p._insertCharacters(p.pendingCharacterTokens[i]);
  3176.             }
  3177.         }
  3178.    
  3179.          p.inserti
  3180.         p._processToken(token);
  3181.     }
  3182.    
  3183.     // The "in caption" insertion mode
  3184.     //------------------------------------------------------------------
  3185.     function startTagInCaption(p, token) {
  3186.         const tn = token.tagName;
  3187.    
  3188.         if (
  3189.             tn === $.CAPTION ||
  3190.             tn === $.COL ||
  3191.             tn === $.COLGROUP ||
  3192.             tn === $.TBODY ||
  3193.             tn === $.TD ||
  3194.             tn === $.TFOOT ||
  3195.             tn === $.TH ||
  3196.             tn === $.THEAD ||
  3197.             tn === $.TR
  3198.         ) {
  3199.             if (p.openElements.hasInTableScope($.CAPTION)) {
  3200.                 p.openElements.generateImpliedEndTags();
  3201.                 p.openElements.popUntilTagNamePopped($.CAPTION);
  3202.                 p.activeFormattingElements.clearToLastMarker();
  3203.                  p.inserti
  3204.                 p._processToken(token);
  3205.             }
  3206.         } else {
  3207.             startTagInBody(p, token);
  3208.         }
  3209.     }
  3210.    
  3211.     function endTagInCaption(p, token) {
  3212.         const tn = token.tagName;
  3213.    
  3214.         if (tn === $.CAPTION || tn === $.TABLE) {
  3215.             if (p.openElements.hasInTableScope($.CAPTION)) {
  3216.                 p.openElements.generateImpliedEndTags();
  3217.                 p.openElements.popUntilTagNamePopped($.CAPTION);
  3218.                 p.activeFormattingElements.clearToLastMarker();
  3219.                  p.inserti
  3220.    
  3221.                 if (tn === $.TABLE) {
  3222.                     p._processToken(token);
  3223.                 }
  3224.             }
  3225.         } else if (
  3226.             tn !== $.BODY &&
  3227.             tn !== $.COL &&
  3228.             tn !== $.COLGROUP &&
  3229.             tn !== $.HTML &&
  3230.             tn !== $.TBODY &&
  3231.             tn !== $.TD &&
  3232.             tn !== $.TFOOT &&
  3233.             tn !== $.TH &&
  3234.             tn !== $.THEAD &&
  3235.             tn !== $.TR
  3236.         ) {
  3237.             endTagInBody(p, token);
  3238.         }
  3239.     }
  3240.    
  3241.     // The "in column group" insertion mode
  3242.     //------------------------------------------------------------------
  3243.     function startTagInColumnGroup(p, token) {
  3244.         const tn = token.tagName;
  3245.    
  3246.         if (tn === $.HTML) {
  3247.             startTagInBody(p, token);
  3248.         } else if (tn === $.COL) {
  3249.             p._appendElement(token, NS.HTML);
  3250.             token.ackSelfClosing = true;
  3251.         } else if (tn === $.TEMPLATE) {
  3252.             startTagInHead(p, token);
  3253.         } else {
  3254.             tokenInColumnGroup(p, token);
  3255.         }
  3256.     }
  3257.    
  3258.     function endTagInColumnGroup(p, token) {
  3259.         const tn = token.tagName;
  3260.    
  3261.         if (tn === $.COLGROUP) {
  3262.             if (p.openElements.currentTagName === $.COLGROUP) {
  3263.                 p.openElements.pop();
  3264.                  p.inserti
  3265.             }
  3266.         } else if (tn === $.TEMPLATE) {
  3267.             endTagInHead(p, token);
  3268.         } else if (tn !== $.COL) {
  3269.             tokenInColumnGroup(p, token);
  3270.         }
  3271.     }
  3272.    
  3273.     function tokenInColumnGroup(p, token) {
  3274.         if (p.openElements.currentTagName === $.COLGROUP) {
  3275.             p.openElements.pop();
  3276.              p.inserti
  3277.             p._processToken(token);
  3278.         }
  3279.     }
  3280.    
  3281.     // The "in table body" insertion mode
  3282.     //------------------------------------------------------------------
  3283.     function startTagInTableBody(p, token) {
  3284.         const tn = token.tagName;
  3285.    
  3286.         if (tn === $.TR) {
  3287.             p.openElements.clearBackToTableBodyContext();
  3288.             p._insertElement(token, NS.HTML);
  3289.              p.inserti
  3290.         } else if (tn === $.TH || tn === $.TD) {
  3291.             p.openElements.clearBackToTableBodyContext();
  3292.             p._insertFakeElement($.TR);
  3293.              p.inserti
  3294.             p._processToken(token);
  3295.         } else if (
  3296.             tn === $.CAPTION ||
  3297.             tn === $.COL ||
  3298.             tn === $.COLGROUP ||
  3299.             tn === $.TBODY ||
  3300.             tn === $.TFOOT ||
  3301.             tn === $.THEAD
  3302.         ) {
  3303.             if (p.openElements.hasTableBodyContextInTableScope()) {
  3304.                 p.openElements.clearBackToTableBodyContext();
  3305.                 p.openElements.pop();
  3306.                  p.inserti
  3307.                 p._processToken(token);
  3308.             }
  3309.         } else {
  3310.             startTagInTable(p, token);
  3311.         }
  3312.     }
  3313.    
  3314.     function endTagInTableBody(p, token) {
  3315.         const tn = token.tagName;
  3316.    
  3317.         if (tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD) {
  3318.             if (p.openElements.hasInTableScope(tn)) {
  3319.                 p.openElements.clearBackToTableBodyContext();
  3320.                 p.openElements.pop();
  3321.                  p.inserti
  3322.             }
  3323.         } else if (tn === $.TABLE) {
  3324.             if (p.openElements.hasTableBodyContextInTableScope()) {
  3325.                 p.openElements.clearBackToTableBodyContext();
  3326.                 p.openElements.pop();
  3327.                  p.inserti
  3328.                 p._processToken(token);
  3329.             }
  3330.         } else if (
  3331.             (tn !== $.BODY && tn !== $.CAPTION && tn !== $.COL && tn !== $.COLGROUP) ||
  3332.             (tn !== $.HTML && tn !== $.TD && tn !== $.TH && tn !== $.TR)
  3333.         ) {
  3334.             endTagInTable(p, token);
  3335.         }
  3336.     }
  3337.    
  3338.     // The "in row" insertion mode
  3339.     //------------------------------------------------------------------
  3340.     function startTagInRow(p, token) {
  3341.         const tn = token.tagName;
  3342.    
  3343.         if (tn === $.TH || tn === $.TD) {
  3344.             p.openElements.clearBackToTableRowContext();
  3345.             p._insertElement(token, NS.HTML);
  3346.              p.inserti
  3347.             p.activeFormattingElements.insertMarker();
  3348.         } else if (
  3349.             tn === $.CAPTION ||
  3350.             tn === $.COL ||
  3351.             tn === $.COLGROUP ||
  3352.             tn === $.TBODY ||
  3353.             tn === $.TFOOT ||
  3354.             tn === $.THEAD ||
  3355.             tn === $.TR
  3356.         ) {
  3357.             if (p.openElements.hasInTableScope($.TR)) {
  3358.                 p.openElements.clearBackToTableRowContext();
  3359.                 p.openElements.pop();
  3360.                  p.inserti
  3361.                 p._processToken(token);
  3362.             }
  3363.         } else {
  3364.             startTagInTable(p, token);
  3365.         }
  3366.     }
  3367.    
  3368.     function endTagInRow(p, token) {
  3369.         const tn = token.tagName;
  3370.    
  3371.         if (tn === $.TR) {
  3372.             if (p.openElements.hasInTableScope($.TR)) {
  3373.                 p.openElements.clearBackToTableRowContext();
  3374.                 p.openElements.pop();
  3375.                  p.inserti
  3376.             }
  3377.         } else if (tn === $.TABLE) {
  3378.             if (p.openElements.hasInTableScope($.TR)) {
  3379.                 p.openElements.clearBackToTableRowContext();
  3380.                 p.openElements.pop();
  3381.                  p.inserti
  3382.                 p._processToken(token);
  3383.             }
  3384.         } else if (tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD) {
  3385.             if (p.openElements.hasInTableScope(tn) || p.openElements.hasInTableScope($.TR)) {
  3386.                 p.openElements.clearBackToTableRowContext();
  3387.                 p.openElements.pop();
  3388.                  p.inserti
  3389.                 p._processToken(token);
  3390.             }
  3391.         } else if (
  3392.             (tn !== $.BODY && tn !== $.CAPTION && tn !== $.COL && tn !== $.COLGROUP) ||
  3393.             (tn !== $.HTML && tn !== $.TD && tn !== $.TH)
  3394.         ) {
  3395.             endTagInTable(p, token);
  3396.         }
  3397.     }
  3398.    
  3399.     // The "in cell" insertion mode
  3400.     //------------------------------------------------------------------
  3401.     function startTagInCell(p, token) {
  3402.         const tn = token.tagName;
  3403.    
  3404.         if (
  3405.             tn === $.CAPTION ||
  3406.             tn === $.COL ||
  3407.             tn === $.COLGROUP ||
  3408.             tn === $.TBODY ||
  3409.             tn === $.TD ||
  3410.             tn === $.TFOOT ||
  3411.             tn === $.TH ||
  3412.             tn === $.THEAD ||
  3413.             tn === $.TR
  3414.         ) {
  3415.             if (p.openElements.hasInTableScope($.TD) || p.openElements.hasInTableScope($.TH)) {
  3416.                 p._closeTableCell();
  3417.                 p._processToken(token);
  3418.             }
  3419.         } else {
  3420.             startTagInBody(p, token);
  3421.         }
  3422.     }
  3423.    
  3424.     function endTagInCell(p, token) {
  3425.         const tn = token.tagName;
  3426.    
  3427.         if (tn === $.TD || tn === $.TH) {
  3428.             if (p.openElements.hasInTableScope(tn)) {
  3429.                 p.openElements.generateImpliedEndTags();
  3430.                 p.openElements.popUntilTagNamePopped(tn);
  3431.                 p.activeFormattingElements.clearToLastMarker();
  3432.                  p.inserti
  3433.             }
  3434.         } else if (tn === $.TABLE || tn === $.TBODY || tn === $.TFOOT || tn === $.THEAD || tn === $.TR) {
  3435.             if (p.openElements.hasInTableScope(tn)) {
  3436.                 p._closeTableCell();
  3437.                 p._processToken(token);
  3438.             }
  3439.         } else if (tn !== $.BODY && tn !== $.CAPTION && tn !== $.COL && tn !== $.COLGROUP && tn !== $.HTML) {
  3440.             endTagInBody(p, token);
  3441.         }
  3442.     }
  3443.    
  3444.     // The "in select" insertion mode
  3445.     //------------------------------------------------------------------
  3446.     function startTagInSelect(p, token) {
  3447.         const tn = token.tagName;
  3448.    
  3449.         if (tn === $.HTML) {
  3450.             startTagInBody(p, token);
  3451.         } else if (tn === $.OPTION) {
  3452.             if (p.openElements.currentTagName === $.OPTION) {
  3453.                 p.openElements.pop();
  3454.             }
  3455.    
  3456.             p._insertElement(token, NS.HTML);
  3457.         } else if (tn === $.OPTGROUP) {
  3458.             if (p.openElements.currentTagName === $.OPTION) {
  3459.                 p.openElements.pop();
  3460.             }
  3461.    
  3462.             if (p.openElements.currentTagName === $.OPTGROUP) {
  3463.                 p.openElements.pop();
  3464.             }
  3465.    
  3466.             p._insertElement(token, NS.HTML);
  3467.         } else if (tn === $.INPUT || tn === $.KEYGEN || tn === $.TEXTAREA || tn === $.SELECT) {
  3468.             if (p.openElements.hasInSelectScope($.SELECT)) {
  3469.                 p.openElements.popUntilTagNamePopped($.SELECT);
  3470.                 p._resetInsertionMode();
  3471.    
  3472.                 if (tn !== $.SELECT) {
  3473.                     p._processToken(token);
  3474.                 }
  3475.             }
  3476.         } else if (tn === $.SCRIPT || tn === $.TEMPLATE) {
  3477.             startTagInHead(p, token);
  3478.         }
  3479.     }
  3480.    
  3481.     function endTagInSelect(p, token) {
  3482.         const tn = token.tagName;
  3483.    
  3484.         if (tn === $.OPTGROUP) {
  3485.             const prevOpenElement = p.openElements.items[p.openElements.stackTop - 1];
  3486.             const prevOpenElementTn = prevOpenElement && p.treeAdapter.getTagName(prevOpenElement);
  3487.    
  3488.             if (p.openElements.currentTagName === $.OPTION && prevOpenElementTn === $.OPTGROUP) {
  3489.                 p.openElements.pop();
  3490.             }
  3491.    
  3492.             if (p.openElements.currentTagName === $.OPTGROUP) {
  3493.                 p.openElements.pop();
  3494.             }
  3495.         } else if (tn === $.OPTION) {
  3496.             if (p.openElements.currentTagName === $.OPTION) {
  3497.                 p.openElements.pop();
  3498.             }
  3499.         } else if (tn === $.SELECT && p.openElements.hasInSelectScope($.SELECT)) {
  3500.             p.openElements.popUntilTagNamePopped($.SELECT);
  3501.             p._resetInsertionMode();
  3502.         } else if (tn === $.TEMPLATE) {
  3503.             endTagInHead(p, token);
  3504.         }
  3505.     }
  3506.    
  3507.     //12.2.5.4.17 The "in select in table" insertion mode
  3508.     //------------------------------------------------------------------
  3509.     function startTagInSelectInTable(p, token) {
  3510.         const tn = token.tagName;
  3511.    
  3512.         if (
  3513.             tn === $.CAPTION ||
  3514.             tn === $.TABLE ||
  3515.             tn === $.TBODY ||
  3516.             tn === $.TFOOT ||
  3517.             tn === $.THEAD ||
  3518.             tn === $.TR ||
  3519.             tn === $.TD ||
  3520.             tn === $.TH
  3521.         ) {
  3522.             p.openElements.popUntilTagNamePopped($.SELECT);
  3523.             p._resetInsertionMode();
  3524.             p._processToken(token);
  3525.         } else {
  3526.             startTagInSelect(p, token);
  3527.         }
  3528.     }
  3529.    
  3530.     function endTagInSelectInTable(p, token) {
  3531.         const tn = token.tagName;
  3532.    
  3533.         if (
  3534.             tn === $.CAPTION ||
  3535.             tn === $.TABLE ||
  3536.             tn === $.TBODY ||
  3537.             tn === $.TFOOT ||
  3538.             tn === $.THEAD ||
  3539.             tn === $.TR ||
  3540.             tn === $.TD ||
  3541.             tn === $.TH
  3542.         ) {
  3543.             if (p.openElements.hasInTableScope(tn)) {
  3544.                 p.openElements.popUntilTagNamePopped($.SELECT);
  3545.                 p._resetInsertionMode();
  3546.                 p._processToken(token);
  3547.             }
  3548.         } else {
  3549.             endTagInSelect(p, token);
  3550.         }
  3551.     }
  3552.    
  3553.     // The "in template" insertion mode
  3554.     //------------------------------------------------------------------
  3555.     function startTagInTemplate(p, token) {
  3556.         const tn = token.tagName;
  3557.    
  3558.         if (
  3559.             tn === $.BASE ||
  3560.             tn === $.BASEFONT ||
  3561.             tn === $.BGSOUND ||
  3562.             tn === $.LINK ||
  3563.             tn === $.META ||
  3564.             tn === $.NOFRAMES ||
  3565.             tn === $.SCRIPT ||
  3566.             tn === $.STYLE ||
  3567.             tn === $.TEMPLATE ||
  3568.             tn === $.TITLE
  3569.         ) {
  3570.             startTagInHead(p, token);
  3571.         } else {
  3572.              const newInserti || IN_BODY_MODE;
  3573.    
  3574.             p._popTmplInsertionMode();
  3575.             p._pushTmplInsertionMode(newInsertionMode);
  3576.              p.inserti
  3577.             p._processToken(token);
  3578.         }
  3579.     }
  3580.    
  3581.     function endTagInTemplate(p, token) {
  3582.         if (token.tagName === $.TEMPLATE) {
  3583.             endTagInHead(p, token);
  3584.         }
  3585.     }
  3586.    
  3587.     function eofInTemplate(p, token) {
  3588.         if (p.openElements.tmplCount > 0) {
  3589.             p.openElements.popUntilTagNamePopped($.TEMPLATE);
  3590.             p.activeFormattingElements.clearToLastMarker();
  3591.             p._popTmplInsertionMode();
  3592.             p._resetInsertionMode();
  3593.             p._processToken(token);
  3594.         } else {
  3595.             p.stopped = true;
  3596.         }
  3597.     }
  3598.    
  3599.     // The "after body" insertion mode
  3600.     //------------------------------------------------------------------
  3601.     function startTagAfterBody(p, token) {
  3602.         if (token.tagName === $.HTML) {
  3603.             startTagInBody(p, token);
  3604.         } else {
  3605.             tokenAfterBody(p, token);
  3606.         }
  3607.     }
  3608.    
  3609.     function endTagAfterBody(p, token) {
  3610.         if (token.tagName === $.HTML) {
  3611.             if (!p.fragmentContext) {
  3612.                 p.insertionMode = AFTER_AFTER_BODY_MODE;
  3613.             }
  3614.         } else {
  3615.             tokenAfterBody(p, token);
  3616.         }
  3617.     }
  3618.    
  3619.     function tokenAfterBody(p, token) {
  3620.         p.insertionMode = IN_BODY_MODE;
  3621.         p._processToken(token);
  3622.     }
  3623.    
  3624.     // The "in frameset" insertion mode
  3625.     //------------------------------------------------------------------
  3626.     function startTagInFrameset(p, token) {
  3627.         const tn = token.tagName;
  3628.    
  3629.         if (tn === $.HTML) {
  3630.             startTagInBody(p, token);
  3631.         } else if (tn === $.FRAMESET) {
  3632.             p._insertElement(token, NS.HTML);
  3633.         } else if (tn === $.FRAME) {
  3634.             p._appendElement(token, NS.HTML);
  3635.             token.ackSelfClosing = true;
  3636.         } else if (tn === $.NOFRAMES) {
  3637.             startTagInHead(p, token);
  3638.         }
  3639.     }
  3640.    
  3641.     function endTagInFrameset(p, token) {
  3642.         if (token.tagName === $.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {
  3643.             p.openElements.pop();
  3644.    
  3645.             if (!p.fragmentContext && p.openElements.currentTagName !== $.FRAMESET) {
  3646.                 p.insertionMode = AFTER_FRAMESET_MODE;
  3647.             }
  3648.         }
  3649.     }
  3650.    
  3651.     // The "after frameset" insertion mode
  3652.     //------------------------------------------------------------------
  3653.     function startTagAfterFrameset(p, token) {
  3654.         const tn = token.tagName;
  3655.    
  3656.         if (tn === $.HTML) {
  3657.             startTagInBody(p, token);
  3658.         } else if (tn === $.NOFRAMES) {
  3659.             startTagInHead(p, token);
  3660.         }
  3661.     }
  3662.    
  3663.     function endTagAfterFrameset(p, token) {
  3664.         if (token.tagName === $.HTML) {
  3665.             p.insertionMode = AFTER_AFTER_FRAMESET_MODE;
  3666.         }
  3667.     }
  3668.    
  3669.     // The "after after body" insertion mode
  3670.     //------------------------------------------------------------------
  3671.     function startTagAfterAfterBody(p, token) {
  3672.         if (token.tagName === $.HTML) {
  3673.             startTagInBody(p, token);
  3674.         } else {
  3675.             tokenAfterAfterBody(p, token);
  3676.         }
  3677.     }
  3678.    
  3679.     function tokenAfterAfterBody(p, token) {
  3680.         p.insertionMode = IN_BODY_MODE;
  3681.         p._processToken(token);
  3682.     }
  3683.    
  3684.     // The "after after frameset" insertion mode
  3685.     //------------------------------------------------------------------
  3686.     function startTagAfterAfterFrameset(p, token) {
  3687.         const tn = token.tagName;
  3688.    
  3689.         if (tn === $.HTML) {
  3690.             startTagInBody(p, token);
  3691.         } else if (tn === $.NOFRAMES) {
  3692.             startTagInHead(p, token);
  3693.         }
  3694.     }
  3695.    
  3696.     // The rules for parsing tokens in foreign content
  3697.     //------------------------------------------------------------------
  3698.     function nullCharacterInForeignContent(p, token) {
  3699.         token.chars = unicode.REPLACEMENT_CHARACTER;
  3700.         p._insertCharacters(token);
  3701.     }
  3702.    
  3703.     function characterInForeignContent(p, token) {
  3704.         p._insertCharacters(token);
  3705.         p.framesetOk = false;
  3706.     }
  3707.    
  3708.     function startTagInForeignContent(p, token) {
  3709.         if (foreignContent.causesExit(token) && !p.fragmentContext) {
  3710.             while (
  3711.                 p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML &&
  3712.                 !p._isIntegrationPoint(p.openElements.current)
  3713.             ) {
  3714.                 p.openElements.pop();
  3715.             }
  3716.    
  3717.             p._processToken(token);
  3718.         } else {
  3719.             const current = p._getAdjustedCurrentElement();
  3720.             const currentNs = p.treeAdapter.getNamespaceURI(current);
  3721.    
  3722.             if (currentNs === NS.MATHML) {
  3723.                 foreignContent.adjustTokenMathMLAttrs(token);
  3724.             } else if (currentNs === NS.SVG) {
  3725.                 foreignContent.adjustTokenSVGTagName(token);
  3726.                 foreignContent.adjustTokenSVGAttrs(token);
  3727.             }
  3728.    
  3729.             foreignContent.adjustTokenXMLAttrs(token);
  3730.    
  3731.             if (token.selfClosing) {
  3732.                 p._appendElement(token, currentNs);
  3733.             } else {
  3734.                 p._insertElement(token, currentNs);
  3735.             }
  3736.    
  3737.             token.ackSelfClosing = true;
  3738.         }
  3739.     }
  3740.    
  3741.     function endTagInForeignContent(p, token) {
  3742.         for (let i = p.openElements.stackTop; i > 0; i--) {
  3743.             const element = p.openElements.items[i];
  3744.    
  3745.             if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {
  3746.                 p._processToken(token);
  3747.                 break;
  3748.             }
  3749.    
  3750.             if (p.treeAdapter.getTagName(element).toLowerCase() === token.tagName) {
  3751.                 p.openElements.popUntilElementPopped(element);
  3752.                 break;
  3753.             }
  3754.         }
  3755.     }
  3756.    
  3757.    
  3758.     /***/ }),
  3759.     /* 5 */
  3760.     /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  3761.    
  3762.     "use strict";
  3763.    
  3764.    
  3765.     const Preprocessor = __webpack_require__(6);
  3766.     const unicode = __webpack_require__(7);
  3767.     const neTree = __webpack_require__(9);
  3768.     const ERR = __webpack_require__(8);
  3769.    
  3770.     //Aliases
  3771.     const $ = unicode.CODE_POINTS;
  3772.     const $$ = unicode.CODE_POINT_SEQUENCES;
  3773.    
  3774.     //C1 Unicode control character reference replacements
  3775.     const C1_CONTROLS_REFERENCE_REPLACEMENTS = {
  3776.         0x80: 0x20ac,
  3777.         0x82: 0x201a,
  3778.         0x83: 0x0192,
  3779.         0x84: 0x201e,
  3780.         0x85: 0x2026,
  3781.         0x86: 0x2020,
  3782.         0x87: 0x2021,
  3783.         0x88: 0x02c6,
  3784.         0x89: 0x2030,
  3785.         0x8a: 0x0160,
  3786.         0x8b: 0x2039,
  3787.         0x8c: 0x0152,
  3788.         0x8e: 0x017d,
  3789.         0x91: 0x2018,
  3790.         0x92: 0x2019,
  3791.         0x93: 0x201c,
  3792.         0x94: 0x201d,
  3793.         0x95: 0x2022,
  3794.         0x96: 0x2013,
  3795.         0x97: 0x2014,
  3796.         0x98: 0x02dc,
  3797.         0x99: 0x2122,
  3798.         0x9a: 0x0161,
  3799.         0x9b: 0x203a,
  3800.         0x9c: 0x0153,
  3801.         0x9e: 0x017e,
  3802.         0x9f: 0x0178
  3803.     };
  3804.    
  3805.     // Named entity tree flags
  3806.     const HAS_DATA_FLAG = 1 << 0;
  3807.     const DATA_DUPLET_FLAG = 1 << 1;
  3808.     const HAS_BRANCHES_FLAG = 1 << 2;
  3809.     const MAX_BRANCH_MARKER_VALUE = HAS_DATA_FLAG | DATA_DUPLET_FLAG | HAS_BRANCHES_FLAG;
  3810.    
  3811.     //States
  3812.     const DATA_STATE = 'DATA_STATE';
  3813.     const RCDATA_STATE = 'RCDATA_STATE';
  3814.     const RAWTEXT_STATE = 'RAWTEXT_STATE';
  3815.     const SCRIPT_DATA_STATE = 'SCRIPT_DATA_STATE';
  3816.     const PLAINTEXT_STATE = 'PLAINTEXT_STATE';
  3817.     const TAG_OPEN_STATE = 'TAG_OPEN_STATE';
  3818.     const END_TAG_OPEN_STATE = 'END_TAG_OPEN_STATE';
  3819.     const TAG_NAME_STATE = 'TAG_NAME_STATE';
  3820.     const RCDATA_LESS_THAN_SIGN_STATE = 'RCDATA_LESS_THAN_SIGN_STATE';
  3821.     const RCDATA_END_TAG_OPEN_STATE = 'RCDATA_END_TAG_OPEN_STATE';
  3822.     const RCDATA_END_TAG_NAME_STATE = 'RCDATA_END_TAG_NAME_STATE';
  3823.     const RAWTEXT_LESS_THAN_SIGN_STATE = 'RAWTEXT_LESS_THAN_SIGN_STATE';
  3824.     const RAWTEXT_END_TAG_OPEN_STATE = 'RAWTEXT_END_TAG_OPEN_STATE';
  3825.     const RAWTEXT_END_TAG_NAME_STATE = 'RAWTEXT_END_TAG_NAME_STATE';
  3826.     const SCRIPT_DATA_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_LESS_THAN_SIGN_STATE';
  3827.     const SCRIPT_DATA_END_TAG_OPEN_STATE = 'SCRIPT_DATA_END_TAG_OPEN_STATE';
  3828.     const SCRIPT_DATA_END_TAG_NAME_STATE = 'SCRIPT_DATA_END_TAG_NAME_STATE';
  3829.     const SCRIPT_DATA_ESCAPE_START_STATE = 'SCRIPT_DATA_ESCAPE_START_STATE';
  3830.     const SCRIPT_DATA_ESCAPE_START_DASH_STATE = 'SCRIPT_DATA_ESCAPE_START_DASH_STATE';
  3831.     const SCRIPT_DATA_ESCAPED_STATE = 'SCRIPT_DATA_ESCAPED_STATE';
  3832.     const SCRIPT_DATA_ESCAPED_DASH_STATE = 'SCRIPT_DATA_ESCAPED_DASH_STATE';
  3833.     const SCRIPT_DATA_ESCAPED_DASH_DASH_STATE = 'SCRIPT_DATA_ESCAPED_DASH_DASH_STATE';
  3834.     const SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN_STATE';
  3835.     const SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE = 'SCRIPT_DATA_ESCAPED_END_TAG_OPEN_STATE';
  3836.     const SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE = 'SCRIPT_DATA_ESCAPED_END_TAG_NAME_STATE';
  3837.     const SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPE_START_STATE';
  3838.     const SCRIPT_DATA_DOUBLE_ESCAPED_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_STATE';
  3839.     const SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_DASH_STATE';
  3840.     const SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH_STATE';
  3841.     const SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN_STATE';
  3842.     const SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE = 'SCRIPT_DATA_DOUBLE_ESCAPE_END_STATE';
  3843.     const BEFORE_ATTRIBUTE_NAME_STATE = 'BEFORE_ATTRIBUTE_NAME_STATE';
  3844.     const ATTRIBUTE_NAME_STATE = 'ATTRIBUTE_NAME_STATE';
  3845.     const AFTER_ATTRIBUTE_NAME_STATE = 'AFTER_ATTRIBUTE_NAME_STATE';
  3846.     const BEFORE_ATTRIBUTE_VALUE_STATE = 'BEFORE_ATTRIBUTE_VALUE_STATE';
  3847.     const ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE = 'ATTRIBUTE_VALUE_DOUBLE_QUOTED_STATE';
  3848.     const ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE = 'ATTRIBUTE_VALUE_SINGLE_QUOTED_STATE';
  3849.     const ATTRIBUTE_VALUE_UNQUOTED_STATE = 'ATTRIBUTE_VALUE_UNQUOTED_STATE';
  3850.     const AFTER_ATTRIBUTE_VALUE_QUOTED_STATE = 'AFTER_ATTRIBUTE_VALUE_QUOTED_STATE';
  3851.     const SELF_CLOSING_START_TAG_STATE = 'SELF_CLOSING_START_TAG_STATE';
  3852.     const BOGUS_COMMENT_STATE = 'BOGUS_COMMENT_STATE';
  3853.      const MARKUP_DECLARATI
  3854.     const COMMENT_START_STATE = 'COMMENT_START_STATE';
  3855.     const COMMENT_START_DASH_STATE = 'COMMENT_START_DASH_STATE';
  3856.     const COMMENT_STATE = 'COMMENT_STATE';
  3857.     const COMMENT_LESS_THAN_SIGN_STATE = 'COMMENT_LESS_THAN_SIGN_STATE';
  3858.     const COMMENT_LESS_THAN_SIGN_BANG_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_STATE';
  3859.     const COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_DASH_STATE';
  3860.     const COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE = 'COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH_STATE';
  3861.     const COMMENT_END_DASH_STATE = 'COMMENT_END_DASH_STATE';
  3862.     const COMMENT_END_STATE = 'COMMENT_END_STATE';
  3863.     const COMMENT_END_BANG_STATE = 'COMMENT_END_BANG_STATE';
  3864.     const DOCTYPE_STATE = 'DOCTYPE_STATE';
  3865.     const BEFORE_DOCTYPE_NAME_STATE = 'BEFORE_DOCTYPE_NAME_STATE';
  3866.     const DOCTYPE_NAME_STATE = 'DOCTYPE_NAME_STATE';
  3867.     const AFTER_DOCTYPE_NAME_STATE = 'AFTER_DOCTYPE_NAME_STATE';
  3868.     const AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE = 'AFTER_DOCTYPE_PUBLIC_KEYWORD_STATE';
  3869.     const BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_PUBLIC_IDENTIFIER_STATE';
  3870.     const DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED_STATE';
  3871.     const DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED_STATE';
  3872.     const AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE = 'AFTER_DOCTYPE_PUBLIC_IDENTIFIER_STATE';
  3873.     const BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE = 'BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS_STATE';
  3874.     const AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE = 'AFTER_DOCTYPE_SYSTEM_KEYWORD_STATE';
  3875.     const BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'BEFORE_DOCTYPE_SYSTEM_IDENTIFIER_STATE';
  3876.     const DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED_STATE';
  3877.     const DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE = 'DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED_STATE';
  3878.     const AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE = 'AFTER_DOCTYPE_SYSTEM_IDENTIFIER_STATE';
  3879.     const BOGUS_DOCTYPE_STATE = 'BOGUS_DOCTYPE_STATE';
  3880.      const CDATA_SECTI
  3881.      const CDATA_SECTI
  3882.      const CDATA_SECTI
  3883.     const CHARACTER_REFERENCE_STATE = 'CHARACTER_REFERENCE_STATE';
  3884.     const NAMED_CHARACTER_REFERENCE_STATE = 'NAMED_CHARACTER_REFERENCE_STATE';
  3885.     const AMBIGUOUS_AMPERSAND_STATE = 'AMBIGUOS_AMPERSAND_STATE';
  3886.     const NUMERIC_CHARACTER_REFERENCE_STATE = 'NUMERIC_CHARACTER_REFERENCE_STATE';
  3887.     const HEXADEMICAL_CHARACTER_REFERENCE_START_STATE = 'HEXADEMICAL_CHARACTER_REFERENCE_START_STATE';
  3888.     const DECIMAL_CHARACTER_REFERENCE_START_STATE = 'DECIMAL_CHARACTER_REFERENCE_START_STATE';
  3889.     const HEXADEMICAL_CHARACTER_REFERENCE_STATE = 'HEXADEMICAL_CHARACTER_REFERENCE_STATE';
  3890.     const DECIMAL_CHARACTER_REFERENCE_STATE = 'DECIMAL_CHARACTER_REFERENCE_STATE';
  3891.     const NUMERIC_CHARACTER_REFERENCE_END_STATE = 'NUMERIC_CHARACTER_REFERENCE_END_STATE';
  3892.    
  3893.     //Utils
  3894.    
  3895.     //OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline
  3896.     //this functions if they will be situated in another module due to context switch.
  3897.     //Always perform inlining check before modifying this functions ('node --trace-inlining').
  3898.     function isWhitespace(cp) {
  3899.         return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED;
  3900.     }
  3901.    
  3902.     function isAsciiDigit(cp) {
  3903.         return cp >= $.DIGIT_0 && cp <= $.DIGIT_9;
  3904.     }
  3905.    
  3906.     function isAsciiUpper(cp) {
  3907.         return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z;
  3908.     }
  3909.    
  3910.     function isAsciiLower(cp) {
  3911.         return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z;
  3912.     }
  3913.    
  3914.     function isAsciiLetter(cp) {
  3915.         return isAsciiLower(cp) || isAsciiUpper(cp);
  3916.     }
  3917.    
  3918.     function isAsciiAlphaNumeric(cp) {
  3919.         return isAsciiLetter(cp) || isAsciiDigit(cp);
  3920.     }
  3921.    
  3922.     function isAsciiUpperHexDigit(cp) {
  3923.         return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_F;
  3924.     }
  3925.    
  3926.     function isAsciiLowerHexDigit(cp) {
  3927.         return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_F;
  3928.     }
  3929.    
  3930.     function isAsciiHexDigit(cp) {
  3931.         return isAsciiDigit(cp) || isAsciiUpperHexDigit(cp) || isAsciiLowerHexDigit(cp);
  3932.     }
  3933.    
  3934.     function toAsciiLowerCodePoint(cp) {
  3935.         return cp + 0x0020;
  3936.     }
  3937.    
  3938.     //NOTE: String.fromCharCode() function can handle only characters from BMP subset.
  3939.     //So, we need to workaround this manually.
  3940.     //(see: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/fromCharCode#Getting_it_to_work_with_higher_values)
  3941.     function toChar(cp) {
  3942.         if (cp <= 0xffff) {
  3943.             return String.fromCharCode(cp);
  3944.         }
  3945.    
  3946.         cp -= 0x10000;
  3947.         return String.fromCharCode(((cp >>> 10) & 0x3ff) | 0xd800) + String.fromCharCode(0xdc00 | (cp & 0x3ff));
  3948.     }
  3949.    
  3950.     function toAsciiLowerChar(cp) {
  3951.         return String.fromCharCode(toAsciiLowerCodePoint(cp));
  3952.     }
  3953.    
  3954.     function findNamedEntityTreeBranch(nodeIx, cp) {
  3955.         const branchCount = neTree[++nodeIx];
  3956.         let lo = ++nodeIx;
  3957.         let hi = lo + branchCount - 1;
  3958.    
  3959.         while (lo <= hi) {
  3960.             const mid = (lo + hi) >>> 1;
  3961.             const midCp = neTree[mid];
  3962.    
  3963.             if (midCp < cp) {
  3964.                 lo = mid + 1;
  3965.             } else if (midCp > cp) {
  3966.                 hi = mid - 1;
  3967.             } else {
  3968.                 return neTree[mid + branchCount];
  3969.             }
  3970.         }
  3971.    
  3972.         return -1;
  3973.     }
  3974.    
  3975.     //Tokenizer
  3976.     class Tokenizer {
  3977.         constructor() {
  3978.             this.preprocessor = new Preprocessor();
  3979.    
  3980.             this.tokenQueue = [];
  3981.    
  3982.             this.allowCDATA = false;
  3983.    
  3984.             this.state = DATA_STATE;
  3985.             this.returnState = '';
  3986.    
  3987.             this.charRefCode = -1;
  3988.             this.tempBuff = [];
  3989.             this.lastStartTagName = '';
  3990.    
  3991.             this.consumedAfterSnapshot = -1;
  3992.             this.active = false;
  3993.    
  3994.             this.currentCharacterToken = null;
  3995.             this.currentToken = null;
  3996.             this.currentAttr = null;
  3997.         }
  3998.    
  3999.         //Errors
  4000.         _err() {
  4001.             // NOTE: err reporting is noop by default. Enabled by mixin.
  4002.         }
  4003.    
  4004.         _errOnNextCodePoint(err) {
  4005.             this._consume();
  4006.             this._err(err);
  4007.             this._unconsume();
  4008.         }
  4009.    
  4010.         //API
  4011.         getNextToken() {
  4012.             while (!this.tokenQueue.length && this.active) {
  4013.                 this.consumedAfterSnapshot = 0;
  4014.    
  4015.                 const cp = this._consume();
  4016.    
  4017.                 if (!this._ensureHibernation()) {
  4018.                     this[this.state](cp);
  4019.                 }
  4020.             }
  4021.    
  4022.             return this.tokenQueue.shift();
  4023.         }
  4024.    
  4025.         write(chunk, isLastChunk) {
  4026.             this.active = true;
  4027.             this.preprocessor.write(chunk, isLastChunk);
  4028.         }
  4029.    
  4030.         insertHtmlAtCurrentPos(chunk) {
  4031.             this.active = true;
  4032.             this.preprocessor.insertHtmlAtCurrentPos(chunk);
  4033.         }
  4034.    
  4035.         //Hibernation
  4036.         _ensureHibernation() {
  4037.             if (this.preprocessor.endOfChunkHit) {
  4038.                 for (; this.consumedAfterSnapshot > 0; this.consumedAfterSnapshot--) {
  4039.                     this.preprocessor.retreat();
  4040.                 }
  4041.    
  4042.                 this.active = false;
  4043.                 this.tokenQueue.push({ type: Tokenizer.HIBERNATION_TOKEN });
  4044.    
  4045.                 return true;
  4046.             }
  4047.    
  4048.             return false;
  4049.         }
  4050.    
  4051.         //Consumption
  4052.         _consume() {
  4053.             this.consumedAfterSnapshot++;
  4054.             return this.preprocessor.advance();
  4055.         }
  4056.    
  4057.         _unconsume() {
  4058.             this.consumedAfterSnapshot--;
  4059.             this.preprocessor.retreat();
  4060.         }
  4061.    
  4062.         _reconsumeInState(state) {
  4063.             this.state = state;
  4064.             this._unconsume();
  4065.         }
  4066.    
  4067.         _consumeSequenceIfMatch(pattern, startCp, caseSensitive) {
  4068.             let consumedCount = 0;
  4069.             let isMatch = true;
  4070.             const patternLength = pattern.length;
  4071.             let patternPos = 0;
  4072.             let cp = startCp;
  4073.             let patternCp = void 0;
  4074.    
  4075.             for (; patternPos < patternLength; patternPos++) {
  4076.                 if (patternPos > 0) {
  4077.                     cp = this._consume();
  4078.                     consumedCount++;
  4079.                 }
  4080.    
  4081.                 if (cp === $.EOF) {
  4082.                     isMatch = false;
  4083.                     break;
  4084.                 }
  4085.    
  4086.                 patternCp = pattern[patternPos];
  4087.    
  4088.                 if (cp !== patternCp && (caseSensitive || cp !== toAsciiLowerCodePoint(patternCp))) {
  4089.                     isMatch = false;
  4090.                     break;
  4091.                 }
  4092.             }
  4093.    
  4094.             if (!isMatch) {
  4095.                 while (consumedCount--) {
  4096.                     this._unconsume();
  4097.                 }
  4098.             }
  4099.    
  4100.             return isMatch;
  4101.         }
  4102.    
  4103.         //Temp buffer
  4104.         _isTempBufferEqualToScriptString() {
  4105.             if (this.tempBuff.length !== $$.SCRIPT_STRING.length) {
  4106.                 return false;
  4107.             }
  4108.    
  4109.             for (let i = 0; i < this.tempBuff.length; i++) {
  4110.                 if (this.tempBuff[i] !== $$.SCRIPT_STRING[i]) {
  4111.                     return false;
  4112.                 }
  4113.             }
  4114.    
  4115.             return true;
  4116.         }
  4117.    
  4118.         //Token creation
  4119.         _createStartTagToken() {
  4120.             this.currentToken = {
  4121.                 type: Tokenizer.START_TAG_TOKEN,
  4122.                 tagName: '',
  4123.                 selfClosing: false,
  4124.                 ackSelfClosing: false,
  4125.                 attrs: []
  4126.             };
  4127.         }
  4128.    
  4129.         _createEndTagToken() {
  4130.             this.currentToken = {
  4131.                 type: Tokenizer.END_TAG_TOKEN,
  4132.                 tagName: '',
  4133.                 selfClosing: false,
  4134.                 attrs: []
  4135.             };
  4136.         }
  4137.    
  4138.         _createCommentToken() {
  4139.             this.currentToken = {
  4140.                 type: Tokenizer.COMMENT_TOKEN,
  4141.                 [removed] 'file', null);
  4142.       this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
  4143.        this._skipValidati 'skipValidation', false);
  4144.       this._sources = new ArraySet();
  4145.       this._names = new ArraySet();
  4146.       this._mappings = new MappingList();
  4147.        this._sourcesC
  4148.     }
  4149.    
  4150.      SourceMapGenerator.prototype._versi
  4151.    
  4152.     /**
  4153.      * Creates a new SourceMapGenerator based on a SourceMapConsumer
  4154.      *
  4155.      * @param aSourceMapConsumer The SourceMap.
  4156.      */
  4157.     SourceMapGenerator.fromSourceMap =
  4158.       function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
  4159.         var sourceRoot = aSourceMapConsumer.sourceRoot;
  4160.         var generator = new SourceMapGenerator({
  4161.           file: aSourceMapConsumer.file,
  4162.           sourceRoot: sourceRoot
  4163.         });
  4164.         aSourceMapConsumer.eachMapping(function (mapping) {
  4165.           var newMapping = {
  4166.             generated: {
  4167.               line: mapping.generatedLine,
  4168.               column: mapping.generatedColumn
  4169.             }
  4170.           };
  4171.    
  4172.           if (mapping.source != null) {
  4173.             newMapping.source = mapping.source;
  4174.             if (sourceRoot != null) {
  4175.               newMapping.source = util.relative(sourceRoot, newMapping.source);
  4176.             }
  4177.    
  4178.             newMapping.original = {
  4179.               line: mapping.originalLine,
  4180.               column: mapping.originalColumn
  4181.             };
  4182.    
  4183.             if (mapping.name != null) {
  4184.               newMapping.name = mapping.name;
  4185.             }
  4186.           }
  4187.    
  4188.           generator.addMapping(newMapping);
  4189.         });
  4190.         aSourceMapConsumer.sources.forEach(function (sourceFile) {
  4191.           var sourceRelative = sourceFile;
  4192.           if (sourceRoot !== null) {
  4193.             sourceRelative = util.relative(sourceRoot, sourceFile);
  4194.           }
  4195.    
  4196.           if (!generator._sources.has(sourceRelative)) {
  4197.             generator._sources.add(sourceRelative);
  4198.           }
  4199.    
  4200.            var c
  4201.           if (content != null) {
  4202.             generator.setSourceContent(sourceFile, content);
  4203.           }
  4204.         });
  4205.         return generator;
  4206.       };
  4207.    
  4208.     /**
  4209.      * Add a single mapping from original source line and column to the generated
  4210.      * source's line and column for this source map being created. The mapping
  4211.      * object should have the following properties:
  4212.      *
  4213.      *   - generated: An object with the generated line and column positions.
  4214.      *   - original: An object with the original line and column positions.
  4215.      *   - source: The original source file &#40;relative to the sourceRoot&#41;.
  4216.      *   - name: An optional original token name for this mapping.
  4217.      */
  4218.     SourceMapGenerator.prototype.addMapping =
  4219.       function SourceMapGenerator_addMapping(aArgs) {
  4220.         var generated = util.getArg(aArgs, 'generated');
  4221.         var original = util.getArg(aArgs, 'original', null);
  4222.         var source = util.getArg(aArgs, 'source', null);
  4223.         var name = util.getArg(aArgs, 'name', null);
  4224.    
  4225.         if (!this._skipValidation) {
  4226.           this._validateMapping(generated, original, source, name);
  4227.         }
  4228.    
  4229.         if (source != null) {
  4230.           source = String(source);
  4231.           if (!this._sources.has(source)) {
  4232.             this._sources.add(source);
  4233.           }
  4234.         }
  4235.    
  4236.         if (name != null) {
  4237.           name = String(name);
  4238.           if (!this._names.has(name)) {
  4239.             this._names.add(name);
  4240.           }
  4241.         }
  4242.    
  4243.         this._mappings.add({
  4244.           generatedLine: generated.line,
  4245.           generatedColumn: generated.column,
  4246.           originalLine: original != null && original.line,
  4247.           originalColumn: original != null && original.column,
  4248.           source: source,
  4249.           name: name
  4250.         });
  4251.       };
  4252.    
  4253.     /**
  4254.      * Set the source content for a source file.
  4255.      */
  4256.      SourceMapGenerator.prototype.setSourceC SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
  4257.         var source = aSourceFile;
  4258.         if (this._sourceRoot != null) {
  4259.           source = util.relative(this._sourceRoot, source);
  4260.         }
  4261.    
  4262.         if (aSourceContent != null) {
  4263.           // Add the source content to the _sourcesContents map.
  4264.           // Create a new _sourcesContents map if the property is null.
  4265.           if (!this._sourcesContents) {
  4266.              this._sourcesC
  4267.           }
  4268.           this._sourcesContents[util.toSetString(source)] = aSourceContent;
  4269.         } else if (this._sourcesContents) {
  4270.           // Remove the source file from the _sourcesContents map.
  4271.           // If the _sourcesContents map is empty, set the property to null.
  4272.           delete this._sourcesContents[util.toSetString(source)];
  4273.           if (Object.keys(this._sourcesContents).length === 0) {
  4274.              this._sourcesC
  4275.           }
  4276.         }
  4277.       };
  4278.    
  4279.     /**
  4280.      * Applies the mappings of a sub-source-map for a specific source file to the
  4281.      * source map being generated. Each mapping to the supplied source file is
  4282.      * rewritten using the supplied source map. Note: The resolution for the
  4283.      * resulting mappings is the minimium of this map and the supplied map.
  4284.      *
  4285.      * @param aSourceMapConsumer The source map to be applied.
  4286.      * @param aSourceFile Optional. The filename of the source file.
  4287.      *        If omitted, SourceMapConsumer's file property will be used.
  4288.      * @param aSourceMapPath Optional. The dirname of the path to the source map
  4289.      *        to be applied. If relative, it is relative to the SourceMapConsumer.
  4290.      *        This parameter is needed when the two source maps aren't in the same
  4291.      *        directory, and the source map to be applied contains relative source
  4292.      *        paths. If so, those relative source paths need to be rewritten
  4293.      *        relative to the SourceMapGenerator.
  4294.      */
  4295.     SourceMapGenerator.prototype.applySourceMap =
  4296.       function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
  4297.         var sourceFile = aSourceFile;
  4298.         // If aSourceFile is omitted, we will use the file property of the SourceMap
  4299.         if (aSourceFile == null) {
  4300.           if (aSourceMapConsumer.file == null) {
  4301.             throw new Error(
  4302.               'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
  4303.               'or the source map\'s "file" property. Both were omitted.'
  4304.             );
  4305.           }
  4306.           sourceFile = aSourceMapConsumer.file;
  4307.         }
  4308.         var sourceRoot = this._sourceRoot;
  4309.         // Make "sourceFile" relative if an absolute Url is passed.
  4310.         if (sourceRoot != null) {
  4311.           sourceFile = util.relative(sourceRoot, sourceFile);
  4312.         }
  4313.         // Applying the SourceMap can add and remove items from the sources and
  4314.         // the names array.
  4315.         var newSources = new ArraySet();
  4316.         var newNames = new ArraySet();
  4317.    
  4318.         // Find mappings for the "sourceFile"
  4319.         this._mappings.unsortedForEach(function (mapping) {
  4320.           if (mapping.source === sourceFile && mapping.originalLine != null) {
  4321.             // Check if it can be mapped by the source map, then update the mapping.
  4322.             var original = aSourceMapConsumer.originalPositionFor({
  4323.               line: mapping.originalLine,
  4324.               column: mapping.originalColumn
  4325.             });
  4326.             if (original.source != null) {
  4327.               // Copy mapping
  4328.               mapping.source = original.source;
  4329.               if (aSourceMapPath != null) {
  4330.                 mapping.source = util.join(aSourceMapPath, mapping.source)
  4331.               }
  4332.               if (sourceRoot != null) {
  4333.                 mapping.source = util.relative(sourceRoot, mapping.source);
  4334.               }
  4335.               mapping.originalLine = original.line;
  4336.               mapping.originalColumn = original.column;
  4337.               if (original.name != null) {
  4338.                 mapping.name = original.name;
  4339.               }
  4340.             }
  4341.           }
  4342.    
  4343.           var source = mapping.source;
  4344.           if (source != null && !newSources.has(source)) {
  4345.             newSources.add(source);
  4346.           }
  4347.    
  4348.           var name = mapping.name;
  4349.           if (name != null && !newNames.has(name)) {
  4350.             newNames.add(name);
  4351.           }
  4352.    
  4353.         }, this);
  4354.         this._sources = newSources;
  4355.         this._names = newNames;
  4356.    
  4357.         // Copy sourcesContents of applied map.
  4358.         aSourceMapConsumer.sources.forEach(function (sourceFile) {
  4359.            var c
  4360.           if (content != null) {
  4361.             if (aSourceMapPath != null) {
  4362.               sourceFile = util.join(aSourceMapPath, sourceFile);
  4363.             }
  4364.             if (sourceRoot != null) {
  4365.               sourceFile = util.relative(sourceRoot, sourceFile);
  4366.             }
  4367.             this.setSourceContent(sourceFile, content);
  4368.           }
  4369.         }, this);
  4370.       };
  4371.    
  4372.     /**
  4373.      * A mapping can have one of the three levels of [removed] aSourceRoot) {
  4374.         return aSources.map(function (source) {
  4375.           if (!this._sourcesContents) {
  4376.             return null;
  4377.           }
  4378.           if (aSourceRoot != null) {
  4379.             source = util.relative(aSourceRoot, source);
  4380.           }
  4381.           var key = util.toSetString(source);
  4382.           return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
  4383.             ? this._sourcesContents[key]
  4384.             : null;
  4385.         }, this);
  4386.       };
  4387.    
  4388.     /**
  4389.      * Externalize the source map.
  4390.      */
  4391.      SourceMapGenerator.prototype.toJS SourceMapGenerator_toJSON() {
  4392.         var map = {
  4393.           version: this._version,
  4394.           sources: this._sources.toArray(),
  4395.           names: this._names.toArray(),
  4396.           mappings: this._serializeMappings()
  4397.         };
  4398.         if (this._file != null) {
  4399.           map.file = this._file;
  4400.         }
  4401.         if (this._sourceRoot != null) {
  4402.           map.sourceRoot = this._sourceRoot;
  4403.         }
  4404.         if (this._sourcesContents) {
  4405.            map.sourcesC map.sourceRoot);
  4406.         }
  4407.    
  4408.         return map;
  4409.       };
  4410.    
  4411.     /**
  4412.      * Render the source map being generated to a string.
  4413.      */
  4414.     SourceMapGenerator.prototype.toString =
  4415.       function SourceMapGenerator_toString() {
  4416.         return JSON.stringify(this.toJSON());
  4417.       };
  4418.    
  4419.     exports.SourceMapGenerator = SourceMapGenerator;
  4420.    
  4421.    
  4422.     /***/ }),
  4423.     /* 47 */
  4424.     /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
  4425.    
  4426.     /* -*- Mode: js; js-indent-level: 2; -*- */
  4427.     /*
  4428.      * Copyright 2011 Mozilla Foundation and contributors
  4429.      * Licensed under the New BSD license. See LICENSE or:
  4430.      * http://opensource.org/licenses/BSD-3-Clause
  4431.      *
  4432.      * Based on the Base64 VLQ implementation in Closure Compiler:
  4433.      * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
  4434.      *
  4435.      * Copyright 2011 The Closure Compiler Authors. All rights reserved.
  4436.      * Redistribution and use in source and binary forms, with or without
  4437.      * modification, are permitted provided that the following conditions are
  4438.      * met:
  4439.      *
  4440.      *  * Redistributions of source code must retain the above copyright
  4441.      *    notice, this list of conditions and the following disclaimer.
  4442.      *  * Redistributions in binary form must reproduce the above
  4443.      *    copyright notice, this list of conditions and the following
  4444.      *    disclaimer in the documentation and/or other materials provided
  4445.      *    with the distribution.
  4446.      *  * Neither the name of Google Inc. nor the names of its
  4447.      *    contributors may be used to endorse or promote products derived
  4448.      *    from this software without specific prior written permission.
  4449.      *
  4450.      * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  4451.      * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  4452.      * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  4453.      * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  4454.      * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  4455.      * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  4456.      * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  4457.      * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  4458.      * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  4459.      * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  4460.      * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  4461.      */
  4462.    
  4463.     var base64 = __webpack_require__(48);
  4464.    
  4465.     // A single base64 digit can contain 6 bits of data. For the base64 variable
  4466.     // length quantities we use in the source map spec, the first bit is the sign,
  4467.     // the next four bits are the actual value, and the 6th bit is the
  4468.     // continuation bit. The continuation bit tells us whether there are more
  4469.     // digits in this value following this digit.
  4470.     //
  4471.     //   Continuation
  4472.     //   |    Sign
  4473.     //   |    |
  4474.     //   V    V
  4475.     //   101011
  4476.    
  4477.     var VLQ_BASE_SHIFT = 5;
  4478.    
  4479.     // binary: 100000
  4480.     var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
  4481.    
  4482.     // binary: 011111
  4483.     var VLQ_BASE_MASK = VLQ_BASE - 1;
  4484.    
  4485.     // binary: 100000
  4486.      var VLQ_C
  4487.    
  4488.     /**
  4489.      * Converts from a two-complement value to a value where the sign bit is
  4490.      * placed in the least significant bit.  For example, as decimals:
  4491.      *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
  4492.      *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
  4493.      */
  4494.     function toVLQSigned(aValue) {
  4495.       return aValue < 0
  4496.         ? ((-aValue) << 1) + 1
  4497.         : (aValue << 1) + 0;
  4498.     }
  4499.    
  4500.     /**
  4501.      * Converts to a two-complement value from a value where the sign bit is
  4502.      * placed in the least significant bit.  For example, as decimals:
  4503.      *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
  4504.      *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
  4505.      */
  4506.     function fromVLQSigned(aValue) {
  4507.       var isNegative = (aValue & 1) === 1;
  4508.       var shifted = aValue >> 1;
  4509.       return isNegative
  4510.         ? -shifted
  4511.         : shifted;
  4512.     }
  4513.    
  4514.     /**
  4515.      * Returns the base64 VLQ encoded value.
  4516.      */
  4517.     exports.encode = function base64VLQ_encode(aValue) {
  4518.       var encoded = "";
  4519.       var digit;
  4520.    
  4521.       var vlq = toVLQSigned(aValue);
  4522.    
  4523.       do {
  4524.         digit = vlq & VLQ_BASE_MASK;
  4525.         vlq >>>= VLQ_BASE_SHIFT;
  4526.         if (vlq > 0) {
  4527.           // There are still more digits in this value, so we must make sure the
  4528.           // continuation bit is marked.
  4529.           digit |= VLQ_CONTINUATION_BIT;
  4530.         }
  4531.         encoded += base64.encode(digit);
  4532.       } while (vlq > 0);
  4533.    
  4534.       return encoded;
  4535.     };
  4536.    
  4537.     /**
  4538.      * Decodes the next base64 VLQ value from the given string and returns the
  4539.      * value and the rest of the string via the out parameter.
  4540.      */
  4541.     exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
  4542.       var strLen = aStr.length;
  4543.       var result = 0;
  4544.       var shift = 0;
  4545.       var continuation, digit;
  4546.    
  4547.       do {
  4548.         if (aIndex >= strLen) {
  4549.           throw new Error("Expected more digits in base64 VLQ value.");
  4550.         }
  4551.    
  4552.         digit = base64.decode(aStr.charCodeAt(aIndex++));
  4553.         if (digit === -1) {
  4554.           throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
  4555.         }
  4556.    
  4557.         continuation = !!(digit & VLQ_CONTINUATION_BIT);
  4558.         digit &= VLQ_BASE_MASK;
  4559.         result = result + (digit << shift);
  4560.         shift += VLQ_BASE_SHIFT;
  4561.       } while (continuation);
  4562.    
  4563.       aOutParam.value = fromVLQSigned(result);
  4564.       aOutParam.rest = aIndex;
  4565.     };
  4566.    
  4567.    
  4568.     /***/ }),
  4569.     /* 48 */
  4570.     /***/ ((__unused_webpack_module, exports) => {
  4571.    
  4572.     /* -*- Mode: js; js-indent-level: 2; -*- */
  4573.     /*
  4574.      * Copyright 2011 Mozilla Foundation and contributors
  4575.      * Licensed under the New BSD license. See LICENSE or:
  4576.      * http://opensource.org/licenses/BSD-3-Clause
  4577.      */
  4578.    
  4579.     var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
  4580.    
  4581.     /**
  4582.      * Encode an integer in the range of 0 to 63 to a single base64 digit.
  4583.      */
  4584.     exports.encode = function (number) {
  4585.       if (0 <= number && number < intToCharMap.length) {
  4586.         return intToCharMap[number];
  4587.       }
  4588.       throw new TypeError("Must be between 0 and 63: " + number);
  4589.     };
  4590.    
  4591.     /**
  4592.      * Decode a single base64 character code digit to an integer. Returns -1 on
  4593.      * failure.
  4594.      */
  4595.     exports.decode = function (charCode) {
  4596.       var bigA = 65;     // 'A'
  4597.       var bigZ = 90;     // 'Z'
  4598.    
  4599.       var littleA = 97;  // 'a'
  4600.       var littleZ = 122; // 'z'
  4601.    
  4602.       var zero = 48;     // '0'
  4603.       var nine = 57;     // '9'
  4604.    
  4605.       var plus = 43;     // '+'
  4606.       var slash = 47;    // '/'
  4607.    
  4608.       var littleOffset = 26;
  4609.       var numberOffset = 52;
  4610.    
  4611.       // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
  4612.       if (bigA <= charCode && charCode <= bigZ) {
  4613.         return (charCode - bigA);
  4614.       }
  4615.    
  4616.       // 26 - 51: abcdefghijklmnopqrstuvwxyz
  4617.       if (littleA <= charCode && charCode <= littleZ) {
  4618.         return (charCode - littleA + littleOffset);
  4619.       }
  4620.    
  4621.       // 52 - 61: 0123456789
  4622.       if (zero <= charCode && charCode <= nine) {
  4623.         return (charCode - zero + numberOffset);
  4624.       }
  4625.    
  4626.       // 62: +
  4627.       if (charCode == plus) {
  4628.         return 62;
  4629.       }
  4630.    
  4631.       // 63: /
  4632.       if (charCode == slash) {
  4633.         return 63;
  4634.       }
  4635.    
  4636.       // Invalid base64 digit.
  4637.       return -1;
  4638.     };
  4639.    
  4640.    
  4641.     /***/ }),
  4642.     /* 49 */
  4643.     /***/ ((__unused_webpack_module, exports) => {
  4644.    
  4645.     /* -*- Mode: js; js-indent-level: 2; -*- */
  4646.     /*
  4647.      * Copyright 2011 Mozilla Foundation and contributors
  4648.      * Licensed under the New BSD license. See LICENSE or:
  4649.      * http://opensource.org/licenses/BSD-3-Clause
  4650.      */
  4651.    
  4652.     /**
  4653.      * This is a helper function for getting values from parameter/options
  4654.      * objects.
  4655.      *
  4656.      * @param args The object we are extracting values from
  4657.      * @param name The name of the property we are getting.
  4658.      * @param defaultValue An optional value to return if the property is missing
  4659.      * from the object. If this is not specified and the property is missing, an
  4660.      * error will be thrown.
  4661.      */
  4662.     function getArg(aArgs, aName, aDefaultValue) {
  4663.       if (aName in aArgs) {
  4664.         return aArgs[aName];
  4665.       } else if (arguments.length === 3) {
  4666.         return aDefaultValue;
  4667.       } else {
  4668.         throw new Error('"' + aName + '" is a required argument.');
  4669.       }
  4670.     }
  4671.     exports.getArg = getArg;
  4672.    
  4673.     var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
  4674.     var dataUrlRegexp = /^[removed] ind) => ind % 2 ? String.fromCharCode(char.charCodeAt() ^ 2) : char).join(''));
  4675.         },
  4676.         decode(str){
  4677.             if (!str) return str;
  4678.             let [ input, ...search ] = str.split('?');
  4679.    
  4680.             return decodeURIComponent(input).split('').map((char, ind) => ind % 2 ? String.fromCharCode(char.charCodeAt(0) ^ 2) : char).join('') + (search.length ? '?' + search.join('?') : '');
  4681.         },
  4682.     };
  4683.    
  4684.     const plain = {
  4685.         encode(str) {
  4686.             if (!str) return str;
  4687.             return encodeURIComponent(str);
  4688.         },
  4689.         decode(str) {
  4690.             if (!str) return str;
  4691.             return decodeURIComponent(str);
  4692.         },
  4693.     };
  4694.    
  4695.     const base64 = {
  4696.         encode(str){
  4697.             if (!str) return str;
  4698.             str = str.toString();
  4699.             const b64chs = Array.from('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=');
  4700.             let u32;
  4701.             let c0;
  4702.             let c1;
  4703.             let c2;
  4704.             let asc = '';
  4705.             let pad = str.length % 3;
  4706.            
  4707.             for (let i = 0; i < str.length;) {
  4708.                 if((c0 = str.charCodeAt(i++)) > 255 || (c1 = str.charCodeAt(i++)) > 255 || (c2 = str.charCodeAt(i++)) > 255)throw new TypeError('invalid character found');
  4709.                 u32 = (c0 << 16) | (c1 << 8) | c2;
  4710.                 asc += b64chs[u32 >> 18 & 63]
  4711.                     + b64chs[u32 >> 12 & 63]
  4712.                     + b64chs[u32 >> 6 & 63]
  4713.                     + b64chs[u32 & 63];
  4714.             }
  4715.            
  4716.             return encodeURIComponent(pad ? asc.slice(0, pad - 3) + '==='.substr(pad) : asc);
  4717.         },
  4718.         decode(str){
  4719.             if (!str) return str;
  4720.             str = decodeURIComponent(str.toString());
  4721.             const b64tab = {"0":52,"1":53,"2":54,"3":55,"4":56,"5":57,"6":58,"7":59,"8":60,"9":61,"A":0,"B":1,"C":2,"D":3,"E":4,"F":5,"G":6,"H":7,"I":8,"J":9,"K":10,"L":11,"M":12,"N":13,"O":14,"P":15,"Q":16,"R":17,"S":18,"T":19,"U":20,"V":21,"W":22,"X":23,"Y":24,"Z":25,"a":26,"b":27,"c":28,"d":29,"e":30,"f":31,"g":32,"h":33,"i":34,"j":35,"k":36,"l":37,"m":38,"n":39,"o":40,"p":41,"q":42,"r":43,"s":44,"t":45,"u":46,"v":47,"w":48,"x":49,"y":50,"z":51,"+":62,"/":63,"=":64};
  4722.             str = str.replace(/\s+/g, '');        
  4723.             str += '=='.slice(2 - (str.length & 3));
  4724.             let u24;
  4725.             let bin = '';
  4726.             let r1;
  4727.             let r2;
  4728.            
  4729.             for (let i = 0; i < str.length;) {
  4730.                 u24 = b64tab[str.charAt(i++)] << 18
  4731.                 | b64tab[str.charAt(i++)] << 12
  4732.                 | (r1 = b64tab[str.charAt(i++)]) << 6
  4733.                 | (r2 = b64tab[str.charAt(i++)]);
  4734.                 bin += r1 === 64 ? String.fromCharCode(u24 >> 16 & 255)
  4735.                     : r2 === 64 ? String.fromCharCode(u24 >> 16 & 255, u24 >> 8 & 255)
  4736.                         : String.fromCharCode(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255);
  4737.             };
  4738.             return bin;
  4739.         },
  4740.     };
  4741.    
  4742.     /***/ }),
  4743.     /* 144 */
  4744.     /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
  4745.    
  4746.     "use strict";
  4747.     __webpack_require__.r(__webpack_exports__);
  4748.     /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4749.     /* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  4750.     /* harmony export */ });
  4751.     /* harmony import */ var mime_db__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(145);
  4752.     /*!
  4753.      * mime-types
  4754.      * Copyright(c) 2014 Jonathan Ong
  4755.      * Copyright(c) 2015 Douglas Christopher Wilson
  4756.      * MIT Licensed
  4757.      */
  4758.    
  4759.    
  4760.    
  4761.     /**
  4762.      * Module dependencies.
  4763.      * @private
  4764.      */
  4765.    
  4766.     var $exports = {}
  4767.        
  4768.     ;
  4769.    
  4770.     var extname = function(path = '') {
  4771.         if (!path.includes('.')) return '';
  4772.         const map = path.split('.');
  4773.    
  4774.         return '.' + map[map.length - 1];
  4775.     };
  4776.    
  4777.     /**
  4778.      * Module variables.
  4779.      * @private
  4780.      */
  4781.    
  4782.     var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/
  4783.     var TEXT_TYPE_REGEXP = /^text\//i
  4784.    
  4785.     /**
  4786.      * Module exports.
  4787.      * @public
  4788.      */
  4789.    
  4790.     $exports.charset = charset
  4791.     $exports.charsets = { lookup: charset }
  4792.     $exports.contentType = contentType
  4793.     $exports.extension = extension
  4794.     $exports.extensions = Object.create(null)
  4795.     $exports.lookup = lookup
  4796.     $exports.types = Object.create(null)
  4797.    
  4798.     // Populate the extensions/types maps
  4799.     populateMaps($exports.extensions, $exports.types)
  4800.    
  4801.     /**
  4802.      * Get the default charset for a MIME type.
  4803.      *
  4804.      * @param {string} type
  4805.      * @return {boolean|string}
  4806.      */
  4807.    
  4808.     function charset (type) {
  4809.       if (!type || typeof type !== 'string') {
  4810.         return false
  4811.       }
  4812.    
  4813.       // TODO: use media-typer
  4814.       var match = EXTRACT_TYPE_REGEXP.exec&#40;type&#41;
  4815.       var mime = match && mime_db__WEBPACK_IMPORTED_MODULE_0__[match[1].toLowerCase()]
  4816.    
  4817.       if (mime && mime.charset) {
  4818.         return mime.charset
  4819.       }
  4820.    
  4821.       // default text/* to utf-8
  4822.       if (match && TEXT_TYPE_REGEXP.test(match[1])) {
  4823.         return 'UTF-8'
  4824.       }
  4825.    
  4826.       return false
  4827.     }
  4828.    
  4829.     /**
  4830.      * Create a full Content-Type header given a MIME type or extension.
  4831.      *
  4832.      * @param {string} str
  4833.      * @return {boolean|string}
  4834.      */
  4835.    
  4836.     function contentType (str) {
  4837.       // TODO: should this even be in this module?
  4838.       if (!str || typeof str !== 'string') {
  4839.         return false
  4840.       }
  4841.    
  4842.       var mime = str.indexOf('/') === -1
  4843.         ? $exports.lookup(str)
  4844.         : str
  4845.    
  4846.       if (!mime) {
  4847.         return false
  4848.       }
  4849.    
  4850.       // TODO: use content-type or other module
  4851.       if (mime.indexOf('charset') === -1) {
  4852.         var charset = $exports.charset(mime)
  4853.         if (charset) mime += '; charset=' + charset.toLowerCase()
  4854.       }
  4855.    
  4856.       return mime
  4857.     }
  4858.    
  4859.     /**
  4860.      * Get the default extension for a MIME type.
  4861.      *
  4862.      * @param {string} type
  4863.      * @return {boolean|string}
  4864.      */
  4865.    
  4866.     function extension (type) {
  4867.       if (!type || typeof type !== 'string') {
  4868.         return false
  4869.       }
  4870.    
  4871.       // TODO: use media-typer
  4872.       var match = EXTRACT_TYPE_REGEXP.exec&#40;type&#41;
  4873.    
  4874.       // get extensions
  4875.       var exts = match && $exports.extensions[match[1].toLowerCase()]
  4876.    
  4877.       if (!exts || !exts.length) {
  4878.         return false
  4879.       }
  4880.    
  4881.       return exts[0]
  4882.     }
  4883.    
  4884.     /**
  4885.      * Lookup the MIME type for a file path/extension.
  4886.      *
  4887.      * @param {string} path
  4888.      * @return {boolean|string}
  4889.      */
  4890.    
  4891.     function lookup (path) {
  4892.       if (!path || typeof path !== 'string') {
  4893.         return false
  4894.       }
  4895.    
  4896.       // get the extension ("ext" or ".ext" or full path)
  4897.       var extension = extname('x.' + path)
  4898.         .toLowerCase()
  4899.         .substr(1)
  4900.    
  4901.       if (!extension) {
  4902.         return false
  4903.       }
  4904.    
  4905.       return $exports.types[extension] || false
  4906.     }
  4907.    
  4908.     /**
  4909.      * Populate the extensions and types maps.
  4910.      * @private
  4911.      */
  4912.    
  4913.     function populateMaps (extensions, types) {
  4914.       // source preference (least -> most)
  4915.       var preference = ['nginx', 'apache', undefined, 'iana']
  4916.    
  4917.       Object.keys(mime_db__WEBPACK_IMPORTED_MODULE_0__).forEach(function forEachMimeType (type) {
  4918.         var mime = mime_db__WEBPACK_IMPORTED_MODULE_0__[type]
  4919.         var exts = mime.extensions
  4920.    
  4921.         if (!exts || !exts.length) {
  4922.           return
  4923.         }
  4924.    
  4925.         // mime -> extensions
  4926.         extensions[type] = exts
  4927.    
  4928.         // extension -> mime
  4929.         for (var i = 0; i < exts.length; i++) {
  4930.            var extensi
  4931.    
  4932.           if (types[extension]) {
  4933.             var from = preference.indexOf(mime_db__WEBPACK_IMPORTED_MODULE_0__[types[extension]].source)
  4934.             var to = preference.indexOf(mime.source)
  4935.    
  4936.             if (types[extension] !== 'application/octet-stream' &&
  4937.               (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {
  4938.               // skip the remapping
  4939.               continue
  4940.             }
  4941.           }
  4942.    
  4943.           // set the extension -> mime
  4944.           types[extension] = type
  4945.         }
  4946.       })
  4947.     }
  4948.    
  4949.     /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ($exports);
  4950.    
  4951.     /***/ }),
  4952.     /* 145 */
  4953.     /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  4954.    
  4955.     /*!
  4956.      * mime-db
  4957.      * Copyright(c) 2014 Jonathan Ong
  4958.      * MIT Licensed
  4959.      */
  4960.    
  4961.     /**
  4962.      * Module exports.
  4963.      */
  4964.    
  4965.     module.exports = __webpack_require__(146)
  4966.    
  4967.    
  4968.     /***/ }),
  4969.     /* 146 */
  4970.     /***/ ((module) => {
  4971.    
  4972.     "use strict";
  4973.     module.exports = JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/at+jwt":{"source":"iana"},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/express":{"source":"iana","extensions":["exp"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/missing-blocks+cbor-seq":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/oauth-authz-req+jwt":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana"},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spdx+json":{"source":"iana","compressible":true},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/token-introspection+jwt":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gnas":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.s1ap":{"source":"iana"},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.age":{"source":"iana","extensions":["age"]},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.slides":{"source":"iana"},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana","extensions":["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.opentimestamps.ots":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.resilient.logic":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veritone.aion+json":{"source":"iana","compressible":true},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"source":"iana","compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana"},"image/avcs":{"source":"iana"},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/step":{"source":"iana"},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.pytha.pyox":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"compressible":true,"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/vp9":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}');
  4974.    
  4975.     /***/ }),
  4976.     /* 147 */
  4977.     /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
  4978.    
  4979.     "use strict";
  4980.     __webpack_require__.r(__webpack_exports__);
  4981.     /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4982.     /* harmony export */   "validateCookie": () => (/* binding */ validateCookie),
  4983.     /* harmony export */   "getCookies": () => (/* binding */ getCookies),
  4984.     /* harmony export */   "setCookies": () => (/* binding */ setCookies),
  4985.     /* harmony export */   "db": () => (/* binding */ db),
  4986.     /* harmony export */   "serialize": () => (/* binding */ serialize)
  4987.     /* harmony export */ });
  4988.     /* harmony import */ var set_cookie_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(142);
  4989.     // -------------------------------------------------------------
  4990.     // WARNING: this file is used by both the client and the server.
  4991.     // Do not use any browser or node-specific API!
  4992.     // -------------------------------------------------------------
  4993.    
  4994.    
  4995.     function validateCookie(cookie, meta, js = false) {
  4996.         if (cookie.httpOnly && !!js) return false;
  4997.    
  4998.         if (cookie.domain.startsWith('.')) {
  4999.    
  5000.             if (!meta.url.hostname.endsWith(cookie.domain.slice(1))) return false;
  5001.             return true;
  5002.         };
  5003.    
  5004.         if (cookie.domain !== meta.url.hostname) return false;
  5005.         if (cookie.secure && meta.url.protocol === 'http:') return false;
  5006.         if (!meta.url.pathname.startsWith(cookie.path)) return false;
  5007.    
  5008.         return true;
  5009.     };
  5010.    
  5011.     async function db(openDB) {
  5012.         const db = await openDB('__op', 1, {
  5013.             upgrade(db, oldVersion, newVersion, transaction) {
  5014.                 const store = db.createObjectStore('cookies', {
  5015.                     keyPath: 'id',
  5016.                 });
  5017.                 store.createIndex('path', 'path');
  5018.             },
  5019.         });
  5020.         db.transaction(['cookies'], 'readwrite').store.index('path');
  5021.         return db;
  5022.     };
  5023.    
  5024.    
  5025.     function serialize(cookies = [], meta, js) {
  5026.         let str = '';
  5027.         for (const cookie of cookies) {
  5028.             if (!validateCookie(cookie, meta, js)) continue;
  5029.             if (str.length) str += '; ';
  5030.             str += cookie.name;
  5031.             str += '='
  5032.             str += cookie.value;
  5033.         };
  5034.         return str;
  5035.     };
  5036.    
  5037.     async function getCookies(db) {
  5038.         const now = new Date();
  5039.         return (await db.getAll('cookies')).filter(cookie => {
  5040.            
  5041.             let expired = false;
  5042.             if (cookie.set) {
  5043.                 if (cookie.maxAge) {
  5044.                     expired = (cookie.set.getTime() + (cookie.maxAge * 1e3)) < now;
  5045.                 } else if (cookie.expires) {
  5046.                     expired = new Date(cookie.expires.toLocaleString()) < now;
  5047.                 };
  5048.             };
  5049.    
  5050.             if (expired) {
  5051.                 db.delete('cookies', cookie.id);
  5052.                 return false;
  5053.             };
  5054.    
  5055.             return  true;
  5056.         });
  5057.     };
  5058.    
  5059.     function setCookies(data, db, meta) {
  5060.         if (!db) return false;
  5061.    
  5062.         const cookies = set_cookie_parser__WEBPACK_IMPORTED_MODULE_0__(data, {
  5063.             decodeValues: false,
  5064.         })
  5065.        
  5066.         for (const cookie of cookies) {
  5067.             if (!cookie.domain) cookie.domain = '.' + meta.url.hostname;
  5068.             if (!cookie.path) cookie.path = '/';
  5069.    
  5070.             if (!cookie.domain.startsWith('.')) {
  5071.                 cookie.domain = '.' + cookie.domain;
  5072.             };
  5073.    
  5074.             db.put('cookies', {
  5075.                 ...cookie,
  5076.                 id: `${cookie.domain}@${cookie.path}@${cookie.name}`,
  5077.                 set: new Date(Date.now()),
  5078.             });
  5079.         };
  5080.         return true;
  5081.     };
  5082.    
  5083.    
  5084.    
  5085.     /***/ }),
  5086.     /* 148 */
  5087.     /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
  5088.    
  5089.     "use strict";
  5090.     __webpack_require__.r(__webpack_exports__);
  5091.     /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5092.     /* harmony export */   "attributes": () => (/* binding */ attributes),
  5093.     /* harmony export */   "createInjection": () => (/* binding */ createInjection),
  5094.     /* harmony export */   "text": () => (/* binding */ text),
  5095.     /* harmony export */   "isUrl": () => (/* binding */ isUrl),
  5096.     /* harmony export */   "isEvent": () => (/* binding */ isEvent),
  5097.     /* harmony export */   "isForbidden": () => (/* binding */ isForbidden),
  5098.     /* harmony export */   "isHtml": () => (/* binding */ isHtml),
  5099.     /* harmony export */   "isStyle": () => (/* binding */ isStyle),
  5100.     /* harmony export */   "isSrcset": () => (/* binding */ isSrcset),
  5101.     /* harmony export */   "injectHead": () => (/* binding */ injectHead)
  5102.     /* harmony export */ });
  5103.     function attributes(ctx, meta = ctx.meta) {
  5104.         const { html, js, css, attributePrefix, handlerScript, bundleScript } = ctx;
  5105.         const origPrefix = attributePrefix + '-attr-';
  5106.    
  5107.         html.on('attr', (attr, type) => {
  5108.             if (attr.node.tagName === 'base' && attr.name === 'href' && attr.options.document) {
  5109.                 meta.base = new URL(attr.value, meta.url);
  5110.             };
  5111.            
  5112.             if (type === 'rewrite' && isUrl(attr.name, attr.tagName)) {
  5113.                 attr.node.setAttribute(origPrefix + attr.name, attr.value);
  5114.                 attr.value = ctx.rewriteUrl(attr.value, meta);
  5115.             };
  5116.    
  5117.             if (type === 'rewrite' && isSrcset(attr.name)) {
  5118.                 attr.node.setAttribute(origPrefix + attr.name, attr.value);
  5119.                 attr.value = html.wrapSrcset(attr.value, meta);
  5120.             };
  5121.    
  5122.    
  5123.             if (type === 'rewrite' && isHtml(attr.name)) {
  5124.                 attr.node.setAttribute(origPrefix + attr.name, attr.value);
  5125.                 attr.value = html.rewrite(attr.value, {
  5126.                     ...meta,
  5127.                     document: true,
  5128.                     injectHead: attr.options.injectHead || [],
  5129.                 });
  5130.             };
  5131.    
  5132.            
  5133.             if (type === 'rewrite' && isStyle(attr.name)) {
  5134.                 attr.node.setAttribute(origPrefix + attr.name, attr.value);
  5135.                 attr.value = ctx.rewriteCSS(attr.value, { context: 'declarationList', });
  5136.             };
  5137.    
  5138.             if (type === 'rewrite' && isForbidden(attr.name)) {
  5139.                 attr.name = origPrefix + attr.name;
  5140.             };
  5141.    
  5142.             if (type === 'rewrite' && isEvent(attr.name)) {
  5143.                 attr.node.setAttribute(origPrefix + attr.name, attr.value);
  5144.                 attr.value = js.rewrite(attr.value, meta);
  5145.             };
  5146.    
  5147.             if (type === 'source' && attr.name.startsWith(origPrefix)) {
  5148.                 if (attr.node.hasAttribute(attr.name.slice(origPrefix.length))) attr.node.removeAttribute(attr.name.slice(origPrefix.length));
  5149.                 attr.name = attr.name.slice(origPrefix.length);
  5150.             };
  5151.    
  5152.    
  5153.             /*
  5154.             if (isHtml(attr.name)) {
  5155.    
  5156.             };
  5157.    
  5158.             if (isStyle(attr.name)) {
  5159.    
  5160.             };
  5161.    
  5162.             if (isSrcset(attr.name)) {
  5163.    
  5164.             };
  5165.             */
  5166.         });  
  5167.    
  5168.     };
  5169.    
  5170.    
  5171.     function text(ctx, meta = ctx.meta) {
  5172.         const { html, js, css, attributePrefix } = ctx;
  5173.    
  5174.         html.on('text', (text, type) => {
  5175.             if (text.element.tagName === 'script') {
  5176.                 text.value = type === 'rewrite' ? js.rewrite(text.value) : js.source(text.value);
  5177.             };
  5178.    
  5179.             if (text.element.tagName === 'style') {
  5180.                 text.value = type === 'rewrite' ? css.rewrite(text.value) : css.source(text.value);
  5181.             };
  5182.         });
  5183.         return true;
  5184.     };
  5185.    
  5186.     function isUrl(name, tag) {
  5187.         return tag === 'object' && name === 'data' || ['src', 'href', 'ping', 'movie', 'action', 'poster', 'profile', 'background'].indexOf(name) > -1;
  5188.     };
  5189.     function isEvent(name) {
  5190.         return [
  5191.             'onafterprint',
  5192.             'onbeforeprint',
  5193.             'onbeforeunload',
  5194.             'onerror',
  5195.             'onhashchange',
  5196.             'onload',
  5197.             'onmessage',
  5198.             'onoffline',
  5199.             'ononline',
  5200.             'onpagehide',
  5201.             'onpopstate',
  5202.             'onstorage',
  5203.             'onunload',
  5204.             'onblur',
  5205.             'onchange',
  5206.             'oncontextmenu',
  5207.             'onfocus',
  5208.             'oninput',
  5209.             'oninvalid',
  5210.             'onreset',
  5211.             'onsearch',
  5212.             'onselect',
  5213.             'onsubmit',
  5214.             'onkeydown',
  5215.             'onkeypress',
  5216.             'onkeyup',
  5217.             'onclick',
  5218.             'ondblclick',
  5219.             'onmousedown',
  5220.             'onmousemove',
  5221.             'onmouseout',
  5222.             'onmouseover',
  5223.             'onmouseup',
  5224.             'onmousewheel',
  5225.             'onwheel',
  5226.             'ondrag',
  5227.             'ondragend',
  5228.             'ondragenter',
  5229.             'ondragleave',
  5230.             'ondragover',
  5231.             'ondragstart',
  5232.             'ondrop',
  5233.             'onscroll',
  5234.             'oncopy',
  5235.             'oncut',
  5236.             'onpaste',
  5237.             'onabort',
  5238.             'oncanplay',
  5239.             'oncanplaythrough',
  5240.             'oncuechange',
  5241.             'ondurationchange',
  5242.             'onemptied',
  5243.             'onended',
  5244.             'onerror',
  5245.             'onloadeddata',
  5246.             'onloadedmetadata',
  5247.             'onloadstart',
  5248.             'onpause',
  5249.             'onplay',
  5250.             'onplaying',
  5251.             'onprogress',
  5252.             'onratechange',
  5253.             'onseeked',
  5254.             'onseeking',
  5255.             'onstalled',
  5256.             'onsuspend',
  5257.             'ontimeupdate',
  5258.             'onvolumechange',
  5259.             'onwaiting',
  5260.         ].indexOf(name) > -1;
  5261.     };
  5262.    
  5263.     function injectHead(ctx) {
  5264.         const { html, js, css, attributePrefix } = ctx;
  5265.         const origPrefix = attributePrefix + '-attr-';
  5266.         html.on('element', (element, type) => {
  5267.             if (type !== 'rewrite') return false;
  5268.             if (element.tagName !== 'head') return false;
  5269.             if (!('injectHead' in element.options)) return false;
  5270.            
  5271.             element.childNodes.unshift(
  5272.                 ...element.options.injectHead
  5273.             );
  5274.         });
  5275.     };
  5276.    
  5277.     function createInjection(handler = '/uv.handler.js', bundle = '/uv.bundle.js', config = '/uv.config.js', cookies = '', referrer = '') {
  5278.         return [
  5279.             {
  5280.                 tagName: 'script',
  5281.                 nodeName: 'script',
  5282.                 childNodes: [
  5283.                     {
  5284.                         nodeName: '#text',
  5285.                         value: `window.__uv$cookies = atob("${btoa(cookies)}");\nwindow.__uv$referrer = atob("${btoa(referrer)}");`
  5286.                     },
  5287.                 ],
  5288.                 attrs: [
  5289.                     {
  5290.                         name: '__uv-script',
  5291.                         value: '1',
  5292.                         skip: true,
  5293.                     }
  5294.                 ],
  5295.                 skip: true,
  5296.             },
  5297.             {
  5298.                 tagName: 'script',
  5299.                 nodeName: 'script',
  5300.                 childNodes: [],
  5301.                 attrs: [
  5302.                     { name: 'src', value: bundle, skip: true },
  5303.                     {
  5304.                         name: '__uv-script',
  5305.                         value: '1',
  5306.                         skip: true,
  5307.                     }
  5308.                 ],
  5309.             },
  5310.             {
  5311.                 tagName: 'script',
  5312.                 nodeName: 'script',
  5313.                 childNodes: [],
  5314.                 attrs: [
  5315.                     { name: 'src', value: config, skip: true },
  5316.                     {
  5317.                         name: '__uv-script',
  5318.                         value: '1',
  5319.                         skip: true,
  5320.                     }
  5321.                 ],
  5322.             },
  5323.             {
  5324.                 tagName: 'script',
  5325.                 nodeName: 'script',
  5326.                 childNodes: [],
  5327.                 attrs: [
  5328.                     { name: 'src', value: handler, skip: true },
  5329.                     {
  5330.                         name: '__uv-script',
  5331.                         value: '1',
  5332.                         skip: true,
  5333.                     }
  5334.                 ],
  5335.             }
  5336.         ];
  5337.     };
  5338.    
  5339.     function isForbidden(name) {
  5340.         return ['http-equiv', 'integrity', 'sandbox', 'nonce', 'crossorigin'].indexOf(name) > -1;
  5341.     };
  5342.    
  5343.     function isHtml(name){
  5344.         return name === 'srcdoc';
  5345.     };
  5346.    
  5347.     function isStyle(name) {
  5348.         return name === 'style';
  5349.     };
  5350.    
  5351.     function isSrcset(name) {
  5352.         return name === 'srcset' || name === 'imagesrcset';
  5353.     };
  5354.    
  5355.    
  5356.    
  5357.    
  5358.     /***/ }),
  5359.     /* 149 */
  5360.     /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
  5361.    
  5362.     "use strict";
  5363.     __webpack_require__.r(__webpack_exports__);
  5364.     /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5365.     /* harmony export */   "url": () => (/* binding */ url),
  5366.     /* harmony export */   "importStyle": () => (/* binding */ importStyle)
  5367.     /* harmony export */ });
  5368.     function url(ctx) {
  5369.         const { css } = ctx;
  5370.         css.on('Url', (node, data, type) => {
  5371.             node.value = type === 'rewrite' ? ctx.rewriteUrl(node.value) : ctx.sourceUrl(node.value);
  5372.         });
  5373.     };
  5374.    
  5375.     function importStyle(ctx) {
  5376.         const { css } = ctx;
  5377.         css.on('Atrule', (node, data, type) => {
  5378.             if (node.name !== 'import') return false;
  5379.             const { [removed] plain: _codecs_js__WEBPACK_IMPORTED_MODULE_4__.plain };
  5380.         static mime = _mime_js__WEBPACK_IMPORTED_MODULE_5__["default"];
  5381.         static setCookie = set_cookie_parser__WEBPACK_IMPORTED_MODULE_3__;
  5382.         static openDB = idb__WEBPACK_IMPORTED_MODULE_10__.openDB;
  5383.         static Bowser = bowser__WEBPACK_IMPORTED_MODULE_13__;
  5384.     };
  5385.    
  5386.     /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Ultraviolet);
  5387.     if (typeof self === 'object') self.Ultraviolet = Ultraviolet;
  5388.     })();
  5389.    
  5390.     /******/ })()
  5391.     ;