Version 3.5.0
authoralexlamsl <alexlamsl@gmail.com>
Mon, 15 May 2017 20:06:16 +0000 (04:06 +0800)
committeralexlamsl <alexlamsl@gmail.com>
Mon, 15 May 2017 20:06:16 +0000 (04:06 +0800)
README.md
dist/htmlminifier.js
dist/htmlminifier.min.js
index.html
package.json

index 68a05d2..70e2aad 100644 (file)
--- a/README.md
+++ b/README.md
@@ -23,17 +23,17 @@ How does HTMLMinifier compare to other solutions — [HTML Minifier from Will Pe
 | Site                                                                        | Original size *(KB)* | HTMLMinifier | minimize | Will Peavy | htmlcompressor.com |
 | --------------------------------------------------------------------------- |:--------------------:| ------------:| --------:| ----------:| ------------------:|
 | [Google](https://www.google.com/)                                           | 44                   | **42**       | 45       | 46         | 45                 |
-| [HTMLMinifier](https://github.com/kangax/html-minifier)                     | 125                  | **98**       | 106      | 110        | 106                |
-| [CNN](http://www.cnn.com/)                                                  | 135                  | **124**      | 132      | 133        | 128                |
-| [Amazon](http://www.amazon.co.uk/)                                          | 193                  | **161**      | 184      | 187        | n/a                |
-| [New York Times](http://www.nytimes.com/)                                   | 204                  | **135**      | 152      | 152        | 143                |
-| [Stack Overflow](http://stackoverflow.com/)                                 | 224                  | **173**      | 182      | 190        | 179                |
-| [BBC](http://www.bbc.co.uk/)                                                | 225                  | **186**      | 219      | 225        | 213                |
+| [HTMLMinifier](https://github.com/kangax/html-minifier)                     | 126                  | **98**       | 106      | 110        | 106                |
+| [CNN](http://www.cnn.com/)                                                  | 133                  | **122**      | 131      | 132        | 126                |
+| [Amazon](http://www.amazon.co.uk/)                                          | 196                  | **164**      | 187      | 190        | n/a                |
+| [New York Times](http://www.nytimes.com/)                                   | 210                  | **141**      | 158      | 158        | 148                |
+| [Stack Overflow](http://stackoverflow.com/)                                 | 218                  | **168**      | 176      | 184        | 174                |
+| [BBC](http://www.bbc.co.uk/)                                                | 240                  | **196**      | 232      | 239        | 227                |
 | [Bootstrap CSS](http://getbootstrap.com/css/)                               | 272                  | **260**      | 269      | 229        | 269                |
 | [Wikipedia](https://en.wikipedia.org/wiki/President_of_the_United_States)   | 549                  | **502**      | 530      | 548        | 529                |
-| [NBC](http://www.nbc.com/)                                                  | 634                  | **603**      | 632      | 634        | n/a                |
+| [NBC](http://www.nbc.com/)                                                  | 644                  | **612**      | 642      | 645        | n/a                |
 | [Eloquent Javascript](http://eloquentjavascript.net/1st_edition/print.html) | 870                  | **815**      | 840      | 864        | n/a                |
-| [ES6 table](http://kangax.github.io/compat-table/es6/)                      | 4380                 | **3695**     | 4130     | n/a        | n/a                |
+| [ES6 table](http://kangax.github.io/compat-table/es6/)                      | 4381                 | **3696**     | 4131     | n/a        | n/a                |
 | [ES6 draft](https://tc39.github.io/ecma262/)                                | 5506                 | **4913**     | 5060     | n/a        | n/a                |
 
 ## Options Quick Reference
index 56ac2ce..f46a7ab 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * HTMLMinifier v3.4.4 (http://kangax.github.io/html-minifier/)
+ * HTMLMinifier v3.5.0 (http://kangax.github.io/html-minifier/)
  * Copyright 2010-2017 Juriy "kangax" Zaytsev
  * Licensed under the MIT license
  */
@@ -2029,7 +2029,7 @@ function isnan (val) {
 }
 
 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"base64-js":1,"ieee754":103,"isarray":106}],6:[function(require,module,exports){
+},{"base64-js":1,"ieee754":106,"isarray":109}],6:[function(require,module,exports){
 module.exports = {
   "100": "Continue",
   "101": "Switching Protocols",
@@ -2113,6 +2113,7 @@ var level2Optimize = require('./optimizer/level-2/optimize');
 var validator = require('./optimizer/validator');
 
 var compatibilityFrom = require('./options/compatibility');
+var fetchFrom = require('./options/fetch');
 var formatFrom = require('./options/format').formatFrom;
 var inlineFrom = require('./options/inline');
 var inlineRequestFrom = require('./options/inline-request');
@@ -2133,6 +2134,7 @@ var CleanCSS = module.exports = function CleanCSS(options) {
 
   this.options = {
     compatibility: compatibilityFrom(options.compatibility),
+    fetch: fetchFrom(options.fetch),
     format: formatFrom(options.format),
     inline: inlineFrom(options.inline),
     inlineRequest: inlineRequestFrom(options.inlineRequest),
@@ -2256,7 +2258,7 @@ function calculateStatsFrom(styles, context) {
 }
 
 }).call(this,require('_process'))
-},{"./optimizer/level-0/optimize":10,"./optimizer/level-1/optimize":11,"./optimizer/level-2/optimize":30,"./optimizer/validator":56,"./options/compatibility":58,"./options/format":59,"./options/inline":62,"./options/inline-request":60,"./options/inline-timeout":61,"./options/optimization-level":63,"./options/rebase":65,"./options/rebase-to":64,"./reader/input-source-map-tracker":69,"./reader/read-sources":75,"./writer/simple":97,"./writer/source-maps":98,"_process":111}],9:[function(require,module,exports){
+},{"./optimizer/level-0/optimize":10,"./optimizer/level-1/optimize":11,"./optimizer/level-2/optimize":30,"./optimizer/validator":58,"./options/compatibility":60,"./options/fetch":61,"./options/format":62,"./options/inline":65,"./options/inline-request":63,"./options/inline-timeout":64,"./options/optimization-level":66,"./options/rebase":68,"./options/rebase-to":67,"./reader/input-source-map-tracker":72,"./reader/read-sources":78,"./writer/simple":100,"./writer/source-maps":101,"_process":114}],9:[function(require,module,exports){
 var Hack = {
   ASTERISK: 'asterisk',
   BANG: 'bang',
@@ -2303,10 +2305,6 @@ var CHARSET_REGEXP = new RegExp('^' + CHARSET_TOKEN, 'i');
 
 var DEFAULT_ROUNDING_PRECISION = require('../../options/rounding-precision').DEFAULT;
 
-var FONT_NUMERAL_WEIGHTS = ['100', '200', '300', '400', '500', '600', '700', '800', '900'];
-var FONT_NAME_WEIGHTS = ['normal', 'bold', 'bolder', 'lighter'];
-var FONT_NAME_WEIGHTS_WITHOUT_NORMAL = ['bold', 'bolder', 'lighter'];
-
 var WHOLE_PIXEL_VALUE = /(?:^|\s|\()(-?\d+)px/;
 var TIME_VALUE = /^(\-?[\d\.]+)(m?s)$/;
 
@@ -2436,63 +2434,6 @@ function optimizeFilter(property) {
     .replace(/ ?= ?/g, '=');
 }
 
-function optimizeFont(property, options) {
-  var values = property.value;
-  var hasNumeral = FONT_NUMERAL_WEIGHTS.indexOf(values[0][1]) > -1 ||
-    values[1] && FONT_NUMERAL_WEIGHTS.indexOf(values[1][1]) > -1 ||
-    values[2] && FONT_NUMERAL_WEIGHTS.indexOf(values[2][1]) > -1;
-  var canOptimizeFontWeight = options.level[OptimizationLevel.One].optimizeFontWeight;
-  var normalCount = 0;
-  var toOptimize;
-
-  if (!canOptimizeFontWeight) {
-    return;
-  }
-
-  if (hasNumeral) {
-    return;
-  }
-
-  if (values[1] && values[1][1] == '/') {
-    return;
-  }
-
-  if (values[0][1] == 'normal') {
-    normalCount++;
-  }
-
-  if (values[1] && values[1][1] == 'normal') {
-    normalCount++;
-  }
-
-  if (values[2] && values[2][1] == 'normal') {
-    normalCount++;
-  }
-
-  if (normalCount > 1) {
-    return;
-  }
-
-  if (FONT_NAME_WEIGHTS_WITHOUT_NORMAL.indexOf(values[0][1]) > -1) {
-    toOptimize = 0;
-  } else if (values[1] && FONT_NAME_WEIGHTS_WITHOUT_NORMAL.indexOf(values[1][1]) > -1) {
-    toOptimize = 1;
-  } else if (values[2] && FONT_NAME_WEIGHTS_WITHOUT_NORMAL.indexOf(values[2][1]) > -1) {
-    toOptimize = 2;
-  } else if (FONT_NAME_WEIGHTS.indexOf(values[0][1]) > -1) {
-    toOptimize = 0;
-  } else if (values[1] && FONT_NAME_WEIGHTS.indexOf(values[1][1]) > -1) {
-    toOptimize = 1;
-  } else if (values[2] && FONT_NAME_WEIGHTS.indexOf(values[2][1]) > -1) {
-    toOptimize = 2;
-  }
-
-  if (toOptimize !== undefined && canOptimizeFontWeight) {
-    optimizeFontWeight(property, toOptimize);
-    property.dirty = true;
-  }
-}
-
 function optimizeFontWeight(property, atIndex) {
   var value = property.value[atIndex][1];
 
@@ -2760,7 +2701,7 @@ function optimizeBody(properties, context) {
         break;
       }
 
-      if (valueIsUrl && !context.validator.isValidUrl(value)) {
+      if (valueIsUrl && !context.validator.isUrl(value)) {
         property.unused = true;
         context.warnings.push('Broken URL \'' + value + '\' at ' + formatPosition(property.value[j][2][0]) + '. Ignoring.');
         break;
@@ -2820,8 +2761,6 @@ function optimizeBody(properties, context) {
       optimizeBorderRadius(property);
     } else if (name == 'filter'&& levelOptions.optimizeFilter && options.compatibility.properties.ieFilters) {
       optimizeFilter(property);
-    } else if (name == 'font' && levelOptions.optimizeFont) {
-      optimizeFont(property, options);
     } else if (name == 'font-weight' && levelOptions.optimizeFontWeight) {
       optimizeFontWeight(property, 0);
     } else if (name == 'outline' && levelOptions.optimizeOutline) {
@@ -2994,7 +2933,7 @@ function level1Optimize(tokens, context) {
         break;
     }
 
-    if (token[1].length === 0 || (token[2] && token[2].length === 0)) {
+    if (levelOptions.removeEmpty && (token[1].length === 0 || (token[2] && token[2].length === 0))) {
       tokens.splice(i, 1);
       i--;
       l--;
@@ -3010,7 +2949,7 @@ function level1Optimize(tokens, context) {
 
 module.exports = level1Optimize;
 
-},{"../../options/optimization-level":63,"../../options/rounding-precision":66,"../../tokenizer/marker":81,"../../tokenizer/token":82,"../../utils/format-position":85,"../../utils/split":94,"../hack":9,"../remove-unused":54,"../restore-from-optimizing":55,"../wrap-for-optimizing":57,"./shorten-hex":12,"./shorten-hsl":13,"./shorten-rgb":14,"./sort-selectors":15,"./tidy-at-rule":16,"./tidy-block":17,"./tidy-rules":18}],12:[function(require,module,exports){
+},{"../../options/optimization-level":66,"../../options/rounding-precision":69,"../../tokenizer/marker":84,"../../tokenizer/token":85,"../../utils/format-position":88,"../../utils/split":97,"../hack":9,"../remove-unused":56,"../restore-from-optimizing":57,"../wrap-for-optimizing":59,"./shorten-hex":12,"./shorten-hsl":13,"./shorten-rgb":14,"./sort-selectors":15,"./tidy-at-rule":16,"./tidy-block":17,"./tidy-rules":18}],12:[function(require,module,exports){
 var COLORS = {
   aliceblue: '#f0f8ff',
   antiquewhite: '#faebd7',
@@ -3288,22 +3227,20 @@ function standardSorter(scope1, scope2) {
 }
 
 function sortSelectors(selectors, method) {
-  var sorter;
-
   switch (method) {
     case 'natural':
-      sorter = naturalSorter;
-      break;
+      return selectors.sort(naturalSorter);
     case 'standard':
-      sorter = standardSorter;
+      return selectors.sort(standardSorter);
+    case 'none':
+    case false:
+      return selectors;
   }
-
-  return selectors.sort(sorter);
 }
 
 module.exports = sortSelectors;
 
-},{"../../utils/natural-compare":92}],16:[function(require,module,exports){
+},{"../../utils/natural-compare":95}],16:[function(require,module,exports){
 function tidyAtRule(value) {
   return value
     .replace(/\s+/g, ' ')
@@ -3554,26 +3491,37 @@ function tidyRules(rules, removeUnsupported, adjacentSpace, format, warnings) {
 
 module.exports = tidyRules;
 
-},{"../../options/format":59,"../../tokenizer/marker":81,"../../utils/format-position":85}],19:[function(require,module,exports){
+},{"../../options/format":62,"../../tokenizer/marker":84,"../../utils/format-position":88}],19:[function(require,module,exports){
 var InvalidPropertyError = require('./invalid-property-error');
 
 var wrapSingle = require('../wrap-for-optimizing').single;
 
 var Token = require('../../tokenizer/token');
+var Marker = require('../../tokenizer/marker');
 
 var formatPosition = require('../../utils/format-position');
 
-var MULTIPLEX_SEPARATOR = ',';
+function _anyIsInherit(values) {
+  var i, l;
+
+  for (i = 0, l = values.length; i < l; i++) {
+    if (values[i][1] == 'inherit') {
+      return true;
+    }
+  }
+
+  return false;
+}
 
 function _colorFilter(validator) {
   return function (value) {
-    return value[1] == 'invert' || validator.isValidColor(value[1]) || validator.isValidVendorPrefixedValue(value[1]);
+    return value[1] == 'invert' || validator.isColor(value[1]) || validator.isPrefixed(value[1]);
   };
 }
 
 function _styleFilter(validator) {
   return function (value) {
-    return value[1] != 'inherit' && validator.isValidStyle(value[1]) && !validator.isValidColorValue(value[1]);
+    return value[1] != 'inherit' && validator.isStyleKeyword(value[1]) && !validator.isColorFunction(value[1]);
   };
 }
 
@@ -3603,10 +3551,80 @@ function _wrapDefault(name, property, compactable) {
 
 function _widthFilter(validator) {
   return function (value) {
-    return value[1] != 'inherit' && validator.isValidWidth(value[1]) && !validator.isValidStyle(value[1]) && !validator.isValidColorValue(value[1]);
+    return value[1] != 'inherit' &&
+      (validator.isWidth(value[1]) || validator.isUnit(value[1]) && !validator.isDynamicUnit(value[1])) &&
+      !validator.isStyleKeyword(value[1]) &&
+      !validator.isColorFunction(value[1]);
   };
 }
 
+function animation(property, compactable, validator) {
+  var duration = _wrapDefault(property.name + '-duration', property, compactable);
+  var timing = _wrapDefault(property.name + '-timing-function', property, compactable);
+  var delay = _wrapDefault(property.name + '-delay', property, compactable);
+  var iteration = _wrapDefault(property.name + '-iteration-count', property, compactable);
+  var direction = _wrapDefault(property.name + '-direction', property, compactable);
+  var fill = _wrapDefault(property.name + '-fill-mode', property, compactable);
+  var play = _wrapDefault(property.name + '-play-state', property, compactable);
+  var name = _wrapDefault(property.name + '-name', property, compactable);
+  var components = [duration, timing, delay, iteration, direction, fill, play, name];
+  var values = property.value;
+  var value;
+  var durationSet = false;
+  var timingSet = false;
+  var delaySet = false;
+  var iterationSet = false;
+  var directionSet = false;
+  var fillSet = false;
+  var playSet = false;
+  var nameSet = false;
+  var i;
+  var l;
+
+  if (property.value.length == 1 && property.value[0][1] == 'inherit') {
+    duration.value = timing.value = delay.value = iteration.value = direction.value = fill.value = play.value = name.value = property.value;
+    return components;
+  }
+
+  if (values.length > 1 && _anyIsInherit(values)) {
+    throw new InvalidPropertyError('Invalid animation values at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
+  }
+
+  for (i = 0, l = values.length; i < l; i++) {
+    value = values[i];
+
+    if (validator.isTime(value[1]) && !durationSet) {
+      duration.value = [value];
+      durationSet = true;
+    } else if (validator.isTime(value[1]) && !delaySet) {
+      delay.value = [value];
+      delaySet = true;
+    } else if ((validator.isGlobal(value[1]) || validator.isAnimationTimingFunction(value[1])) && !timingSet) {
+      timing.value = [value];
+      timingSet = true;
+    } else if ((validator.isAnimationIterationCountKeyword(value[1]) || validator.isPositiveNumber(value[1])) && !iterationSet) {
+      iteration.value = [value];
+      iterationSet = true;
+    } else if (validator.isAnimationDirectionKeyword(value[1]) && !directionSet) {
+      direction.value = [value];
+      directionSet = true;
+    } else if (validator.isAnimationFillModeKeyword(value[1]) && !fillSet) {
+      fill.value = [value];
+      fillSet = true;
+    } else if (validator.isAnimationPlayStateKeyword(value[1]) && !playSet) {
+      play.value = [value];
+      playSet = true;
+    } else if ((validator.isAnimationNameKeyword(value[1]) || validator.isIdentifier(value[1])) && !nameSet) {
+      name.value = [value];
+      nameSet = true;
+    } else {
+      throw new InvalidPropertyError('Invalid animation value at ' + formatPosition(value[2][0]) + '. Ignoring.');
+    }
+  }
+
+  return components;
+}
+
 function background(property, compactable, validator) {
   var image = _wrapDefault('background-image', property, compactable);
   var position = _wrapDefault('background-position', property, compactable);
@@ -3639,10 +3657,10 @@ function background(property, compactable, validator) {
   for (var i = values.length - 1; i >= 0; i--) {
     var value = values[i];
 
-    if (validator.isValidBackgroundAttachment(value[1])) {
+    if (validator.isBackgroundAttachmentKeyword(value[1])) {
       attachment.value = [value];
       anyValueSet = true;
-    } else if (validator.isValidBackgroundClip(value[1]) || validator.isValidBackgroundOrigin(value[1])) {
+    } else if (validator.isBackgroundClipKeyword(value[1]) || validator.isBackgroundOriginKeyword(value[1])) {
       if (clipSet) {
         origin.value = [value];
         originSet = true;
@@ -3651,7 +3669,7 @@ function background(property, compactable, validator) {
         clipSet = true;
       }
       anyValueSet = true;
-    } else if (validator.isValidBackgroundRepeat(value[1])) {
+    } else if (validator.isBackgroundRepeatKeyword(value[1])) {
       if (repeatSet) {
         repeat.value.unshift(value);
       } else {
@@ -3659,13 +3677,13 @@ function background(property, compactable, validator) {
         repeatSet = true;
       }
       anyValueSet = true;
-    } else if (validator.isValidBackgroundPositionPart(value[1]) || validator.isValidBackgroundSizePart(value[1])) {
+    } else if (validator.isBackgroundPositionKeyword(value[1]) || validator.isBackgroundSizeKeyword(value[1]) || validator.isUnit(value[1]) || validator.isDynamicUnit(value[1])) {
       if (i > 0) {
         var previousValue = values[i - 1];
 
-        if (previousValue[1] == '/') {
+        if (previousValue[1] == Marker.FORWARD_SLASH) {
           size.value = [value];
-        } else if (i > 1 && values[i - 2][1] == '/') {
+        } else if (i > 1 && values[i - 2][1] == Marker.FORWARD_SLASH) {
           size.value = [previousValue, value];
           i -= 2;
         } else {
@@ -3683,10 +3701,10 @@ function background(property, compactable, validator) {
         positionSet = true;
       }
       anyValueSet = true;
-    } else if ((color.value[0][1] == compactable[color.name].defaultValue || color.value[0][1] == 'none') && (validator.isValidColor(value[1]) || validator.isValidVendorPrefixedValue(value[1]))) {
+    } else if ((color.value[0][1] == compactable[color.name].defaultValue || color.value[0][1] == 'none') && (validator.isColor(value[1]) || validator.isPrefixed(value[1]))) {
       color.value = [value];
       anyValueSet = true;
-    } else if (validator.isValidUrl(value[1]) || validator.isValidFunction(value[1])) {
+    } else if (validator.isUrl(value[1]) || validator.isFunction(value[1])) {
       image.value = [value];
       anyValueSet = true;
     }
@@ -3707,7 +3725,7 @@ function borderRadius(property, compactable) {
   var splitAt = -1;
 
   for (var i = 0, l = values.length; i < l; i++) {
-    if (values[i][1] == '/') {
+    if (values[i][1] == Marker.FORWARD_SLASH) {
       splitAt = i;
       break;
     }
@@ -3737,6 +3755,122 @@ function borderRadius(property, compactable) {
   return target.components;
 }
 
+function font(property, compactable, validator) {
+  var style = _wrapDefault('font-style', property, compactable);
+  var variant = _wrapDefault('font-variant', property, compactable);
+  var weight = _wrapDefault('font-weight', property, compactable);
+  var stretch = _wrapDefault('font-stretch', property, compactable);
+  var size = _wrapDefault('font-size', property, compactable);
+  var height = _wrapDefault('line-height', property, compactable);
+  var family = _wrapDefault('font-family', property, compactable);
+  var components = [style, variant, weight, stretch, size, height, family];
+  var values = property.value;
+  var fuzzyMatched = 4; // style, variant, weight, and stretch
+  var index = 0;
+  var isStretchSet = false;
+  var isStretchValid;
+  var isStyleSet = false;
+  var isStyleValid;
+  var isVariantSet = false;
+  var isVariantValid;
+  var isWeightSet = false;
+  var isWeightValid;
+  var isSizeSet = false;
+  var appendableFamilyName = false;
+
+  if (!values[index]) {
+    throw new InvalidPropertyError('Missing font values at ' + formatPosition(property.all[property.position][1][2][0]) + '. Ignoring.');
+  }
+
+  if (values.length == 1 && values[0][1] == 'inherit') {
+    style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values;
+    return components;
+  }
+
+  if (values.length == 1 && (validator.isFontKeyword(values[0][1]) || validator.isGlobal(values[0][1]) || validator.isPrefixed(values[0][1]))) {
+    values[0][1] = Marker.INTERNAL + values[0][1];
+    style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values;
+    return components;
+  }
+
+  if (values.length > 1 && _anyIsInherit(values)) {
+    throw new InvalidPropertyError('Invalid font values at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
+  }
+
+  // fuzzy match style, variant, weight, and stretch on first elements
+  while (index < fuzzyMatched) {
+    isStretchValid = validator.isFontStretchKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
+    isStyleValid = validator.isFontStyleKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
+    isVariantValid = validator.isFontVariantKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
+    isWeightValid = validator.isFontWeightKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
+
+    if (isStyleValid && !isStyleSet) {
+      style.value = [values[index]];
+      isStyleSet = true;
+    } else if (isVariantValid && !isVariantSet) {
+      variant.value = [values[index]];
+      isVariantSet = true;
+    } else if (isWeightValid && !isWeightSet) {
+      weight.value = [values[index]];
+      isWeightSet = true;
+    } else if (isStretchValid && !isStretchSet) {
+      stretch.value = [values[index]];
+      isStretchSet = true;
+    } else if (isStyleValid && isStyleSet || isVariantValid && isVariantSet || isWeightValid && isWeightSet || isStretchValid && isStretchSet) {
+      throw new InvalidPropertyError('Invalid font style / variant / weight / stretch value at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
+    } else {
+      break;
+    }
+
+    index++;
+  }
+
+  // now comes font-size ...
+  if (validator.isFontSizeKeyword(values[index][1]) || validator.isUnit(values[index][1]) && !validator.isDynamicUnit(values[index][1])) {
+    size.value = [values[index]];
+    isSizeSet = true;
+    index++;
+  } else {
+    throw new InvalidPropertyError('Missing font size at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
+  }
+
+  if (!values[index]) {
+    throw new InvalidPropertyError('Missing font family at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
+  }
+
+  // ... and perhaps line-height
+  if (isSizeSet && values[index] && values[index][1] == Marker.FORWARD_SLASH && values[index + 1] && (validator.isLineHeightKeyword(values[index + 1][1]) || validator.isUnit(values[index + 1][1]) || validator.isNumber(values[index + 1][1]))) {
+    height.value = [values[index + 1]];
+    index++;
+    index++;
+  }
+
+  // ... and whatever comes next is font-family
+  family.value = [];
+
+  while (values[index]) {
+    if (values[index][1] == Marker.COMMA) {
+      appendableFamilyName = false;
+    } else {
+      if (appendableFamilyName) {
+        family.value[family.value.length - 1][1] += Marker.SPACE + values[index][1];
+      } else {
+        family.value.push(values[index]);
+      }
+
+      appendableFamilyName = true;
+    }
+
+    index++;
+  }
+
+  if (family.value.length === 0) {
+    throw new InvalidPropertyError('Missing font family at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
+  }
+
+  return components;
+}
+
 function fourValues(property, compactable) {
   var componentNames = compactable[property.name].components;
   var components = [];
@@ -3799,7 +3933,7 @@ function multiplex(splitWith) {
       components[i].multiplex = true;
 
       for (j = 1, m = splitComponents.length; j < m; j++) {
-        components[i].value.push([Token.PROPERTY_VALUE, MULTIPLEX_SEPARATOR]);
+        components[i].value.push([Token.PROPERTY_VALUE, Marker.COMMA]);
         Array.prototype.push.apply(components[i].value, splitComponents[j][i].value);
       }
     }
@@ -3825,25 +3959,26 @@ function listStyle(property, compactable, validator) {
 
   // `image` first...
   for (index = 0, total = values.length; index < total; index++) {
-    if (validator.isValidUrl(values[index][1]) || values[index][1] == '0') {
+    if (validator.isUrl(values[index][1]) || values[index][1] == '0') {
       image.value = [values[index]];
       values.splice(index, 1);
       break;
     }
   }
 
-  // ... then `type`...
+  // ... then `position`
   for (index = 0, total = values.length; index < total; index++) {
-    if (validator.isValidListStyleType(values[index][1])) {
-      type.value = [values[index]];
+    if (validator.isListStylePositionKeyword(values[index][1])) {
+      position.value = [values[index]];
       values.splice(index, 1);
       break;
     }
   }
 
-  // ... and what's left is a `position`
-  if (values.length > 0 && validator.isValidListStylePosition(values[0][1]))
-    position.value = [values[0]];
+  // ... and what's left is a `type`
+  if (values.length > 0 && (validator.isListStyleTypeKeyword(values[0][1]) || validator.isIdentifier(values[0][1]))) {
+    type.value = [values[0]];
+  }
 
   return components;
 }
@@ -3909,24 +4044,67 @@ function widthStyleColor(property, compactable, validator) {
 }
 
 module.exports = {
+  animation: animation,
   background: background,
   border: widthStyleColor,
   borderRadius: borderRadius,
+  font: font,
   fourValues: fourValues,
   listStyle: listStyle,
   multiplex: multiplex,
   outline: widthStyleColor
 };
 
-},{"../../tokenizer/token":82,"../../utils/format-position":85,"../wrap-for-optimizing":57,"./invalid-property-error":24}],20:[function(require,module,exports){
+},{"../../tokenizer/marker":84,"../../tokenizer/token":85,"../../utils/format-position":88,"../wrap-for-optimizing":59,"./invalid-property-error":24}],20:[function(require,module,exports){
 var understandable = require('./properties/understandable');
 
+function animationIterationCount(validator, value1, value2) {
+  if (!understandable(validator, value1, value2, 0, true) && !(validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2))) {
+    return false;
+  } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
+    return true;
+  }
+
+  return validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2);
+}
+
+function animationName(validator, value1, value2) {
+  if (!understandable(validator, value1, value2, 0, true) && !(validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2))) {
+    return false;
+  } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
+    return true;
+  }
+
+  return validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2);
+}
+
+function animationTimingFunction(validator, value1, value2) {
+  if (!understandable(validator, value1, value2, 0, true) && !(validator.isAnimationTimingFunction(value2) || validator.isGlobal(value2))) {
+    return false;
+  } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
+    return true;
+  }
+
+  return validator.isAnimationTimingFunction(value2) || validator.isGlobal(value2);
+}
+
+function areSameFunction(validator, value1, value2) {
+  if (!validator.isFunction(value1) || !validator.isFunction(value2)) {
+    return false;
+  }
+
+  var function1Name = value1.substring(0, value1.indexOf('('));
+  var function2Name = value2.substring(0, value2.indexOf('('));
+
+  return function1Name === function2Name;
+}
+
 function backgroundPosition(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isValidKeywordValue('background-position', value2, true)) {
+  if (!understandable(validator, value1, value2, 0, true) && !(validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2))) {
     return false;
-  } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
+  } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
     return true;
-  } else if (validator.isValidKeywordValue('background-position', value2, true)) {
+  } else if (validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2)) {
     return true;
   }
 
@@ -3934,11 +4112,11 @@ function backgroundPosition(validator, value1, value2) {
 }
 
 function backgroundSize(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isValidKeywordValue('background-size', value2, true)) {
+  if (!understandable(validator, value1, value2, 0, true) && !(validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2))) {
     return false;
-  } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
+  } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
     return true;
-  } else if (validator.isValidKeywordValue('background-size', value2, true)) {
+  } else if (validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2)) {
     return true;
   }
 
@@ -3946,15 +4124,15 @@ function backgroundSize(validator, value1, value2) {
 }
 
 function color(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isValidColor(value2)) {
+  if (!understandable(validator, value1, value2, 0, true) && !validator.isColor(value2)) {
     return false;
-  } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
+  } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
     return true;
-  } else if (!validator.colorOpacity && (validator.isValidRgbaColor(value1) || validator.isValidHslaColor(value1))) {
+  } else if (!validator.colorOpacity && (validator.isRgbColor(value1) || validator.isHslColor(value1))) {
     return false;
-  } else if (!validator.colorOpacity && (validator.isValidRgbaColor(value2) || validator.isValidHslaColor(value2))) {
+  } else if (!validator.colorOpacity && (validator.isRgbColor(value2) || validator.isHslColor(value2))) {
     return false;
-  } else if (validator.isValidColor(value1) && validator.isValidColor(value2)) {
+  } else if (validator.isColor(value1) && validator.isColor(value2)) {
     return true;
   }
 
@@ -3967,14 +4145,18 @@ function components(overrideCheckers) {
   };
 }
 
+function fontFamily(validator, value1, value2) {
+  return understandable(validator, value1, value2, 0, true);
+}
+
 function image(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isValidImage(value2)) {
+  if (!understandable(validator, value1, value2, 0, true) && !validator.isImage(value2)) {
     return false;
-  } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
+  } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
     return true;
-  } else if (validator.isValidImage(value2)) {
+  } else if (validator.isImage(value2)) {
     return true;
-  } else if (validator.isValidImage(value1)) {
+  } else if (validator.isImage(value1)) {
     return false;
   }
 
@@ -3983,56 +4165,76 @@ function image(validator, value1, value2) {
 
 function keyword(propertyName) {
   return function(validator, value1, value2) {
-    if (!understandable(validator, value1, value2, 0, true) && !validator.isValidKeywordValue(propertyName, value2)) {
+    if (!understandable(validator, value1, value2, 0, true) && !validator.isKeyword(propertyName)(value2)) {
       return false;
-    } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
+    } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
       return true;
     }
 
-    return validator.isValidKeywordValue(propertyName, value2, false);
+    return validator.isKeyword(propertyName)(value2);
   };
 }
 
 function keywordWithGlobal(propertyName) {
   return function(validator, value1, value2) {
-    if (!understandable(validator, value1, value2, 0, true) && !validator.isValidKeywordValue(propertyName, value2, true)) {
+    if (!understandable(validator, value1, value2, 0, true) && !(validator.isKeyword(propertyName)(value2) || validator.isGlobal(value2))) {
       return false;
-    } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
+    } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
       return true;
     }
 
-    return validator.isValidKeywordValue(propertyName, value2, true);
+    return validator.isKeyword(propertyName)(value2) || validator.isGlobal(value2);
   };
 }
 
 function sameFunctionOrValue(validator, value1, value2) {
-  return validator.areSameFunction(value1, value2) ?
+  return areSameFunction(validator, value1, value2) ?
     true :
     value1 === value2;
 }
 
+
+
 function textShadow(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isValidTextShadow(value2)) {
+  if (!understandable(validator, value1, value2, 0, true) && !(validator.isUnit(value2) || validator.isColor(value2) || validator.isGlobal(value2))) {
+    return false;
+  } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
+    return true;
+  }
+
+  return validator.isUnit(value2) || validator.isColor(value2) || validator.isGlobal(value2);
+}
+
+function time(validator, value1, value2) {
+  if (!understandable(validator, value1, value2, 0, true) && !validator.isTime(value2)) {
+    return false;
+  } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
+    return true;
+  } else if (validator.isTime(value1) && !validator.isTime(value2)) {
+    return false;
+  } else if (validator.isTime(value2)) {
+    return true;
+  } else if (validator.isTime(value1)) {
     return false;
-  } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
+  } else if (validator.isFunction(value1) && !validator.isPrefixed(value1) && validator.isFunction(value2) && !validator.isPrefixed(value2)) {
     return true;
   }
 
-  return validator.isValidTextShadow(value2);
+  return sameFunctionOrValue(validator, value1, value2);
 }
 
 function unit(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isValidUnitWithoutFunction(value2)) {
+  if (!understandable(validator, value1, value2, 0, true) && !validator.isUnit(value2)) {
     return false;
-  } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
+  } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
     return true;
-  } else if (validator.isValidUnitWithoutFunction(value1) && !validator.isValidUnitWithoutFunction(value2)) {
+  } else if (validator.isUnit(value1) && !validator.isUnit(value2)) {
     return false;
-  } else if (validator.isValidUnitWithoutFunction(value2)) {
+  } else if (validator.isUnit(value2)) {
     return true;
-  } else if (validator.isValidUnitWithoutFunction(value1)) {
+  } else if (validator.isUnit(value1)) {
     return false;
-  } else if (validator.isValidFunctionWithoutVendorPrefix(value1) && validator.isValidFunctionWithoutVendorPrefix(value2)) {
+  } else if (validator.isFunction(value1) && !validator.isPrefixed(value1) && validator.isFunction(value2) && !validator.isPrefixed(value2)) {
     return true;
   }
 
@@ -4048,13 +4250,13 @@ function unitOrKeywordWithGlobal(propertyName) {
 }
 
 function zIndex(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isValidZIndex(value2)) {
+  if (!understandable(validator, value1, value2, 0, true) && !validator.isZIndex(value2)) {
     return false;
-  } else if (validator.isValidVariable(value1) && validator.isValidVariable(value2)) {
+  } else if (validator.isVariable(value1) && validator.isVariable(value2)) {
     return true;
   }
 
-  return validator.isValidZIndex(value2);
+  return validator.isZIndex(value2);
 }
 
 module.exports = {
@@ -4062,9 +4264,16 @@ module.exports = {
     color: color,
     components: components,
     image: image,
+    time: time,
     unit: unit
   },
   property: {
+    animationDirection: keywordWithGlobal('animation-direction'),
+    animationFillMode: keyword('animation-fill-mode'),
+    animationIterationCount: animationIterationCount,
+    animationName: animationName,
+    animationPlayState: keywordWithGlobal('animation-play-state'),
+    animationTimingFunction: animationTimingFunction,
     backgroundAttachment: keyword('background-attachment'),
     backgroundClip: keywordWithGlobal('background-clip'),
     backgroundOrigin: keyword('background-origin'),
@@ -4078,8 +4287,11 @@ module.exports = {
     cursor: keywordWithGlobal('cursor'),
     display: keywordWithGlobal('display'),
     float: keywordWithGlobal('float'),
-    fontStyle: keywordWithGlobal('font-style'),
     left: unitOrKeywordWithGlobal('left'),
+    fontFamily: fontFamily,
+    fontStretch: keywordWithGlobal('font-stretch'),
+    fontStyle: keywordWithGlobal('font-style'),
+    fontVariant: keywordWithGlobal('font-variant'),
     fontWeight: keywordWithGlobal('font-weight'),
     listStyleType: keywordWithGlobal('list-style-type'),
     listStylePosition: keywordWithGlobal('list-style-position'),
@@ -4100,7 +4312,7 @@ module.exports = {
   }
 };
 
-},{"./properties/understandable":40}],21:[function(require,module,exports){
+},{"./properties/understandable":41}],21:[function(require,module,exports){
 var wrapSingle = require('../wrap-for-optimizing').single;
 
 var Token = require('../../tokenizer/token');
@@ -4135,7 +4347,7 @@ module.exports = {
   shallow: shallow
 };
 
-},{"../../tokenizer/token":82,"../wrap-for-optimizing":57}],22:[function(require,module,exports){
+},{"../../tokenizer/token":85,"../wrap-for-optimizing":59}],22:[function(require,module,exports){
 // Contains the interpretation of CSS properties, as used by the property optimizer
 
 var breakUp = require('./break-up');
@@ -4173,6 +4385,141 @@ var override = require('../../utils/override');
 //   Puts the shorthand together from its components.
 //
 var compactable = {
+  'animation': {
+    canOverride: canOverride.generic.components([
+      canOverride.generic.time,
+      canOverride.property.animationTimingFunction,
+      canOverride.generic.time,
+      canOverride.property.animationIterationCount,
+      canOverride.property.animationDirection,
+      canOverride.property.animationFillMode,
+      canOverride.property.animationPlayState,
+      canOverride.property.animationName
+    ]),
+    components: [
+      'animation-duration',
+      'animation-timing-function',
+      'animation-delay',
+      'animation-iteration-count',
+      'animation-direction',
+      'animation-fill-mode',
+      'animation-play-state',
+      'animation-name'
+    ],
+    breakUp: breakUp.multiplex(breakUp.animation),
+    defaultValue: 'none',
+    restore: restore.multiplex(restore.withoutDefaults),
+    shorthand: true,
+    vendorPrefixes: [
+      '-moz-',
+      '-o-',
+      '-webkit-'
+    ]
+  },
+  'animation-delay': {
+    canOverride: canOverride.generic.time,
+    componentOf: [
+      'animation'
+    ],
+    defaultValue: '0s',
+    intoMultiplexMode: 'real',
+    vendorPrefixes: [
+      '-moz-',
+      '-o-',
+      '-webkit-'
+    ]
+  },
+  'animation-direction': {
+    canOverride: canOverride.property.animationDirection,
+    componentOf: [
+      'animation'
+    ],
+    defaultValue: 'normal',
+    intoMultiplexMode: 'real',
+    vendorPrefixes: [
+      '-moz-',
+      '-o-',
+      '-webkit-'
+    ]
+  },
+  'animation-duration': {
+    canOverride: canOverride.generic.time,
+    componentOf: [
+      'animation'
+    ],
+    defaultValue: '0s',
+    intoMultiplexMode: 'real',
+    vendorPrefixes: [
+      '-moz-',
+      '-o-',
+      '-webkit-'
+    ]
+  },
+  'animation-fill-mode': {
+    canOverride: canOverride.property.animationFillMode,
+    componentOf: [
+      'animation'
+    ],
+    defaultValue: 'none',
+    intoMultiplexMode: 'real',
+    vendorPrefixes: [
+      '-moz-',
+      '-o-',
+      '-webkit-'
+    ]
+  },
+  'animation-iteration-count': {
+    canOverride: canOverride.property.animationIterationCount,
+    componentOf: [
+      'animation'
+    ],
+    defaultValue: '1',
+    intoMultiplexMode: 'real',
+    vendorPrefixes: [
+      '-moz-',
+      '-o-',
+      '-webkit-'
+    ]
+  },
+  'animation-name': {
+    canOverride: canOverride.property.animationName,
+    componentOf: [
+      'animation'
+    ],
+    defaultValue: 'none',
+    intoMultiplexMode: 'real',
+    vendorPrefixes: [
+      '-moz-',
+      '-o-',
+      '-webkit-'
+    ]
+  },
+  'animation-play-state': {
+    canOverride: canOverride.property.animationPlayState,
+    componentOf: [
+      'animation'
+    ],
+    defaultValue: 'running',
+    intoMultiplexMode: 'real',
+    vendorPrefixes: [
+      '-moz-',
+      '-o-',
+      '-webkit-'
+    ]
+  },
+  'animation-timing-function': {
+    canOverride: canOverride.property.animationTimingFunction,
+    componentOf: [
+      'animation'
+    ],
+    defaultValue: 'ease',
+    intoMultiplexMode: 'real',
+    vendorPrefixes: [
+      '-moz-',
+      '-o-',
+      '-webkit-'
+    ]
+  },
   'background': {
     canOverride: canOverride.generic.components([
       canOverride.generic.image,
@@ -4205,7 +4552,8 @@ var compactable = {
     componentOf: [
       'background'
     ],
-    defaultValue: 'scroll'
+    defaultValue: 'scroll',
+    intoMultiplexMode: 'real'
   },
   'background-clip': {
     canOverride: canOverride.property.backgroundClip,
@@ -4213,6 +4561,7 @@ var compactable = {
       'background'
     ],
     defaultValue: 'border-box',
+    intoMultiplexMode: 'real',
     shortestValue: 'border-box'
   },
   'background-color': {
@@ -4221,6 +4570,7 @@ var compactable = {
       'background'
     ],
     defaultValue: 'transparent',
+    intoMultiplexMode: 'real', // otherwise real color will turn into default since color appears in last multiplex only
     multiplexLastOnly: true,
     nonMergeableValue: 'none',
     shortestValue: 'red'
@@ -4230,7 +4580,8 @@ var compactable = {
     componentOf: [
       'background'
     ],
-    defaultValue: 'none'
+    defaultValue: 'none',
+    intoMultiplexMode: 'default'
   },
   'background-origin': {
     canOverride: canOverride.property.backgroundOrigin,
@@ -4238,6 +4589,7 @@ var compactable = {
       'background'
     ],
     defaultValue: 'padding-box',
+    intoMultiplexMode: 'real',
     shortestValue: 'border-box'
   },
   'background-position': {
@@ -4247,6 +4599,7 @@ var compactable = {
     ],
     defaultValue: ['0', '0'],
     doubleValues: true,
+    intoMultiplexMode: 'real',
     shortestValue: '0'
   },
   'background-repeat': {
@@ -4255,7 +4608,8 @@ var compactable = {
       'background'
     ],
     defaultValue: ['repeat'],
-    doubleValues: true
+    doubleValues: true,
+    intoMultiplexMode: 'real'
   },
   'background-size': {
     canOverride: canOverride.property.backgroundSize,
@@ -4264,6 +4618,7 @@ var compactable = {
     ],
     defaultValue: ['auto'],
     doubleValues: true,
+    intoMultiplexMode: 'real',
     shortestValue: '0 0'
   },
   'bottom': {
@@ -4354,6 +4709,7 @@ var compactable = {
       'border-width'
     ],
     defaultValue: 'medium',
+    oppositeTo: 'border-top-width',
     shortestValue: '0'
   },
   'border-collapse': {
@@ -4368,7 +4724,9 @@ var compactable = {
       canOverride.generic.color,
       canOverride.generic.color
     ]),
-    componentOf: ['border'],
+    componentOf: [
+      'border'
+    ],
     components: [
       'border-top-color',
       'border-right-color',
@@ -4419,6 +4777,7 @@ var compactable = {
       'border-width'
     ],
     defaultValue: 'medium',
+    oppositeTo: 'border-right-width',
     shortestValue: '0'
   },
   'border-radius': {
@@ -4482,6 +4841,7 @@ var compactable = {
       'border-width'
     ],
     defaultValue: 'medium',
+    oppositeTo: 'border-left-width',
     shortestValue: '0'
   },
   'border-style': {
@@ -4566,6 +4926,7 @@ var compactable = {
       'border-width'
     ],
     defaultValue: 'medium',
+    oppositeTo: 'border-bottom-width',
     shortestValue: '0'
   },
   'border-width': {
@@ -4576,6 +4937,9 @@ var compactable = {
       canOverride.generic.unit,
       canOverride.generic.unit
     ]),
+    componentOf: [
+      'border'
+    ],
     components: [
       'border-top-width',
       'border-right-width',
@@ -4607,18 +4971,53 @@ var compactable = {
     canOverride: canOverride.property.float,
     defaultValue: 'none'
   },
+  'font': {
+    breakUp: breakUp.font,
+    canOverride: canOverride.generic.components([
+      canOverride.property.fontStyle,
+      canOverride.property.fontVariant,
+      canOverride.property.fontWeight,
+      canOverride.property.fontStretch,
+      canOverride.generic.unit,
+      canOverride.generic.unit,
+      canOverride.property.fontFamily
+    ]),
+    components: [
+      'font-style',
+      'font-variant',
+      'font-weight',
+      'font-stretch',
+      'font-size',
+      'line-height',
+      'font-family'
+    ],
+    restore: restore.font,
+    shorthand: true
+  },
+  'font-family': {
+    canOverride: canOverride.property.fontFamily,
+    defaultValue: 'user|agent|specific'
+  },
   'font-size': {
     canOverride: canOverride.generic.unit,
     defaultValue: 'medium',
     shortestValue: '0'
   },
+  'font-stretch': {
+    canOverride: canOverride.property.fontStretch,
+    defaultValue: 'normal'
+  },
   'font-style': {
     canOverride: canOverride.property.fontStyle,
     defaultValue: 'normal'
   },
+  'font-variant': {
+    canOverride: canOverride.property.fontVariant,
+    defaultValue: 'normal'
+  },
   'font-weight': {
     canOverride: canOverride.property.fontWeight,
-    defaultValue: '400',
+    defaultValue: 'normal',
     shortestValue: '400'
   },
   'height': {
@@ -4701,28 +5100,32 @@ var compactable = {
     componentOf: [
       'margin'
     ],
-    defaultValue: '0'
+    defaultValue: '0',
+    oppositeTo: 'margin-top'
   },
   'margin-left': {
     canOverride: canOverride.generic.unit,
     componentOf: [
       'margin'
     ],
-    defaultValue: '0'
+    defaultValue: '0',
+    oppositeTo: 'margin-right'
   },
   'margin-right': {
     canOverride: canOverride.generic.unit,
     componentOf: [
       'margin'
     ],
-    defaultValue: '0'
+    defaultValue: '0',
+    oppositeTo: 'margin-left'
   },
   'margin-top': {
     canOverride: canOverride.generic.unit,
     componentOf: [
       'margin'
     ],
-    defaultValue: '0'
+    defaultValue: '0',
+    oppositeTo: 'margin-bottom'
   },
   'outline': {
     canOverride: canOverride.generic.components([
@@ -4798,28 +5201,32 @@ var compactable = {
     componentOf: [
       'padding'
     ],
-    defaultValue: '0'
+    defaultValue: '0',
+    oppositeTo: 'padding-top'
   },
   'padding-left': {
     canOverride: canOverride.generic.unit,
     componentOf: [
       'padding'
     ],
-    defaultValue: '0'
+    defaultValue: '0',
+    oppositeTo: 'padding-right'
   },
   'padding-right': {
     canOverride: canOverride.generic.unit,
     componentOf: [
       'padding'
     ],
-    defaultValue: '0'
+    defaultValue: '0',
+    oppositeTo: 'padding-left'
   },
   'padding-top': {
     canOverride: canOverride.generic.unit,
     componentOf: [
       'padding'
     ],
-    defaultValue: '0'
+    defaultValue: '0',
+    oppositeTo: 'padding-bottom'
   },
   'position': {
     canOverride: canOverride.property.position,
@@ -4924,7 +5331,7 @@ for (var propertyName in compactable) {
 
 module.exports = override(compactable, vendorPrefixedCompactable);
 
-},{"../../utils/override":93,"./break-up":19,"./can-override":20,"./restore":48}],23:[function(require,module,exports){
+},{"../../utils/override":96,"./break-up":19,"./can-override":20,"./restore":50}],23:[function(require,module,exports){
 // This extractor is used in level 2 optimizations
 // IMPORTANT: Mind Token class and this code is not related!
 // Properties will be tokenized in one step, see #429
@@ -4999,7 +5406,7 @@ function findNameRoot(name) {
 
 module.exports = extractProperties;
 
-},{"../../tokenizer/token":82,"../../writer/one-time":96}],24:[function(require,module,exports){
+},{"../../tokenizer/token":85,"../../writer/one-time":99}],24:[function(require,module,exports){
 function InvalidPropertyError(message) {
   this.name = 'InvalidPropertyError';
   this.message = message;
@@ -5028,6 +5435,19 @@ var PSEUDO_CLASSES_WITH_ARGUMENTS = [
   ':nth-of-type'
 ];
 var RELATION_PATTERN = /[>\+~]/;
+var UNMIXABLE_PSEUDO_CLASSES = [
+  ':after',
+  ':before',
+  ':first-letter',
+  ':first-line',
+  ':lang'
+];
+var UNMIXABLE_PSEUDO_ELEMENTS = [
+  '::after',
+  '::before',
+  '::first-letter',
+  '::first-line'
+];
 
 var Level = {
   DOUBLE_QUOTE: 'double-quote',
@@ -5035,7 +5455,7 @@ var Level = {
   ROOT: 'root'
 };
 
-function isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements) {
+function isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) {
   var singleSelectors = split(selector, Marker.COMMA);
   var singleSelector;
   var i, l;
@@ -5045,7 +5465,7 @@ function isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements)
 
     if (singleSelector.length === 0 ||
         isDeepSelector(singleSelector) ||
-        (singleSelector.indexOf(Marker.COLON) > -1 && !areMergeable(singleSelector, extractPseudoFrom(singleSelector), mergeablePseudoClasses, mergeablePseudoElements))) {
+        (singleSelector.indexOf(Marker.COLON) > -1 && !areMergeable(singleSelector, extractPseudoFrom(singleSelector), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging))) {
       return false;
     }
   }
@@ -5136,11 +5556,11 @@ function extractPseudoFrom(selector) {
   return list;
 }
 
-function areMergeable(selector, matches, mergeablePseudoClasses, mergeablePseudoElements) {
+function areMergeable(selector, matches, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) {
   return areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements) &&
     needArguments(matches) &&
     (matches.length < 2 || !someIncorrectlyChained(selector, matches)) &&
-    (matches.length < 2 || !someMixed(matches));
+    (matches.length < 2 || multiplePseudoMerging && allMixable(matches));
 }
 
 function areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements) {
@@ -5231,25 +5651,35 @@ function someIncorrectlyChained(selector, matches) {
   return false;
 }
 
-function someMixed(matches) {
-  var firstIsPseudoElement = DOUBLE_COLON_PATTERN.test(matches[0]);
+function allMixable(matches) {
+  var unmixableMatches = 0;
   var match;
   var i, l;
 
   for (i = 0, l = matches.length; i < l; i++) {
     match = matches[i];
 
-    if (DOUBLE_COLON_PATTERN.test(match) != firstIsPseudoElement) {
-      return true;
+    if (isPseudoElement(match)) {
+      unmixableMatches += UNMIXABLE_PSEUDO_ELEMENTS.indexOf(match) > -1 ? 1 : 0;
+    } else {
+      unmixableMatches += UNMIXABLE_PSEUDO_CLASSES.indexOf(match) > -1 ? 1 : 0;
+    }
+
+    if (unmixableMatches > 1) {
+      return false;
     }
   }
 
-  return false;
+  return true;
+}
+
+function isPseudoElement(pseudo) {
+  return DOUBLE_COLON_PATTERN.test(pseudo);
 }
 
 module.exports = isMergeable;
 
-},{"../../tokenizer/marker":81,"../../utils/split":94}],26:[function(require,module,exports){
+},{"../../tokenizer/marker":84,"../../utils/split":97}],26:[function(require,module,exports){
 var isMergeable = require('./is-mergeable');
 
 var optimizeProperties = require('./properties/optimize');
@@ -5271,7 +5701,8 @@ function mergeAdjacent(tokens, context) {
   var selectorsSortingMethod = options.level[OptimizationLevel.One].selectorsSortingMethod;
   var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
   var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
-  var mergeLimit = 8191;
+  var mergeLimit = options.compatibility.selectors.mergeLimit;
+  var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
 
   for (var i = 0, l = tokens.length; i < l; i++) {
     var token = tokens[i];
@@ -5286,8 +5717,8 @@ function mergeAdjacent(tokens, context) {
       optimizeProperties(lastToken[2], true, true, context);
       token[2] = [];
     } else if (lastToken[0] == Token.RULE && serializeBody(token[2]) == serializeBody(lastToken[2]) &&
-        isMergeable(serializeRules(token[1]), mergeablePseudoClasses, mergeablePseudoElements) &&
-        isMergeable(serializeRules(lastToken[1]), mergeablePseudoClasses, mergeablePseudoElements) &&
+        isMergeable(serializeRules(token[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) &&
+        isMergeable(serializeRules(lastToken[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) &&
         lastToken[1].length < mergeLimit) {
       lastToken[1] = tidyRules(lastToken[1].concat(token[1]), false, adjacentSpace, false, context.warnings);
       lastToken[1] = lastToken.length > 1 ? sortSelectors(lastToken[1], selectorsSortingMethod) : lastToken[1];
@@ -5300,7 +5731,7 @@ function mergeAdjacent(tokens, context) {
 
 module.exports = mergeAdjacent;
 
-},{"../../options/optimization-level":63,"../../tokenizer/token":82,"../../writer/one-time":96,"../level-1/sort-selectors":15,"../level-1/tidy-rules":18,"./is-mergeable":25,"./properties/optimize":36}],27:[function(require,module,exports){
+},{"../../options/optimization-level":66,"../../tokenizer/token":85,"../../writer/one-time":99,"../level-1/sort-selectors":15,"../level-1/tidy-rules":18,"./is-mergeable":25,"./properties/optimize":37}],27:[function(require,module,exports){
 var canReorder = require('./reorderable').canReorder;
 var canReorderSingle = require('./reorderable').canReorderSingle;
 var extractProperties = require('./extract-properties');
@@ -5405,7 +5836,7 @@ function allSameRulePropertiesCanBeReordered(movedProperties, traversedPropertie
 
 module.exports = mergeMediaQueries;
 
-},{"../../options/optimization-level":63,"../../tokenizer/token":82,"../../writer/one-time":96,"./extract-properties":23,"./reorderable":46,"./rules-overlap":50}],28:[function(require,module,exports){
+},{"../../options/optimization-level":66,"../../tokenizer/token":85,"../../writer/one-time":99,"./extract-properties":23,"./reorderable":48,"./rules-overlap":52}],28:[function(require,module,exports){
 var isMergeable = require('./is-mergeable');
 
 var sortSelectors = require('../level-1/sort-selectors');
@@ -5450,6 +5881,7 @@ function mergeNonAdjacentByBody(tokens, context) {
   var selectorsSortingMethod = options.level[OptimizationLevel.One].selectorsSortingMethod;
   var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
   var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
+  var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
   var candidates = {};
 
   for (var i = tokens.length - 1; i >= 0; i--) {
@@ -5466,8 +5898,8 @@ function mergeNonAdjacentByBody(tokens, context) {
     var candidateBody = serializeBody(token[2]);
     var oldToken = candidates[candidateBody];
     if (oldToken &&
-        isMergeable(serializeRules(token[1]), mergeablePseudoClasses, mergeablePseudoElements) &&
-        isMergeable(serializeRules(oldToken[1]), mergeablePseudoClasses, mergeablePseudoElements)) {
+        isMergeable(serializeRules(token[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) &&
+        isMergeable(serializeRules(oldToken[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)) {
 
       if (token[2].length > 0) {
         token[1] = tidyRules(oldToken[1].concat(token[1]), false, adjacentSpace, false, context.warnings);
@@ -5486,7 +5918,7 @@ function mergeNonAdjacentByBody(tokens, context) {
 
 module.exports = mergeNonAdjacentByBody;
 
-},{"../../options/optimization-level":63,"../../tokenizer/token":82,"../../writer/one-time":96,"../level-1/sort-selectors":15,"../level-1/tidy-rules":18,"./is-mergeable":25}],29:[function(require,module,exports){
+},{"../../options/optimization-level":66,"../../tokenizer/token":85,"../../writer/one-time":99,"../level-1/sort-selectors":15,"../level-1/tidy-rules":18,"./is-mergeable":25}],29:[function(require,module,exports){
 var canReorder = require('./reorderable').canReorder;
 var extractProperties = require('./extract-properties');
 
@@ -5566,7 +5998,7 @@ function mergeNonAdjacentBySelector(tokens, context) {
 
 module.exports = mergeNonAdjacentBySelector;
 
-},{"../../tokenizer/token":82,"../../writer/one-time":96,"./extract-properties":23,"./properties/optimize":36,"./reorderable":46}],30:[function(require,module,exports){
+},{"../../tokenizer/token":85,"../../writer/one-time":99,"./extract-properties":23,"./properties/optimize":37,"./reorderable":48}],30:[function(require,module,exports){
 var mergeAdjacent = require('./merge-adjacent');
 var mergeMediaQueries = require('./merge-media-queries');
 var mergeNonAdjacentByBody = require('./merge-non-adjacent-by-body');
@@ -5575,6 +6007,7 @@ var reduceNonAdjacent = require('./reduce-non-adjacent');
 var removeDuplicateFontAtRules = require('./remove-duplicate-font-at-rules');
 var removeDuplicateMediaQueries = require('./remove-duplicate-media-queries');
 var removeDuplicates = require('./remove-duplicates');
+var removeUnusedAtRules = require('./remove-unused-at-rules');
 var restructure = require('./restructure');
 
 var optimizeProperties = require('./properties/optimize');
@@ -5596,6 +6029,9 @@ function removeEmpty(tokens) {
         removeEmpty(token[2]);
         isEmpty = token[2].length === 0;
         break;
+      case Token.AT_RULE:
+        isEmpty = token[1].length === 0;
+        break;
       case Token.AT_RULE_BLOCK:
         isEmpty = token[2].length === 0;
     }
@@ -5678,6 +6114,10 @@ function level2Optimize(tokens, context, withRestructuring) {
     removeDuplicateMediaQueries(tokens, context);
   }
 
+  if (levelOptions.removeUnusedAtRules) {
+    removeUnusedAtRules(tokens, context);
+  }
+
   if (levelOptions.mergeMedia) {
     reduced = mergeMediaQueries(tokens, context);
     for (i = reduced.length - 1; i >= 0; i--) {
@@ -5685,14 +6125,16 @@ function level2Optimize(tokens, context, withRestructuring) {
     }
   }
 
-  removeEmpty(tokens);
+  if (levelOptions.removeEmpty) {
+    removeEmpty(tokens);
+  }
 
   return tokens;
 }
 
 module.exports = level2Optimize;
 
-},{"../../options/optimization-level":63,"../../tokenizer/token":82,"./merge-adjacent":26,"./merge-media-queries":27,"./merge-non-adjacent-by-body":28,"./merge-non-adjacent-by-selector":29,"./properties/optimize":36,"./reduce-non-adjacent":42,"./remove-duplicate-font-at-rules":43,"./remove-duplicate-media-queries":44,"./remove-duplicates":45,"./restructure":49}],31:[function(require,module,exports){
+},{"../../options/optimization-level":66,"../../tokenizer/token":85,"./merge-adjacent":26,"./merge-media-queries":27,"./merge-non-adjacent-by-body":28,"./merge-non-adjacent-by-selector":29,"./properties/optimize":37,"./reduce-non-adjacent":43,"./remove-duplicate-font-at-rules":44,"./remove-duplicate-media-queries":45,"./remove-duplicates":46,"./remove-unused-at-rules":47,"./restructure":51}],31:[function(require,module,exports){
 var Marker = require('../../../tokenizer/marker');
 
 function everyValuesPair(fn, left, right) {
@@ -5722,7 +6164,7 @@ function everyValuesPair(fn, left, right) {
 
 module.exports = everyValuesPair;
 
-},{"../../../tokenizer/marker":81}],32:[function(require,module,exports){
+},{"../../../tokenizer/marker":84}],32:[function(require,module,exports){
 var compactable = require('../compactable');
 
 function findComponentIn(shorthand, longhand) {
@@ -5801,119 +6243,32 @@ function isSubComponentOf(property1, property2) {
 module.exports = isComponentOf;
 
 },{"../compactable":22}],35:[function(require,module,exports){
-var everyValuesPair = require('./every-values-pair');
-var hasInherit = require('./has-inherit');
-var populateComponents = require('./populate-components');
+var Marker = require('../../../tokenizer/marker');
 
-var compactable = require('../compactable');
-var deepClone = require('../clone').deep;
-
-var wrapSingle = require('../../wrap-for-optimizing').single;
-
-var Token = require('../../../tokenizer/token');
-
-function mixedImportance(components) {
-  var important;
-
-  for (var name in components) {
-    if (undefined !== important && components[name].important != important)
-      return true;
-
-    important = components[name].important;
-  }
-
-  return false;
-}
-
-function joinMetadata(components, at) {
-  var metadata = [];
-  var component;
-  var originalValue;
-  var componentMetadata;
-  var name;
-
-  for (name in components) {
-    component = components[name];
-    originalValue = component.all[component.position];
-    componentMetadata = originalValue[at][originalValue[at].length - 1];
-
-    Array.prototype.push.apply(metadata, componentMetadata);
-  }
-
-  return metadata;
-}
-
-function replaceWithShorthand(properties, candidateComponents, name, validator) {
-  var descriptor = compactable[name];
-  var nameMetadata;
-  var valueMetadata;
-  var newValuePlaceholder = [
-    Token.PROPERTY,
-    [Token.PROPERTY_NAME, name],
-    [Token.PROPERTY_VALUE, descriptor.defaultValue]
-  ];
-  var mayOverride;
-  var all;
-
-  var newProperty = wrapSingle(newValuePlaceholder);
-  newProperty.shorthand = true;
-  newProperty.dirty = true;
-
-  populateComponents([newProperty], validator, []);
-
-  for (var i = 0, l = descriptor.components.length; i < l; i++) {
-    var component = candidateComponents[descriptor.components[i]];
-
-    if (hasInherit(component))
-      return;
-
-    mayOverride = compactable[component.name].canOverride;
-    if (!everyValuesPair(mayOverride.bind(null, validator), newProperty.components[i], component))
-      return;
-
-    newProperty.components[i] = deepClone(component);
-    newProperty.important = component.important;
-
-    all = component.all;
-  }
-
-  for (var componentName in candidateComponents) {
-    candidateComponents[componentName].unused = true;
+function isMergeableShorthand(shorthand) {
+  if (shorthand.name != 'font') {
+    return true;
   }
 
-  nameMetadata = joinMetadata(candidateComponents, 1);
-  newValuePlaceholder[1].push(nameMetadata);
-
-  valueMetadata = joinMetadata(candidateComponents, 2);
-  newValuePlaceholder[2].push(valueMetadata);
-
-  newProperty.position = all.length;
-  newProperty.all = all;
-  newProperty.all.push(newValuePlaceholder);
-
-  properties.push(newProperty);
+  return shorthand.value[0][1].indexOf(Marker.INTERNAL) == -1;
 }
 
-function invalidateOrCompact(properties, position, candidates, validator) {
-  var property = properties[position];
+module.exports = isMergeableShorthand;
 
-  for (var name in candidates) {
-    if (undefined !== property && name == property.name)
-      continue;
+},{"../../../tokenizer/marker":84}],36:[function(require,module,exports){
+var everyValuesPair = require('./every-values-pair');
+var hasInherit = require('./has-inherit');
+var populateComponents = require('./populate-components');
 
-    var descriptor = compactable[name];
-    var candidateComponents = candidates[name];
-    if (descriptor.components.length > Object.keys(candidateComponents).length) {
-      delete candidates[name];
-      continue;
-    }
+var compactable = require('../compactable');
+var deepClone = require('../clone').deep;
+var restoreWithComponents = require('../restore-with-components');
 
-    if (mixedImportance(candidateComponents))
-      continue;
+var restoreFromOptimizing = require('../../restore-from-optimizing');
+var wrapSingle = require('../../wrap-for-optimizing').single;
 
-    replaceWithShorthand(properties, candidateComponents, name, validator);
-  }
-}
+var serializeBody = require('../../../writer/one-time').body;
+var Token = require('../../../tokenizer/token');
 
 function mergeIntoShorthands(properties, validator) {
   var candidates = {};
@@ -5923,28 +6278,30 @@ function mergeIntoShorthands(properties, validator) {
   var i, l;
   var j, m;
 
-  if (properties.length < 3)
+  // there is no shorthand property made up of less than 3 longhands
+  if (properties.length < 3) {
     return;
+  }
 
   for (i = 0, l = properties.length; i < l; i++) {
     property = properties[i];
+    descriptor = compactable[property.name];
 
-    if (property.unused)
+    if (property.unused) {
       continue;
+    }
 
-    if (property.hack)
+    if (property.hack) {
       continue;
+    }
 
-    if (property.block)
+    if (property.block) {
       continue;
+    }
 
-    descriptor = compactable[property.name];
-    if (!descriptor || !descriptor.componentOf)
-      continue;
+    invalidateOrCompact(properties, i, candidates, validator);
 
-    if (property.shorthand) {
-      invalidateOrCompact(properties, i, candidates, validator);
-    } else {
+    if (descriptor && descriptor.componentOf) {
       for (j = 0, m = descriptor.componentOf.length; j < m; j++) {
         componentOf = descriptor.componentOf[j];
 
@@ -5957,26790 +6314,16339 @@ function mergeIntoShorthands(properties, validator) {
   invalidateOrCompact(properties, i, candidates, validator);
 }
 
-module.exports = mergeIntoShorthands;
+function invalidateOrCompact(properties, position, candidates, validator) {
+  var invalidatedBy = properties[position];
+  var shorthandName;
+  var shorthandDescriptor;
+  var candidateComponents;
 
-},{"../../../tokenizer/token":82,"../../wrap-for-optimizing":57,"../clone":21,"../compactable":22,"./every-values-pair":31,"./has-inherit":33,"./populate-components":39}],36:[function(require,module,exports){
-var mergeIntoShorthands = require('./merge-into-shorthands');
-var overrideProperties = require('./override-properties');
-var populateComponents = require('./populate-components');
+  for (shorthandName in candidates) {
+    if (undefined !== invalidatedBy && shorthandName == invalidatedBy.name) {
+      continue;
+    }
 
-var restoreWithComponents = require('../restore-with-components');
+    shorthandDescriptor = compactable[shorthandName];
+    candidateComponents = candidates[shorthandName];
+    if (invalidatedBy && invalidates(candidates, shorthandName, invalidatedBy)) {
+      delete candidates[shorthandName];
+      continue;
+    }
 
-var wrapForOptimizing = require('../../wrap-for-optimizing').all;
-var removeUnused = require('../../remove-unused');
-var restoreFromOptimizing = require('../../restore-from-optimizing');
+    if (shorthandDescriptor.components.length > Object.keys(candidateComponents).length) {
+      continue;
+    }
 
-var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;
+    if (mixedImportance(candidateComponents)) {
+      continue;
+    }
 
-function optimizeProperties(properties, withOverriding, withMerging, context) {
-  var _properties = wrapForOptimizing(properties, false);
-  var _property;
-  var i, l;
+    if (!overridable(candidateComponents, shorthandName, validator)) {
+      continue;
+    }
 
-  populateComponents(_properties, context.validator, context.warnings);
+    if (!mergeable(candidateComponents)) {
+      continue;
+    }
 
-  for (i = 0, l = _properties.length; i < l; i++) {
-    _property = _properties[i];
-    if (_property.block) {
-      optimizeProperties(_property.value[0][1], withOverriding, withMerging, context);
+    if (mixedInherit(candidateComponents)) {
+      replaceWithInheritBestFit(properties, candidateComponents, shorthandName, validator);
+    } else {
+      replaceWithShorthand(properties, candidateComponents, shorthandName, validator);
     }
   }
+}
 
-  if (withOverriding && context.options.level[OptimizationLevel.Two].overrideProperties) {
-    overrideProperties(_properties, withMerging, context.options.compatibility, context.validator);
+function invalidates(candidates, shorthandName, invalidatedBy) {
+  var shorthandDescriptor = compactable[shorthandName];
+  var invalidatedByDescriptor = compactable[invalidatedBy.name];
+  var componentName;
+
+  if ('overridesShorthands' in shorthandDescriptor && shorthandDescriptor.overridesShorthands.indexOf(invalidatedBy.name) > -1) {
+    return true;
   }
 
-  if (withMerging && context.options.level[OptimizationLevel.Two].mergeIntoShorthands) {
-    mergeIntoShorthands(_properties, context.validator);
+  if (invalidatedByDescriptor && 'componentOf' in invalidatedByDescriptor) {
+    for (componentName in candidates[shorthandName]) {
+      if (invalidatedByDescriptor.componentOf.indexOf(componentName) > -1) {
+        return true;
+      }
+    }
   }
 
-  restoreFromOptimizing(_properties, restoreWithComponents);
-  removeUnused(_properties);
+  return false;
 }
 
-module.exports = optimizeProperties;
-
-},{"../../../options/optimization-level":63,"../../remove-unused":54,"../../restore-from-optimizing":55,"../../wrap-for-optimizing":57,"../restore-with-components":47,"./merge-into-shorthands":35,"./override-properties":37,"./populate-components":39}],37:[function(require,module,exports){
-var hasInherit = require('./has-inherit');
-var everyValuesPair = require('./every-values-pair');
-var findComponentIn = require('./find-component-in');
-var isComponentOf = require('./is-component-of');
-var overridesNonComponentShorthand = require('./overrides-non-component-shorthand');
-var sameVendorPrefixesIn = require('./vendor-prefixes').same;
+function mixedImportance(components) {
+  var important;
+  var componentName;
 
-var compactable = require('../compactable');
-var deepClone = require('../clone').deep;
-var deepClone = require('../clone').deep;
-var restoreWithComponents = require('../restore-with-components');
-var shallowClone = require('../clone').shallow;
+  for (componentName in components) {
+    if (undefined !== important && components[componentName].important != important) {
+      return true;
+    }
 
-var restoreFromOptimizing = require('../../restore-from-optimizing');
+    important = components[componentName].important;
+  }
 
-var Token = require('../../../tokenizer/token');
-var Marker = require('../../../tokenizer/marker');
+  return false;
+}
 
-var serializeProperty = require('../../../writer/one-time').property;
+function overridable(components, shorthandName, validator) {
+  var descriptor = compactable[shorthandName];
+  var newValuePlaceholder = [
+    Token.PROPERTY,
+    [Token.PROPERTY_NAME, shorthandName],
+    [Token.PROPERTY_VALUE, descriptor.defaultValue]
+  ];
+  var newProperty = wrapSingle(newValuePlaceholder);
+  var component;
+  var mayOverride;
+  var i, l;
 
-function wouldBreakCompatibility(property, validator) {
-  for (var i = 0; i < property.components.length; i++) {
-    var component = property.components[i];
-    var descriptor = compactable[component.name];
-    var canOverride = descriptor && descriptor.canOverride || canOverride.sameValue;
+  populateComponents([newProperty], validator, []);
 
-    var _component = shallowClone(component);
-    _component.value = [[Token.PROPERTY_VALUE, descriptor.defaultValue]];
+  for (i = 0, l = descriptor.components.length; i < l; i++) {
+    component = components[descriptor.components[i]];
+    mayOverride = compactable[component.name].canOverride;
 
-    if (!everyValuesPair(canOverride.bind(null, validator), _component, component)) {
-      return true;
+    if (!everyValuesPair(mayOverride.bind(null, validator), newProperty.components[i], component)) {
+      return false;
     }
   }
 
-  return false;
+  return true;
 }
 
-function overrideIntoMultiplex(property, by) {
-  by.unused = true;
+function mergeable(components) {
+  var lastCount = null;
+  var currentCount;
+  var componentName;
+  var component;
+  var descriptor;
+  var values;
 
-  turnIntoMultiplex(by, multiplexSize(property));
-  property.value = by.value;
-}
+  for (componentName in components) {
+    component = components[componentName];
+    descriptor = compactable[componentName];
 
-function overrideByMultiplex(property, by) {
-  by.unused = true;
-  property.multiplex = true;
-  property.value = by.value;
-}
+    if (!('restore' in descriptor)) {
+      continue;
+    }
 
-function overrideSimple(property, by) {
-  by.unused = true;
-  property.value = by.value;
-}
+    restoreFromOptimizing([component.all[component.position]], restoreWithComponents);
+    values = descriptor.restore(component, compactable);
 
-function override(property, by) {
-  if (by.multiplex)
-    overrideByMultiplex(property, by);
-  else if (property.multiplex)
-    overrideIntoMultiplex(property, by);
-  else
-    overrideSimple(property, by);
-}
+    currentCount = values.length;
 
-function overrideShorthand(property, by) {
-  by.unused = true;
+    if (lastCount !== null && currentCount !== lastCount) {
+      return false;
+    }
 
-  for (var i = 0, l = property.components.length; i < l; i++) {
-    override(property.components[i], by.components[i], property.multiplex);
+    lastCount = currentCount;
   }
-}
 
-function turnIntoMultiplex(property, size) {
-  property.multiplex = true;
+  return true;
+}
 
-  for (var i = 0, l = property.components.length; i < l; i++) {
-    var component = property.components[i];
-    if (component.multiplex)
-      continue;
+function mixedInherit(components) {
+  var componentName;
+  var lastValue = null;
+  var currentValue;
 
-    var value = component.value.slice(0);
+  for (componentName in components) {
+    currentValue = hasInherit(components[componentName]);
 
-    for (var j = 1; j < size; j++) {
-      component.value.push([Token.PROPERTY_VALUE, Marker.COMMA]);
-      Array.prototype.push.apply(component.value, value);
+    if (lastValue !== null && lastValue !== currentValue) {
+      return true;
     }
+
+    lastValue = currentValue;
   }
+
+  return false;
 }
 
-function multiplexSize(component) {
-  var size = 0;
+function replaceWithInheritBestFit(properties, candidateComponents, shorthandName, validator) {
+  var viaLonghands = buildSequenceWithInheritLonghands(candidateComponents, shorthandName, validator);
+  var viaShorthand = buildSequenceWithInheritShorthand(candidateComponents, shorthandName, validator);
+  var longhandTokensSequence = viaLonghands[0];
+  var shorthandTokensSequence = viaShorthand[0];
+  var isLonghandsShorter = serializeBody(longhandTokensSequence).length < serializeBody(shorthandTokensSequence).length;
+  var newTokensSequence = isLonghandsShorter ? longhandTokensSequence : shorthandTokensSequence;
+  var newProperty = isLonghandsShorter ? viaLonghands[1] : viaShorthand[1];
+  var newComponents = isLonghandsShorter ? viaLonghands[2] : viaShorthand[2];
+  var all = candidateComponents[Object.keys(candidateComponents)[0]].all;
+  var componentName;
+  var oldComponent;
+  var newComponent;
+  var newToken;
 
-  for (var i = 0, l = component.value.length; i < l; i++) {
-    if (component.value[i][1] == Marker.COMMA)
-      size++;
-  }
+  newProperty.position = all.length;
+  newProperty.shorthand = true;
+  newProperty.dirty = true;
+  newProperty.all = all;
+  newProperty.all.push(newTokensSequence[0]);
 
-  return size + 1;
+  properties.push(newProperty);
+
+  for (componentName in candidateComponents) {
+    oldComponent = candidateComponents[componentName];
+    oldComponent.unused = true;
+
+    if (oldComponent.name in newComponents) {
+      newComponent = newComponents[oldComponent.name];
+      newToken = findTokenIn(newTokensSequence, componentName);
+
+      newComponent.position = all.length;
+      newComponent.all = all;
+      newComponent.all.push(newToken);
+
+      properties.push(newComponent);
+    }
+  }
 }
 
-function lengthOf(property) {
-  var fakeAsArray = [
+function buildSequenceWithInheritLonghands(components, shorthandName, validator) {
+  var tokensSequence = [];
+  var inheritComponents = {};
+  var nonInheritComponents = {};
+  var descriptor = compactable[shorthandName];
+  var shorthandToken = [
     Token.PROPERTY,
-    [Token.PROPERTY_NAME, property.name]
-  ].concat(property.value);
-  return serializeProperty([fakeAsArray], 0).length;
-}
-
-function moreSameShorthands(properties, startAt, name) {
-  // Since we run the main loop in `compactOverrides` backwards, at this point some
-  // properties may not be marked as unused.
-  // We should consider reverting the order if possible
-  var count = 0;
+    [Token.PROPERTY_NAME, shorthandName],
+    [Token.PROPERTY_VALUE, descriptor.defaultValue]
+  ];
+  var newProperty = wrapSingle(shorthandToken);
+  var component;
+  var longhandToken;
+  var newComponent;
+  var nameMetadata;
+  var i, l;
 
-  for (var i = startAt; i >= 0; i--) {
-    if (properties[i].name == name && !properties[i].unused)
-      count++;
-    if (count > 1)
-      break;
-  }
+  populateComponents([newProperty], validator, []);
 
-  return count > 1;
-}
+  for (i = 0, l = descriptor.components.length; i < l; i++) {
+    component = components[descriptor.components[i]];
 
-function overridingFunction(shorthand, validator) {
-  for (var i = 0, l = shorthand.components.length; i < l; i++) {
-    if (anyValue(validator.isValidFunction, shorthand.components[i]))
-      return true;
-  }
+    if (hasInherit(component)) {
+      longhandToken = component.all[component.position].slice(0, 2);
+      Array.prototype.push.apply(longhandToken, component.value);
+      tokensSequence.push(longhandToken);
 
-  return false;
-}
+      newComponent = deepClone(component);
+      newComponent.value = inferComponentValue(components, newComponent.name);
 
-function anyValue(fn, property) {
-  for (var i = 0, l = property.value.length; i < l; i++) {
-    if (property.value[i][1] == Marker.COMMA)
-      continue;
+      newProperty.components[i] = newComponent;
+      inheritComponents[component.name] = deepClone(component);
+    } else {
+      newComponent = deepClone(component);
+      newComponent.all = component.all;
+      newProperty.components[i] = newComponent;
 
-    if (fn(property.value[i][1]))
-      return true;
+      nonInheritComponents[component.name] = component;
+    }
   }
 
-  return false;
-}
+  nameMetadata = joinMetadata(nonInheritComponents, 1);
+  shorthandToken[1].push(nameMetadata);
 
-function wouldResultInLongerValue(left, right) {
-  if (!left.multiplex && !right.multiplex || left.multiplex && right.multiplex)
-    return false;
+  restoreFromOptimizing([newProperty], restoreWithComponents);
 
-  var multiplex = left.multiplex ? left : right;
-  var simple = left.multiplex ? right : left;
-  var component;
+  shorthandToken = shorthandToken.slice(0, 2);
+  Array.prototype.push.apply(shorthandToken, newProperty.value);
 
-  var multiplexClone = deepClone(multiplex);
-  restoreFromOptimizing([multiplexClone], restoreWithComponents);
+  tokensSequence.unshift(shorthandToken);
 
-  var simpleClone = deepClone(simple);
-  restoreFromOptimizing([simpleClone], restoreWithComponents);
+  return [tokensSequence, newProperty, inheritComponents];
+}
 
-  var lengthBefore = lengthOf(multiplexClone) + 1 + lengthOf(simpleClone);
+function inferComponentValue(components, propertyName) {
+  var descriptor = compactable[propertyName];
 
-  if (left.multiplex) {
-    component = findComponentIn(multiplexClone, simpleClone);
-    overrideIntoMultiplex(component, simpleClone);
+  if ('oppositeTo' in descriptor) {
+    return components[descriptor.oppositeTo].value;
   } else {
-    component = findComponentIn(simpleClone, multiplexClone);
-    turnIntoMultiplex(simpleClone, multiplexSize(multiplexClone));
-    overrideByMultiplex(component, multiplexClone);
+    return [[Token.PROPERTY_VALUE, descriptor.defaultValue]];
   }
+}
 
-  restoreFromOptimizing([simpleClone], restoreWithComponents);
-
-  var lengthAfter = lengthOf(simpleClone);
+function joinMetadata(components, at) {
+  var metadata = [];
+  var component;
+  var originalValue;
+  var componentMetadata;
+  var componentName;
 
-  return lengthBefore <= lengthAfter;
-}
+  for (componentName in components) {
+    component = components[componentName];
+    originalValue = component.all[component.position];
+    componentMetadata = originalValue[at][originalValue[at].length - 1];
 
-function isCompactable(property) {
-  return property.name in compactable;
-}
+    Array.prototype.push.apply(metadata, componentMetadata);
+  }
 
-function noneOverrideHack(left, right) {
-  return !left.multiplex &&
-    (left.name == 'background' || left.name == 'background-image') &&
-    right.multiplex &&
-    (right.name == 'background' || right.name == 'background-image') &&
-    anyLayerIsNone(right.value);
+  return metadata.sort(metadataSorter);
 }
 
-function anyLayerIsNone(values) {
-  var layers = intoLayers(values);
+function metadataSorter(metadata1, metadata2) {
+  var line1 = metadata1[0];
+  var line2 = metadata2[0];
+  var column1 = metadata1[1];
+  var column2 = metadata2[1];
 
-  for (var i = 0, l = layers.length; i < l; i++) {
-    if (layers[i].length == 1 && layers[i][0][1] == 'none')
-      return true;
+  if (line1 < line2) {
+    return -1;
+  } else if (line1 === line2) {
+    return column1 < column2 ? -1 : 1;
+  } else {
+    return 1;
   }
-
-  return false;
 }
 
-function intoLayers(values) {
-  var layers = [];
+function buildSequenceWithInheritShorthand(components, shorthandName, validator) {
+  var tokensSequence = [];
+  var inheritComponents = {};
+  var nonInheritComponents = {};
+  var descriptor = compactable[shorthandName];
+  var shorthandToken = [
+    Token.PROPERTY,
+    [Token.PROPERTY_NAME, shorthandName],
+    [Token.PROPERTY_VALUE, 'inherit']
+  ];
+  var newProperty = wrapSingle(shorthandToken);
+  var component;
+  var longhandToken;
+  var nameMetadata;
+  var valueMetadata;
+  var i, l;
 
-  for (var i = 0, layer = [], l = values.length; i < l; i++) {
-    var value = values[i];
-    if (value[1] == Marker.COMMA) {
-      layers.push(layer);
-      layer = [];
+  populateComponents([newProperty], validator, []);
+
+  for (i = 0, l = descriptor.components.length; i < l; i++) {
+    component = components[descriptor.components[i]];
+
+    if (hasInherit(component)) {
+      inheritComponents[component.name] = component;
     } else {
-      layer.push(value);
+      longhandToken = component.all[component.position].slice(0, 2);
+      Array.prototype.push.apply(longhandToken, component.value);
+      tokensSequence.push(longhandToken);
+
+      nonInheritComponents[component.name] = deepClone(component);
     }
   }
 
-  layers.push(layer);
-  return layers;
-}
+  nameMetadata = joinMetadata(inheritComponents, 1);
+  shorthandToken[1].push(nameMetadata);
 
-function overrideProperties(properties, withMerging, compatibility, validator) {
-  var mayOverride, right, left, component;
-  var overriddenComponents;
-  var overriddenComponent;
-  var overridingComponent;
-  var overridable;
-  var i, j, k;
+  valueMetadata = joinMetadata(inheritComponents, 2);
+  shorthandToken[2].push(valueMetadata);
 
-  propertyLoop:
-  for (i = properties.length - 1; i >= 0; i--) {
-    right = properties[i];
+  tokensSequence.unshift(shorthandToken);
 
-    if (!isCompactable(right))
-      continue;
+  return [tokensSequence, newProperty, nonInheritComponents];
+}
 
-    if (right.block)
-      continue;
+function findTokenIn(tokens, componentName) {
+  var i, l;
 
-    mayOverride = compactable[right.name].canOverride;
+  for (i = 0, l = tokens.length; i < l; i++) {
+    if (tokens[i][1][1] == componentName) {
+      return tokens[i];
+    }
+  }
+}
 
-    traverseLoop:
-    for (j = i - 1; j >= 0; j--) {
-      left = properties[j];
+function replaceWithShorthand(properties, candidateComponents, shorthandName, validator) {
+  var descriptor = compactable[shorthandName];
+  var nameMetadata;
+  var valueMetadata;
+  var newValuePlaceholder = [
+    Token.PROPERTY,
+    [Token.PROPERTY_NAME, shorthandName],
+    [Token.PROPERTY_VALUE, descriptor.defaultValue]
+  ];
+  var all;
 
-      if (!isCompactable(left))
-        continue;
+  var newProperty = wrapSingle(newValuePlaceholder);
+  newProperty.shorthand = true;
+  newProperty.dirty = true;
 
-      if (left.block)
-        continue;
+  populateComponents([newProperty], validator, []);
 
-      if (left.unused || right.unused)
-        continue;
+  for (var i = 0, l = descriptor.components.length; i < l; i++) {
+    var component = candidateComponents[descriptor.components[i]];
 
-      if (left.hack && !right.hack && !right.important || !left.hack && !left.important && right.hack)
-        continue;
+    newProperty.components[i] = deepClone(component);
+    newProperty.important = component.important;
 
-      if (left.important == right.important && left.hack[0] != right.hack[0])
-        continue;
+    all = component.all;
+  }
 
-      if (left.important == right.important && (left.hack[0] != right.hack[0] || (left.hack[1] && left.hack[1] != right.hack[1])))
-        continue;
+  for (var componentName in candidateComponents) {
+    candidateComponents[componentName].unused = true;
+  }
 
-      if (hasInherit(right))
-        continue;
+  nameMetadata = joinMetadata(candidateComponents, 1);
+  newValuePlaceholder[1].push(nameMetadata);
 
-      if (noneOverrideHack(left, right))
-        continue;
+  valueMetadata = joinMetadata(candidateComponents, 2);
+  newValuePlaceholder[2].push(valueMetadata);
 
-      if (right.shorthand && isComponentOf(right, left)) {
-        // maybe `left` can be overridden by `right` which is a shorthand?
-        if (!right.important && left.important)
-          continue;
+  newProperty.position = all.length;
+  newProperty.all = all;
+  newProperty.all.push(newValuePlaceholder);
 
-        if (!sameVendorPrefixesIn([left], right.components))
-          continue;
+  properties.push(newProperty);
+}
 
-        if (!anyValue(validator.isValidFunction, left) && overridingFunction(right, validator))
-          continue;
+module.exports = mergeIntoShorthands;
 
-        component = findComponentIn(right, left);
-        mayOverride = compactable[left.name].canOverride;
-        if (everyValuesPair(mayOverride.bind(null, validator), left, component)) {
-          left.unused = true;
-        }
-      } else if (right.shorthand && overridesNonComponentShorthand(right, left)) {
-        // `right` is a shorthand while `left` can be overriden by it, think `border` and `border-top`
-        if (!right.important && left.important) {
-          continue;
-        }
+},{"../../../tokenizer/token":85,"../../../writer/one-time":99,"../../restore-from-optimizing":57,"../../wrap-for-optimizing":59,"../clone":21,"../compactable":22,"../restore-with-components":49,"./every-values-pair":31,"./has-inherit":33,"./populate-components":40}],37:[function(require,module,exports){
+var mergeIntoShorthands = require('./merge-into-shorthands');
+var overrideProperties = require('./override-properties');
+var populateComponents = require('./populate-components');
 
-        if (!sameVendorPrefixesIn([left], right.components)) {
-          continue;
-        }
+var restoreWithComponents = require('../restore-with-components');
 
-        if (!anyValue(validator.isValidFunction, left) && overridingFunction(right, validator)) {
-          continue;
-        }
+var wrapForOptimizing = require('../../wrap-for-optimizing').all;
+var removeUnused = require('../../remove-unused');
+var restoreFromOptimizing = require('../../restore-from-optimizing');
 
-        overriddenComponents = left.shorthand ?
-          left.components:
-          [left];
+var OptimizationLevel = require('../../../options/optimization-level').OptimizationLevel;
 
-        for (k = overriddenComponents.length - 1; k >= 0; k--) {
-          overriddenComponent = overriddenComponents[k];
-          overridingComponent = findComponentIn(right, overriddenComponent);
-          mayOverride = compactable[overriddenComponent.name].canOverride;
+function optimizeProperties(properties, withOverriding, withMerging, context) {
+  var levelOptions = context.options.level[OptimizationLevel.Two];
+  var _properties = wrapForOptimizing(properties, false, levelOptions.skipProperties);
+  var _property;
+  var i, l;
 
-          if (!everyValuesPair(mayOverride.bind(null, validator), left, overridingComponent)) {
-            continue traverseLoop;
-          }
-        }
+  populateComponents(_properties, context.validator, context.warnings);
 
-        left.unused = true;
-      } else if (withMerging && left.shorthand && !right.shorthand && isComponentOf(left, right, true)) {
-        // maybe `right` can be pulled into `left` which is a shorthand?
-        if (right.important && !left.important)
-          continue;
+  for (i = 0, l = _properties.length; i < l; i++) {
+    _property = _properties[i];
+    if (_property.block) {
+      optimizeProperties(_property.value[0][1], withOverriding, withMerging, context);
+    }
+  }
 
-        if (!right.important && left.important) {
-          right.unused = true;
-          continue;
-        }
+  if (withMerging && levelOptions.mergeIntoShorthands) {
+    mergeIntoShorthands(_properties, context.validator);
+  }
 
-        // Pending more clever algorithm in #527
-        if (moreSameShorthands(properties, i - 1, left.name))
-          continue;
+  if (withOverriding && levelOptions.overrideProperties) {
+    overrideProperties(_properties, withMerging, context.options.compatibility, context.validator);
+  }
 
-        if (overridingFunction(left, validator))
-          continue;
+  restoreFromOptimizing(_properties, restoreWithComponents);
+  removeUnused(_properties);
+}
 
-        component = findComponentIn(left, right);
-        if (everyValuesPair(mayOverride.bind(null, validator), component, right)) {
-          var disabledBackgroundMerging =
-            !compatibility.properties.backgroundClipMerging && component.name.indexOf('background-clip') > -1 ||
-            !compatibility.properties.backgroundOriginMerging && component.name.indexOf('background-origin') > -1 ||
-            !compatibility.properties.backgroundSizeMerging && component.name.indexOf('background-size') > -1;
-          var nonMergeableValue = compactable[right.name].nonMergeableValue === right.value[0][1];
-
-          if (disabledBackgroundMerging || nonMergeableValue)
-            continue;
-
-          if (!compatibility.properties.merging && wouldBreakCompatibility(left, validator))
-            continue;
+module.exports = optimizeProperties;
 
-          if (component.value[0][1] != right.value[0][1] && (hasInherit(left) || hasInherit(right)))
-            continue;
+},{"../../../options/optimization-level":66,"../../remove-unused":56,"../../restore-from-optimizing":57,"../../wrap-for-optimizing":59,"../restore-with-components":49,"./merge-into-shorthands":36,"./override-properties":38,"./populate-components":40}],38:[function(require,module,exports){
+var hasInherit = require('./has-inherit');
+var everyValuesPair = require('./every-values-pair');
+var findComponentIn = require('./find-component-in');
+var isComponentOf = require('./is-component-of');
+var isMergeableShorthand = require('./is-mergeable-shorthand');
+var overridesNonComponentShorthand = require('./overrides-non-component-shorthand');
+var sameVendorPrefixesIn = require('./vendor-prefixes').same;
 
-          if (wouldResultInLongerValue(left, right))
-            continue;
+var compactable = require('../compactable');
+var deepClone = require('../clone').deep;
+var deepClone = require('../clone').deep;
+var restoreWithComponents = require('../restore-with-components');
+var shallowClone = require('../clone').shallow;
 
-          if (!left.multiplex && right.multiplex)
-            turnIntoMultiplex(left, multiplexSize(right));
+var restoreFromOptimizing = require('../../restore-from-optimizing');
 
-          override(component, right);
-          left.dirty = true;
-        }
-      } else if (withMerging && left.shorthand && right.shorthand && left.name == right.name) {
-        // merge if all components can be merged
+var Token = require('../../../tokenizer/token');
+var Marker = require('../../../tokenizer/marker');
 
-        if (!left.multiplex && right.multiplex)
-          continue;
+var serializeProperty = require('../../../writer/one-time').property;
 
-        if (!right.important && left.important) {
-          right.unused = true;
-          continue propertyLoop;
-        }
+function wouldBreakCompatibility(property, validator) {
+  for (var i = 0; i < property.components.length; i++) {
+    var component = property.components[i];
+    var descriptor = compactable[component.name];
+    var canOverride = descriptor && descriptor.canOverride || canOverride.sameValue;
 
-        if (right.important && !left.important) {
-          left.unused = true;
-          continue;
-        }
+    var _component = shallowClone(component);
+    _component.value = [[Token.PROPERTY_VALUE, descriptor.defaultValue]];
 
-        for (k = left.components.length - 1; k >= 0; k--) {
-          var leftComponent = left.components[k];
-          var rightComponent = right.components[k];
+    if (!everyValuesPair(canOverride.bind(null, validator), _component, component)) {
+      return true;
+    }
+  }
 
-          mayOverride = compactable[leftComponent.name].canOverride;
-          if (!everyValuesPair(mayOverride.bind(null, validator), leftComponent, rightComponent))
-            continue propertyLoop;
-        }
+  return false;
+}
 
-        overrideShorthand(left, right);
-        left.dirty = true;
-      } else if (withMerging && left.shorthand && right.shorthand && isComponentOf(left, right)) {
-        // border is a shorthand but any of its components is a shorthand too
+function overrideIntoMultiplex(property, by) {
+  by.unused = true;
 
-        if (!left.important && right.important)
-          continue;
+  turnIntoMultiplex(by, multiplexSize(property));
+  property.value = by.value;
+}
 
-        component = findComponentIn(left, right);
-        mayOverride = compactable[right.name].canOverride;
-        if (!everyValuesPair(mayOverride.bind(null, validator), component, right))
-          continue;
+function overrideByMultiplex(property, by) {
+  by.unused = true;
+  property.multiplex = true;
+  property.value = by.value;
+}
 
-        if (left.important && !right.important) {
-          right.unused = true;
-          continue;
-        }
+function overrideSimple(property, by) {
+  by.unused = true;
+  property.value = by.value;
+}
 
-        var rightRestored = compactable[right.name].restore(right, compactable);
-        if (rightRestored.length > 1)
-          continue;
+function override(property, by) {
+  if (by.multiplex)
+    overrideByMultiplex(property, by);
+  else if (property.multiplex)
+    overrideIntoMultiplex(property, by);
+  else
+    overrideSimple(property, by);
+}
 
-        component = findComponentIn(left, right);
-        override(component, right);
-        right.dirty = true;
-      } else if (left.name == right.name) {
-        // two non-shorthands should be merged based on understandability
-        overridable = true;
+function overrideShorthand(property, by) {
+  by.unused = true;
 
-        if (right.shorthand) {
-          for (k = right.components.length - 1; k >= 0 && overridable; k--) {
-            overriddenComponent = left.components[k];
-            overridingComponent = right.components[k];
-            mayOverride = compactable[overridingComponent.name].canOverride;
+  for (var i = 0, l = property.components.length; i < l; i++) {
+    override(property.components[i], by.components[i], property.multiplex);
+  }
+}
 
-            overridable = overridable && everyValuesPair(mayOverride.bind(null, validator), overriddenComponent, overridingComponent);
-          }
-        } else {
-          mayOverride = compactable[right.name].canOverride;
-          overridable = everyValuesPair(mayOverride.bind(null, validator), left, right);
-        }
+function turnIntoMultiplex(property, size) {
+  property.multiplex = true;
 
-        if (left.important && !right.important && overridable) {
-          right.unused = true;
-          continue;
-        }
+  if (compactable[property.name].shorthand) {
+    turnShorthandValueIntoMultiplex(property, size);
+  } else {
+    turnLonghandValueIntoMultiplex(property, size);
+  }
+}
 
-        if (!left.important && right.important && overridable) {
-          left.unused = true;
-          continue;
-        }
+function turnShorthandValueIntoMultiplex(property, size) {
+  var component;
+  var i, l;
 
-        if (!overridable) {
-          continue;
-        }
+  for (i = 0, l = property.components.length; i < l; i++) {
+    component = property.components[i];
 
-        left.unused = true;
-      }
+    if (!component.multiplex) {
+      turnLonghandValueIntoMultiplex(component, size);
     }
   }
 }
 
-module.exports = overrideProperties;
+function turnLonghandValueIntoMultiplex(property, size) {
+  var withRealValue = compactable[property.name].intoMultiplexMode == 'real';
+  var withValue = withRealValue ?
+    property.value.slice(0) :
+    compactable[property.name].defaultValue;
+  var i = multiplexSize(property);
+  var j;
+  var m = withValue.length;
 
-},{"../../../tokenizer/marker":81,"../../../tokenizer/token":82,"../../../writer/one-time":96,"../../restore-from-optimizing":55,"../clone":21,"../compactable":22,"../restore-with-components":47,"./every-values-pair":31,"./find-component-in":32,"./has-inherit":33,"./is-component-of":34,"./overrides-non-component-shorthand":38,"./vendor-prefixes":41}],38:[function(require,module,exports){
-var compactable = require('../compactable');
+  for (; i < size; i++) {
+    property.value.push([Token.PROPERTY_VALUE, Marker.COMMA]);
 
-function overridesNonComponentShorthand(property1, property2) {
-  return property1.name in compactable &&
-    'overridesShorthands' in compactable[property1.name] &&
-    compactable[property1.name].overridesShorthands.indexOf(property2.name) > -1;
+    if (Array.isArray(withValue)) {
+      for (j = 0; j < m; j++) {
+        property.value.push(withRealValue ? withValue[j] : [Token.PROPERTY_VALUE, withValue[j]]);
+      }
+    } else {
+      property.value.push(withRealValue ? withValue : [Token.PROPERTY_VALUE, withValue]);
+    }
+  }
 }
 
-module.exports = overridesNonComponentShorthand;
+function multiplexSize(component) {
+  var size = 0;
 
-},{"../compactable":22}],39:[function(require,module,exports){
-var compactable = require('../compactable');
-var InvalidPropertyError = require('../invalid-property-error');
+  for (var i = 0, l = component.value.length; i < l; i++) {
+    if (component.value[i][1] == Marker.COMMA)
+      size++;
+  }
 
-function populateComponents(properties, validator, warnings) {
-  var component;
-  var j, m;
+  return size + 1;
+}
 
-  for (var i = properties.length - 1; i >= 0; i--) {
-    var property = properties[i];
-    var descriptor = compactable[property.name];
+function lengthOf(property) {
+  var fakeAsArray = [
+    Token.PROPERTY,
+    [Token.PROPERTY_NAME, property.name]
+  ].concat(property.value);
+  return serializeProperty([fakeAsArray], 0).length;
+}
 
-    if (descriptor && descriptor.shorthand) {
-      property.shorthand = true;
-      property.dirty = true;
+function moreSameShorthands(properties, startAt, name) {
+  // Since we run the main loop in `compactOverrides` backwards, at this point some
+  // properties may not be marked as unused.
+  // We should consider reverting the order if possible
+  var count = 0;
 
-      try {
-        property.components = descriptor.breakUp(property, compactable, validator);
+  for (var i = startAt; i >= 0; i--) {
+    if (properties[i].name == name && !properties[i].unused)
+      count++;
+    if (count > 1)
+      break;
+  }
 
-        if (descriptor.shorthandComponents) {
-          for (j = 0, m = property.components.length; j < m; j++) {
-            component = property.components[j];
-            component.components = compactable[component.name].breakUp(component, compactable, validator);
-          }
-        }
-      } catch (e) {
-        if (e instanceof InvalidPropertyError) {
-          property.components = []; // this will set property.unused to true below
-          warnings.push(e.message);
-        } else {
-          throw e;
-        }
-      }
+  return count > 1;
+}
 
-      if (property.components.length > 0)
-        property.multiplex = property.components[0].multiplex;
-      else
-        property.unused = true;
+function overridingFunction(shorthand, validator) {
+  for (var i = 0, l = shorthand.components.length; i < l; i++) {
+    if (!anyValue(validator.isUrl, shorthand.components[i]) && anyValue(validator.isFunction, shorthand.components[i])) {
+      return true;
     }
   }
-}
 
-module.exports = populateComponents;
+  return false;
+}
 
-},{"../compactable":22,"../invalid-property-error":24}],40:[function(require,module,exports){
-var sameVendorPrefixes = require('./vendor-prefixes').same;
+function anyValue(fn, property) {
+  for (var i = 0, l = property.value.length; i < l; i++) {
+    if (property.value[i][1] == Marker.COMMA)
+      continue;
 
-function understandable(validator, value1, value2, _position, isPaired) {
-  if (!sameVendorPrefixes(value1, value2)) {
-    return false;
+    if (fn(property.value[i][1]))
+      return true;
   }
 
-  if (isPaired && validator.isValidVariable(value1) !== validator.isValidVariable(value2)) {
+  return false;
+}
+
+function wouldResultInLongerValue(left, right) {
+  if (!left.multiplex && !right.multiplex || left.multiplex && right.multiplex)
     return false;
-  }
 
-  return true;
-}
+  var multiplex = left.multiplex ? left : right;
+  var simple = left.multiplex ? right : left;
+  var component;
 
-module.exports = understandable;
+  var multiplexClone = deepClone(multiplex);
+  restoreFromOptimizing([multiplexClone], restoreWithComponents);
 
-},{"./vendor-prefixes":41}],41:[function(require,module,exports){
-var VENDOR_PREFIX_PATTERN = /(?:^|\W)(\-\w+\-)/g;
+  var simpleClone = deepClone(simple);
+  restoreFromOptimizing([simpleClone], restoreWithComponents);
 
-function unique(value) {
-  var prefixes = [];
-  var match;
+  var lengthBefore = lengthOf(multiplexClone) + 1 + lengthOf(simpleClone);
 
-  while ((match = VENDOR_PREFIX_PATTERN.exec(value)) !== null) {
-    if (prefixes.indexOf(match[0]) == -1) {
-      prefixes.push(match[0]);
-    }
+  if (left.multiplex) {
+    component = findComponentIn(multiplexClone, simpleClone);
+    overrideIntoMultiplex(component, simpleClone);
+  } else {
+    component = findComponentIn(simpleClone, multiplexClone);
+    turnIntoMultiplex(simpleClone, multiplexSize(multiplexClone));
+    overrideByMultiplex(component, multiplexClone);
   }
 
-  return prefixes;
+  restoreFromOptimizing([simpleClone], restoreWithComponents);
+
+  var lengthAfter = lengthOf(simpleClone);
+
+  return lengthBefore <= lengthAfter;
 }
 
-function same(value1, value2) {
-  return unique(value1).sort().join(',') == unique(value2).sort().join(',');
+function isCompactable(property) {
+  return property.name in compactable;
 }
 
-module.exports = {
-  unique: unique,
-  same: same
-};
+function noneOverrideHack(left, right) {
+  return !left.multiplex &&
+    (left.name == 'background' || left.name == 'background-image') &&
+    right.multiplex &&
+    (right.name == 'background' || right.name == 'background-image') &&
+    anyLayerIsNone(right.value);
+}
 
-},{}],42:[function(require,module,exports){
-var isMergeable = require('./is-mergeable');
+function anyLayerIsNone(values) {
+  var layers = intoLayers(values);
 
-var optimizeProperties = require('./properties/optimize');
+  for (var i = 0, l = layers.length; i < l; i++) {
+    if (layers[i].length == 1 && layers[i][0][1] == 'none')
+      return true;
+  }
 
-var cloneArray = require('../../utils/clone-array');
+  return false;
+}
 
-var Token = require('../../tokenizer/token');
+function intoLayers(values) {
+  var layers = [];
 
-var serializeBody = require('../../writer/one-time').body;
-var serializeRules = require('../../writer/one-time').rules;
+  for (var i = 0, layer = [], l = values.length; i < l; i++) {
+    var value = values[i];
+    if (value[1] == Marker.COMMA) {
+      layers.push(layer);
+      layer = [];
+    } else {
+      layer.push(value);
+    }
+  }
 
-function reduceNonAdjacent(tokens, context) {
-  var options = context.options;
-  var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
-  var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
-  var candidates = {};
-  var repeated = [];
+  layers.push(layer);
+  return layers;
+}
 
-  for (var i = tokens.length - 1; i >= 0; i--) {
-    var token = tokens[i];
+function overrideProperties(properties, withMerging, compatibility, validator) {
+  var mayOverride, right, left, component;
+  var overriddenComponents;
+  var overriddenComponent;
+  var overridingComponent;
+  var overridable;
+  var i, j, k;
 
-    if (token[0] != Token.RULE) {
-      continue;
-    } else if (token[2].length === 0) {
-      continue;
-    }
+  propertyLoop:
+  for (i = properties.length - 1; i >= 0; i--) {
+    right = properties[i];
 
-    var selectorAsString = serializeRules(token[1]);
-    var isComplexAndNotSpecial = token[1].length > 1 &&
-      isMergeable(selectorAsString, mergeablePseudoClasses, mergeablePseudoElements);
-    var wrappedSelectors = wrappedSelectorsFrom(token[1]);
-    var selectors = isComplexAndNotSpecial ?
-      [selectorAsString].concat(wrappedSelectors) :
-      [selectorAsString];
+    if (!isCompactable(right))
+      continue;
 
-    for (var j = 0, m = selectors.length; j < m; j++) {
-      var selector = selectors[j];
+    if (right.block)
+      continue;
 
-      if (!candidates[selector])
-        candidates[selector] = [];
-      else
-        repeated.push(selector);
+    mayOverride = compactable[right.name].canOverride;
 
-      candidates[selector].push({
-        where: i,
-        list: wrappedSelectors,
-        isPartial: isComplexAndNotSpecial && j > 0,
-        isComplex: isComplexAndNotSpecial && j === 0
-      });
-    }
-  }
+    traverseLoop:
+    for (j = i - 1; j >= 0; j--) {
+      left = properties[j];
 
-  reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context);
-  reduceComplexNonAdjacentCases(tokens, candidates, options, context);
-}
+      if (!isCompactable(left))
+        continue;
 
-function wrappedSelectorsFrom(list) {
-  var wrapped = [];
+      if (left.block)
+        continue;
 
-  for (var i = 0; i < list.length; i++) {
-    wrapped.push([list[i][1]]);
-  }
+      if (left.unused || right.unused)
+        continue;
 
-  return wrapped;
-}
+      if (left.hack && !right.hack && !right.important || !left.hack && !left.important && right.hack)
+        continue;
 
-function reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context) {
-  function filterOut(idx, bodies) {
-    return data[idx].isPartial && bodies.length === 0;
-  }
+      if (left.important == right.important && left.hack[0] != right.hack[0])
+        continue;
 
-  function reduceBody(token, newBody, processedCount, tokenIdx) {
-    if (!data[processedCount - tokenIdx - 1].isPartial)
-      token[2] = newBody;
-  }
+      if (left.important == right.important && (left.hack[0] != right.hack[0] || (left.hack[1] && left.hack[1] != right.hack[1])))
+        continue;
 
-  for (var i = 0, l = repeated.length; i < l; i++) {
-    var selector = repeated[i];
-    var data = candidates[selector];
+      if (hasInherit(right))
+        continue;
 
-    reduceSelector(tokens, data, {
-      filterOut: filterOut,
-      callback: reduceBody
-    }, options, context);
-  }
-}
+      if (noneOverrideHack(left, right))
+        continue;
 
-function reduceComplexNonAdjacentCases(tokens, candidates, options, context) {
-  var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
-  var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
-  var localContext = {};
+      if (right.shorthand && isComponentOf(right, left)) {
+        // maybe `left` can be overridden by `right` which is a shorthand?
+        if (!right.important && left.important)
+          continue;
 
-  function filterOut(idx) {
-    return localContext.data[idx].where < localContext.intoPosition;
-  }
+        if (!sameVendorPrefixesIn([left], right.components))
+          continue;
 
-  function collectReducedBodies(token, newBody, processedCount, tokenIdx) {
-    if (tokenIdx === 0)
-      localContext.reducedBodies.push(newBody);
-  }
+        if (!anyValue(validator.isFunction, left) && overridingFunction(right, validator))
+          continue;
 
-  allSelectors:
-  for (var complexSelector in candidates) {
-    var into = candidates[complexSelector];
-    if (!into[0].isComplex)
-      continue;
+        if (!isMergeableShorthand(right)) {
+          left.unused = true;
+          continue;
+        }
 
-    var intoPosition = into[into.length - 1].where;
-    var intoToken = tokens[intoPosition];
-    var reducedBodies = [];
+        component = findComponentIn(right, left);
+        mayOverride = compactable[left.name].canOverride;
+        if (everyValuesPair(mayOverride.bind(null, validator), left, component)) {
+          left.unused = true;
+        }
+      } else if (right.shorthand && overridesNonComponentShorthand(right, left)) {
+        // `right` is a shorthand while `left` can be overriden by it, think `border` and `border-top`
+        if (!right.important && left.important) {
+          continue;
+        }
 
-    var selectors = isMergeable(complexSelector, mergeablePseudoClasses, mergeablePseudoElements) ?
-      into[0].list :
-      [complexSelector];
+        if (!sameVendorPrefixesIn([left], right.components)) {
+          continue;
+        }
 
-    localContext.intoPosition = intoPosition;
-    localContext.reducedBodies = reducedBodies;
+        if (!anyValue(validator.isFunction, left) && overridingFunction(right, validator)) {
+          continue;
+        }
 
-    for (var j = 0, m = selectors.length; j < m; j++) {
-      var selector = selectors[j];
-      var data = candidates[selector];
+        overriddenComponents = left.shorthand ?
+          left.components:
+          [left];
 
-      if (data.length < 2)
-        continue allSelectors;
+        for (k = overriddenComponents.length - 1; k >= 0; k--) {
+          overriddenComponent = overriddenComponents[k];
+          overridingComponent = findComponentIn(right, overriddenComponent);
+          mayOverride = compactable[overriddenComponent.name].canOverride;
 
-      localContext.data = data;
+          if (!everyValuesPair(mayOverride.bind(null, validator), left, overridingComponent)) {
+            continue traverseLoop;
+          }
+        }
 
-      reduceSelector(tokens, data, {
-        filterOut: filterOut,
-        callback: collectReducedBodies
-      }, options, context);
+        left.unused = true;
+      } else if (withMerging && left.shorthand && !right.shorthand && isComponentOf(left, right, true)) {
+        // maybe `right` can be pulled into `left` which is a shorthand?
+        if (right.important && !left.important)
+          continue;
 
-      if (serializeBody(reducedBodies[reducedBodies.length - 1]) != serializeBody(reducedBodies[0]))
-        continue allSelectors;
-    }
+        if (!right.important && left.important) {
+          right.unused = true;
+          continue;
+        }
 
-    intoToken[2] = reducedBodies[0];
-  }
-}
+        // Pending more clever algorithm in #527
+        if (moreSameShorthands(properties, i - 1, left.name))
+          continue;
 
-function reduceSelector(tokens, data, context, options, outerContext) {
-  var bodies = [];
-  var bodiesAsList = [];
-  var processedTokens = [];
+        if (overridingFunction(left, validator))
+          continue;
 
-  for (var j = data.length - 1; j >= 0; j--) {
-    if (context.filterOut(j, bodies))
-      continue;
+        if (!isMergeableShorthand(left))
+          continue;
 
-    var where = data[j].where;
-    var token = tokens[where];
-    var clonedBody = cloneArray(token[2]);
+        component = findComponentIn(left, right);
+        if (everyValuesPair(mayOverride.bind(null, validator), component, right)) {
+          var disabledBackgroundMerging =
+            !compatibility.properties.backgroundClipMerging && component.name.indexOf('background-clip') > -1 ||
+            !compatibility.properties.backgroundOriginMerging && component.name.indexOf('background-origin') > -1 ||
+            !compatibility.properties.backgroundSizeMerging && component.name.indexOf('background-size') > -1;
+          var nonMergeableValue = compactable[right.name].nonMergeableValue === right.value[0][1];
 
-    bodies = bodies.concat(clonedBody);
-    bodiesAsList.push(clonedBody);
-    processedTokens.push(where);
-  }
+          if (disabledBackgroundMerging || nonMergeableValue)
+            continue;
 
-  optimizeProperties(bodies, true, false, outerContext);
+          if (!compatibility.properties.merging && wouldBreakCompatibility(left, validator))
+            continue;
 
-  var processedCount = processedTokens.length;
-  var propertyIdx = bodies.length - 1;
-  var tokenIdx = processedCount - 1;
+          if (component.value[0][1] != right.value[0][1] && (hasInherit(left) || hasInherit(right)))
+            continue;
 
-  while (tokenIdx >= 0) {
-     if ((tokenIdx === 0 || (bodies[propertyIdx] && bodiesAsList[tokenIdx].indexOf(bodies[propertyIdx]) > -1)) && propertyIdx > -1) {
-      propertyIdx--;
-      continue;
-    }
+          if (wouldResultInLongerValue(left, right))
+            continue;
 
-    var newBody = bodies.splice(propertyIdx + 1);
-    context.callback(tokens[processedTokens[tokenIdx]], newBody, processedCount, tokenIdx);
+          if (!left.multiplex && right.multiplex)
+            turnIntoMultiplex(left, multiplexSize(right));
 
-    tokenIdx--;
-  }
-}
+          override(component, right);
+          left.dirty = true;
+        }
+      } else if (withMerging && left.shorthand && right.shorthand && left.name == right.name) {
+        // merge if all components can be merged
 
-module.exports = reduceNonAdjacent;
+        if (!left.multiplex && right.multiplex)
+          continue;
 
-},{"../../tokenizer/token":82,"../../utils/clone-array":84,"../../writer/one-time":96,"./is-mergeable":25,"./properties/optimize":36}],43:[function(require,module,exports){
-var Token = require('../../tokenizer/token');
+        if (!right.important && left.important) {
+          right.unused = true;
+          continue propertyLoop;
+        }
 
-var serializeAll = require('../../writer/one-time').all;
+        if (right.important && !left.important) {
+          left.unused = true;
+          continue;
+        }
 
-var FONT_FACE_SCOPE = '@font-face';
+        if (!isMergeableShorthand(right)) {
+          left.unused = true;
+          continue;
+        }
 
-function removeDuplicateFontAtRules(tokens) {
-  var fontAtRules = [];
-  var token;
-  var key;
-  var i, l;
+        for (k = left.components.length - 1; k >= 0; k--) {
+          var leftComponent = left.components[k];
+          var rightComponent = right.components[k];
 
-  for (i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
+          mayOverride = compactable[leftComponent.name].canOverride;
+          if (!everyValuesPair(mayOverride.bind(null, validator), leftComponent, rightComponent))
+            continue propertyLoop;
+        }
 
-    if (token[0] != Token.AT_RULE_BLOCK && token[1][0][1] != FONT_FACE_SCOPE) {
-      continue;
-    }
+        overrideShorthand(left, right);
+        left.dirty = true;
+      } else if (withMerging && left.shorthand && right.shorthand && isComponentOf(left, right)) {
+        // border is a shorthand but any of its components is a shorthand too
 
-    key = serializeAll([token]);
+        if (!left.important && right.important)
+          continue;
 
-    if (fontAtRules.indexOf(key) > -1) {
-      token[2] = [];
-    } else {
-      fontAtRules.push(key);
-    }
-  }
-}
+        component = findComponentIn(left, right);
+        mayOverride = compactable[right.name].canOverride;
+        if (!everyValuesPair(mayOverride.bind(null, validator), component, right))
+          continue;
 
-module.exports = removeDuplicateFontAtRules;
+        if (left.important && !right.important) {
+          right.unused = true;
+          continue;
+        }
 
-},{"../../tokenizer/token":82,"../../writer/one-time":96}],44:[function(require,module,exports){
-var Token = require('../../tokenizer/token');
+        var rightRestored = compactable[right.name].restore(right, compactable);
+        if (rightRestored.length > 1)
+          continue;
 
-var serializeAll = require('../../writer/one-time').all;
-var serializeRules = require('../../writer/one-time').rules;
+        component = findComponentIn(left, right);
+        override(component, right);
+        right.dirty = true;
+      } else if (left.name == right.name) {
+        // two non-shorthands should be merged based on understandability
+        overridable = true;
 
-function removeDuplicateMediaQueries(tokens) {
-  var candidates = {};
-  var candidate;
-  var token;
-  var key;
-  var i, l;
+        if (right.shorthand) {
+          for (k = right.components.length - 1; k >= 0 && overridable; k--) {
+            overriddenComponent = left.components[k];
+            overridingComponent = right.components[k];
+            mayOverride = compactable[overridingComponent.name].canOverride;
 
-  for (i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-    if (token[0] != Token.NESTED_BLOCK) {
-      continue;
-    }
+            overridable = overridable && everyValuesPair(mayOverride.bind(null, validator), overriddenComponent, overridingComponent);
+          }
+        } else {
+          mayOverride = compactable[right.name].canOverride;
+          overridable = everyValuesPair(mayOverride.bind(null, validator), left, right);
+        }
 
-    key = serializeRules(token[1]) + '%' + serializeAll(token[2]);
-    candidate = candidates[key];
+        if (left.important && !right.important && overridable) {
+          right.unused = true;
+          continue;
+        }
 
-    if (candidate) {
-      candidate[2] = [];
-    }
+        if (!left.important && right.important && overridable) {
+          left.unused = true;
+          continue;
+        }
 
-    candidates[key] = token;
+        if (!overridable) {
+          continue;
+        }
+
+        left.unused = true;
+      }
+    }
   }
 }
 
-module.exports = removeDuplicateMediaQueries;
+module.exports = overrideProperties;
 
-},{"../../tokenizer/token":82,"../../writer/one-time":96}],45:[function(require,module,exports){
-var Token = require('../../tokenizer/token');
+},{"../../../tokenizer/marker":84,"../../../tokenizer/token":85,"../../../writer/one-time":99,"../../restore-from-optimizing":57,"../clone":21,"../compactable":22,"../restore-with-components":49,"./every-values-pair":31,"./find-component-in":32,"./has-inherit":33,"./is-component-of":34,"./is-mergeable-shorthand":35,"./overrides-non-component-shorthand":39,"./vendor-prefixes":42}],39:[function(require,module,exports){
+var compactable = require('../compactable');
 
-var serializeBody = require('../../writer/one-time').body;
-var serializeRules = require('../../writer/one-time').rules;
+function overridesNonComponentShorthand(property1, property2) {
+  return property1.name in compactable &&
+    'overridesShorthands' in compactable[property1.name] &&
+    compactable[property1.name].overridesShorthands.indexOf(property2.name) > -1;
+}
 
-function removeDuplicates(tokens) {
-  var matched = {};
-  var moreThanOnce = [];
-  var id, token;
-  var body, bodies;
+module.exports = overridesNonComponentShorthand;
 
-  for (var i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-    if (token[0] != Token.RULE)
-      continue;
+},{"../compactable":22}],40:[function(require,module,exports){
+var compactable = require('../compactable');
+var InvalidPropertyError = require('../invalid-property-error');
 
-    id = serializeRules(token[1]);
+function populateComponents(properties, validator, warnings) {
+  var component;
+  var j, m;
 
-    if (matched[id] && matched[id].length == 1)
-      moreThanOnce.push(id);
-    else
-      matched[id] = matched[id] || [];
+  for (var i = properties.length - 1; i >= 0; i--) {
+    var property = properties[i];
+    var descriptor = compactable[property.name];
 
-    matched[id].push(i);
-  }
+    if (descriptor && descriptor.shorthand) {
+      property.shorthand = true;
+      property.dirty = true;
 
-  for (i = 0, l = moreThanOnce.length; i < l; i++) {
-    id = moreThanOnce[i];
-    bodies = [];
+      try {
+        property.components = descriptor.breakUp(property, compactable, validator);
 
-    for (var j = matched[id].length - 1; j >= 0; j--) {
-      token = tokens[matched[id][j]];
-      body = serializeBody(token[2]);
+        if (descriptor.shorthandComponents) {
+          for (j = 0, m = property.components.length; j < m; j++) {
+            component = property.components[j];
+            component.components = compactable[component.name].breakUp(component, compactable, validator);
+          }
+        }
+      } catch (e) {
+        if (e instanceof InvalidPropertyError) {
+          property.components = []; // this will set property.unused to true below
+          warnings.push(e.message);
+        } else {
+          throw e;
+        }
+      }
 
-      if (bodies.indexOf(body) > -1)
-        token[2] = [];
+      if (property.components.length > 0)
+        property.multiplex = property.components[0].multiplex;
       else
-        bodies.push(body);
+        property.unused = true;
     }
   }
 }
 
-module.exports = removeDuplicates;
-
-},{"../../tokenizer/token":82,"../../writer/one-time":96}],46:[function(require,module,exports){
-// TODO: it'd be great to merge it with the other canReorder functionality
+module.exports = populateComponents;
 
-var rulesOverlap = require('./rules-overlap');
-var specificitiesOverlap = require('./specificities-overlap');
+},{"../compactable":22,"../invalid-property-error":24}],41:[function(require,module,exports){
+var sameVendorPrefixes = require('./vendor-prefixes').same;
 
-var FLEX_PROPERTIES = /align\-items|box\-align|box\-pack|flex|justify/;
-var BORDER_PROPERTIES = /^border\-(top|right|bottom|left|color|style|width|radius)/;
+function understandable(validator, value1, value2, _position, isPaired) {
+  if (!sameVendorPrefixes(value1, value2)) {
+    return false;
+  }
 
-function canReorder(left, right, cache) {
-  for (var i = right.length - 1; i >= 0; i--) {
-    for (var j = left.length - 1; j >= 0; j--) {
-      if (!canReorderSingle(left[j], right[i], cache))
-        return false;
-    }
+  if (isPaired && validator.isVariable(value1) !== validator.isVariable(value2)) {
+    return false;
   }
 
   return true;
 }
 
-function canReorderSingle(left, right, cache) {
-  var leftName = left[0];
-  var leftValue = left[1];
-  var leftNameRoot = left[2];
-  var leftSelector = left[5];
-  var leftInSpecificSelector = left[6];
-  var rightName = right[0];
-  var rightValue = right[1];
-  var rightNameRoot = right[2];
-  var rightSelector = right[5];
-  var rightInSpecificSelector = right[6];
+module.exports = understandable;
 
-  if (leftName == 'font' && rightName == 'line-height' || rightName == 'font' && leftName == 'line-height')
-    return false;
-  if (FLEX_PROPERTIES.test(leftName) && FLEX_PROPERTIES.test(rightName))
-    return false;
-  if (leftNameRoot == rightNameRoot && unprefixed(leftName) == unprefixed(rightName) && (vendorPrefixed(leftName) ^ vendorPrefixed(rightName)))
-    return false;
-  if (leftNameRoot == 'border' && BORDER_PROPERTIES.test(rightNameRoot) && (leftName == 'border' || leftName == rightNameRoot || (leftValue != rightValue && sameBorderComponent(leftName, rightName))))
-    return false;
-  if (rightNameRoot == 'border' && BORDER_PROPERTIES.test(leftNameRoot) && (rightName == 'border' || rightName == leftNameRoot || (leftValue != rightValue && sameBorderComponent(leftName, rightName))))
-    return false;
-  if (leftNameRoot == 'border' && rightNameRoot == 'border' && leftName != rightName && (isSideBorder(leftName) && isStyleBorder(rightName) || isStyleBorder(leftName) && isSideBorder(rightName)))
-    return false;
-  if (leftNameRoot != rightNameRoot)
-    return true;
-  if (leftName == rightName && leftNameRoot == rightNameRoot && (leftValue == rightValue || withDifferentVendorPrefix(leftValue, rightValue)))
-    return true;
-  if (leftName != rightName && leftNameRoot == rightNameRoot && leftName != leftNameRoot && rightName != rightNameRoot)
-    return true;
-  if (leftName != rightName && leftNameRoot == rightNameRoot && leftValue == rightValue)
-    return true;
-  if (rightInSpecificSelector && leftInSpecificSelector && !inheritable(leftNameRoot) && !inheritable(rightNameRoot) && !rulesOverlap(rightSelector, leftSelector, false))
-    return true;
-  if (!specificitiesOverlap(leftSelector, rightSelector, cache))
-    return true;
+},{"./vendor-prefixes":42}],42:[function(require,module,exports){
+var VENDOR_PREFIX_PATTERN = /(?:^|\W)(\-\w+\-)/g;
 
-  return false;
-}
+function unique(value) {
+  var prefixes = [];
+  var match;
 
-function vendorPrefixed(name) {
-  return /^\-(?:moz|webkit|ms|o)\-/.test(name);
-}
+  while ((match = VENDOR_PREFIX_PATTERN.exec(value)) !== null) {
+    if (prefixes.indexOf(match[0]) == -1) {
+      prefixes.push(match[0]);
+    }
+  }
 
-function unprefixed(name) {
-  return name.replace(/^\-(?:moz|webkit|ms|o)\-/, '');
+  return prefixes;
 }
 
-function sameBorderComponent(name1, name2) {
-  return name1.split('-').pop() == name2.split('-').pop();
+function same(value1, value2) {
+  return unique(value1).sort().join(',') == unique(value2).sort().join(',');
 }
 
-function isSideBorder(name) {
-  return name == 'border-top' || name == 'border-right' || name == 'border-bottom' || name == 'border-left';
-}
+module.exports = {
+  unique: unique,
+  same: same
+};
 
-function isStyleBorder(name) {
-  return name == 'border-color' || name == 'border-style' || name == 'border-width';
-}
+},{}],43:[function(require,module,exports){
+var isMergeable = require('./is-mergeable');
 
-function withDifferentVendorPrefix(value1, value2) {
-  return vendorPrefixed(value1) && vendorPrefixed(value2) && value1.split('-')[1] != value2.split('-')[2];
-}
+var optimizeProperties = require('./properties/optimize');
 
-function inheritable(name) {
-  // According to http://www.w3.org/TR/CSS21/propidx.html
-  // Others will be catched by other, preceeding rules
-  return name == 'font' || name == 'line-height' || name == 'list-style';
-}
+var cloneArray = require('../../utils/clone-array');
 
-module.exports = {
-  canReorder: canReorder,
-  canReorderSingle: canReorderSingle
-};
+var Token = require('../../tokenizer/token');
 
-},{"./rules-overlap":50,"./specificities-overlap":51}],47:[function(require,module,exports){
-var compactable = require('./compactable');
+var serializeBody = require('../../writer/one-time').body;
+var serializeRules = require('../../writer/one-time').rules;
 
-function restoreWithComponents(property) {
-  var descriptor = compactable[property.name];
+function reduceNonAdjacent(tokens, context) {
+  var options = context.options;
+  var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
+  var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
+  var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
+  var candidates = {};
+  var repeated = [];
 
-  if (descriptor && descriptor.shorthand) {
-    return descriptor.restore(property, compactable);
-  } else {
-    return property.value;
-  }
-}
+  for (var i = tokens.length - 1; i >= 0; i--) {
+    var token = tokens[i];
 
-module.exports = restoreWithComponents;
+    if (token[0] != Token.RULE) {
+      continue;
+    } else if (token[2].length === 0) {
+      continue;
+    }
 
-},{"./compactable":22}],48:[function(require,module,exports){
-var shallowClone = require('./clone').shallow;
+    var selectorAsString = serializeRules(token[1]);
+    var isComplexAndNotSpecial = token[1].length > 1 &&
+      isMergeable(selectorAsString, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging);
+    var wrappedSelectors = wrappedSelectorsFrom(token[1]);
+    var selectors = isComplexAndNotSpecial ?
+      [selectorAsString].concat(wrappedSelectors) :
+      [selectorAsString];
 
-var Token = require('../../tokenizer/token');
-var Marker = require('../../tokenizer/marker');
+    for (var j = 0, m = selectors.length; j < m; j++) {
+      var selector = selectors[j];
 
-function isInheritOnly(values) {
-  for (var i = 0, l = values.length; i < l; i++) {
-    var value = values[i][1];
+      if (!candidates[selector])
+        candidates[selector] = [];
+      else
+        repeated.push(selector);
 
-    if (value != 'inherit' && value != Marker.COMMA && value != Marker.FORWARD_SLASH)
-      return false;
+      candidates[selector].push({
+        where: i,
+        list: wrappedSelectors,
+        isPartial: isComplexAndNotSpecial && j > 0,
+        isComplex: isComplexAndNotSpecial && j === 0
+      });
+    }
   }
 
-  return true;
+  reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context);
+  reduceComplexNonAdjacentCases(tokens, candidates, options, context);
 }
 
-function background(property, compactable, lastInMultiplex) {
-  var components = property.components;
-  var restored = [];
-  var needsOne, needsBoth;
+function wrappedSelectorsFrom(list) {
+  var wrapped = [];
 
-  function restoreValue(component) {
-    Array.prototype.unshift.apply(restored, component.value);
+  for (var i = 0; i < list.length; i++) {
+    wrapped.push([list[i][1]]);
   }
 
-  function isDefaultValue(component) {
-    var descriptor = compactable[component.name];
+  return wrapped;
+}
 
-    if (descriptor.doubleValues && descriptor.defaultValue.length == 1) {
-      return component.value[0][1] == descriptor.defaultValue[0] && (component.value[1] ? component.value[1][1] == descriptor.defaultValue[0] : true);
-    } else if (descriptor.doubleValues && descriptor.defaultValue.length != 1) {
-      return component.value[0][1] == descriptor.defaultValue[0] && (component.value[1] ? component.value[1][1] : component.value[0][1]) == descriptor.defaultValue[1];
-    } else {
-      return component.value[0][1] == descriptor.defaultValue;
-    }
+function reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context) {
+  function filterOut(idx, bodies) {
+    return data[idx].isPartial && bodies.length === 0;
   }
 
-  for (var i = components.length - 1; i >= 0; i--) {
-    var component = components[i];
-    var isDefault = isDefaultValue(component);
+  function reduceBody(token, newBody, processedCount, tokenIdx) {
+    if (!data[processedCount - tokenIdx - 1].isPartial)
+      token[2] = newBody;
+  }
 
-    if (component.name == 'background-clip') {
-      var originComponent = components[i - 1];
-      var isOriginDefault = isDefaultValue(originComponent);
+  for (var i = 0, l = repeated.length; i < l; i++) {
+    var selector = repeated[i];
+    var data = candidates[selector];
 
-      needsOne = component.value[0][1] == originComponent.value[0][1];
+    reduceSelector(tokens, data, {
+      filterOut: filterOut,
+      callback: reduceBody
+    }, options, context);
+  }
+}
 
-      needsBoth = !needsOne && (
-        (isOriginDefault && !isDefault) ||
-        (!isOriginDefault && !isDefault) ||
-        (!isOriginDefault && isDefault && component.value[0][1] != originComponent.value[0][1]));
+function reduceComplexNonAdjacentCases(tokens, candidates, options, context) {
+  var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
+  var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
+  var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
+  var localContext = {};
 
-      if (needsOne) {
-        restoreValue(originComponent);
-      } else if (needsBoth) {
-        restoreValue(component);
-        restoreValue(originComponent);
-      }
+  function filterOut(idx) {
+    return localContext.data[idx].where < localContext.intoPosition;
+  }
 
-      i--;
-    } else if (component.name == 'background-size') {
-      var positionComponent = components[i - 1];
-      var isPositionDefault = isDefaultValue(positionComponent);
+  function collectReducedBodies(token, newBody, processedCount, tokenIdx) {
+    if (tokenIdx === 0)
+      localContext.reducedBodies.push(newBody);
+  }
 
-      needsOne = !isPositionDefault && isDefault;
+  allSelectors:
+  for (var complexSelector in candidates) {
+    var into = candidates[complexSelector];
+    if (!into[0].isComplex)
+      continue;
 
-      needsBoth = !needsOne &&
-        (isPositionDefault && !isDefault || !isPositionDefault && !isDefault);
+    var intoPosition = into[into.length - 1].where;
+    var intoToken = tokens[intoPosition];
+    var reducedBodies = [];
 
-      if (needsOne) {
-        restoreValue(positionComponent);
-      } else if (needsBoth) {
-        restoreValue(component);
-        restored.unshift([Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]);
-        restoreValue(positionComponent);
-      } else if (positionComponent.value.length == 1) {
-        restoreValue(positionComponent);
-      }
+    var selectors = isMergeable(complexSelector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) ?
+      into[0].list :
+      [complexSelector];
 
-      i--;
-    } else {
-      if (isDefault || compactable[component.name].multiplexLastOnly && !lastInMultiplex)
-        continue;
+    localContext.intoPosition = intoPosition;
+    localContext.reducedBodies = reducedBodies;
 
-      restoreValue(component);
-    }
-  }
+    for (var j = 0, m = selectors.length; j < m; j++) {
+      var selector = selectors[j];
+      var data = candidates[selector];
 
-  if (restored.length === 0 && property.value.length == 1 && property.value[0][1] == '0')
-    restored.push(property.value[0]);
+      if (data.length < 2)
+        continue allSelectors;
 
-  if (restored.length === 0)
-    restored.push([Token.PROPERTY_VALUE, compactable[property.name].defaultValue]);
+      localContext.data = data;
 
-  if (isInheritOnly(restored))
-    return [restored[0]];
+      reduceSelector(tokens, data, {
+        filterOut: filterOut,
+        callback: collectReducedBodies
+      }, options, context);
 
-  return restored;
+      if (serializeBody(reducedBodies[reducedBodies.length - 1]) != serializeBody(reducedBodies[0]))
+        continue allSelectors;
+    }
+
+    intoToken[2] = reducedBodies[0];
+  }
 }
 
-function borderRadius(property, compactable) {
-  if (property.multiplex) {
-    var horizontal = shallowClone(property);
-    var vertical = shallowClone(property);
+function reduceSelector(tokens, data, context, options, outerContext) {
+  var bodies = [];
+  var bodiesAsList = [];
+  var processedTokens = [];
 
-    for (var i = 0; i < 4; i++) {
-      var component = property.components[i];
+  for (var j = data.length - 1; j >= 0; j--) {
+    if (context.filterOut(j, bodies))
+      continue;
 
-      var horizontalComponent = shallowClone(property);
-      horizontalComponent.value = [component.value[0]];
-      horizontal.components.push(horizontalComponent);
+    var where = data[j].where;
+    var token = tokens[where];
+    var clonedBody = cloneArray(token[2]);
 
-      var verticalComponent = shallowClone(property);
-      // FIXME: only shorthand compactor (see breakup#borderRadius) knows that border radius
-      // longhands have two values, whereas tokenizer does not care about populating 2nd value
-      // if it's missing, hence this fallback
-      verticalComponent.value = [component.value[1] || component.value[0]];
-      vertical.components.push(verticalComponent);
-    }
+    bodies = bodies.concat(clonedBody);
+    bodiesAsList.push(clonedBody);
+    processedTokens.push(where);
+  }
 
-    var horizontalValues = fourValues(horizontal, compactable);
-    var verticalValues = fourValues(vertical, compactable);
+  optimizeProperties(bodies, true, false, outerContext);
 
-    if (horizontalValues.length == verticalValues.length &&
-        horizontalValues[0][1] == verticalValues[0][1] &&
-        (horizontalValues.length > 1 ? horizontalValues[1][1] == verticalValues[1][1] : true) &&
-        (horizontalValues.length > 2 ? horizontalValues[2][1] == verticalValues[2][1] : true) &&
-        (horizontalValues.length > 3 ? horizontalValues[3][1] == verticalValues[3][1] : true)) {
-      return horizontalValues;
-    } else {
-      return horizontalValues.concat([[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]).concat(verticalValues);
+  var processedCount = processedTokens.length;
+  var propertyIdx = bodies.length - 1;
+  var tokenIdx = processedCount - 1;
+
+  while (tokenIdx >= 0) {
+     if ((tokenIdx === 0 || (bodies[propertyIdx] && bodiesAsList[tokenIdx].indexOf(bodies[propertyIdx]) > -1)) && propertyIdx > -1) {
+      propertyIdx--;
+      continue;
     }
-  } else {
-    return fourValues(property, compactable);
-  }
-}
 
-function fourValues(property) {
-  var components = property.components;
-  var value1 = components[0].value[0];
-  var value2 = components[1].value[0];
-  var value3 = components[2].value[0];
-  var value4 = components[3].value[0];
+    var newBody = bodies.splice(propertyIdx + 1);
+    context.callback(tokens[processedTokens[tokenIdx]], newBody, processedCount, tokenIdx);
 
-  if (value1[1] == value2[1] && value1[1] == value3[1] && value1[1] == value4[1]) {
-    return [value1];
-  } else if (value1[1] == value3[1] && value2[1] == value4[1]) {
-    return [value1, value2];
-  } else if (value2[1] == value4[1]) {
-    return [value1, value2, value3];
-  } else {
-    return [value1, value2, value3, value4];
+    tokenIdx--;
   }
 }
 
-function multiplex(restoreWith) {
-  return function (property, compactable) {
-    if (!property.multiplex)
-      return restoreWith(property, compactable, true);
+module.exports = reduceNonAdjacent;
 
-    var multiplexSize = 0;
-    var restored = [];
-    var componentMultiplexSoFar = {};
-    var i, l;
+},{"../../tokenizer/token":85,"../../utils/clone-array":87,"../../writer/one-time":99,"./is-mergeable":25,"./properties/optimize":37}],44:[function(require,module,exports){
+var Token = require('../../tokenizer/token');
 
-    // At this point we don't know what's the multiplex size, e.g. how many background layers are there
-    for (i = 0, l = property.components[0].value.length; i < l; i++) {
-      if (property.components[0].value[i][1] == Marker.COMMA)
-        multiplexSize++;
-    }
+var serializeAll = require('../../writer/one-time').all;
 
-    for (i = 0; i <= multiplexSize; i++) {
-      var _property = shallowClone(property);
+var FONT_FACE_SCOPE = '@font-face';
 
-      // We split multiplex into parts and restore them one by one
-      for (var j = 0, m = property.components.length; j < m; j++) {
-        var componentToClone = property.components[j];
-        var _component = shallowClone(componentToClone);
-        _property.components.push(_component);
+function removeDuplicateFontAtRules(tokens) {
+  var fontAtRules = [];
+  var token;
+  var key;
+  var i, l;
 
-        // The trick is some properties has more than one value, so we iterate over values looking for
-        // a multiplex separator - a comma
-        for (var k = componentMultiplexSoFar[_component.name] || 0, n = componentToClone.value.length; k < n; k++) {
-          if (componentToClone.value[k][1] == Marker.COMMA) {
-            componentMultiplexSoFar[_component.name] = k + 1;
-            break;
-          }
+  for (i = 0, l = tokens.length; i < l; i++) {
+    token = tokens[i];
 
-          _component.value.push(componentToClone.value[k]);
-        }
-      }
+    if (token[0] != Token.AT_RULE_BLOCK && token[1][0][1] != FONT_FACE_SCOPE) {
+      continue;
+    }
 
-      // No we can restore shorthand value
-      var lastInMultiplex = i == multiplexSize;
-      var _restored = restoreWith(_property, compactable, lastInMultiplex);
-      Array.prototype.push.apply(restored, _restored);
+    key = serializeAll([token]);
 
-      if (i < multiplexSize)
-        restored.push([Token.PROPERTY_VALUE, Marker.COMMA]);
+    if (fontAtRules.indexOf(key) > -1) {
+      token[2] = [];
+    } else {
+      fontAtRules.push(key);
     }
-
-    return restored;
-  };
+  }
 }
 
-function withoutDefaults(property, compactable) {
-  var components = property.components;
-  var restored = [];
+module.exports = removeDuplicateFontAtRules;
 
-  for (var i = components.length - 1; i >= 0; i--) {
-    var component = components[i];
-    var descriptor = compactable[component.name];
+},{"../../tokenizer/token":85,"../../writer/one-time":99}],45:[function(require,module,exports){
+var Token = require('../../tokenizer/token');
 
-    if (component.value[0][1] != descriptor.defaultValue)
-      restored.unshift(component.value[0]);
-  }
+var serializeAll = require('../../writer/one-time').all;
+var serializeRules = require('../../writer/one-time').rules;
 
-  if (restored.length === 0)
-    restored.push([Token.PROPERTY_VALUE, compactable[property.name].defaultValue]);
+function removeDuplicateMediaQueries(tokens) {
+  var candidates = {};
+  var candidate;
+  var token;
+  var key;
+  var i, l;
 
-  if (isInheritOnly(restored))
-    return [restored[0]];
+  for (i = 0, l = tokens.length; i < l; i++) {
+    token = tokens[i];
+    if (token[0] != Token.NESTED_BLOCK) {
+      continue;
+    }
 
-  return restored;
-}
+    key = serializeRules(token[1]) + '%' + serializeAll(token[2]);
+    candidate = candidates[key];
 
-module.exports = {
-  background: background,
-  borderRadius: borderRadius,
-  fourValues: fourValues,
-  multiplex: multiplex,
-  withoutDefaults: withoutDefaults
-};
+    if (candidate) {
+      candidate[2] = [];
+    }
 
-},{"../../tokenizer/marker":81,"../../tokenizer/token":82,"./clone":21}],49:[function(require,module,exports){
-var canReorderSingle = require('./reorderable').canReorderSingle;
-var extractProperties = require('./extract-properties');
-var isMergeable = require('./is-mergeable');
-var tidyRuleDuplicates = require('./tidy-rule-duplicates');
+    candidates[key] = token;
+  }
+}
 
-var Token = require('../../tokenizer/token');
+module.exports = removeDuplicateMediaQueries;
 
-var cloneArray = require('../../utils/clone-array');
+},{"../../tokenizer/token":85,"../../writer/one-time":99}],46:[function(require,module,exports){
+var Token = require('../../tokenizer/token');
 
 var serializeBody = require('../../writer/one-time').body;
 var serializeRules = require('../../writer/one-time').rules;
 
-function naturalSorter(a, b) {
-  return a > b ? 1 : -1;
-}
+function removeDuplicates(tokens) {
+  var matched = {};
+  var moreThanOnce = [];
+  var id, token;
+  var body, bodies;
 
-function cloneAndMergeSelectors(propertyA, propertyB) {
-  var cloned = cloneArray(propertyA);
-  cloned[5] = cloned[5].concat(propertyB[5]);
+  for (var i = 0, l = tokens.length; i < l; i++) {
+    token = tokens[i];
+    if (token[0] != Token.RULE)
+      continue;
 
-  return cloned;
-}
+    id = serializeRules(token[1]);
 
-function restructure(tokens, context) {
-  var options = context.options;
-  var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
-  var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
-  var mergeLimit = 8191;
-  var specificityCache = context.cache.specificity;
-  var movableTokens = {};
-  var movedProperties = [];
-  var multiPropertyMoveCache = {};
-  var movedToBeDropped = [];
-  var maxCombinationsLevel = 2;
-  var ID_JOIN_CHARACTER = '%';
+    if (matched[id] && matched[id].length == 1)
+      moreThanOnce.push(id);
+    else
+      matched[id] = matched[id] || [];
 
-  function sendToMultiPropertyMoveCache(position, movedProperty, allFits) {
-    for (var i = allFits.length - 1; i >= 0; i--) {
-      var fit = allFits[i][0];
-      var id = addToCache(movedProperty, fit);
+    matched[id].push(i);
+  }
 
-      if (multiPropertyMoveCache[id].length > 1 && processMultiPropertyMove(position, multiPropertyMoveCache[id])) {
-        removeAllMatchingFromCache(id);
-        break;
-      }
+  for (i = 0, l = moreThanOnce.length; i < l; i++) {
+    id = moreThanOnce[i];
+    bodies = [];
+
+    for (var j = matched[id].length - 1; j >= 0; j--) {
+      token = tokens[matched[id][j]];
+      body = serializeBody(token[2]);
+
+      if (bodies.indexOf(body) > -1)
+        token[2] = [];
+      else
+        bodies.push(body);
     }
   }
+}
 
-  function addToCache(movedProperty, fit) {
-    var id = cacheId(fit);
-    multiPropertyMoveCache[id] = multiPropertyMoveCache[id] || [];
-    multiPropertyMoveCache[id].push([movedProperty, fit]);
-    return id;
-  }
+module.exports = removeDuplicates;
 
-  function removeAllMatchingFromCache(matchId) {
-    var matchSelectors = matchId.split(ID_JOIN_CHARACTER);
-    var forRemoval = [];
-    var i;
+},{"../../tokenizer/token":85,"../../writer/one-time":99}],47:[function(require,module,exports){
+var populateComponents = require('./properties/populate-components');
 
-    for (var id in multiPropertyMoveCache) {
-      var selectors = id.split(ID_JOIN_CHARACTER);
-      for (i = selectors.length - 1; i >= 0; i--) {
-        if (matchSelectors.indexOf(selectors[i]) > -1) {
-          forRemoval.push(id);
-          break;
-        }
-      }
-    }
+var wrapForOptimizing = require('../wrap-for-optimizing').single;
+var restoreFromOptimizing = require('../restore-from-optimizing');
 
-    for (i = forRemoval.length - 1; i >= 0; i--) {
-      delete multiPropertyMoveCache[forRemoval[i]];
-    }
-  }
+var Token = require('../../tokenizer/token');
 
-  function cacheId(cachedTokens) {
-    var id = [];
-    for (var i = 0, l = cachedTokens.length; i < l; i++) {
-      id.push(serializeRules(cachedTokens[i][1]));
-    }
-    return id.join(ID_JOIN_CHARACTER);
-  }
-
-  function tokensToMerge(sourceTokens) {
-    var uniqueTokensWithBody = [];
-    var mergeableTokens = [];
+var animationNameRegex = /^(\-moz\-|\-o\-|\-webkit\-)?animation-name$/;
+var animationRegex = /^(\-moz\-|\-o\-|\-webkit\-)?animation$/;
+var keyframeRegex = /^@(\-moz\-|\-o\-|\-webkit\-)?keyframes /;
 
-    for (var i = sourceTokens.length - 1; i >= 0; i--) {
-      if (!isMergeable(serializeRules(sourceTokens[i][1]), mergeablePseudoClasses, mergeablePseudoElements)) {
-        continue;
-      }
+function removeUnusedAtRules(tokens, context) {
+  removeUnusedAtRule(tokens, matchCounterStyle, markCounterStylesAsUsed, context);
+  removeUnusedAtRule(tokens, matchFontFace, markFontFacesAsUsed, context);
+  removeUnusedAtRule(tokens, matchKeyframe, markKeyframesAsUsed, context);
+  removeUnusedAtRule(tokens, matchNamespace, markNamespacesAsUsed, context);
+}
 
-      mergeableTokens.unshift(sourceTokens[i]);
-      if (sourceTokens[i][2].length > 0 && uniqueTokensWithBody.indexOf(sourceTokens[i]) == -1)
-        uniqueTokensWithBody.push(sourceTokens[i]);
-    }
+function removeUnusedAtRule(tokens, matchCallback, markCallback, context) {
+  var atRules = {};
+  var atRule;
+  var token;
+  var zeroAt;
+  var i, l;
 
-    return uniqueTokensWithBody.length > 1 ?
-      mergeableTokens :
-      [];
+  for (i = 0, l = tokens.length; i < l; i++) {
+    matchCallback(tokens[i], atRules);
   }
 
-  function shortenIfPossible(position, movedProperty) {
-    var name = movedProperty[0];
-    var value = movedProperty[1];
-    var key = movedProperty[4];
-    var valueSize = name.length + value.length + 1;
-    var allSelectors = [];
-    var qualifiedTokens = [];
-
-    var mergeableTokens = tokensToMerge(movableTokens[key]);
-    if (mergeableTokens.length < 2)
-      return;
-
-    var allFits = findAllFits(mergeableTokens, valueSize, 1);
-    var bestFit = allFits[0];
-    if (bestFit[1] > 0)
-      return sendToMultiPropertyMoveCache(position, movedProperty, allFits);
-
-    for (var i = bestFit[0].length - 1; i >=0; i--) {
-      allSelectors = bestFit[0][i][1].concat(allSelectors);
-      qualifiedTokens.unshift(bestFit[0][i]);
-    }
-
-    allSelectors = tidyRuleDuplicates(allSelectors);
-    dropAsNewTokenAt(position, [movedProperty], allSelectors, qualifiedTokens);
+  if (Object.keys(atRules).length === 0) {
+    return;
   }
 
-  function fitSorter(fit1, fit2) {
-    return fit1[1] > fit2[1] ? 1 : (fit1[1] == fit2[1] ? 0 : -1);
-  }
+  markUsedAtRules(tokens, markCallback, atRules, context);
 
-  function findAllFits(mergeableTokens, propertySize, propertiesCount) {
-    var combinations = allCombinations(mergeableTokens, propertySize, propertiesCount, maxCombinationsLevel - 1);
-    return combinations.sort(fitSorter);
+  for (atRule in atRules) {
+    token = atRules[atRule];
+    zeroAt = token[0] == Token.AT_RULE ? 1 : 2;
+    token[zeroAt] = [];
   }
+}
 
-  function allCombinations(tokensVariant, propertySize, propertiesCount, level) {
-    var differenceVariants = [[tokensVariant, sizeDifference(tokensVariant, propertySize, propertiesCount)]];
-    if (tokensVariant.length > 2 && level > 0) {
-      for (var i = tokensVariant.length - 1; i >= 0; i--) {
-        var subVariant = Array.prototype.slice.call(tokensVariant, 0);
-        subVariant.splice(i, 1);
-        differenceVariants = differenceVariants.concat(allCombinations(subVariant, propertySize, propertiesCount, level - 1));
-      }
-    }
-
-    return differenceVariants;
-  }
+function markUsedAtRules(tokens, markCallback, atRules, context) {
+  var boundMarkCallback = markCallback(atRules);
+  var i, l;
 
-  function sizeDifference(tokensVariant, propertySize, propertiesCount) {
-    var allSelectorsSize = 0;
-    for (var i = tokensVariant.length - 1; i >= 0; i--) {
-      allSelectorsSize += tokensVariant[i][2].length > propertiesCount ? serializeRules(tokensVariant[i][1]).length : -1;
+  for (i = 0, l = tokens.length; i < l; i++) {
+    switch (tokens[i][0]) {
+      case Token.RULE:
+        boundMarkCallback(tokens[i], context);
+        break;
+      case Token.NESTED_BLOCK:
+        markUsedAtRules(tokens[i][2], markCallback, atRules, context);
     }
-    return allSelectorsSize - (tokensVariant.length - 1) * propertySize + 1;
   }
+}
 
-  function dropAsNewTokenAt(position, properties, allSelectors, mergeableTokens) {
-    var i, j, k, m;
-    var allProperties = [];
+function matchCounterStyle(token, atRules) {
+  var match;
 
-    for (i = mergeableTokens.length - 1; i >= 0; i--) {
-      var mergeableToken = mergeableTokens[i];
+  if (token[0] == Token.AT_RULE_BLOCK && token[1][0][1].indexOf('@counter-style') === 0) {
+    match = token[1][0][1].split(' ')[1];
+    atRules[match] = token;
+  }
+}
 
-      for (j = mergeableToken[2].length - 1; j >= 0; j--) {
-        var mergeableProperty = mergeableToken[2][j];
+function markCounterStylesAsUsed(atRules) {
+  return function (token, context) {
+    var property;
+    var wrappedProperty;
+    var i, l;
 
-        for (k = 0, m = properties.length; k < m; k++) {
-          var property = properties[k];
+    for (i = 0, l = token[2].length; i < l; i++) {
+      property = token[2][i];
 
-          var mergeablePropertyName = mergeableProperty[1][1];
-          var propertyName = property[0];
-          var propertyBody = property[4];
-          if (mergeablePropertyName == propertyName && serializeBody([mergeableProperty]) == propertyBody) {
-            mergeableToken[2].splice(j, 1);
-            break;
-          }
+      if (property[1][1] == 'list-style') {
+        wrappedProperty = wrapForOptimizing(property);
+        populateComponents([wrappedProperty], context.validator, context.warnings);
+
+        if (wrappedProperty.components[0].value[0][1] in atRules) {
+          delete atRules[property[2][1]];
         }
+
+        restoreFromOptimizing([wrappedProperty]);
       }
-    }
 
-    for (i = properties.length - 1; i >= 0; i--) {
-      allProperties.unshift(properties[i][3]);
+      if (property[1][1] == 'list-style-type' && property[2][1] in atRules) {
+        delete atRules[property[2][1]];
+      }
     }
+  };
+}
 
-    var newToken = [Token.RULE, allSelectors, allProperties];
-    tokens.splice(position, 0, newToken);
-  }
+function matchFontFace(token, atRules) {
+  var property;
+  var match;
+  var i, l;
 
-  function dropPropertiesAt(position, movedProperty) {
-    var key = movedProperty[4];
-    var toMove = movableTokens[key];
+  if (token[0] == Token.AT_RULE_BLOCK && token[1][0][1] == '@font-face') {
+    for (i = 0, l = token[2].length; i < l; i++) {
+      property = token[2][i];
 
-    if (toMove && toMove.length > 1) {
-      if (!shortenMultiMovesIfPossible(position, movedProperty))
-        shortenIfPossible(position, movedProperty);
+      if (property[1][1] == 'font-family') {
+        match = property[2][1].toLowerCase();
+        atRules[match] = token;
+        break;
+      }
     }
   }
+}
 
-  function shortenMultiMovesIfPossible(position, movedProperty) {
-    var candidates = [];
-    var propertiesAndMergableTokens = [];
-    var key = movedProperty[4];
-    var j, k;
+function markFontFacesAsUsed(atRules) {
+  return function (token, context) {
+    var property;
+    var wrappedProperty;
+    var component;
+    var normalizedMatch;
+    var i, l;
+    var j, m;
 
-    var mergeableTokens = tokensToMerge(movableTokens[key]);
-    if (mergeableTokens.length < 2)
-      return;
+    for (i = 0, l = token[2].length; i < l; i++) {
+      property = token[2][i];
 
-    movableLoop:
-    for (var value in movableTokens) {
-      var tokensList = movableTokens[value];
+      if (property[1][1] == 'font') {
+        wrappedProperty = wrapForOptimizing(property);
+        populateComponents([wrappedProperty], context.validator, context.warnings);
+        component = wrappedProperty.components[6];
 
-      for (j = mergeableTokens.length - 1; j >= 0; j--) {
-        if (tokensList.indexOf(mergeableTokens[j]) == -1)
-          continue movableLoop;
-      }
+        for (j = 0, m = component.value.length; j < m; j++) {
+          normalizedMatch = component.value[j][1].toLowerCase();
 
-      candidates.push(value);
-    }
+          if (normalizedMatch in atRules) {
+            delete atRules[normalizedMatch];
+          }
+        }
 
-    if (candidates.length < 2)
-      return false;
+        restoreFromOptimizing([wrappedProperty]);
+      }
 
-    for (j = candidates.length - 1; j >= 0; j--) {
-      for (k = movedProperties.length - 1; k >= 0; k--) {
-        if (movedProperties[k][4] == candidates[j]) {
-          propertiesAndMergableTokens.unshift([movedProperties[k], mergeableTokens]);
-          break;
+      if (property[1][1] == 'font-family') {
+        for (j = 2, m = property.length; j < m; j++) {
+          normalizedMatch = property[j][1].toLowerCase();
+
+          if (normalizedMatch in atRules) {
+            delete atRules[normalizedMatch];
+          }
         }
       }
     }
+  };
+}
 
-    return processMultiPropertyMove(position, propertiesAndMergableTokens);
+function matchKeyframe(token, atRules) {
+  var match;
+
+  if (token[0] == Token.NESTED_BLOCK && keyframeRegex.test(token[1][0][1])) {
+    match = token[1][0][1].split(' ')[1];
+    atRules[match] = token;
   }
+}
 
-  function processMultiPropertyMove(position, propertiesAndMergableTokens) {
-    var valueSize = 0;
-    var properties = [];
+function markKeyframesAsUsed(atRules) {
+  return function (token, context) {
     var property;
+    var wrappedProperty;
+    var component;
+    var i, l;
+    var j, m;
 
-    for (var i = propertiesAndMergableTokens.length - 1; i >= 0; i--) {
-      property = propertiesAndMergableTokens[i][0];
-      var fullValue = property[4];
-      valueSize += fullValue.length + (i > 0 ? 1 : 0);
-
-      properties.push(property);
-    }
-
-    var mergeableTokens = propertiesAndMergableTokens[0][1];
-    var bestFit = findAllFits(mergeableTokens, valueSize, properties.length)[0];
-    if (bestFit[1] > 0)
-      return false;
-
-    var allSelectors = [];
-    var qualifiedTokens = [];
-    for (i = bestFit[0].length - 1; i >= 0; i--) {
-      allSelectors = bestFit[0][i][1].concat(allSelectors);
-      qualifiedTokens.unshift(bestFit[0][i]);
-    }
+    for (i = 0, l = token[2].length; i < l; i++) {
+      property = token[2][i];
 
-    allSelectors = tidyRuleDuplicates(allSelectors);
-    dropAsNewTokenAt(position, properties, allSelectors, qualifiedTokens);
+      if (animationRegex.test(property[1][1])) {
+        wrappedProperty = wrapForOptimizing(property);
+        populateComponents([wrappedProperty], context.validator, context.warnings);
+        component = wrappedProperty.components[7];
 
-    for (i = properties.length - 1; i >= 0; i--) {
-      property = properties[i];
-      var index = movedProperties.indexOf(property);
+        for (j = 0, m = component.value.length; j < m; j++) {
+          if (component.value[j][1] in atRules) {
+            delete atRules[component.value[j][1]];
+          }
+        }
 
-      delete movableTokens[property[4]];
+        restoreFromOptimizing([wrappedProperty]);
+      }
 
-      if (index > -1 && movedToBeDropped.indexOf(index) == -1)
-        movedToBeDropped.push(index);
+      if (animationNameRegex.test(property[1][1])) {
+        for (j = 2, m = property.length; j < m; j++) {
+          if (property[j][1] in atRules) {
+            delete atRules[property[j][1]];
+          }
+        }
+      }
     }
+  };
+}
 
-    return true;
-  }
-
-  function boundToAnotherPropertyInCurrrentToken(property, movedProperty, token) {
-    var propertyName = property[0];
-    var movedPropertyName = movedProperty[0];
-    if (propertyName != movedPropertyName)
-      return false;
+function matchNamespace(token, atRules) {
+  var match;
 
-    var key = movedProperty[4];
-    var toMove = movableTokens[key];
-    return toMove && toMove.indexOf(token) > -1;
+  if (token[0] == Token.AT_RULE && token[1].indexOf('@namespace') === 0) {
+    match = token[1].split(' ')[1];
+    atRules[match] = token;
   }
+}
 
-  for (var i = tokens.length - 1; i >= 0; i--) {
-    var token = tokens[i];
-    var isRule;
-    var j, k, m;
-    var samePropertyAt;
+function markNamespacesAsUsed(atRules) {
+  var namespaceRegex = new RegExp(Object.keys(atRules).join('\\\||') + '\\\|', 'g');
 
-    if (token[0] == Token.RULE) {
-      isRule = true;
-    } else if (token[0] == Token.NESTED_BLOCK) {
-      isRule = false;
-    } else {
-      continue;
-    }
+  return function (token) {
+    var match;
+    var scope;
+    var normalizedMatch;
+    var i, l;
+    var j, m;
 
-    // We cache movedProperties.length as it may change in the loop
-    var movedCount = movedProperties.length;
+    for (i = 0, l = token[1].length; i < l; i++) {
+      scope = token[1][i];
+      match = scope[1].match(namespaceRegex);
 
-    var properties = extractProperties(token);
-    movedToBeDropped = [];
+      for (j = 0, m = match.length; j < m; j++) {
+        normalizedMatch = match[j].substring(0, match[j].length - 1);
 
-    var unmovableInCurrentToken = [];
-    for (j = properties.length - 1; j >= 0; j--) {
-      for (k = j - 1; k >= 0; k--) {
-        if (!canReorderSingle(properties[j], properties[k], specificityCache)) {
-          unmovableInCurrentToken.push(j);
-          break;
+        if (normalizedMatch in atRules) {
+          delete atRules[normalizedMatch];
         }
       }
     }
+  };
+}
 
-    for (j = properties.length - 1; j >= 0; j--) {
-      var property = properties[j];
-      var movedSameProperty = false;
+module.exports = removeUnusedAtRules;
 
-      for (k = 0; k < movedCount; k++) {
-        var movedProperty = movedProperties[k];
+},{"../../tokenizer/token":85,"../restore-from-optimizing":57,"../wrap-for-optimizing":59,"./properties/populate-components":40}],48:[function(require,module,exports){
+// TODO: it'd be great to merge it with the other canReorder functionality
 
-        if (movedToBeDropped.indexOf(k) == -1 && (!canReorderSingle(property, movedProperty, specificityCache) && !boundToAnotherPropertyInCurrrentToken(property, movedProperty, token) ||
-            movableTokens[movedProperty[4]] && movableTokens[movedProperty[4]].length === mergeLimit)) {
-          dropPropertiesAt(i + 1, movedProperty, token);
+var rulesOverlap = require('./rules-overlap');
+var specificitiesOverlap = require('./specificities-overlap');
 
-          if (movedToBeDropped.indexOf(k) == -1) {
-            movedToBeDropped.push(k);
-            delete movableTokens[movedProperty[4]];
-          }
-        }
+var FLEX_PROPERTIES = /align\-items|box\-align|box\-pack|flex|justify/;
+var BORDER_PROPERTIES = /^border\-(top|right|bottom|left|color|style|width|radius)/;
 
-        if (!movedSameProperty) {
-          movedSameProperty = property[0] == movedProperty[0] && property[1] == movedProperty[1];
+function canReorder(left, right, cache) {
+  for (var i = right.length - 1; i >= 0; i--) {
+    for (var j = left.length - 1; j >= 0; j--) {
+      if (!canReorderSingle(left[j], right[i], cache))
+        return false;
+    }
+  }
 
-          if (movedSameProperty) {
-            samePropertyAt = k;
-          }
-        }
-      }
+  return true;
+}
 
-      if (!isRule || unmovableInCurrentToken.indexOf(j) > -1)
-        continue;
+function canReorderSingle(left, right, cache) {
+  var leftName = left[0];
+  var leftValue = left[1];
+  var leftNameRoot = left[2];
+  var leftSelector = left[5];
+  var leftInSpecificSelector = left[6];
+  var rightName = right[0];
+  var rightValue = right[1];
+  var rightNameRoot = right[2];
+  var rightSelector = right[5];
+  var rightInSpecificSelector = right[6];
 
-      var key = property[4];
+  if (leftName == 'font' && rightName == 'line-height' || rightName == 'font' && leftName == 'line-height')
+    return false;
+  if (FLEX_PROPERTIES.test(leftName) && FLEX_PROPERTIES.test(rightName))
+    return false;
+  if (leftNameRoot == rightNameRoot && unprefixed(leftName) == unprefixed(rightName) && (vendorPrefixed(leftName) ^ vendorPrefixed(rightName)))
+    return false;
+  if (leftNameRoot == 'border' && BORDER_PROPERTIES.test(rightNameRoot) && (leftName == 'border' || leftName == rightNameRoot || (leftValue != rightValue && sameBorderComponent(leftName, rightName))))
+    return false;
+  if (rightNameRoot == 'border' && BORDER_PROPERTIES.test(leftNameRoot) && (rightName == 'border' || rightName == leftNameRoot || (leftValue != rightValue && sameBorderComponent(leftName, rightName))))
+    return false;
+  if (leftNameRoot == 'border' && rightNameRoot == 'border' && leftName != rightName && (isSideBorder(leftName) && isStyleBorder(rightName) || isStyleBorder(leftName) && isSideBorder(rightName)))
+    return false;
+  if (leftNameRoot != rightNameRoot)
+    return true;
+  if (leftName == rightName && leftNameRoot == rightNameRoot && (leftValue == rightValue || withDifferentVendorPrefix(leftValue, rightValue)))
+    return true;
+  if (leftName != rightName && leftNameRoot == rightNameRoot && leftName != leftNameRoot && rightName != rightNameRoot)
+    return true;
+  if (leftName != rightName && leftNameRoot == rightNameRoot && leftValue == rightValue)
+    return true;
+  if (rightInSpecificSelector && leftInSpecificSelector && !inheritable(leftNameRoot) && !inheritable(rightNameRoot) && !rulesOverlap(rightSelector, leftSelector, false))
+    return true;
+  if (!specificitiesOverlap(leftSelector, rightSelector, cache))
+    return true;
 
-      if (movedSameProperty && movedProperties[samePropertyAt][5].length + property[5].length > mergeLimit) {
-        dropPropertiesAt(i + 1, movedProperties[samePropertyAt]);
-        movedProperties.splice(samePropertyAt, 1);
-        movableTokens[key] = [token];
-        movedSameProperty = false;
-      } else {
-        movableTokens[key] = movableTokens[key] || [];
-        movableTokens[key].push(token);
-      }
+  return false;
+}
 
-      if (movedSameProperty) {
-        movedProperties[samePropertyAt] = cloneAndMergeSelectors(movedProperties[samePropertyAt], property);
-      } else {
-        movedProperties.push(property);
-      }
-    }
+function vendorPrefixed(name) {
+  return /^\-(?:moz|webkit|ms|o)\-/.test(name);
+}
 
-    movedToBeDropped = movedToBeDropped.sort(naturalSorter);
-    for (j = 0, m = movedToBeDropped.length; j < m; j++) {
-      var dropAt = movedToBeDropped[j] - j;
-      movedProperties.splice(dropAt, 1);
-    }
-  }
+function unprefixed(name) {
+  return name.replace(/^\-(?:moz|webkit|ms|o)\-/, '');
+}
 
-  var position = tokens[0] && tokens[0][0] == Token.AT_RULE && tokens[0][1].indexOf('@charset') === 0 ? 1 : 0;
-  for (; position < tokens.length - 1; position++) {
-    var isImportRule = tokens[position][0] === Token.AT_RULE && tokens[position][1].indexOf('@import') === 0;
-    var isComment = tokens[position][0] === Token.COMMENT;
-    if (!(isImportRule || isComment))
-      break;
-  }
+function sameBorderComponent(name1, name2) {
+  return name1.split('-').pop() == name2.split('-').pop();
+}
 
-  for (i = 0; i < movedProperties.length; i++) {
-    dropPropertiesAt(position, movedProperties[i]);
-  }
+function isSideBorder(name) {
+  return name == 'border-top' || name == 'border-right' || name == 'border-bottom' || name == 'border-left';
 }
 
-module.exports = restructure;
+function isStyleBorder(name) {
+  return name == 'border-color' || name == 'border-style' || name == 'border-width';
+}
 
-},{"../../tokenizer/token":82,"../../utils/clone-array":84,"../../writer/one-time":96,"./extract-properties":23,"./is-mergeable":25,"./reorderable":46,"./tidy-rule-duplicates":53}],50:[function(require,module,exports){
-var MODIFIER_PATTERN = /\-\-.+$/;
+function withDifferentVendorPrefix(value1, value2) {
+  return vendorPrefixed(value1) && vendorPrefixed(value2) && value1.split('-')[1] != value2.split('-')[2];
+}
 
-function rulesOverlap(rule1, rule2, bemMode) {
-  var scope1;
-  var scope2;
-  var i, l;
-  var j, m;
+function inheritable(name) {
+  // According to http://www.w3.org/TR/CSS21/propidx.html
+  // Others will be catched by other, preceeding rules
+  return name == 'font' || name == 'line-height' || name == 'list-style';
+}
 
-  for (i = 0, l = rule1.length; i < l; i++) {
-    scope1 = rule1[i][1];
+module.exports = {
+  canReorder: canReorder,
+  canReorderSingle: canReorderSingle
+};
 
-    for (j = 0, m = rule2.length; j < m; j++) {
-      scope2 = rule2[j][1];
+},{"./rules-overlap":52,"./specificities-overlap":53}],49:[function(require,module,exports){
+var compactable = require('./compactable');
 
-      if (scope1 == scope2) {
-        return true;
-      }
+function restoreWithComponents(property) {
+  var descriptor = compactable[property.name];
 
-      if (bemMode && withoutModifiers(scope1) == withoutModifiers(scope2)) {
-        return true;
-      }
-    }
+  if (descriptor && descriptor.shorthand) {
+    return descriptor.restore(property, compactable);
+  } else {
+    return property.value;
   }
-
-  return false;
-}
-
-function withoutModifiers(scope) {
-  return scope.replace(MODIFIER_PATTERN, '');
 }
 
-module.exports = rulesOverlap;
-
-},{}],51:[function(require,module,exports){
-var specificity = require('./specificity');
+module.exports = restoreWithComponents;
 
-function specificitiesOverlap(selector1, selector2, cache) {
-  var specificity1;
-  var specificity2;
-  var i, l;
-  var j, m;
+},{"./compactable":22}],50:[function(require,module,exports){
+var shallowClone = require('./clone').shallow;
 
-  for (i = 0, l = selector1.length; i < l; i++) {
-    specificity1 = findSpecificity(selector1[i][1], cache);
+var Token = require('../../tokenizer/token');
+var Marker = require('../../tokenizer/marker');
 
-    for (j = 0, m = selector2.length; j < m; j++) {
-      specificity2 = findSpecificity(selector2[j][1], cache);
+function isInheritOnly(values) {
+  for (var i = 0, l = values.length; i < l; i++) {
+    var value = values[i][1];
 
-      if (specificity1[0] === specificity2[0] && specificity1[1] === specificity2[1] && specificity1[2] === specificity2[2]) {
-        return true;
-      }
-    }
+    if (value != 'inherit' && value != Marker.COMMA && value != Marker.FORWARD_SLASH)
+      return false;
   }
 
-  return false;
+  return true;
 }
 
-function findSpecificity(selector, cache) {
-  var value;
+function background(property, compactable, lastInMultiplex) {
+  var components = property.components;
+  var restored = [];
+  var needsOne, needsBoth;
 
-  if (!(selector in cache)) {
-    cache[selector] = value = specificity(selector);
+  function restoreValue(component) {
+    Array.prototype.unshift.apply(restored, component.value);
   }
 
-  return value || cache[selector];
-}
+  function isDefaultValue(component) {
+    var descriptor = compactable[component.name];
 
-module.exports = specificitiesOverlap;
+    if (descriptor.doubleValues && descriptor.defaultValue.length == 1) {
+      return component.value[0][1] == descriptor.defaultValue[0] && (component.value[1] ? component.value[1][1] == descriptor.defaultValue[0] : true);
+    } else if (descriptor.doubleValues && descriptor.defaultValue.length != 1) {
+      return component.value[0][1] == descriptor.defaultValue[0] && (component.value[1] ? component.value[1][1] : component.value[0][1]) == descriptor.defaultValue[1];
+    } else {
+      return component.value[0][1] == descriptor.defaultValue;
+    }
+  }
 
-},{"./specificity":52}],52:[function(require,module,exports){
-var Marker = require('../../tokenizer/marker');
+  for (var i = components.length - 1; i >= 0; i--) {
+    var component = components[i];
+    var isDefault = isDefaultValue(component);
 
-var Selector = {
-  ADJACENT_SIBLING: '+',
-  DESCENDANT: '>',
-  DOT: '.',
-  HASH: '#',
-  NON_ADJACENT_SIBLING: '~',
-  PSEUDO: ':'
-};
+    if (component.name == 'background-clip') {
+      var originComponent = components[i - 1];
+      var isOriginDefault = isDefaultValue(originComponent);
 
-var LETTER_PATTERN = /[a-zA-Z]/;
-var NOT_PREFIX = ':not(';
-var SEPARATOR_PATTERN = /[\s,\(>~\+]/;
+      needsOne = component.value[0][1] == originComponent.value[0][1];
 
-function specificity(selector) {
-  var result = [0, 0, 0];
-  var character;
-  var isEscaped;
-  var isSingleQuoted;
-  var isDoubleQuoted;
-  var roundBracketLevel = 0;
-  var couldIntroduceNewTypeSelector;
-  var withinNotPseudoClass = false;
-  var wasPseudoClass = false;
-  var i, l;
+      needsBoth = !needsOne && (
+        (isOriginDefault && !isDefault) ||
+        (!isOriginDefault && !isDefault) ||
+        (!isOriginDefault && isDefault && component.value[0][1] != originComponent.value[0][1]));
 
-  for (i = 0, l = selector.length; i < l; i++) {
-    character = selector[i];
+      if (needsOne) {
+        restoreValue(originComponent);
+      } else if (needsBoth) {
+        restoreValue(component);
+        restoreValue(originComponent);
+      }
 
-    if (isEscaped) {
-      // noop
-    } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) {
-      isSingleQuoted = true;
-    } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && isSingleQuoted) {
-      isSingleQuoted = false;
-    } else if (character == Marker.DOUBLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) {
-      isDoubleQuoted = true;
-    } else if (character == Marker.DOUBLE_QUOTE && isDoubleQuoted && !isSingleQuoted) {
-      isDoubleQuoted = false;
-    } else if (isSingleQuoted || isDoubleQuoted) {
-      continue;
-    } else if (roundBracketLevel > 0 && !withinNotPseudoClass) {
-      // noop
-    } else if (character == Marker.OPEN_ROUND_BRACKET) {
-      roundBracketLevel++;
-    } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1) {
-      roundBracketLevel--;
-      withinNotPseudoClass = false;
-    } else if (character == Marker.CLOSE_ROUND_BRACKET) {
-      roundBracketLevel--;
-    } else if (character == Selector.HASH) {
-      result[0]++;
-    } else if (character == Selector.DOT || character == Marker.OPEN_SQUARE_BRACKET) {
-      result[1]++;
-    } else if (character == Selector.PSEUDO && !wasPseudoClass && !isNotPseudoClass(selector, i)) {
-      result[1]++;
-      withinNotPseudoClass = false;
-    } else if (character == Selector.PSEUDO) {
-      withinNotPseudoClass = true;
-    } else if ((i === 0 || couldIntroduceNewTypeSelector) && LETTER_PATTERN.test(character)) {
-      result[2]++;
-    }
+      i--;
+    } else if (component.name == 'background-size') {
+      var positionComponent = components[i - 1];
+      var isPositionDefault = isDefaultValue(positionComponent);
 
-    isEscaped = character == Marker.BACK_SLASH;
-    wasPseudoClass = character == Selector.PSEUDO;
-    couldIntroduceNewTypeSelector = !isEscaped && SEPARATOR_PATTERN.test(character);
-  }
+      needsOne = !isPositionDefault && isDefault;
 
-  return result;
-}
+      needsBoth = !needsOne &&
+        (isPositionDefault && !isDefault || !isPositionDefault && !isDefault);
 
-function isNotPseudoClass(selector, index) {
-  return selector.indexOf(NOT_PREFIX, index) === index;
-}
+      if (needsOne) {
+        restoreValue(positionComponent);
+      } else if (needsBoth) {
+        restoreValue(component);
+        restored.unshift([Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]);
+        restoreValue(positionComponent);
+      } else if (positionComponent.value.length == 1) {
+        restoreValue(positionComponent);
+      }
 
-module.exports = specificity;
+      i--;
+    } else {
+      if (isDefault || compactable[component.name].multiplexLastOnly && !lastInMultiplex)
+        continue;
 
-},{"../../tokenizer/marker":81}],53:[function(require,module,exports){
-function ruleSorter(s1, s2) {
-  return s1[1] > s2[1] ? 1 : -1;
-}
+      restoreValue(component);
+    }
+  }
 
-function tidyRuleDuplicates(rules) {
-  var list = [];
-  var repeated = [];
+  if (restored.length === 0 && property.value.length == 1 && property.value[0][1] == '0')
+    restored.push(property.value[0]);
 
-  for (var i = 0, l = rules.length; i < l; i++) {
-    var rule = rules[i];
+  if (restored.length === 0)
+    restored.push([Token.PROPERTY_VALUE, compactable[property.name].defaultValue]);
 
-    if (repeated.indexOf(rule[1]) == -1) {
-      repeated.push(rule[1]);
-      list.push(rule);
-    }
-  }
+  if (isInheritOnly(restored))
+    return [restored[0]];
 
-  return list.sort(ruleSorter);
+  return restored;
 }
 
-module.exports = tidyRuleDuplicates;
+function borderRadius(property, compactable) {
+  if (property.multiplex) {
+    var horizontal = shallowClone(property);
+    var vertical = shallowClone(property);
 
-},{}],54:[function(require,module,exports){
-function removeUnused(properties) {
-  for (var i = properties.length - 1; i >= 0; i--) {
-    var property = properties[i];
+    for (var i = 0; i < 4; i++) {
+      var component = property.components[i];
 
-    if (property.unused) {
-      property.all.splice(property.position, 1);
+      var horizontalComponent = shallowClone(property);
+      horizontalComponent.value = [component.value[0]];
+      horizontal.components.push(horizontalComponent);
+
+      var verticalComponent = shallowClone(property);
+      // FIXME: only shorthand compactor (see breakup#borderRadius) knows that border radius
+      // longhands have two values, whereas tokenizer does not care about populating 2nd value
+      // if it's missing, hence this fallback
+      verticalComponent.value = [component.value[1] || component.value[0]];
+      vertical.components.push(verticalComponent);
+    }
+
+    var horizontalValues = fourValues(horizontal, compactable);
+    var verticalValues = fourValues(vertical, compactable);
+
+    if (horizontalValues.length == verticalValues.length &&
+        horizontalValues[0][1] == verticalValues[0][1] &&
+        (horizontalValues.length > 1 ? horizontalValues[1][1] == verticalValues[1][1] : true) &&
+        (horizontalValues.length > 2 ? horizontalValues[2][1] == verticalValues[2][1] : true) &&
+        (horizontalValues.length > 3 ? horizontalValues[3][1] == verticalValues[3][1] : true)) {
+      return horizontalValues;
+    } else {
+      return horizontalValues.concat([[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]).concat(verticalValues);
     }
+  } else {
+    return fourValues(property, compactable);
   }
 }
 
-module.exports = removeUnused;
-
-},{}],55:[function(require,module,exports){
-var Hack = require('./hack');
+function font(property, compactable) {
+  var components = property.components;
+  var restored = [];
+  var component;
+  var componentIndex = 0;
+  var fontFamilyIndex = 0;
 
-var Marker = require('../tokenizer/marker');
+  if (property.value[0][1].indexOf(Marker.INTERNAL) === 0) {
+    property.value[0][1] = property.value[0][1].substring(Marker.INTERNAL.length);
+    return property.value;
+  }
 
-var ASTERISK_HACK = '*';
-var BACKSLASH_HACK = '\\';
-var IMPORTANT_TOKEN = '!important';
-var UNDERSCORE_HACK = '_';
-var BANG_HACK = '!ie';
+  // first four components are optional
+  while (componentIndex < 4) {
+    component = components[componentIndex];
 
-function restoreFromOptimizing(properties, restoreCallback) {
-  var property;
-  var restored;
-  var current;
-  var i;
+    if (component.value[0][1] != compactable[component.name].defaultValue) {
+      Array.prototype.push.apply(restored, component.value);
+    }
 
-  for (i = properties.length - 1; i >= 0; i--) {
-    property = properties[i];
+    componentIndex++;
+  }
 
-    if (property.unused) {
-      continue;
-    }
+  // then comes font-size
+  Array.prototype.push.apply(restored, components[componentIndex].value);
+  componentIndex++;
 
-    if (!property.dirty && !property.important && !property.hack) {
-      continue;
-    }
+  // then may come line-height
+  if (components[componentIndex].value[0][1] != compactable[components[componentIndex].name].defaultValue) {
+    Array.prototype.push.apply(restored, [[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]);
+    Array.prototype.push.apply(restored, components[componentIndex].value);
+  }
 
-    if (restoreCallback) {
-      restored = restoreCallback(property);
-      property.value = restored;
-    } else {
-      restored = property.value;
-    }
+  componentIndex++;
 
-    if (property.important) {
-      restoreImportant(property);
-    }
+  // then comes font-family
+  while (components[componentIndex].value[fontFamilyIndex]) {
+    restored.push(components[componentIndex].value[fontFamilyIndex]);
 
-    if (property.hack) {
-      restoreHack(property);
+    if (components[componentIndex].value[fontFamilyIndex + 1]) {
+      restored.push([Token.PROPERTY_VALUE, Marker.COMMA]);
     }
 
-    if ('all' in property) {
-      current = property.all[property.position];
-      current[1][1] = property.name;
+    fontFamilyIndex++;
+  }
 
-      current.splice(2, current.length - 1);
-      Array.prototype.push.apply(current, restored);
-    }
+  if (isInheritOnly(restored)) {
+    return [restored[0]];
   }
-}
 
-function restoreImportant(property) {
-  property.value[property.value.length - 1][1] += IMPORTANT_TOKEN;
+  return restored;
 }
 
-function restoreHack(property) {
-  if (property.hack[0] == Hack.UNDERSCORE) {
-    property.name = UNDERSCORE_HACK + property.name;
-  } else if (property.hack[0] == Hack.ASTERISK) {
-    property.name = ASTERISK_HACK + property.name;
-  } else if (property.hack[0] == Hack.BACKSLASH) {
-    property.value[property.value.length - 1][1] += BACKSLASH_HACK + property.hack[1];
-  } else if (property.hack[0] == Hack.BANG) {
-    property.value[property.value.length - 1][1] += Marker.SPACE + BANG_HACK;
+function fourValues(property) {
+  var components = property.components;
+  var value1 = components[0].value[0];
+  var value2 = components[1].value[0];
+  var value3 = components[2].value[0];
+  var value4 = components[3].value[0];
+
+  if (value1[1] == value2[1] && value1[1] == value3[1] && value1[1] == value4[1]) {
+    return [value1];
+  } else if (value1[1] == value3[1] && value2[1] == value4[1]) {
+    return [value1, value2];
+  } else if (value2[1] == value4[1]) {
+    return [value1, value2, value3];
+  } else {
+    return [value1, value2, value3, value4];
   }
 }
 
-module.exports = restoreFromOptimizing;
+function multiplex(restoreWith) {
+  return function (property, compactable) {
+    if (!property.multiplex)
+      return restoreWith(property, compactable, true);
 
-},{"../tokenizer/marker":81,"./hack":9}],56:[function(require,module,exports){
-var Units = [
-  '%',
-  'ch',
-  'cm',
-  'em',
-  'ex',
-  'in',
-  'mm',
-  'pc',
-  'pt',
-  'px',
-  'rem',
-  'vh',
-  'vm',
-  'vmax',
-  'vmin',
-  'vw'
-];
-var cssUnitRegexStr = '(\\-?\\.?\\d+\\.?\\d*(' + Units.join('|') + '|)|auto|inherit)';
-var cssCalcRegexStr = '(\\-moz\\-|\\-webkit\\-)?calc\\([^\\)]+\\)';
-var cssFunctionNoVendorRegexStr = '[A-Z]+(\\-|[A-Z]|[0-9])+\\(.*?\\)';
-var cssFunctionVendorRegexStr = '\\-(\\-|[A-Z]|[0-9])+\\(.*?\\)';
-var cssVariableRegexStr = 'var\\(\\-\\-[^\\)]+\\)';
-var cssFunctionAnyRegexStr = '(' + cssVariableRegexStr + '|' + cssFunctionNoVendorRegexStr + '|' + cssFunctionVendorRegexStr + ')';
-var cssUnitOrCalcRegexStr = '(' + cssUnitRegexStr + '|' + cssCalcRegexStr + ')';
-
-var cssFunctionNoVendorRegex = new RegExp('^' + cssFunctionNoVendorRegexStr + '$', 'i');
-var cssVariableRegex = new RegExp('^' + cssVariableRegexStr + '$', 'i');
-var cssFunctionAnyRegex = new RegExp('^' + cssFunctionAnyRegexStr + '$', 'i');
-var cssUnitRegex = new RegExp('^' + cssUnitRegexStr + '$', 'i');
-var cssUnitOrCalcRegex = new RegExp('^' + cssUnitOrCalcRegexStr + '$', 'i');
+    var multiplexSize = 0;
+    var restored = [];
+    var componentMultiplexSoFar = {};
+    var i, l;
 
-var urlRegex = /^url\([\s\S]+\)$/i;
+    // At this point we don't know what's the multiplex size, e.g. how many background layers are there
+    for (i = 0, l = property.components[0].value.length; i < l; i++) {
+      if (property.components[0].value[i][1] == Marker.COMMA)
+        multiplexSize++;
+    }
 
-var globalKeywords = [
-  'inherit',
-  'initial',
-  'unset'
-];
+    for (i = 0; i <= multiplexSize; i++) {
+      var _property = shallowClone(property);
 
-var Keywords = {
-  '*-style': [
-    'auto',
-    'dashed',
-    'dotted',
-    'double',
-    'groove',
-    'hidden',
-    'inset',
-    'none',
-    'outset',
-    'ridge',
-    'solid'
-  ],
-  'background-attachment': [
-    'fixed',
-    'inherit',
-    'local',
-    'scroll'
-  ],
-  'background-clip': [
-    'border-box',
-    'content-box',
-    'inherit',
-    'padding-box',
-    'text'
-  ],
-  'background-origin': [
-    'border-box',
-    'content-box',
-    'inherit',
-    'padding-box'
-  ],
-  'background-position': [
-    'bottom',
-    'center',
-    'left',
-    'right',
-    'top'
-  ],
-  'background-repeat': [
-    'no-repeat',
-    'inherit',
-    'repeat',
-    'repeat-x',
-    'repeat-y',
-    'round',
-    'space'
-  ],
-  'background-size': [
-    'auto',
-    'cover',
-    'contain'
-  ],
-  'border-collapse': [
-    'collapse',
-    'inherit',
-    'separate'
-  ],
-  'bottom': [
-    'auto'
-  ],
-  'clear': [
-    'both',
-    'left',
-    'none',
-    'right'
-  ],
-  'cursor': [
-    'all-scroll',
-    'auto',
-    'col-resize',
-    'crosshair',
-    'default',
-    'e-resize',
-    'help',
-    'move',
-    'n-resize',
-    'ne-resize',
-    'no-drop',
-    'not-allowed',
-    'nw-resize',
-    'pointer',
-    'progress',
-    'row-resize',
-    's-resize',
-    'se-resize',
-    'sw-resize',
-    'text',
-    'vertical-text',
-    'w-resize',
-    'wait'
-  ],
-  'display': [
-    'block',
-    'inline',
-    'inline-block',
-    'inline-table',
-    'list-item',
-    'none',
-    'table',
-    'table-caption',
-    'table-cell',
-    'table-column',
-    'table-column-group',
-    'table-footer-group',
-    'table-header-group',
-    'table-row',
-    'table-row-group'
-  ],
-  'float': [
-    'left',
-    'none',
-    'right'
-  ],
-  'left': [
-    'auto'
-  ],
-  'font-style': [
-    'italic',
-    'normal',
-    'oblique'
-  ],
-  'font-weight': [
-    '100',
-    '200',
-    '300',
-    '400',
-    '500',
-    '600',
-    '700',
-    '800',
-    '900',
-    'bold',
-    'bolder',
-    'lighter',
-    'normal'
-  ],
-  'list-style-position': [
-    'inside',
-    'outside'
-  ],
-  'list-style-type': [
-    'armenian',
-    'circle',
-    'decimal',
-    'decimal-leading-zero',
-    'disc',
-    'decimal|disc', // this is the default value of list-style-type, see comment in compactable.js
-    'georgian',
-    'lower-alpha',
-    'lower-greek',
-    'lower-latin',
-    'lower-roman',
-    'none',
-    'square',
-    'upper-alpha',
-    'upper-latin',
-    'upper-roman'
-  ],
-  'overflow': [
-    'auto',
-    'hidden',
-    'scroll',
-    'visible'
-  ],
-  'position': [
-    'absolute',
-    'fixed',
-    'relative',
-    'static'
-  ],
-  'right': [
-    'auto'
-  ],
-  'text-align': [
-    'center',
-    'justify',
-    'left',
-    'left|right', // this is the default value of list-style-type, see comment in compactable.js
-    'right'
-  ],
-  'text-decoration': [
-    'line-through',
-    'none',
-    'overline',
-    'underline'
-  ],
-  'text-overflow': [
-    'clip',
-    'ellipsis'
-  ],
-  'top': [
-    'auto'
-  ],
-  'vertical-align': [
-    'baseline',
-    'bottom',
-    'middle',
-    'sub',
-    'super',
-    'text-bottom',
-    'text-top',
-    'top'
-  ],
-  'visibility': [
-    'collapse',
-    'hidden',
-    'visible'
-  ],
-  'white-space': [
-    'normal',
-    'nowrap',
-    'pre'
-  ],
-  'width': [
-    'inherit',
-    'initial',
-    'medium',
-    'thick',
-    'thin'
-  ]
-};
-
-var VENDOR_PREFIX_PATTERN = /(^|\W)-\w+\-/;
-
-function areSameFunction(value1, value2) {
-  if (!isValidFunction(value1) || !isValidFunction(value2)) {
-    return false;
-  }
-
-  var function1Name = value1.substring(0, value1.indexOf('('));
-  var function2Name = value2.substring(0, value2.indexOf('('));
-
-  return function1Name === function2Name;
-}
+      // We split multiplex into parts and restore them one by one
+      for (var j = 0, m = property.components.length; j < m; j++) {
+        var componentToClone = property.components[j];
+        var _component = shallowClone(componentToClone);
+        _property.components.push(_component);
 
-function hasNoVendorPrefix(value) {
-  return VENDOR_PREFIX_PATTERN.test(value);
-}
+        // The trick is some properties has more than one value, so we iterate over values looking for
+        // a multiplex separator - a comma
+        for (var k = componentMultiplexSoFar[_component.name] || 0, n = componentToClone.value.length; k < n; k++) {
+          if (componentToClone.value[k][1] == Marker.COMMA) {
+            componentMultiplexSoFar[_component.name] = k + 1;
+            break;
+          }
 
-function isValidBackgroundAttachment(value) {
-  return Keywords['background-attachment'].indexOf(value) > -1;
-}
+          _component.value.push(componentToClone.value[k]);
+        }
+      }
 
-function isValidBackgroundClip(value) {
-  return Keywords['background-clip'].indexOf(value) > -1;
-}
+      // No we can restore shorthand value
+      var lastInMultiplex = i == multiplexSize;
+      var _restored = restoreWith(_property, compactable, lastInMultiplex);
+      Array.prototype.push.apply(restored, _restored);
 
-function isValidBackgroundRepeat(value) {
-  return Keywords['background-repeat'].indexOf(value) > -1;
-}
+      if (i < multiplexSize)
+        restored.push([Token.PROPERTY_VALUE, Marker.COMMA]);
+    }
 
-function isValidBackgroundOrigin(value) {
-  return Keywords['background-origin'].indexOf(value) > -1;
+    return restored;
+  };
 }
 
-function isValidBackgroundPosition(value) {
-  var parts;
-  var i, l;
-
-  if (value === 'inherit') {
-    return true;
-  }
+function withoutDefaults(property, compactable) {
+  var components = property.components;
+  var restored = [];
 
-  parts = value.split(' ');
-  for (i = 0, l = parts.length; i < l; i++) {
-    if (parts[i] === '') {
-      continue;
-    } else if (isValidBackgroundPositionPart(parts[i])) {
-      continue;
-    }
+  for (var i = components.length - 1; i >= 0; i--) {
+    var component = components[i];
+    var descriptor = compactable[component.name];
 
-    return false;
+    if (component.value[0][1] != descriptor.defaultValue)
+      restored.unshift(component.value[0]);
   }
 
-  return true;
-}
-
-function isValidBackgroundPositionPart(value) {
-  return Keywords['background-position'].indexOf(value) > -1 || cssUnitOrCalcRegex.test(value);
-}
+  if (restored.length === 0)
+    restored.push([Token.PROPERTY_VALUE, compactable[property.name].defaultValue]);
 
-function isValidBackgroundSizePart(value) {
-  return Keywords['background-size'].indexOf(value) > -1 || cssUnitRegex.test(value);
-}
+  if (isInheritOnly(restored))
+    return [restored[0]];
 
-function isValidColor(value) {
-  return isValidNamedColor(value) ||
-    isValidColorValue(value);
+  return restored;
 }
 
-function isValidColorValue(value) {
-  return isValidHexColor(value) ||
-    isValidRgbaColor(value) ||
-    isValidHslaColor(value);
-}
-
-function isValidFunction(value) {
-  return !urlRegex.test(value) && cssFunctionAnyRegex.test(value);
-}
-
-function isValidFunctionWithoutVendorPrefix(value) {
-  return !urlRegex.test(value) && cssFunctionNoVendorRegex.test(value);
-}
-
-function isValidGlobalValue(value) {
-  return globalKeywords.indexOf(value) > -1;
-}
+module.exports = {
+  background: background,
+  borderRadius: borderRadius,
+  font: font,
+  fourValues: fourValues,
+  multiplex: multiplex,
+  withoutDefaults: withoutDefaults
+};
 
-function isValidHexColor(value) {
-  return (value.length === 4 || value.length === 7) && value[0] === '#';
-}
+},{"../../tokenizer/marker":84,"../../tokenizer/token":85,"./clone":21}],51:[function(require,module,exports){
+var canReorderSingle = require('./reorderable').canReorderSingle;
+var extractProperties = require('./extract-properties');
+var isMergeable = require('./is-mergeable');
+var tidyRuleDuplicates = require('./tidy-rule-duplicates');
 
-function isValidHslaColor(value) {
-  return value.length > 0 && value.indexOf('hsla(') === 0 && value.indexOf(')') === value.length - 1;
-}
+var Token = require('../../tokenizer/token');
 
-function isValidImage(value) {
-  return value == 'none' || value == 'inherit' || isValidUrl(value);
-}
+var cloneArray = require('../../utils/clone-array');
 
-function isValidKeywordValue(propertyName, value, includeGlobal) {
-  return Keywords[propertyName].indexOf(value) > -1 || includeGlobal && isValidGlobalValue(value);
-}
+var serializeBody = require('../../writer/one-time').body;
+var serializeRules = require('../../writer/one-time').rules;
 
-function isValidListStyleType(value) {
-  return Keywords['list-style-type'].indexOf(value) > -1;
+function naturalSorter(a, b) {
+  return a > b ? 1 : -1;
 }
 
-function isValidListStylePosition(value) {
-  return Keywords['list-style-position'].indexOf(value) > -1;
-}
+function cloneAndMergeSelectors(propertyA, propertyB) {
+  var cloned = cloneArray(propertyA);
+  cloned[5] = cloned[5].concat(propertyB[5]);
 
-function isValidNamedColor(value) {
-  // We don't really check if it's a valid color value, but allow any letters in it
-  return value !== 'auto' && (value === 'transparent' || value === 'inherit' || /^[a-zA-Z]+$/.test(value));
+  return cloned;
 }
 
-function isValidRgbaColor(value) {
-  return value.length > 0 && value.indexOf('rgba(') === 0 && value.indexOf(')') === value.length - 1;
-}
+function restructure(tokens, context) {
+  var options = context.options;
+  var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
+  var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
+  var mergeLimit = options.compatibility.selectors.mergeLimit;
+  var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
+  var specificityCache = context.cache.specificity;
+  var movableTokens = {};
+  var movedProperties = [];
+  var multiPropertyMoveCache = {};
+  var movedToBeDropped = [];
+  var maxCombinationsLevel = 2;
+  var ID_JOIN_CHARACTER = '%';
 
-function isValidStyle(value) {
-  return Keywords['*-style'].indexOf(value) > -1;
-}
+  function sendToMultiPropertyMoveCache(position, movedProperty, allFits) {
+    for (var i = allFits.length - 1; i >= 0; i--) {
+      var fit = allFits[i][0];
+      var id = addToCache(movedProperty, fit);
 
-function isValidTextShadow(compatibleCssUnitRegex, value) {
-  return isValidUnitWithoutFunction(compatibleCssUnitRegex, value) ||
-    isValidColor(value) ||
-    isValidGlobalValue(value);
-}
+      if (multiPropertyMoveCache[id].length > 1 && processMultiPropertyMove(position, multiPropertyMoveCache[id])) {
+        removeAllMatchingFromCache(id);
+        break;
+      }
+    }
+  }
 
-function isValidUnit(compatibleCssUnitAnyRegex, value) {
-  return compatibleCssUnitAnyRegex.test(value);
-}
+  function addToCache(movedProperty, fit) {
+    var id = cacheId(fit);
+    multiPropertyMoveCache[id] = multiPropertyMoveCache[id] || [];
+    multiPropertyMoveCache[id].push([movedProperty, fit]);
+    return id;
+  }
 
-function isValidUnitWithoutFunction(compatibleCssUnitRegex, value) {
-  return compatibleCssUnitRegex.test(value);
-}
+  function removeAllMatchingFromCache(matchId) {
+    var matchSelectors = matchId.split(ID_JOIN_CHARACTER);
+    var forRemoval = [];
+    var i;
 
-function isValidUrl(value) {
-  return urlRegex.test(value);
-}
+    for (var id in multiPropertyMoveCache) {
+      var selectors = id.split(ID_JOIN_CHARACTER);
+      for (i = selectors.length - 1; i >= 0; i--) {
+        if (matchSelectors.indexOf(selectors[i]) > -1) {
+          forRemoval.push(id);
+          break;
+        }
+      }
+    }
 
-function isValidVariable(value) {
-  return cssVariableRegex.test(value);
-}
+    for (i = forRemoval.length - 1; i >= 0; i--) {
+      delete multiPropertyMoveCache[forRemoval[i]];
+    }
+  }
 
-function isValidVendorPrefixedValue(value) {
-  return /^-([A-Za-z0-9]|-)*$/gi.test(value);
-}
+  function cacheId(cachedTokens) {
+    var id = [];
+    for (var i = 0, l = cachedTokens.length; i < l; i++) {
+      id.push(serializeRules(cachedTokens[i][1]));
+    }
+    return id.join(ID_JOIN_CHARACTER);
+  }
 
-function isValidWidth(compatibleCssUnitRegex, value) {
-  return isValidUnit(compatibleCssUnitRegex, value) || Keywords.width.indexOf(value) > -1;
-}
+  function tokensToMerge(sourceTokens) {
+    var uniqueTokensWithBody = [];
+    var mergeableTokens = [];
 
-function isValidZIndex(value) {
-  return value == 'auto' ||
-    isValidGlobalValue(value) ||
-    value.length > 0 && value == ('' + parseInt(value));
-}
+    for (var i = sourceTokens.length - 1; i >= 0; i--) {
+      if (!isMergeable(serializeRules(sourceTokens[i][1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)) {
+        continue;
+      }
 
-function validator(compatibility) {
-  var validUnits = Units.slice(0).filter(function (value) {
-    return !(value in compatibility.units) || compatibility.units[value] === true;
-  });
+      mergeableTokens.unshift(sourceTokens[i]);
+      if (sourceTokens[i][2].length > 0 && uniqueTokensWithBody.indexOf(sourceTokens[i]) == -1)
+        uniqueTokensWithBody.push(sourceTokens[i]);
+    }
 
-  var compatibleCssUnitRegexStr = '(\\-?\\.?\\d+\\.?\\d*(' + validUnits.join('|') + '|)|auto|inherit)';
-  var compatibleCssUnitRegex = new RegExp('^' + compatibleCssUnitRegexStr + '$', 'i');
-  var compatibleCssUnitAnyRegex = new RegExp('^(none|' + Keywords.width.join('|') + '|' + compatibleCssUnitRegexStr + '|' + cssVariableRegexStr + '|' + cssFunctionNoVendorRegexStr + '|' + cssFunctionVendorRegexStr + ')$', 'i');
-  var colorOpacity = compatibility.colors.opacity;
+    return uniqueTokensWithBody.length > 1 ?
+      mergeableTokens :
+      [];
+  }
 
-  return {
-    areSameFunction: areSameFunction,
-    colorOpacity: colorOpacity,
-    hasNoVendorPrefix: hasNoVendorPrefix,
-    isValidBackgroundAttachment: isValidBackgroundAttachment,
-    isValidBackgroundClip: isValidBackgroundClip,
-    isValidBackgroundOrigin: isValidBackgroundOrigin,
-    isValidBackgroundPosition: isValidBackgroundPosition,
-    isValidBackgroundPositionPart: isValidBackgroundPositionPart,
-    isValidBackgroundRepeat: isValidBackgroundRepeat,
-    isValidBackgroundSizePart: isValidBackgroundSizePart,
-    isValidColor: isValidColor,
-    isValidColorValue: isValidColorValue,
-    isValidFunction: isValidFunction,
-    isValidFunctionWithoutVendorPrefix: isValidFunctionWithoutVendorPrefix,
-    isValidGlobalValue: isValidGlobalValue,
-    isValidHexColor: isValidHexColor,
-    isValidHslaColor: isValidHslaColor,
-    isValidImage: isValidImage,
-    isValidKeywordValue: isValidKeywordValue,
-    isValidListStylePosition: isValidListStylePosition,
-    isValidListStyleType: isValidListStyleType,
-    isValidNamedColor: isValidNamedColor,
-    isValidRgbaColor: isValidRgbaColor,
-    isValidStyle: isValidStyle,
-    isValidTextShadow: isValidTextShadow.bind(null, compatibleCssUnitRegex),
-    isValidUnit: isValidUnit.bind(null, compatibleCssUnitAnyRegex),
-    isValidUnitWithoutFunction: isValidUnitWithoutFunction.bind(null, compatibleCssUnitRegex),
-    isValidUrl: isValidUrl,
-    isValidVariable: isValidVariable,
-    isValidVendorPrefixedValue: isValidVendorPrefixedValue,
-    isValidWidth: isValidWidth.bind(null, compatibleCssUnitRegex),
-    isValidZIndex: isValidZIndex
-  };
-}
+  function shortenIfPossible(position, movedProperty) {
+    var name = movedProperty[0];
+    var value = movedProperty[1];
+    var key = movedProperty[4];
+    var valueSize = name.length + value.length + 1;
+    var allSelectors = [];
+    var qualifiedTokens = [];
 
-module.exports = validator;
+    var mergeableTokens = tokensToMerge(movableTokens[key]);
+    if (mergeableTokens.length < 2)
+      return;
 
-},{}],57:[function(require,module,exports){
-var Hack = require('./hack');
+    var allFits = findAllFits(mergeableTokens, valueSize, 1);
+    var bestFit = allFits[0];
+    if (bestFit[1] > 0)
+      return sendToMultiPropertyMoveCache(position, movedProperty, allFits);
 
-var Marker = require('../tokenizer/marker');
-var Token = require('../tokenizer/token');
+    for (var i = bestFit[0].length - 1; i >=0; i--) {
+      allSelectors = bestFit[0][i][1].concat(allSelectors);
+      qualifiedTokens.unshift(bestFit[0][i]);
+    }
 
-var Match = {
-  ASTERISK: '*',
-  BACKSLASH: '\\',
-  BANG: '!',
-  BANG_SUFFIX_PATTERN: /!\w+$/,
-  IMPORTANT_TOKEN: '!important',
-  IMPORTANT_TOKEN_PATTERN: new RegExp('!important$', 'i'),
-  IMPORTANT_WORD: 'important',
-  IMPORTANT_WORD_PATTERN: new RegExp('important$', 'i'),
-  SUFFIX_BANG_PATTERN: /!$/,
-  UNDERSCORE: '_',
-  VARIABLE_REFERENCE_PATTERN: /var\(--.+\)$/
-};
+    allSelectors = tidyRuleDuplicates(allSelectors);
+    dropAsNewTokenAt(position, [movedProperty], allSelectors, qualifiedTokens);
+  }
 
-function wrapAll(properties, includeVariable) {
-  var wrapped = [];
-  var single;
-  var property;
-  var i;
+  function fitSorter(fit1, fit2) {
+    return fit1[1] > fit2[1] ? 1 : (fit1[1] == fit2[1] ? 0 : -1);
+  }
 
-  for (i = properties.length - 1; i >= 0; i--) {
-    property = properties[i];
+  function findAllFits(mergeableTokens, propertySize, propertiesCount) {
+    var combinations = allCombinations(mergeableTokens, propertySize, propertiesCount, maxCombinationsLevel - 1);
+    return combinations.sort(fitSorter);
+  }
 
-    if (property[0] != Token.PROPERTY) {
-      continue;
+  function allCombinations(tokensVariant, propertySize, propertiesCount, level) {
+    var differenceVariants = [[tokensVariant, sizeDifference(tokensVariant, propertySize, propertiesCount)]];
+    if (tokensVariant.length > 2 && level > 0) {
+      for (var i = tokensVariant.length - 1; i >= 0; i--) {
+        var subVariant = Array.prototype.slice.call(tokensVariant, 0);
+        subVariant.splice(i, 1);
+        differenceVariants = differenceVariants.concat(allCombinations(subVariant, propertySize, propertiesCount, level - 1));
+      }
     }
 
-    if (!includeVariable && someVariableReferences(property)) {
-      continue;
-    }
+    return differenceVariants;
+  }
 
-    single = wrapSingle(property);
-    single.all = properties;
-    single.position = i;
-    wrapped.unshift(single);
+  function sizeDifference(tokensVariant, propertySize, propertiesCount) {
+    var allSelectorsSize = 0;
+    for (var i = tokensVariant.length - 1; i >= 0; i--) {
+      allSelectorsSize += tokensVariant[i][2].length > propertiesCount ? serializeRules(tokensVariant[i][1]).length : -1;
+    }
+    return allSelectorsSize - (tokensVariant.length - 1) * propertySize + 1;
   }
 
-  return wrapped;
-}
+  function dropAsNewTokenAt(position, properties, allSelectors, mergeableTokens) {
+    var i, j, k, m;
+    var allProperties = [];
 
-function someVariableReferences(property) {
-  var i, l;
-  var value;
+    for (i = mergeableTokens.length - 1; i >= 0; i--) {
+      var mergeableToken = mergeableTokens[i];
 
-  // skipping `property` and property name tokens
-  for (i = 2, l = property.length; i < l; i++) {
-    value = property[i];
+      for (j = mergeableToken[2].length - 1; j >= 0; j--) {
+        var mergeableProperty = mergeableToken[2][j];
 
-    if (value[0] != Token.PROPERTY_VALUE) {
-      continue;
-    }
+        for (k = 0, m = properties.length; k < m; k++) {
+          var property = properties[k];
 
-    if (isVariableReference(value[1])) {
-      return true;
+          var mergeablePropertyName = mergeableProperty[1][1];
+          var propertyName = property[0];
+          var propertyBody = property[4];
+          if (mergeablePropertyName == propertyName && serializeBody([mergeableProperty]) == propertyBody) {
+            mergeableToken[2].splice(j, 1);
+            break;
+          }
+        }
+      }
     }
-  }
-
-  return false;
-}
 
-function isVariableReference(value) {
-  return Match.VARIABLE_REFERENCE_PATTERN.test(value);
-}
+    for (i = properties.length - 1; i >= 0; i--) {
+      allProperties.unshift(properties[i][3]);
+    }
 
-function isMultiplex(property) {
-  var value;
-  var i, l;
+    var newToken = [Token.RULE, allSelectors, allProperties];
+    tokens.splice(position, 0, newToken);
+  }
 
-  for (i = 3, l = property.length; i < l; i++) {
-    value = property[i];
+  function dropPropertiesAt(position, movedProperty) {
+    var key = movedProperty[4];
+    var toMove = movableTokens[key];
 
-    if (value[0] == Token.PROPERTY_VALUE && (value[1] == Marker.COMMA || value[1] == Marker.FORWARD_SLASH)) {
-      return true;
+    if (toMove && toMove.length > 1) {
+      if (!shortenMultiMovesIfPossible(position, movedProperty))
+        shortenIfPossible(position, movedProperty);
     }
   }
 
-  return false;
-}
-
-function hackFrom(property) {
-  var match = false;
-  var name = property[1][1];
-  var lastValue = property[property.length - 1];
+  function shortenMultiMovesIfPossible(position, movedProperty) {
+    var candidates = [];
+    var propertiesAndMergableTokens = [];
+    var key = movedProperty[4];
+    var j, k;
 
-  if (name[0] == Match.UNDERSCORE) {
-    match = [Hack.UNDERSCORE];
-  } else if (name[0] == Match.ASTERISK) {
-    match = [Hack.ASTERISK];
-  } else if (lastValue[1][0] == Match.BANG && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN)) {
-    match = [Hack.BANG];
-  } else if (lastValue[1].indexOf(Match.BANG) > 0 && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN) && Match.BANG_SUFFIX_PATTERN.test(lastValue[1])) {
-    match = [Hack.BANG];
-  } else if (lastValue[1].indexOf(Match.BACKSLASH) > 0 && lastValue[1].indexOf(Match.BACKSLASH) == lastValue[1].length - Match.BACKSLASH.length - 1) {
-    match = [Hack.BACKSLASH, lastValue[1].substring(lastValue[1].indexOf(Match.BACKSLASH) + 1)];
-  } else if (lastValue[1].indexOf(Match.BACKSLASH) === 0 && lastValue[1].length == 2) {
-    match = [Hack.BACKSLASH, lastValue[1].substring(1)];
+    var mergeableTokens = tokensToMerge(movableTokens[key]);
+    if (mergeableTokens.length < 2)
+      return;
+
+    movableLoop:
+    for (var value in movableTokens) {
+      var tokensList = movableTokens[value];
+
+      for (j = mergeableTokens.length - 1; j >= 0; j--) {
+        if (tokensList.indexOf(mergeableTokens[j]) == -1)
+          continue movableLoop;
+      }
+
+      candidates.push(value);
+    }
+
+    if (candidates.length < 2)
+      return false;
+
+    for (j = candidates.length - 1; j >= 0; j--) {
+      for (k = movedProperties.length - 1; k >= 0; k--) {
+        if (movedProperties[k][4] == candidates[j]) {
+          propertiesAndMergableTokens.unshift([movedProperties[k], mergeableTokens]);
+          break;
+        }
+      }
+    }
+
+    return processMultiPropertyMove(position, propertiesAndMergableTokens);
   }
 
-  return match;
-}
+  function processMultiPropertyMove(position, propertiesAndMergableTokens) {
+    var valueSize = 0;
+    var properties = [];
+    var property;
 
-function isImportant(property) {
-  if (property.length < 3)
-    return false;
+    for (var i = propertiesAndMergableTokens.length - 1; i >= 0; i--) {
+      property = propertiesAndMergableTokens[i][0];
+      var fullValue = property[4];
+      valueSize += fullValue.length + (i > 0 ? 1 : 0);
+
+      properties.push(property);
+    }
+
+    var mergeableTokens = propertiesAndMergableTokens[0][1];
+    var bestFit = findAllFits(mergeableTokens, valueSize, properties.length)[0];
+    if (bestFit[1] > 0)
+      return false;
+
+    var allSelectors = [];
+    var qualifiedTokens = [];
+    for (i = bestFit[0].length - 1; i >= 0; i--) {
+      allSelectors = bestFit[0][i][1].concat(allSelectors);
+      qualifiedTokens.unshift(bestFit[0][i]);
+    }
+
+    allSelectors = tidyRuleDuplicates(allSelectors);
+    dropAsNewTokenAt(position, properties, allSelectors, qualifiedTokens);
+
+    for (i = properties.length - 1; i >= 0; i--) {
+      property = properties[i];
+      var index = movedProperties.indexOf(property);
+
+      delete movableTokens[property[4]];
+
+      if (index > -1 && movedToBeDropped.indexOf(index) == -1)
+        movedToBeDropped.push(index);
+    }
 
-  var lastValue = property[property.length - 1];
-  if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) {
-    return true;
-  } else if (Match.IMPORTANT_WORD_PATTERN.test(lastValue[1]) && Match.SUFFIX_BANG_PATTERN.test(property[property.length - 2][1])) {
     return true;
   }
 
-  return false;
-}
+  function boundToAnotherPropertyInCurrrentToken(property, movedProperty, token) {
+    var propertyName = property[0];
+    var movedPropertyName = movedProperty[0];
+    if (propertyName != movedPropertyName)
+      return false;
 
-function stripImportant(property) {
-  var lastValue = property[property.length - 1];
-  var oneButLastValue = property[property.length - 2];
+    var key = movedProperty[4];
+    var toMove = movableTokens[key];
+    return toMove && toMove.indexOf(token) > -1;
+  }
 
-  if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) {
-    lastValue[1] = lastValue[1].replace(Match.IMPORTANT_TOKEN_PATTERN, '');
-  } else {
-    lastValue[1] = lastValue[1].replace(Match.IMPORTANT_WORD_PATTERN, '');
-    oneButLastValue[1] = oneButLastValue[1].replace(Match.SUFFIX_BANG_PATTERN, '');
+  for (var i = tokens.length - 1; i >= 0; i--) {
+    var token = tokens[i];
+    var isRule;
+    var j, k, m;
+    var samePropertyAt;
+
+    if (token[0] == Token.RULE) {
+      isRule = true;
+    } else if (token[0] == Token.NESTED_BLOCK) {
+      isRule = false;
+    } else {
+      continue;
+    }
+
+    // We cache movedProperties.length as it may change in the loop
+    var movedCount = movedProperties.length;
+
+    var properties = extractProperties(token);
+    movedToBeDropped = [];
+
+    var unmovableInCurrentToken = [];
+    for (j = properties.length - 1; j >= 0; j--) {
+      for (k = j - 1; k >= 0; k--) {
+        if (!canReorderSingle(properties[j], properties[k], specificityCache)) {
+          unmovableInCurrentToken.push(j);
+          break;
+        }
+      }
+    }
+
+    for (j = properties.length - 1; j >= 0; j--) {
+      var property = properties[j];
+      var movedSameProperty = false;
+
+      for (k = 0; k < movedCount; k++) {
+        var movedProperty = movedProperties[k];
+
+        if (movedToBeDropped.indexOf(k) == -1 && (!canReorderSingle(property, movedProperty, specificityCache) && !boundToAnotherPropertyInCurrrentToken(property, movedProperty, token) ||
+            movableTokens[movedProperty[4]] && movableTokens[movedProperty[4]].length === mergeLimit)) {
+          dropPropertiesAt(i + 1, movedProperty, token);
+
+          if (movedToBeDropped.indexOf(k) == -1) {
+            movedToBeDropped.push(k);
+            delete movableTokens[movedProperty[4]];
+          }
+        }
+
+        if (!movedSameProperty) {
+          movedSameProperty = property[0] == movedProperty[0] && property[1] == movedProperty[1];
+
+          if (movedSameProperty) {
+            samePropertyAt = k;
+          }
+        }
+      }
+
+      if (!isRule || unmovableInCurrentToken.indexOf(j) > -1)
+        continue;
+
+      var key = property[4];
+
+      if (movedSameProperty && movedProperties[samePropertyAt][5].length + property[5].length > mergeLimit) {
+        dropPropertiesAt(i + 1, movedProperties[samePropertyAt]);
+        movedProperties.splice(samePropertyAt, 1);
+        movableTokens[key] = [token];
+        movedSameProperty = false;
+      } else {
+        movableTokens[key] = movableTokens[key] || [];
+        movableTokens[key].push(token);
+      }
+
+      if (movedSameProperty) {
+        movedProperties[samePropertyAt] = cloneAndMergeSelectors(movedProperties[samePropertyAt], property);
+      } else {
+        movedProperties.push(property);
+      }
+    }
+
+    movedToBeDropped = movedToBeDropped.sort(naturalSorter);
+    for (j = 0, m = movedToBeDropped.length; j < m; j++) {
+      var dropAt = movedToBeDropped[j] - j;
+      movedProperties.splice(dropAt, 1);
+    }
   }
 
-  if (lastValue[1].length === 0) {
-    property.pop();
+  var position = tokens[0] && tokens[0][0] == Token.AT_RULE && tokens[0][1].indexOf('@charset') === 0 ? 1 : 0;
+  for (; position < tokens.length - 1; position++) {
+    var isImportRule = tokens[position][0] === Token.AT_RULE && tokens[position][1].indexOf('@import') === 0;
+    var isComment = tokens[position][0] === Token.COMMENT;
+    if (!(isImportRule || isComment))
+      break;
   }
 
-  if (oneButLastValue[1].length === 0) {
-    property.pop();
+  for (i = 0; i < movedProperties.length; i++) {
+    dropPropertiesAt(position, movedProperties[i]);
   }
 }
 
-function stripPrefixHack(property) {
-  property[1][1] = property[1][1].substring(1);
-}
+module.exports = restructure;
 
-function stripSuffixHack(property, hackFrom) {
-  var lastValue = property[property.length - 1];
-  lastValue[1] = lastValue[1]
-    .substring(0, lastValue[1].indexOf(hackFrom[0] == Hack.BACKSLASH ? Match.BACKSLASH : Match.BANG))
-    .trim();
+},{"../../tokenizer/token":85,"../../utils/clone-array":87,"../../writer/one-time":99,"./extract-properties":23,"./is-mergeable":25,"./reorderable":48,"./tidy-rule-duplicates":55}],52:[function(require,module,exports){
+var MODIFIER_PATTERN = /\-\-.+$/;
 
-  if (lastValue[1].length === 0) {
-    property.pop();
+function rulesOverlap(rule1, rule2, bemMode) {
+  var scope1;
+  var scope2;
+  var i, l;
+  var j, m;
+
+  for (i = 0, l = rule1.length; i < l; i++) {
+    scope1 = rule1[i][1];
+
+    for (j = 0, m = rule2.length; j < m; j++) {
+      scope2 = rule2[j][1];
+
+      if (scope1 == scope2) {
+        return true;
+      }
+
+      if (bemMode && withoutModifiers(scope1) == withoutModifiers(scope2)) {
+        return true;
+      }
+    }
   }
+
+  return false;
 }
 
-function wrapSingle(property) {
-  var importantProperty = isImportant(property);
-  if (importantProperty) {
-    stripImportant(property);
-  }
+function withoutModifiers(scope) {
+  return scope.replace(MODIFIER_PATTERN, '');
+}
 
-  var whichHack = hackFrom(property);
-  if (whichHack[0] == Hack.ASTERISK || whichHack[0] == Hack.UNDERSCORE) {
-    stripPrefixHack(property);
-  } else if (whichHack[0] == Hack.BACKSLASH || whichHack[0] == Hack.BANG) {
-    stripSuffixHack(property, whichHack);
-  }
+module.exports = rulesOverlap;
 
-  return {
-    block: property[2] && property[2][0] == Token.PROPERTY_BLOCK,
-    components: [],
-    dirty: false,
-    hack: whichHack,
-    important: importantProperty,
-    name: property[1][1],
-    multiplex: property.length > 3 ? isMultiplex(property) : false,
-    position: 0,
-    shorthand: false,
-    unused: false,
-    value: property.slice(2)
-  };
-}
+},{}],53:[function(require,module,exports){
+var specificity = require('./specificity');
 
-module.exports = {
-  all: wrapAll,
-  single: wrapSingle
-};
+function specificitiesOverlap(selector1, selector2, cache) {
+  var specificity1;
+  var specificity2;
+  var i, l;
+  var j, m;
 
-},{"../tokenizer/marker":81,"../tokenizer/token":82,"./hack":9}],58:[function(require,module,exports){
-var DEFAULTS = {
-  '*': {
-    colors: {
-      opacity: true // rgba / hsla
-    },
-    properties: {
-      backgroundClipMerging: true, // background-clip to shorthand
-      backgroundOriginMerging: true, // background-origin to shorthand
-      backgroundSizeMerging: true, // background-size to shorthand
-      colors: true, // any kind of color transformations, like `#ff00ff` to `#f0f` or `#fff` into `red`
-      ieBangHack: false, // !ie suffix hacks on IE<8
-      ieFilters: false, // whether to preserve `filter` and `-ms-filter` properties
-      iePrefixHack: false, // underscore / asterisk prefix hacks on IE
-      ieSuffixHack: false, // \9 suffix hacks on IE6-9
-      merging: true, // merging properties into one
-      shorterLengthUnits: false, // optimize pixel units into `pt`, `pc` or `in` units
-      spaceAfterClosingBrace: true, // 'url() no-repeat' to 'url()no-repeat'
-      urlQuotes: false, // whether to wrap content of `url()` into quotes or not
-      zeroUnits: true // 0[unit] -> 0
-    },
-    selectors: {
-      adjacentSpace: false, // div+ nav Android stock browser hack
-      ie7Hack: false, // *+html hack
-      mergeablePseudoClasses: [
-        ':active',
-        ':after',
-        ':before',
-        ':empty',
-        ':checked',
-        ':disabled',
-        ':empty',
-        ':enabled',
-        ':first-child',
-        ':first-letter',
-        ':first-line',
-        ':first-of-type',
-        ':focus',
-        ':hover',
-        ':lang',
-        ':last-child',
-        ':last-of-type',
-        ':link',
-        ':not',
-        ':nth-child',
-        ':nth-last-child',
-        ':nth-last-of-type',
-        ':nth-of-type',
-        ':only-child',
-        ':only-of-type',
-        ':root',
-        ':target',
-        ':visited'
-      ], // selectors with these pseudo-classes can be merged as these are universally supported
-      mergeablePseudoElements: [
-        '::after',
-        '::before',
-        '::first-letter',
-        '::first-line'
-      ] // selectors with these pseudo-elements can be merged as these are universally supported
-    },
-    units: {
-      ch: true,
-      in: true,
-      pc: true,
-      pt: true,
-      rem: true,
-      vh: true,
-      vm: true, // vm is vmin on IE9+ see https://developer.mozilla.org/en-US/docs/Web/CSS/length
-      vmax: true,
-      vmin: true,
-      vw: true
+  for (i = 0, l = selector1.length; i < l; i++) {
+    specificity1 = findSpecificity(selector1[i][1], cache);
+
+    for (j = 0, m = selector2.length; j < m; j++) {
+      specificity2 = findSpecificity(selector2[j][1], cache);
+
+      if (specificity1[0] === specificity2[0] && specificity1[1] === specificity2[1] && specificity1[2] === specificity2[2]) {
+        return true;
+      }
     }
   }
-};
 
-DEFAULTS.ie11 = DEFAULTS['*'];
+  return false;
+}
 
-DEFAULTS.ie10 = DEFAULTS['*'];
+function findSpecificity(selector, cache) {
+  var value;
 
-DEFAULTS.ie9 = merge(DEFAULTS['*'], {
-  properties: {
-    ieFilters: true,
-    ieSuffixHack: true
+  if (!(selector in cache)) {
+    cache[selector] = value = specificity(selector);
   }
-});
 
-DEFAULTS.ie8 = merge(DEFAULTS.ie9, {
-  colors: {
-    opacity: false
-  },
-  properties: {
-    backgroundClipMerging: false,
-    backgroundOriginMerging: false,
-    backgroundSizeMerging: false,
-    iePrefixHack: true,
-    merging: false
-  },
-  selectors: {
-    mergeablePseudoClasses: [
-      ':after',
-      ':before',
-      ':first-child',
-      ':first-letter',
-      ':focus',
-      ':hover',
-      ':visited'
-    ],
-    mergeablePseudoElements: []
-  },
-  units: {
-    ch: false,
-    rem: false,
-    vh: false,
-    vm: false,
-    vmax: false,
-    vmin: false,
-    vw: false
-  }
-});
+  return value || cache[selector];
+}
 
-DEFAULTS.ie7 = merge(DEFAULTS.ie8, {
-  properties: {
-    ieBangHack: true
-  },
-  selectors: {
-    ie7Hack: true,
-    mergeablePseudoClasses: [
-      ':first-child',
-      ':first-letter',
-      ':hover',
-      ':visited'
-    ]
-  },
-});
+module.exports = specificitiesOverlap;
 
-function compatibilityFrom(source) {
-  return merge(DEFAULTS['*'], calculateSource(source));
-}
+},{"./specificity":54}],54:[function(require,module,exports){
+var Marker = require('../../tokenizer/marker');
 
-function merge(source, target) {
-  for (var key in source) {
-    var value = source[key];
+var Selector = {
+  ADJACENT_SIBLING: '+',
+  DESCENDANT: '>',
+  DOT: '.',
+  HASH: '#',
+  NON_ADJACENT_SIBLING: '~',
+  PSEUDO: ':'
+};
 
-    if (typeof value === 'object' && !Array.isArray(value)) {
-      target[key] = merge(value, target[key] || {});
-    } else {
-      target[key] = key in target ? target[key] : value;
+var LETTER_PATTERN = /[a-zA-Z]/;
+var NOT_PREFIX = ':not(';
+var SEPARATOR_PATTERN = /[\s,\(>~\+]/;
+
+function specificity(selector) {
+  var result = [0, 0, 0];
+  var character;
+  var isEscaped;
+  var isSingleQuoted;
+  var isDoubleQuoted;
+  var roundBracketLevel = 0;
+  var couldIntroduceNewTypeSelector;
+  var withinNotPseudoClass = false;
+  var wasPseudoClass = false;
+  var i, l;
+
+  for (i = 0, l = selector.length; i < l; i++) {
+    character = selector[i];
+
+    if (isEscaped) {
+      // noop
+    } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) {
+      isSingleQuoted = true;
+    } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && isSingleQuoted) {
+      isSingleQuoted = false;
+    } else if (character == Marker.DOUBLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) {
+      isDoubleQuoted = true;
+    } else if (character == Marker.DOUBLE_QUOTE && isDoubleQuoted && !isSingleQuoted) {
+      isDoubleQuoted = false;
+    } else if (isSingleQuoted || isDoubleQuoted) {
+      continue;
+    } else if (roundBracketLevel > 0 && !withinNotPseudoClass) {
+      // noop
+    } else if (character == Marker.OPEN_ROUND_BRACKET) {
+      roundBracketLevel++;
+    } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1) {
+      roundBracketLevel--;
+      withinNotPseudoClass = false;
+    } else if (character == Marker.CLOSE_ROUND_BRACKET) {
+      roundBracketLevel--;
+    } else if (character == Selector.HASH) {
+      result[0]++;
+    } else if (character == Selector.DOT || character == Marker.OPEN_SQUARE_BRACKET) {
+      result[1]++;
+    } else if (character == Selector.PSEUDO && !wasPseudoClass && !isNotPseudoClass(selector, i)) {
+      result[1]++;
+      withinNotPseudoClass = false;
+    } else if (character == Selector.PSEUDO) {
+      withinNotPseudoClass = true;
+    } else if ((i === 0 || couldIntroduceNewTypeSelector) && LETTER_PATTERN.test(character)) {
+      result[2]++;
     }
+
+    isEscaped = character == Marker.BACK_SLASH;
+    wasPseudoClass = character == Selector.PSEUDO;
+    couldIntroduceNewTypeSelector = !isEscaped && SEPARATOR_PATTERN.test(character);
   }
 
-  return target;
+  return result;
 }
 
-function calculateSource(source) {
-  if (typeof source == 'object')
-    return source;
+function isNotPseudoClass(selector, index) {
+  return selector.indexOf(NOT_PREFIX, index) === index;
+}
 
-  if (!/[,\+\-]/.test(source))
-    return DEFAULTS[source] || DEFAULTS['*'];
+module.exports = specificity;
 
-  var parts = source.split(',');
-  var template = parts[0] in DEFAULTS ?
-    DEFAULTS[parts.shift()] :
-    DEFAULTS['*'];
-
-  source = {};
-
-  parts.forEach(function (part) {
-    var isAdd = part[0] == '+';
-    var key = part.substring(1).split('.');
-    var group = key[0];
-    var option = key[1];
-
-    source[group] = source[group] || {};
-    source[group][option] = isAdd;
-  });
-
-  return merge(template, source);
+},{"../../tokenizer/marker":84}],55:[function(require,module,exports){
+function ruleSorter(s1, s2) {
+  return s1[1] > s2[1] ? 1 : -1;
 }
 
-module.exports = compatibilityFrom;
-
-},{}],59:[function(require,module,exports){
-var override = require('../utils/override');
-
-var Breaks = {
-  AfterAtRule: 'afterAtRule',
-  AfterBlockBegins: 'afterBlockBegins',
-  AfterBlockEnds: 'afterBlockEnds',
-  AfterComment: 'afterComment',
-  AfterProperty: 'afterProperty',
-  AfterRuleBegins: 'afterRuleBegins',
-  AfterRuleEnds: 'afterRuleEnds',
-  BeforeBlockEnds: 'beforeBlockEnds',
-  BetweenSelectors: 'betweenSelectors'
-};
-
-var IndentWith = {
-  Space: ' ',
-  Tab: '\t'
-};
-
-var Spaces = {
-  AroundSelectorRelation: 'aroundSelectorRelation',
-  BeforeBlockBegins: 'beforeBlockBegins',
-  BeforeValue: 'beforeValue'
-};
-
-var DEFAULTS = {
-  breaks: breaks(false),
-  indentBy: 0,
-  indentWith: IndentWith.Space,
-  spaces: spaces(false),
-  wrapAt: false
-};
-
-var BEAUTIFY_ALIAS = 'beautify';
-var KEEP_BREAKS_ALIAS = 'keep-breaks';
-
-var OPTION_SEPARATOR = ';';
-var OPTION_NAME_VALUE_SEPARATOR = ':';
-var HASH_VALUES_OPTION_SEPARATOR = ',';
-var HASH_VALUES_NAME_VALUE_SEPARATOR = '=';
-
-var FALSE_KEYWORD_1 = 'false';
-var FALSE_KEYWORD_2 = 'off';
-var TRUE_KEYWORD_1 = 'true';
-var TRUE_KEYWORD_2 = 'on';
+function tidyRuleDuplicates(rules) {
+  var list = [];
+  var repeated = [];
 
-function breaks(value) {
-  var breakOptions = {};
+  for (var i = 0, l = rules.length; i < l; i++) {
+    var rule = rules[i];
 
-  breakOptions[Breaks.AfterAtRule] = value;
-  breakOptions[Breaks.AfterBlockBegins] = value;
-  breakOptions[Breaks.AfterBlockEnds] = value;
-  breakOptions[Breaks.AfterComment] = value;
-  breakOptions[Breaks.AfterProperty] = value;
-  breakOptions[Breaks.AfterRuleBegins] = value;
-  breakOptions[Breaks.AfterRuleEnds] = value;
-  breakOptions[Breaks.BeforeBlockEnds] = value;
-  breakOptions[Breaks.BetweenSelectors] = value;
+    if (repeated.indexOf(rule[1]) == -1) {
+      repeated.push(rule[1]);
+      list.push(rule);
+    }
+  }
 
-  return breakOptions;
+  return list.sort(ruleSorter);
 }
 
-function spaces(value) {
-  var spaceOptions = {};
-
-  spaceOptions[Spaces.AroundSelectorRelation] = value;
-  spaceOptions[Spaces.BeforeBlockBegins] = value;
-  spaceOptions[Spaces.BeforeValue] = value;
-
-  return spaceOptions;
-}
+module.exports = tidyRuleDuplicates;
 
-function formatFrom(source) {
-  if (source === undefined || source === false) {
-    return false;
-  }
+},{}],56:[function(require,module,exports){
+function removeUnused(properties) {
+  for (var i = properties.length - 1; i >= 0; i--) {
+    var property = properties[i];
 
-  if (typeof source == 'object' && 'indentBy' in source) {
-    source = override(source, { indentBy: parseInt(source.indentBy) });
+    if (property.unused) {
+      property.all.splice(property.position, 1);
+    }
   }
+}
 
-  if (typeof source == 'object' && 'indentWith' in source) {
-    source = override(source, { indentWith: mapIndentWith(source.indentWith) });
-  }
+module.exports = removeUnused;
 
-  if (typeof source == 'object') {
-    return override(DEFAULTS, source);
-  }
+},{}],57:[function(require,module,exports){
+var Hack = require('./hack');
 
-  if (typeof source == 'object') {
-    return override(DEFAULTS, source);
-  }
+var Marker = require('../tokenizer/marker');
 
-  if (typeof source == 'string' && source == BEAUTIFY_ALIAS) {
-    return override(DEFAULTS, {
-      breaks: breaks(true),
-      indentBy: 2,
-      spaces: spaces(true)
-    });
-  }
+var ASTERISK_HACK = '*';
+var BACKSLASH_HACK = '\\';
+var IMPORTANT_TOKEN = '!important';
+var UNDERSCORE_HACK = '_';
+var BANG_HACK = '!ie';
 
-  if (typeof source == 'string' && source == KEEP_BREAKS_ALIAS) {
-    return override(DEFAULTS, {
-      breaks: {
-        afterAtRule: true,
-        afterBlockBegins: true,
-        afterBlockEnds: true,
-        afterComment: true,
-        afterRuleEnds: true,
-        beforeBlockEnds: true
-      }
-    });
-  }
+function restoreFromOptimizing(properties, restoreCallback) {
+  var property;
+  var restored;
+  var current;
+  var i;
 
-  if (typeof source == 'string') {
-    return override(DEFAULTS, toHash(source));
-  }
+  for (i = properties.length - 1; i >= 0; i--) {
+    property = properties[i];
 
-  return DEFAULTS;
-}
+    if (property.unused) {
+      continue;
+    }
 
-function toHash(string) {
-  return string
-    .split(OPTION_SEPARATOR)
-    .reduce(function (accumulator, directive) {
-      var parts = directive.split(OPTION_NAME_VALUE_SEPARATOR);
-      var name = parts[0];
-      var value = parts[1];
+    if (!property.dirty && !property.important && !property.hack) {
+      continue;
+    }
 
-      if (name == 'breaks' || name == 'spaces') {
-        accumulator[name] = hashValuesToHash(value);
-      } else if (name == 'indentBy' || name == 'wrapAt') {
-        accumulator[name] = parseInt(value);
-      } else if (name == 'indentWith') {
-        accumulator[name] = mapIndentWith(value);
-      }
+    if (restoreCallback) {
+      restored = restoreCallback(property);
+      property.value = restored;
+    } else {
+      restored = property.value;
+    }
 
-      return accumulator;
-    }, {});
-}
+    if (property.important) {
+      restoreImportant(property);
+    }
 
-function hashValuesToHash(string) {
-  return string
-    .split(HASH_VALUES_OPTION_SEPARATOR)
-    .reduce(function (accumulator, directive) {
-      var parts = directive.split(HASH_VALUES_NAME_VALUE_SEPARATOR);
-      var name = parts[0];
-      var value = parts[1];
+    if (property.hack) {
+      restoreHack(property);
+    }
 
-      accumulator[name] = normalizeValue(value);
+    if ('all' in property) {
+      current = property.all[property.position];
+      current[1][1] = property.name;
 
-      return accumulator;
-    }, {});
+      current.splice(2, current.length - 1);
+      Array.prototype.push.apply(current, restored);
+    }
+  }
 }
 
-
-function normalizeValue(value) {
-  switch (value) {
-    case FALSE_KEYWORD_1:
-    case FALSE_KEYWORD_2:
-      return false;
-    case TRUE_KEYWORD_1:
-    case TRUE_KEYWORD_2:
-      return true;
-    default:
-      return value;
-  }
+function restoreImportant(property) {
+  property.value[property.value.length - 1][1] += IMPORTANT_TOKEN;
 }
 
-function mapIndentWith(value) {
-  switch (value) {
-    case 'space':
-      return IndentWith.Space;
-    case 'tab':
-      return IndentWith.Tab;
-    default:
-      return value;
+function restoreHack(property) {
+  if (property.hack[0] == Hack.UNDERSCORE) {
+    property.name = UNDERSCORE_HACK + property.name;
+  } else if (property.hack[0] == Hack.ASTERISK) {
+    property.name = ASTERISK_HACK + property.name;
+  } else if (property.hack[0] == Hack.BACKSLASH) {
+    property.value[property.value.length - 1][1] += BACKSLASH_HACK + property.hack[1];
+  } else if (property.hack[0] == Hack.BANG) {
+    property.value[property.value.length - 1][1] += Marker.SPACE + BANG_HACK;
   }
 }
 
-module.exports = {
-  Breaks: Breaks,
-  Spaces: Spaces,
-  formatFrom: formatFrom
-};
-
-},{"../utils/override":93}],60:[function(require,module,exports){
-(function (process){
-var url = require('url');
+module.exports = restoreFromOptimizing;
 
-var override = require('../utils/override');
+},{"../tokenizer/marker":84,"./hack":9}],58:[function(require,module,exports){
+var functionNoVendorRegexStr = '[A-Z]+(\\-|[A-Z]|[0-9])+\\(.*?\\)';
+var functionVendorRegexStr = '\\-(\\-|[A-Z]|[0-9])+\\(.*?\\)';
+var variableRegexStr = 'var\\(\\-\\-[^\\)]+\\)';
+var functionAnyRegexStr = '(' + variableRegexStr + '|' + functionNoVendorRegexStr + '|' + functionVendorRegexStr + ')';
+
+var animationTimingFunctionRegex = /^(cubic\-bezier|steps)\([^\)]+\)$/;
+var calcRegex = new RegExp('^(\\-moz\\-|\\-webkit\\-)?calc\\([^\\)]+\\)$', 'i');
+var functionAnyRegex = new RegExp('^' + functionAnyRegexStr + '$', 'i');
+var hslColorRegex = /^hsl\(\s*[\-\.\d]+\s*,\s*[\.\d]+%\s*,\s*[\.\d]+%\s*\)|hsla\(\s*[\-\.\d]+\s*,\s*[\.\d]+%\s*,\s*[\.\d]+%\s*,\s*[\.\d]+\s*\)$/;
+var identifierRegex = /^(\-[a-z0-9_][a-z0-9\-_]*|[a-z][a-z0-9\-_]*)$/i;
+var longHexColorRegex = /^#[0-9a-f]{6}$/i;
+var namedEntityRegex = /^[a-z]+$/i;
+var prefixRegex = /^-([a-z0-9]|-)*$/i;
+var rgbColorRegex = /^rgb\(\s*[\d]{1,3}\s*,\s*[\d]{1,3}\s*,\s*[\d]{1,3}\s*\)|rgba\(\s*[\d]{1,3}\s*,\s*[\d]{1,3}\s*,\s*[\d]{1,3}\s*,\s*[\.\d]+\s*\)$/;
+var shortHexColorRegex = /^#[0-9a-f]{3}$/i;
+var timeRegex = new RegExp('^(\\-?\\+?\\.?\\d+\\.?\\d*(s|ms))$');
+var urlRegex = /^url\([\s\S]+\)$/i;
+var variableRegex = new RegExp('^' + variableRegexStr + '$', 'i');
 
-function inlineRequestFrom(option) {
-  return override(
-    /* jshint camelcase: false */
-    proxyOptionsFrom(process.env.HTTP_PROXY || process.env.http_proxy),
-    option || {}
-  );
-}
-
-function proxyOptionsFrom(httpProxy) {
-  return httpProxy ?
-    {
-      hostname: url.parse(httpProxy).hostname,
-      port: parseInt(url.parse(httpProxy).port)
-    } :
-    {};
-}
-
-module.exports = inlineRequestFrom;
-
-}).call(this,require('_process'))
-},{"../utils/override":93,"_process":111,"url":159}],61:[function(require,module,exports){
-var DEFAULT_TIMEOUT = 5000;
-
-function inlineTimeoutFrom(option) {
-  return option || DEFAULT_TIMEOUT;
-}
-
-module.exports = inlineTimeoutFrom;
-
-},{}],62:[function(require,module,exports){
-function inlineOptionsFrom(rules) {
-  if (Array.isArray(rules)) {
-    return rules;
-  }
-
-  return undefined === rules ?
-    ['local'] :
-    rules.split(',');
-}
-
-module.exports = inlineOptionsFrom;
-
-},{}],63:[function(require,module,exports){
-var roundingPrecisionFrom = require('./rounding-precision').roundingPrecisionFrom;
-
-var override = require('../utils/override');
-
-var OptimizationLevel = {
-  Zero: '0',
-  One: '1',
-  Two: '2'
-};
-
-var DEFAULTS = {};
-
-DEFAULTS[OptimizationLevel.Zero] = {};
-DEFAULTS[OptimizationLevel.One] = {
-  cleanupCharsets: true,
-  normalizeUrls: true,
-  optimizeBackground: true,
-  optimizeBorderRadius: true,
-  optimizeFilter: true,
-  optimizeFont: true,
-  optimizeFontWeight: true,
-  optimizeOutline: true,
-  removeNegativePaddings: true,
-  removeQuotes: true,
-  removeWhitespace: true,
-  replaceMultipleZeros: true,
-  replaceTimeUnits: true,
-  replaceZeroUnits: true,
-  roundingPrecision: roundingPrecisionFrom(undefined),
-  selectorsSortingMethod: 'standard',
-  specialComments: 'all',
-  tidyAtRules: true,
-  tidyBlockScopes: true,
-  tidySelectors: true,
-  transform: noop
-};
-DEFAULTS[OptimizationLevel.Two] = {
-  mergeAdjacentRules: true,
-  mergeIntoShorthands: true,
-  mergeMedia: true,
-  mergeNonAdjacentRules: true,
-  mergeSemantically: false,
-  overrideProperties: true,
-  reduceNonAdjacentRules: true,
-  removeDuplicateFontRules: true,
-  removeDuplicateMediaBlocks: true,
-  removeDuplicateRules: true,
-  restructureRules: false
-};
-
-var ALL_KEYWORD_1 = '*';
-var ALL_KEYWORD_2 = 'all';
-var FALSE_KEYWORD_1 = 'false';
-var FALSE_KEYWORD_2 = 'off';
-var TRUE_KEYWORD_1 = 'true';
-var TRUE_KEYWORD_2 = 'on';
-
-var OPTION_SEPARATOR = ';';
-var OPTION_VALUE_SEPARATOR = ':';
-
-function noop() {}
-
-function optimizationLevelFrom(source) {
-  var level = override(DEFAULTS, {});
-  var Zero = OptimizationLevel.Zero;
-  var One = OptimizationLevel.One;
-  var Two = OptimizationLevel.Two;
-
-
-  if (undefined === source) {
-    delete level[Two];
-    return level;
-  }
-
-  if (typeof source == 'string') {
-    source = parseInt(source);
-  }
-
-  if (typeof source == 'number' && source === parseInt(Two)) {
-    return level;
-  }
-
-  if (typeof source == 'number' && source === parseInt(One)) {
-    delete level[Two];
-    return level;
-  }
-
-  if (typeof source == 'number' && source === parseInt(Zero)) {
-    delete level[Two];
-    delete level[One];
-    return level;
-  }
-
-  if (typeof source == 'object') {
-    source = covertValuesToHashes(source);
-  }
-
-  if (One in source && 'roundingPrecision' in source[One]) {
-    source[One].roundingPrecision = roundingPrecisionFrom(source[One].roundingPrecision);
-  }
-
-  if (Zero in source || One in source || Two in source) {
-    level[Zero] = override(level[Zero], source[Zero]);
-  }
-
-  if (One in source && ALL_KEYWORD_1 in source[One]) {
-    level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_1])));
-    delete source[One][ALL_KEYWORD_1];
-  }
-
-  if (One in source && ALL_KEYWORD_2 in source[One]) {
-    level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_2])));
-    delete source[One][ALL_KEYWORD_2];
-  }
-
-  if (One in source || Two in source) {
-    level[One] = override(level[One], source[One]);
-  } else {
-    delete level[One];
-  }
-
-  if (Two in source && ALL_KEYWORD_1 in source[Two]) {
-    level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_1])));
-    delete source[Two][ALL_KEYWORD_1];
-  }
-
-  if (Two in source && ALL_KEYWORD_2 in source[Two]) {
-    level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_2])));
-    delete source[Two][ALL_KEYWORD_2];
-  }
-
-  if (Two in source) {
-    level[Two] = override(level[Two], source[Two]);
-  } else {
-    delete level[Two];
-  }
-
-  return level;
-}
-
-function defaults(level, value) {
-  var options = override(DEFAULTS[level], {});
-  var key;
-
-  for (key in options) {
-    if (typeof options[key] == 'boolean') {
-      options[key] = value;
-    }
-  }
-
-  return options;
-}
-
-function normalizeValue(value) {
-  switch (value) {
-    case FALSE_KEYWORD_1:
-    case FALSE_KEYWORD_2:
-      return false;
-    case TRUE_KEYWORD_1:
-    case TRUE_KEYWORD_2:
-      return true;
-    default:
-      return value;
-  }
-}
-
-function covertValuesToHashes(source) {
-  var clonedSource = override(source, {});
-  var level;
-  var i;
-
-  for (i = 0; i <= 2; i++) {
-    level = '' + i;
-
-    if (level in clonedSource && (clonedSource[level] === undefined || clonedSource[level] === false)) {
-      delete clonedSource[level];
-    }
-
-    if (level in clonedSource && clonedSource[level] === true) {
-      clonedSource[level] = {};
-    }
-
-    if (level in clonedSource && typeof clonedSource[level] == 'string') {
-      clonedSource[level] = covertToHash(clonedSource[level], level);
-    }
-  }
-
-  return clonedSource;
-}
-
-function covertToHash(asString, level) {
-  return asString
-    .split(OPTION_SEPARATOR)
-    .reduce(function (accumulator, directive) {
-      var parts = directive.split(OPTION_VALUE_SEPARATOR);
-      var name = parts[0];
-      var value = parts[1];
-      var normalizedValue = normalizeValue(value);
-
-      if (ALL_KEYWORD_1 == name || ALL_KEYWORD_2 == name) {
-        accumulator = override(accumulator, defaults(level, normalizedValue));
-      } else {
-        accumulator[name] = normalizedValue;
-      }
-
-      return accumulator;
-    }, {});
-}
-
-module.exports = {
-  OptimizationLevel: OptimizationLevel,
-  optimizationLevelFrom: optimizationLevelFrom,
-};
-
-},{"../utils/override":93,"./rounding-precision":66}],64:[function(require,module,exports){
-(function (process){
-var path = require('path');
-
-function rebaseToFrom(option) {
-  return option ? path.resolve(option) : process.cwd();
-}
-
-module.exports = rebaseToFrom;
-
-}).call(this,require('_process'))
-},{"_process":111,"path":109}],65:[function(require,module,exports){
-function rebaseFrom(rebaseOption) {
-  return undefined === rebaseOption ? true : !!rebaseOption;
-}
-
-module.exports = rebaseFrom;
-
-},{}],66:[function(require,module,exports){
-var override = require('../utils/override');
-
-var INTEGER_PATTERN = /^\d+$/;
-
-var ALL_UNITS = ['*', 'all'];
-var DEFAULT_PRECISION = 'off'; // all precision changes are disabled
-var DIRECTIVES_SEPARATOR = ','; // e.g. *=5,px=3
-var DIRECTIVE_VALUE_SEPARATOR = '='; // e.g. *=5
-
-function roundingPrecisionFrom(source) {
-  return override(defaults(DEFAULT_PRECISION), buildPrecisionFrom(source));
-}
-
-function defaults(value) {
-  return {
-    'ch': value,
-    'cm': value,
-    'em': value,
-    'ex': value,
-    'in': value,
-    'mm': value,
-    'pc': value,
-    'pt': value,
-    'px': value,
-    'q': value,
-    'rem': value,
-    'vh': value,
-    'vmax': value,
-    'vmin': value,
-    'vw': value,
-    '%': value
-  };
-}
-
-function buildPrecisionFrom(source) {
-  if (source === null || source === undefined) {
-    return {};
-  }
-
-  if (typeof source == 'boolean') {
-    return {};
-  }
-
-  if (typeof source == 'number' && source == -1) {
-    return defaults(DEFAULT_PRECISION);
-  }
-
-  if (typeof source == 'number') {
-    return defaults(source);
-  }
-
-  if (typeof source == 'string' && INTEGER_PATTERN.test(source)) {
-    return defaults(parseInt(source));
-  }
-
-  if (typeof source == 'string' && source == DEFAULT_PRECISION) {
-    return defaults(DEFAULT_PRECISION);
-  }
-
-  if (typeof source == 'object') {
-    return source;
-  }
-
-  return source
-    .split(DIRECTIVES_SEPARATOR)
-    .reduce(function (accumulator, directive) {
-      var directiveParts = directive.split(DIRECTIVE_VALUE_SEPARATOR);
-      var name = directiveParts[0];
-      var value = parseInt(directiveParts[1]);
-
-      if (isNaN(value) || value == -1) {
-        value = DEFAULT_PRECISION;
-      }
-
-      if (ALL_UNITS.indexOf(name) > -1) {
-        accumulator = override(accumulator, defaults(value));
-      } else {
-        accumulator[name] = value;
-      }
-
-      return accumulator;
-    }, {});
-}
-
-module.exports = {
-  DEFAULT: DEFAULT_PRECISION,
-  roundingPrecisionFrom: roundingPrecisionFrom
-};
-
-},{"../utils/override":93}],67:[function(require,module,exports){
-(function (global,Buffer){
-var fs = require('fs');
-var path = require('path');
-
-var isAllowedResource = require('./is-allowed-resource');
-var loadRemoteResource = require('./load-remote-resource');
-var matchDataUri = require('./match-data-uri');
-var rebaseLocalMap = require('./rebase-local-map');
-var rebaseRemoteMap = require('./rebase-remote-map');
-
-var Token = require('../tokenizer/token');
-var hasProtocol = require('../utils/has-protocol');
-var isDataUriResource = require('../utils/is-data-uri-resource');
-var isRemoteResource = require('../utils/is-remote-resource');
-
-var MAP_MARKER_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/;
-
-function applySourceMaps(tokens, context, callback) {
-  var applyContext = {
-    callback: callback,
-    index: 0,
-    inline: context.options.inline,
-    inlineRequest: context.options.inlineRequest,
-    inlineTimeout: context.options.inlineTimeout,
-    inputSourceMapTracker: context.inputSourceMapTracker,
-    localOnly: context.localOnly,
-    processedTokens: [],
-    rebaseTo: context.options.rebaseTo,
-    sourceTokens: tokens,
-    warnings: context.warnings
-  };
-
-  return context.options.sourceMap && tokens.length > 0 ?
-    doApplySourceMaps(applyContext) :
-    callback(tokens);
-}
-
-function doApplySourceMaps(applyContext) {
-  var singleSourceTokens = [];
-  var lastSource = findTokenSource(applyContext.sourceTokens[0]);
-  var source;
-  var token;
-  var l;
-
-  for (l = applyContext.sourceTokens.length; applyContext.index < l; applyContext.index++) {
-    token = applyContext.sourceTokens[applyContext.index];
-    source = findTokenSource(token);
-
-    if (source != lastSource) {
-      singleSourceTokens = [];
-      lastSource = source;
-    }
-
-    singleSourceTokens.push(token);
-    applyContext.processedTokens.push(token);
-
-    if (token[0] == Token.COMMENT && MAP_MARKER_PATTERN.test(token[1])) {
-      return fetchAndApplySourceMap(token[1], source, singleSourceTokens, applyContext);
-    }
-  }
-
-  return applyContext.callback(applyContext.processedTokens);
-}
-
-function findTokenSource(token) {
-  var scope;
-  var metadata;
-
-  if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT) {
-    metadata = token[2][0];
-  } else {
-    scope = token[1][0];
-    metadata = scope[2][0];
-  }
-
-  return metadata[2];
-}
-
-function fetchAndApplySourceMap(sourceMapComment, source, singleSourceTokens, applyContext) {
-  return extractInputSourceMapFrom(sourceMapComment, applyContext, function (inputSourceMap) {
-    if (inputSourceMap) {
-      applyContext.inputSourceMapTracker.track(source, inputSourceMap);
-      applySourceMapRecursively(singleSourceTokens, applyContext.inputSourceMapTracker);
-    }
-
-    applyContext.index++;
-    return doApplySourceMaps(applyContext);
-  });
-}
-
-function extractInputSourceMapFrom(sourceMapComment, applyContext, whenSourceMapReady) {
-  var uri = MAP_MARKER_PATTERN.exec(sourceMapComment)[1];
-  var absoluteUri;
-  var sourceMap;
-  var rebasedMap;
-
-  if (isDataUriResource(uri)) {
-    sourceMap = extractInputSourceMapFromDataUri(uri);
-    return whenSourceMapReady(sourceMap);
-  } else if (isRemoteResource(uri)) {
-    return loadInputSourceMapFromRemoteUri(uri, applyContext, function (sourceMap) {
-      var parsedMap;
-
-      if (sourceMap) {
-        parsedMap = JSON.parse(sourceMap);
-        rebasedMap = rebaseRemoteMap(parsedMap, uri);
-        whenSourceMapReady(rebasedMap);
-      } else {
-        whenSourceMapReady(null);
-      }
-    });
-  } else {
-    // at this point `uri` is already rebased, see lib/reader/rebase.js#rebaseSourceMapComment
-    // it is rebased to be consistent with rebasing other URIs
-    // however here we need to resolve it back to read it from disk
-    absoluteUri = path.resolve(applyContext.rebaseTo, uri);
-    sourceMap = loadInputSourceMapFromLocalUri(absoluteUri, applyContext);
-
-    if (sourceMap) {
-      rebasedMap = rebaseLocalMap(sourceMap, absoluteUri, applyContext.rebaseTo);
-      return whenSourceMapReady(rebasedMap);
-    } else {
-      return whenSourceMapReady(null);
-    }
-  }
-}
-
-function extractInputSourceMapFromDataUri(uri) {
-  var dataUriMatch = matchDataUri(uri);
-  var charset = dataUriMatch[2] ? dataUriMatch[2].split(/[=;]/)[2] : 'us-ascii';
-  var encoding = dataUriMatch[3] ? dataUriMatch[3].split(';')[1] : 'utf8';
-  var data = encoding == 'utf8' ? global.unescape(dataUriMatch[4]) : dataUriMatch[4];
-
-  var buffer = new Buffer(data, encoding);
-  buffer.charset = charset;
-
-  return JSON.parse(buffer.toString());
-}
-
-function loadInputSourceMapFromRemoteUri(uri, applyContext, whenLoaded) {
-  var isAllowed = isAllowedResource(uri, true, applyContext.inline);
-  var isRuntimeResource = !hasProtocol(uri);
-
-  if (applyContext.localOnly) {
-    applyContext.warnings.push('Cannot fetch remote resource from "' + uri + '" as no callback given.');
-    return whenLoaded(null);
-  } else if (isRuntimeResource) {
-    applyContext.warnings.push('Cannot fetch "' + uri + '" as no protocol given.');
-    return whenLoaded(null);
-  } else if (!isAllowed) {
-    applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.');
-    return whenLoaded(null);
-  }
-
-  loadRemoteResource(uri, applyContext.inlineRequest, applyContext.inlineTimeout, function (error, body) {
-    if (error) {
-      applyContext.warnings.push('Missing source map at "' + uri + '" - ' + error);
-      return whenLoaded(null);
-    }
-
-    whenLoaded(body);
-  });
-}
-
-function loadInputSourceMapFromLocalUri(uri, applyContext) {
-  var isAllowed = isAllowedResource(uri, false, applyContext.inline);
-  var sourceMap;
-
-  if (!fs.existsSync(uri) || !fs.statSync(uri).isFile()) {
-    applyContext.warnings.push('Ignoring local source map at "' + uri + '" as resource is missing.');
-    return null;
-  } else if (!isAllowed) {
-    applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.');
-    return null;
-  }
-
-  sourceMap = fs.readFileSync(uri, 'utf-8');
-  return JSON.parse(sourceMap);
-}
-
-function applySourceMapRecursively(tokens, inputSourceMapTracker) {
-  var token;
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-
-    switch (token[0]) {
-      case Token.AT_RULE:
-        applySourceMapTo(token, inputSourceMapTracker);
-        break;
-      case Token.AT_RULE_BLOCK:
-        applySourceMapRecursively(token[1], inputSourceMapTracker);
-        applySourceMapRecursively(token[2], inputSourceMapTracker);
-        break;
-      case Token.AT_RULE_BLOCK_SCOPE:
-        applySourceMapTo(token, inputSourceMapTracker);
-        break;
-      case Token.NESTED_BLOCK:
-        applySourceMapRecursively(token[1], inputSourceMapTracker);
-        applySourceMapRecursively(token[2], inputSourceMapTracker);
-        break;
-      case Token.NESTED_BLOCK_SCOPE:
-        applySourceMapTo(token, inputSourceMapTracker);
-        break;
-      case Token.COMMENT:
-        applySourceMapTo(token, inputSourceMapTracker);
-        break;
-      case Token.PROPERTY:
-        applySourceMapRecursively(token, inputSourceMapTracker);
-        break;
-      case Token.PROPERTY_BLOCK:
-        applySourceMapRecursively(token[1], inputSourceMapTracker);
-        break;
-      case Token.PROPERTY_NAME:
-        applySourceMapTo(token, inputSourceMapTracker);
-        break;
-      case Token.PROPERTY_VALUE:
-        applySourceMapTo(token, inputSourceMapTracker);
-        break;
-      case Token.RULE:
-        applySourceMapRecursively(token[1], inputSourceMapTracker);
-        applySourceMapRecursively(token[2], inputSourceMapTracker);
-        break;
-      case Token.RULE_SCOPE:
-        applySourceMapTo(token, inputSourceMapTracker);
-    }
-  }
-
-  return tokens;
-}
-
-function applySourceMapTo(token, inputSourceMapTracker) {
-  var value = token[1];
-  var metadata = token[2];
-  var newMetadata = [];
-  var i, l;
-
-  for (i = 0, l = metadata.length; i < l; i++) {
-    newMetadata.push(inputSourceMapTracker.originalPositionFor(metadata[i], value.length));
-  }
-
-  token[2] = newMetadata;
-}
-
-module.exports = applySourceMaps;
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
-},{"../tokenizer/token":82,"../utils/has-protocol":86,"../utils/is-data-uri-resource":87,"../utils/is-remote-resource":91,"./is-allowed-resource":70,"./load-remote-resource":72,"./match-data-uri":73,"./rebase-local-map":76,"./rebase-remote-map":77,"buffer":5,"fs":3,"path":109}],68:[function(require,module,exports){
-var split = require('../utils/split');
-
-var BRACE_PREFIX = /^\(/;
-var BRACE_SUFFIX = /\)$/;
-var IMPORT_PREFIX_PATTERN = /^@import/i;
-var QUOTE_PREFIX_PATTERN = /['"]\s*/;
-var QUOTE_SUFFIX_PATTERN = /\s*['"]/;
-var URL_PREFIX_PATTERN = /^url\(\s*/i;
-var URL_SUFFIX_PATTERN = /\s*\)/i;
-
-function extractImportUrlAndMedia(atRuleValue) {
-  var uri;
-  var mediaQuery;
-  var stripped;
-  var parts;
-
-  stripped = atRuleValue
-    .replace(IMPORT_PREFIX_PATTERN, '')
-    .trim()
-    .replace(URL_PREFIX_PATTERN, '(')
-    .replace(URL_SUFFIX_PATTERN, ')')
-    .replace(QUOTE_PREFIX_PATTERN, '')
-    .replace(QUOTE_SUFFIX_PATTERN, '');
-
-  parts = split(stripped, ' ');
-
-  uri = parts[0]
-    .replace(BRACE_PREFIX, '')
-    .replace(BRACE_SUFFIX, '');
-  mediaQuery = parts.slice(1).join(' ');
-
-  return [uri, mediaQuery];
-}
-
-module.exports = extractImportUrlAndMedia;
-
-},{"../utils/split":94}],69:[function(require,module,exports){
-var SourceMapConsumer = require('source-map').SourceMapConsumer;
-
-function inputSourceMapTracker() {
-  var maps = {};
-
-  return {
-    all: all.bind(null, maps),
-    isTracking: isTracking.bind(null, maps),
-    originalPositionFor: originalPositionFor.bind(null, maps),
-    track: track.bind(null, maps)
-  };
-}
-
-function all(maps) {
-  return maps;
-}
-
-function isTracking(maps, source) {
-  return source in maps;
-}
-
-function originalPositionFor(maps, metadata, range, selectorFallbacks) {
-  var line = metadata[0];
-  var column = metadata[1];
-  var source = metadata[2];
-  var position = {
-    line: line,
-    column: column + range
-  };
-  var originalPosition;
-
-  while (!originalPosition && position.column > column) {
-    position.column--;
-    originalPosition = maps[source].originalPositionFor(position);
-  }
-
-  if (originalPosition.line === null && line > 1 && selectorFallbacks > 0) {
-    return originalPositionFor(maps, [line - 1, column, source], range, selectorFallbacks - 1);
-  }
-
-  return originalPosition.line !== null ?
-    toMetadata(originalPosition) :
-    metadata;
-}
-
-function toMetadata(asHash) {
-  return [asHash.line, asHash.column, asHash.source];
-}
-
-function track(maps, source, data) {
-  maps[source] = new SourceMapConsumer(data);
-}
-
-module.exports = inputSourceMapTracker;
-
-},{"source-map":152}],70:[function(require,module,exports){
-var path = require('path');
-var url = require('url');
-
-var isRemoteResource = require('../utils/is-remote-resource');
-var hasProtocol = require('../utils/has-protocol');
-
-var HTTP_PROTOCOL = 'http:';
-
-function isAllowedResource(uri, isRemote, rules) {
-  var match;
-  var absoluteUri;
-  var allowed = isRemote ? false : true;
-  var rule;
-  var isNegated;
-  var normalizedRule;
-  var i;
-
-  if (rules.length === 0) {
-    return false;
-  }
-
-  if (isRemote && !hasProtocol(uri)) {
-    uri = HTTP_PROTOCOL + uri;
-  }
-
-  match = isRemote ?
-    url.parse(uri).host :
-    uri;
-
-  absoluteUri = isRemote ?
-    uri :
-    path.resolve(uri);
-
-  for (i = 0; i < rules.length; i++) {
-    rule = rules[i];
-    isNegated = rule[0] == '!';
-    normalizedRule = rule.substring(1);
-
-    if (isNegated && isRemote && isRemoteRule(normalizedRule)) {
-      allowed = allowed && !isAllowedResource(uri, true, [normalizedRule]);
-    } else if (isNegated && !isRemote && !isRemoteRule(normalizedRule)) {
-      allowed = allowed && !isAllowedResource(uri, false, [normalizedRule]);
-    } else if (isNegated) {
-      allowed = allowed && true;
-    } else if (rule == 'all') {
-      allowed = true;
-    } else if (isRemote && rule == 'local') {
-      allowed = allowed || false;
-    } else if (isRemote && rule == 'remote') {
-      allowed = true;
-    } else if (!isRemote && rule == 'remote') {
-      allowed = false;
-    } else if (!isRemote && rule == 'local') {
-      allowed = true;
-    } else if (rule === match) {
-      allowed = true;
-    } else if (rule === uri) {
-      allowed = true;
-    } else if (isRemote && absoluteUri.indexOf(rule) === 0) {
-      allowed = true;
-    } else if (!isRemote && absoluteUri.indexOf(path.resolve(rule)) === 0) {
-      allowed = true;
-    } else if (isRemote != isRemoteRule(normalizedRule)) {
-      allowed = allowed && true;
-    } else {
-      allowed = false;
-    }
-  }
-
-  return allowed;
-}
-
-function isRemoteRule(rule) {
-  return isRemoteResource(rule) || url.parse(HTTP_PROTOCOL + '//' + rule).host == rule;
-}
-
-module.exports = isAllowedResource;
-
-},{"../utils/has-protocol":86,"../utils/is-remote-resource":91,"path":109,"url":159}],71:[function(require,module,exports){
-var fs = require('fs');
-var path = require('path');
-
-var isAllowedResource = require('./is-allowed-resource');
-var loadRemoteResource = require('./load-remote-resource');
-
-var hasProtocol = require('../utils/has-protocol');
-var isRemoteResource = require('../utils/is-remote-resource');
-
-function loadOriginalSources(context, callback) {
-  var loadContext = {
-    callback: callback,
-    index: 0,
-    inline: context.options.inline,
-    inlineRequest: context.options.inlineRequest,
-    inlineTimeout: context.options.inlineTimeout,
-    localOnly: context.localOnly,
-    rebaseTo: context.options.rebaseTo,
-    sourcesContent: context.sourcesContent,
-    uriToSource: uriToSourceMapping(context.inputSourceMapTracker.all()),
-    warnings: context.warnings
-  };
-
-  return context.options.sourceMap && context.options.sourceMapInlineSources ?
-    doLoadOriginalSources(loadContext) :
-    callback();
-}
-
-function uriToSourceMapping(allSourceMapConsumers) {
-  var mapping = {};
-  var consumer;
-  var uri;
-  var source;
-  var i, l;
-
-  for (source in allSourceMapConsumers) {
-    consumer = allSourceMapConsumers[source];
-
-    for (i = 0, l = consumer.sources.length; i < l; i++) {
-      uri = consumer.sources[i];
-      source = consumer.sourceContentFor(uri, true);
-
-      mapping[uri] = source;
-    }
-  }
-
-  return mapping;
-}
-
-function doLoadOriginalSources(loadContext) {
-  var uris = Object.keys(loadContext.uriToSource);
-  var uri;
-  var source;
-  var total;
-
-  for (total = uris.length; loadContext.index < total; loadContext.index++) {
-    uri = uris[loadContext.index];
-    source = loadContext.uriToSource[uri];
-
-    if (source) {
-      loadContext.sourcesContent[uri] = source;
-    } else {
-      return loadOriginalSource(uri, loadContext);
-    }
-  }
-
-  return loadContext.callback();
-}
-
-function loadOriginalSource(uri, loadContext) {
-  var content;
-
-  if (isRemoteResource(uri)) {
-    return loadOriginalSourceFromRemoteUri(uri, loadContext, function (content) {
-      loadContext.index++;
-      loadContext.sourcesContent[uri] = content;
-      return doLoadOriginalSources(loadContext);
-    });
-  } else {
-    content = loadOriginalSourceFromLocalUri(uri, loadContext);
-    loadContext.index++;
-    loadContext.sourcesContent[uri] = content;
-    return doLoadOriginalSources(loadContext);
-  }
-}
-
-function loadOriginalSourceFromRemoteUri(uri, loadContext, whenLoaded) {
-  var isAllowed = isAllowedResource(uri, true, loadContext.inline);
-  var isRuntimeResource = !hasProtocol(uri);
-
-  if (loadContext.localOnly) {
-    loadContext.warnings.push('Cannot fetch remote resource from "' + uri + '" as no callback given.');
-    return whenLoaded(null);
-  } else if (isRuntimeResource) {
-    loadContext.warnings.push('Cannot fetch "' + uri + '" as no protocol given.');
-    return whenLoaded(null);
-  } else if (!isAllowed) {
-    loadContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.');
-    return whenLoaded(null);
-  }
-
-  loadRemoteResource(uri, loadContext.inlineRequest, loadContext.inlineTimeout, function (error, content) {
-    if (error) {
-      loadContext.warnings.push('Missing original source at "' + uri + '" - ' + error);
-    }
-
-    whenLoaded(content);
-  });
-}
-
-function loadOriginalSourceFromLocalUri(relativeUri, loadContext) {
-  var isAllowed = isAllowedResource(relativeUri, false, loadContext.inline);
-  var absoluteUri = path.resolve(loadContext.rebaseTo, relativeUri);
-
-  if (!fs.existsSync(absoluteUri) || !fs.statSync(absoluteUri).isFile()) {
-    loadContext.warnings.push('Ignoring local source map at "' + absoluteUri + '" as resource is missing.');
-    return null;
-  } else if (!isAllowed) {
-    loadContext.warnings.push('Cannot fetch "' + absoluteUri + '" as resource is not allowed.');
-    return null;
-  }
-
-  return fs.readFileSync(absoluteUri, 'utf8');
-}
-
-module.exports = loadOriginalSources;
-
-},{"../utils/has-protocol":86,"../utils/is-remote-resource":91,"./is-allowed-resource":70,"./load-remote-resource":72,"fs":3,"path":109}],72:[function(require,module,exports){
-var http = require('http');
-var https = require('https');
-var url = require('url');
-
-var isHttpResource = require('../utils/is-http-resource');
-var isHttpsResource = require('../utils/is-https-resource');
-var override = require('../utils/override');
-
-var HTTP_PROTOCOL = 'http:';
-
-function loadRemoteResource(uri, inlineRequest, inlineTimeout, callback) {
-  var proxyProtocol = inlineRequest.protocol || inlineRequest.hostname;
-  var errorHandled = false;
-  var requestOptions;
-  var fetch;
-
-  requestOptions = override(
-    url.parse(uri),
-    inlineRequest || {}
-  );
-
-  if (inlineRequest.hostname !== undefined) {
-    // overwrite as we always expect a http proxy currently
-    requestOptions.protocol = inlineRequest.protocol || HTTP_PROTOCOL;
-    requestOptions.path = requestOptions.href;
-  }
-
-  fetch = (proxyProtocol && !isHttpsResource(proxyProtocol)) || isHttpResource(uri) ?
-    http.get :
-    https.get;
-
-  fetch(requestOptions, function (res) {
-    var chunks = [];
-    var movedUri;
-
-    if (errorHandled) {
-      return;
-    }
-
-    if (res.statusCode < 200 || res.statusCode > 399) {
-      return callback(res.statusCode, null);
-    } else if (res.statusCode > 299) {
-      movedUri = url.resolve(uri, res.headers.location);
-      return loadRemoteResource(movedUri, inlineRequest, inlineTimeout, callback);
-    }
-
-    res.on('data', function (chunk) {
-      chunks.push(chunk.toString());
-    });
-    res.on('end', function () {
-      var body = chunks.join('');
-      callback(null, body);
-    });
-  })
-  .on('error', function (res) {
-    if (errorHandled) {
-      return;
-    }
-
-    errorHandled = true;
-    callback(res.message, null);
-  })
-  .on('timeout', function () {
-    if (errorHandled) {
-      return;
-    }
-
-    errorHandled = true;
-    callback('timeout', null);
-  })
-  .setTimeout(inlineTimeout);
-}
-
-module.exports = loadRemoteResource;
-
-},{"../utils/is-http-resource":88,"../utils/is-https-resource":89,"../utils/override":93,"http":153,"https":102,"url":159}],73:[function(require,module,exports){
-var DATA_URI_PATTERN = /^data:(\S*?)?(;charset=[^;]+)?(;[^,]+?)?,(.+)/;
-
-function matchDataUri(uri) {
-  return DATA_URI_PATTERN.exec(uri);
-}
-
-module.exports = matchDataUri;
-
-},{}],74:[function(require,module,exports){
-var UNIX_SEPARATOR = '/';
-var WINDOWS_SEPARATOR_PATTERN = /\\/g;
-
-function normalizePath(path) {
-  return path.replace(WINDOWS_SEPARATOR_PATTERN, UNIX_SEPARATOR);
-}
-
-module.exports = normalizePath;
-
-},{}],75:[function(require,module,exports){
-(function (Buffer,process){
-var fs = require('fs');
-var path = require('path');
-
-var applySourceMaps = require('./apply-source-maps');
-var extractImportUrlAndMedia = require('./extract-import-url-and-media');
-var isAllowedResource = require('./is-allowed-resource');
-var loadOriginalSources = require('./load-original-sources');
-var loadRemoteResource = require('./load-remote-resource');
-var normalizePath = require('./normalize-path');
-var rebase = require('./rebase');
-var rebaseLocalMap = require('./rebase-local-map');
-var rebaseRemoteMap = require('./rebase-remote-map');
-var restoreImport = require('./restore-import');
-
-var tokenize = require('../tokenizer/tokenize');
-var Token = require('../tokenizer/token');
-var Marker = require('../tokenizer/marker');
-var hasProtocol = require('../utils/has-protocol');
-var isImport = require('../utils/is-import');
-var isRemoteResource = require('../utils/is-remote-resource');
-
-var UNKNOWN_URI = 'uri:unknown';
-
-function readSources(input, context, callback) {
-  return doReadSources(input, context, function (tokens) {
-    return applySourceMaps(tokens, context, function () {
-      return loadOriginalSources(context, function () { return callback(tokens); });
-    });
-  });
-}
-
-function doReadSources(input, context, callback) {
-  if (typeof input == 'string') {
-    return fromString(input, context, callback);
-  } else if (Buffer.isBuffer(input)) {
-    return fromString(input.toString(), context, callback);
-  } else if (Array.isArray(input)) {
-    return fromArray(input, context, callback);
-  } else if (typeof input == 'object') {
-    return fromHash(input, context, callback);
-  }
-}
-
-function fromString(input, context, callback) {
-  context.source = undefined;
-  context.sourcesContent[undefined] = input;
-  context.stats.originalSize += input.length;
-
-  return fromStyles(input, context, { inline: context.options.inline }, callback);
-}
-
-function fromArray(input, context, callback) {
-  var inputAsImports = input.reduce(function (accumulator, uri) {
-    var normalizedUri = normalizeUri(uri);
-
-    accumulator.push(restoreAsImport(normalizedUri));
-    return accumulator;
-  }, []);
-
-  return fromStyles(inputAsImports.join(''), context, { inline: ['all'] }, callback);
-}
-
-function fromHash(input, context, callback) {
-  var uri;
-  var normalizedUri;
-  var source;
-  var inputAsImports = [];
-
-  for (uri in input) {
-    source = input[uri];
-    normalizedUri = normalizeUri(uri);
-
-    inputAsImports.push(restoreAsImport(normalizedUri));
-
-    context.sourcesContent[normalizedUri] = source.styles;
-
-    if (source.sourceMap) {
-      trackSourceMap(source.sourceMap, normalizedUri, context);
-    }
-  }
-
-  return fromStyles(inputAsImports.join(''), context, { inline: ['all'] }, callback);
-}
-
-function normalizeUri(uri) {
-  var currentPath = path.resolve('');
-  var absoluteUri;
-  var relativeToCurrentPath;
-  var normalizedUri;
-
-  if (isRemoteResource(uri)) {
-    return uri;
-  }
-
-  absoluteUri = path.isAbsolute(uri) ?
-    uri :
-    path.resolve(uri);
-  relativeToCurrentPath = path.relative(currentPath, absoluteUri);
-  normalizedUri = normalizePath(relativeToCurrentPath);
-
-  return normalizedUri;
-}
-
-function trackSourceMap(sourceMap, uri, context) {
-  var parsedMap = typeof sourceMap == 'string' ?
-      JSON.parse(sourceMap) :
-      sourceMap;
-  var rebasedMap = isRemoteResource(uri) ?
-    rebaseRemoteMap(parsedMap, uri) :
-    rebaseLocalMap(parsedMap, uri || UNKNOWN_URI, context.options.rebaseTo);
-
-  context.inputSourceMapTracker.track(uri, rebasedMap);
-}
-
-function restoreAsImport(uri) {
-  return restoreImport('url(' + uri + ')', '') + Marker.SEMICOLON;
-}
-
-function fromStyles(styles, context, parentInlinerContext, callback) {
-  var tokens;
-  var rebaseConfig = {};
-
-  if (!context.source) {
-    rebaseConfig.fromBase = path.resolve('');
-    rebaseConfig.toBase = context.options.rebaseTo;
-  } else if (isRemoteResource(context.source)) {
-    rebaseConfig.fromBase = context.source;
-    rebaseConfig.toBase = context.source;
-  } else if (path.isAbsolute(context.source)) {
-    rebaseConfig.fromBase = path.dirname(context.source);
-    rebaseConfig.toBase = context.options.rebaseTo;
-  } else {
-    rebaseConfig.fromBase = path.dirname(path.resolve(context.source));
-    rebaseConfig.toBase = context.options.rebaseTo;
-  }
-
-  tokens = tokenize(styles, context);
-  tokens = rebase(tokens, context.options.rebase, context.validator, rebaseConfig);
-
-  return allowsAnyImports(parentInlinerContext.inline) ?
-    inline(tokens, context, parentInlinerContext, callback) :
-    callback(tokens);
-}
-
-function allowsAnyImports(inline) {
-  return !(inline.length == 1 && inline[0] == 'none');
-}
-
-function inline(tokens, externalContext, parentInlinerContext, callback) {
-  var inlinerContext = {
-    afterContent: false,
-    callback: callback,
-    errors: externalContext.errors,
-    externalContext: externalContext,
-    inlinedStylesheets: parentInlinerContext.inlinedStylesheets || externalContext.inlinedStylesheets,
-    inline: parentInlinerContext.inline,
-    inlineRequest: externalContext.options.inlineRequest,
-    inlineTimeout: externalContext.options.inlineTimeout,
-    isRemote: parentInlinerContext.isRemote || false,
-    localOnly: externalContext.localOnly,
-    outputTokens: [],
-    rebaseTo: externalContext.options.rebaseTo,
-    sourceTokens: tokens,
-    warnings: externalContext.warnings
-  };
-
-  return doInlineImports(inlinerContext);
-}
-
-function doInlineImports(inlinerContext) {
-  var token;
-  var i, l;
-
-  for (i = 0, l = inlinerContext.sourceTokens.length; i < l; i++) {
-    token = inlinerContext.sourceTokens[i];
-
-    if (token[0] == Token.AT_RULE && isImport(token[1])) {
-      inlinerContext.sourceTokens.splice(0, i);
-      return inlineStylesheet(token, inlinerContext);
-    } else if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT) {
-      inlinerContext.outputTokens.push(token);
-    } else {
-      inlinerContext.outputTokens.push(token);
-      inlinerContext.afterContent = true;
-    }
-  }
-
-  inlinerContext.sourceTokens = [];
-  return inlinerContext.callback(inlinerContext.outputTokens);
-}
-
-function inlineStylesheet(token, inlinerContext) {
-  var uriAndMediaQuery = extractImportUrlAndMedia(token[1]);
-  var uri = uriAndMediaQuery[0];
-  var mediaQuery = uriAndMediaQuery[1];
-  var metadata = token[2];
-
-  return isRemoteResource(uri) ?
-    inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext) :
-    inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext);
-}
-
-function inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext) {
-  var isAllowed = isAllowedResource(uri, true, inlinerContext.inline);
-  var originalUri = uri;
-  var isLoaded = uri in inlinerContext.externalContext.sourcesContent;
-  var isRuntimeResource = !hasProtocol(uri);
-
-  if (inlinerContext.inlinedStylesheets.indexOf(uri) > -1) {
-    inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as it has already been imported.');
-    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-    return doInlineImports(inlinerContext);
-  } else if (inlinerContext.localOnly && inlinerContext.afterContent) {
-    inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as no callback given and after other content.');
-    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-    return doInlineImports(inlinerContext);
-  } else if (isRuntimeResource) {
-    inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as no protocol given.');
-    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
-    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-    return doInlineImports(inlinerContext);
-  } else if (inlinerContext.localOnly && !isLoaded) {
-    inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as no callback given.');
-    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
-    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-    return doInlineImports(inlinerContext);
-  } else if (!isAllowed && inlinerContext.afterContent) {
-    inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as resource is not allowed and after other content.');
-    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-    return doInlineImports(inlinerContext);
-  } else if (!isAllowed) {
-    inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as resource is not allowed.');
-    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
-    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-    return doInlineImports(inlinerContext);
-  }
-
-  inlinerContext.inlinedStylesheets.push(uri);
-
-  function whenLoaded(error, importedStyles) {
-    if (error) {
-      inlinerContext.errors.push('Broken @import declaration of "' + uri + '" - ' + error);
-
-      return process.nextTick(function () {
-        inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
-        inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-        doInlineImports(inlinerContext);
-      });
-    }
-
-    inlinerContext.inline = inlinerContext.externalContext.options.inline;
-    inlinerContext.isRemote = true;
-
-    inlinerContext.externalContext.source = originalUri;
-    inlinerContext.externalContext.sourcesContent[uri] = importedStyles;
-    inlinerContext.externalContext.stats.originalSize += importedStyles.length;
-
-    return fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function (importedTokens) {
-      importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata);
-
-      inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens);
-      inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-
-      return doInlineImports(inlinerContext);
-    });
-  }
-
-  return isLoaded ?
-    whenLoaded(null, inlinerContext.externalContext.sourcesContent[uri]) :
-    loadRemoteResource(uri, inlinerContext.inlineRequest, inlinerContext.inlineTimeout, whenLoaded);
-}
-
-function inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext) {
-  var currentPath = path.resolve('');
-  var absoluteUri = path.isAbsolute(uri) ?
-    path.resolve(currentPath, uri[0] == '/' ? uri.substring(1) : uri) :
-    path.resolve(inlinerContext.rebaseTo, uri);
-  var relativeToCurrentPath = path.relative(currentPath, absoluteUri);
-  var importedStyles;
-  var importedTokens;
-  var isAllowed = isAllowedResource(uri, false, inlinerContext.inline);
-  var normalizedPath = normalizePath(relativeToCurrentPath);
-  var isLoaded = normalizedPath in inlinerContext.externalContext.sourcesContent;
-
-  if (inlinerContext.inlinedStylesheets.indexOf(absoluteUri) > -1) {
-    inlinerContext.warnings.push('Ignoring local @import of "' + uri + '" as it has already been imported.');
-  } else if (!isLoaded && (!fs.existsSync(absoluteUri) || !fs.statSync(absoluteUri).isFile())) {
-    inlinerContext.errors.push('Ignoring local @import of "' + uri + '" as resource is missing.');
-  } else if (!isAllowed && inlinerContext.afterContent) {
-    inlinerContext.warnings.push('Ignoring local @import of "' + uri + '" as resource is not allowed and after other content.');
-  } else if (inlinerContext.afterContent) {
-    inlinerContext.warnings.push('Ignoring local @import of "' + uri + '" as after other content.');
-  } else if (!isAllowed) {
-    inlinerContext.warnings.push('Skipping local @import of "' + uri + '" as resource is not allowed.');
-    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
-  } else {
-    importedStyles = isLoaded ?
-      inlinerContext.externalContext.sourcesContent[normalizedPath] :
-      fs.readFileSync(absoluteUri, 'utf-8');
-
-    inlinerContext.inlinedStylesheets.push(absoluteUri);
-    inlinerContext.inline = inlinerContext.externalContext.options.inline;
-
-    inlinerContext.externalContext.source = normalizedPath;
-    inlinerContext.externalContext.sourcesContent[normalizedPath] = importedStyles;
-    inlinerContext.externalContext.stats.originalSize += importedStyles.length;
-
-    importedTokens = fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function (tokens) { return tokens; });
-    importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata);
-
-    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens);
-  }
-
-  inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-
-  return doInlineImports(inlinerContext);
-}
-
-function wrapInMedia(tokens, mediaQuery, metadata) {
-  if (mediaQuery) {
-    return [[Token.NESTED_BLOCK, [[Token.NESTED_BLOCK_SCOPE, '@media ' + mediaQuery, metadata]], tokens]];
-  } else {
-    return tokens;
-  }
-}
-
-module.exports = readSources;
-
-}).call(this,{"isBuffer":require("../../../is-buffer/index.js")},require('_process'))
-},{"../../../is-buffer/index.js":105,"../tokenizer/marker":81,"../tokenizer/token":82,"../tokenizer/tokenize":83,"../utils/has-protocol":86,"../utils/is-import":90,"../utils/is-remote-resource":91,"./apply-source-maps":67,"./extract-import-url-and-media":68,"./is-allowed-resource":70,"./load-original-sources":71,"./load-remote-resource":72,"./normalize-path":74,"./rebase":78,"./rebase-local-map":76,"./rebase-remote-map":77,"./restore-import":79,"_process":111,"fs":3,"path":109}],76:[function(require,module,exports){
-var path = require('path');
-
-function rebaseLocalMap(sourceMap, sourceUri, rebaseTo) {
-  var currentPath = path.resolve('');
-  var absoluteUri = path.resolve(currentPath, sourceUri);
-  var absoluteUriDirectory = path.dirname(absoluteUri);
-
-  sourceMap.sources = sourceMap.sources.map(function(source) {
-    return path.relative(rebaseTo, path.resolve(absoluteUriDirectory, source));
-  });
-
-  return sourceMap;
-}
-
-module.exports = rebaseLocalMap;
-
-},{"path":109}],77:[function(require,module,exports){
-var path = require('path');
-var url = require('url');
-
-function rebaseRemoteMap(sourceMap, sourceUri) {
-  var sourceDirectory = path.dirname(sourceUri);
-
-  sourceMap.sources = sourceMap.sources.map(function(source) {
-    return url.resolve(sourceDirectory, source);
-  });
-
-  return sourceMap;
-}
-
-module.exports = rebaseRemoteMap;
-
-},{"path":109,"url":159}],78:[function(require,module,exports){
-var extractImportUrlAndMedia = require('./extract-import-url-and-media');
-var restoreImport = require('./restore-import');
-var rewriteUrl = require('./rewrite-url');
-
-var Token = require('../tokenizer/token');
-var isImport = require('../utils/is-import');
-
-var SOURCE_MAP_COMMENT_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/;
-
-function rebase(tokens, rebaseAll, validator, rebaseConfig) {
-  return rebaseAll ?
-    rebaseEverything(tokens, validator, rebaseConfig) :
-    rebaseAtRules(tokens, validator, rebaseConfig);
-}
-
-function rebaseEverything(tokens, validator, rebaseConfig) {
-  var token;
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-
-    switch (token[0]) {
-      case Token.AT_RULE:
-        rebaseAtRule(token, validator, rebaseConfig);
-        break;
-      case Token.AT_RULE_BLOCK:
-        rebaseProperties(token[2], validator, rebaseConfig);
-        break;
-      case Token.COMMENT:
-        rebaseSourceMapComment(token, rebaseConfig);
-        break;
-      case Token.NESTED_BLOCK:
-        rebaseEverything(token[2], validator, rebaseConfig);
-        break;
-      case Token.RULE:
-        rebaseProperties(token[2], validator, rebaseConfig);
-        break;
-    }
-  }
-
-  return tokens;
-}
-
-function rebaseAtRules(tokens, validator, rebaseConfig) {
-  var token;
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-
-    switch (token[0]) {
-      case Token.AT_RULE:
-        rebaseAtRule(token, validator, rebaseConfig);
-        break;
-    }
-  }
-
-  return tokens;
-}
-
-function rebaseAtRule(token, validator, rebaseConfig) {
-  if (!isImport(token[1])) {
-    return;
-  }
-
-  var uriAndMediaQuery = extractImportUrlAndMedia(token[1]);
-  var newUrl = rewriteUrl(uriAndMediaQuery[0], rebaseConfig);
-  var mediaQuery = uriAndMediaQuery[1];
-
-  token[1] = restoreImport(newUrl, mediaQuery);
-}
-
-function rebaseSourceMapComment(token, rebaseConfig) {
-  var matches = SOURCE_MAP_COMMENT_PATTERN.exec(token[1]);
-
-  if (matches && matches[1].indexOf('data:') === -1) {
-    token[1] = token[1].replace(matches[1], rewriteUrl(matches[1], rebaseConfig, true));
-  }
-}
-
-function rebaseProperties(properties, validator, rebaseConfig) {
-  var property;
-  var value;
-  var i, l;
-  var j, m;
-
-  for (i = 0, l = properties.length; i < l; i++) {
-    property = properties[i];
-
-    for (j = 2 /* 0 is Token.PROPERTY, 1 is name */, m = property.length; j < m; j++) {
-      value = property[j][1];
-
-      if (validator.isValidUrl(value)) {
-        property[j][1] = rewriteUrl(value, rebaseConfig);
-      }
-    }
-  }
-}
-
-module.exports = rebase;
-
-},{"../tokenizer/token":82,"../utils/is-import":90,"./extract-import-url-and-media":68,"./restore-import":79,"./rewrite-url":80}],79:[function(require,module,exports){
-function restoreImport(uri, mediaQuery) {
-  return ('@import ' + uri + ' ' + mediaQuery).trim();
-}
-
-module.exports = restoreImport;
-
-},{}],80:[function(require,module,exports){
-(function (process){
-var path = require('path');
-var url = require('url');
-
-var DOUBLE_QUOTE = '"';
-var SINGLE_QUOTE = '\'';
-var URL_PREFIX = 'url(';
-var URL_SUFFIX = ')';
-
-var QUOTE_PREFIX_PATTERN = /^["']/;
-var QUOTE_SUFFIX_PATTERN = /["']$/;
-var ROUND_BRACKETS_PATTERN = /[\(\)]/;
-var URL_PREFIX_PATTERN = /^url\(/i;
-var URL_SUFFIX_PATTERN = /\)$/;
-var WHITESPACE_PATTERN = /\s/;
-
-var isWindows = process.platform == 'win32';
-
-function rebase(uri, rebaseConfig) {
-  if (!rebaseConfig) {
-    return uri;
-  }
-
-  if (isAbsolute(uri) && !isRemote(rebaseConfig.toBase)) {
-    return uri;
-  }
-
-  if (isRemote(uri) || isSVGMarker(uri) || isInternal(uri)) {
-    return uri;
-  }
-
-  if (isData(uri)) {
-    return '\'' + uri + '\'';
-  }
-
-  if (isRemote(rebaseConfig.toBase)) {
-    return url.resolve(rebaseConfig.toBase, uri);
-  }
-
-  return rebaseConfig.absolute ?
-    normalize(absolute(uri, rebaseConfig)) :
-    normalize(relative(uri, rebaseConfig));
-}
-
-function isAbsolute(uri) {
-  return path.isAbsolute(uri);
-}
-
-function isSVGMarker(uri) {
-  return uri[0] == '#';
-}
-
-function isInternal(uri) {
-  return /^\w+:\w+/.test(uri);
-}
-
-function isRemote(uri) {
-  return /^[^:]+?:\/\//.test(uri) || uri.indexOf('//') === 0;
-}
-
-function isData(uri) {
-  return uri.indexOf('data:') === 0;
-}
-
-function absolute(uri, rebaseConfig) {
-  return path
-    .resolve(path.join(rebaseConfig.fromBase || '', uri))
-    .replace(rebaseConfig.toBase, '');
-}
-
-function relative(uri, rebaseConfig) {
-  return path.relative(rebaseConfig.toBase, path.join(rebaseConfig.fromBase || '', uri));
-}
-
-function normalize(uri) {
-  return isWindows ? uri.replace(/\\/g, '/') : uri;
-}
-
-function quoteFor(unquotedUrl) {
-  if (unquotedUrl.indexOf(SINGLE_QUOTE) > -1) {
-    return DOUBLE_QUOTE;
-  } else if (unquotedUrl.indexOf(DOUBLE_QUOTE) > -1) {
-    return SINGLE_QUOTE;
-  } else if (hasWhitespace(unquotedUrl) || hasRoundBrackets(unquotedUrl)) {
-    return SINGLE_QUOTE;
-  } else {
-    return '';
-  }
-}
-
-function hasWhitespace(url) {
-  return WHITESPACE_PATTERN.test(url);
-}
-
-function hasRoundBrackets(url) {
-  return ROUND_BRACKETS_PATTERN.test(url);
-}
-
-function rewriteUrl(originalUrl, rebaseConfig, pathOnly) {
-  var strippedUrl = originalUrl
-    .replace(URL_PREFIX_PATTERN, '')
-    .replace(URL_SUFFIX_PATTERN, '')
-    .trim();
-
-  var unquotedUrl = strippedUrl
-    .replace(QUOTE_PREFIX_PATTERN, '')
-    .replace(QUOTE_SUFFIX_PATTERN, '')
-    .trim();
-
-  var quote = strippedUrl[0] == SINGLE_QUOTE || strippedUrl[0] == DOUBLE_QUOTE ?
-    strippedUrl[0] :
-    quoteFor(unquotedUrl);
-
-  return pathOnly ?
-    rebase(unquotedUrl, rebaseConfig) :
-    URL_PREFIX + quote + rebase(unquotedUrl, rebaseConfig) + quote + URL_SUFFIX;
-}
-
-module.exports = rewriteUrl;
-
-}).call(this,require('_process'))
-},{"_process":111,"path":109,"url":159}],81:[function(require,module,exports){
-var Marker = {
-  ASTERISK: '*',
-  AT: '@',
-  BACK_SLASH: '\\',
-  CLOSE_CURLY_BRACKET: '}',
-  CLOSE_ROUND_BRACKET: ')',
-  CLOSE_SQUARE_BRACKET: ']',
-  COLON: ':',
-  COMMA: ',',
-  DOUBLE_QUOTE: '"',
-  EXCLAMATION: '!',
-  FORWARD_SLASH: '/',
-  NEW_LINE_NIX: '\n',
-  NEW_LINE_WIN: '\r',
-  OPEN_CURLY_BRACKET: '{',
-  OPEN_ROUND_BRACKET: '(',
-  OPEN_SQUARE_BRACKET: '[',
-  SEMICOLON: ';',
-  SINGLE_QUOTE: '\'',
-  SPACE: ' ',
-  TAB: '\t',
-  UNDERSCORE: '_'
-};
-
-module.exports = Marker;
-
-},{}],82:[function(require,module,exports){
-var Token = {
-  AT_RULE: 'at-rule', // e.g. `@import`, `@charset`
-  AT_RULE_BLOCK: 'at-rule-block', // e.g. `@font-face{...}`
-  AT_RULE_BLOCK_SCOPE: 'at-rule-block-scope', // e.g. `@font-face`
-  COMMENT: 'comment', // e.g. `/* comment */`
-  NESTED_BLOCK: 'nested-block', // e.g. `@media screen{...}`, `@keyframes animation {...}`
-  NESTED_BLOCK_SCOPE: 'nested-block-scope', // e.g. `@media`, `@keyframes`
-  PROPERTY: 'property', // e.g. `color:red`
-  PROPERTY_BLOCK: 'property-block', // e.g. `--var:{color:red}`
-  PROPERTY_NAME: 'property-name', // e.g. `color`
-  PROPERTY_VALUE: 'property-value', // e.g. `red`
-  RULE: 'rule', // e.g `div > a{...}`
-  RULE_SCOPE: 'rule-scope' // e.g `div > a`
-};
-
-module.exports = Token;
-
-},{}],83:[function(require,module,exports){
-var Marker = require('./marker');
-var Token = require('./token');
-
-var formatPosition = require('../utils/format-position');
-
-var Level = {
-  BLOCK: 'block',
-  COMMENT: 'comment',
-  DOUBLE_QUOTE: 'double-quote',
-  RULE: 'rule',
-  SINGLE_QUOTE: 'single-quote'
-};
-
-var AT_RULES = [
-  '@charset',
-  '@import'
-];
-
-var BLOCK_RULES = [
-  '@-moz-document',
-  '@document',
-  '@-moz-keyframes',
-  '@-ms-keyframes',
-  '@-o-keyframes',
-  '@-webkit-keyframes',
-  '@keyframes',
-  '@media',
-  '@supports'
-];
-
-var RULE_WORD_SEPARATOR_PATTERN = /[\s\(]/;
-var TAIL_BROKEN_VALUE_PATTERN = /[\s|\}]*$/;
-
-function tokenize(source, externalContext) {
-  var internalContext = {
-    level: Level.BLOCK,
-    position: {
-      source: externalContext.source || undefined,
-      line: 1,
-      column: 0,
-      index: 0
-    }
-  };
-
-  return intoTokens(source, externalContext, internalContext, false);
-}
-
-function intoTokens(source, externalContext, internalContext, isNested) {
-  var allTokens = [];
-  var newTokens = allTokens;
-  var lastToken;
-  var ruleToken;
-  var ruleTokens = [];
-  var propertyToken;
-  var metadata;
-  var metadatas = [];
-  var level = internalContext.level;
-  var levels = [];
-  var buffer = [];
-  var buffers = [];
-  var serializedBuffer;
-  var roundBracketLevel = 0;
-  var isQuoted;
-  var isSpace;
-  var isNewLineNix;
-  var isNewLineWin;
-  var isCommentStart;
-  var wasCommentStart = false;
-  var isCommentEnd;
-  var wasCommentEnd = false;
-  var isEscaped;
-  var wasEscaped = false;
-  var seekingValue = false;
-  var seekingPropertyBlockClosing = false;
-  var position = internalContext.position;
-
-  for (; position.index < source.length; position.index++) {
-    var character = source[position.index];
-
-    isQuoted = level == Level.SINGLE_QUOTE || level == Level.DOUBLE_QUOTE;
-    isSpace = character == Marker.SPACE || character == Marker.TAB;
-    isNewLineNix = character == Marker.NEW_LINE_NIX;
-    isNewLineWin = character == Marker.NEW_LINE_NIX && source[position.index - 1] == Marker.NEW_LINE_WIN;
-    isCommentStart = !wasCommentEnd && level != Level.COMMENT && !isQuoted && character == Marker.ASTERISK && source[position.index - 1] == Marker.FORWARD_SLASH;
-    isCommentEnd = !wasCommentStart && level == Level.COMMENT && character == Marker.FORWARD_SLASH && source[position.index - 1] == Marker.ASTERISK;
-
-    metadata = buffer.length === 0 ?
-      [position.line, position.column, position.source] :
-      metadata;
-
-    if (isEscaped) {
-      // previous character was a backslash
-      buffer.push(character);
-    } else if (!isCommentEnd && level == Level.COMMENT) {
-      buffer.push(character);
-    } else if (isCommentStart && (level == Level.BLOCK || level == Level.RULE) && buffer.length > 1) {
-      // comment start within block preceded by some content, e.g. div/*<--
-      metadatas.push(metadata);
-      buffer.push(character);
-      buffers.push(buffer.slice(0, buffer.length - 2));
-
-      buffer = buffer.slice(buffer.length - 2);
-      metadata = [position.line, position.column - 1, position.source];
-
-      levels.push(level);
-      level = Level.COMMENT;
-    } else if (isCommentStart) {
-      // comment start, e.g. /*<--
-      levels.push(level);
-      level = Level.COMMENT;
-      buffer.push(character);
-    } else if (isCommentEnd) {
-      // comment end, e.g. /* comment */<--
-      serializedBuffer = buffer.join('').trim() + character;
-      lastToken = [Token.COMMENT, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]];
-      newTokens.push(lastToken);
-
-      level = levels.pop();
-      metadata = metadatas.pop() || null;
-      buffer = buffers.pop() || [];
-    } else if (character == Marker.SINGLE_QUOTE && !isQuoted) {
-      // single quotation start, e.g. a[href^='https<--
-      levels.push(level);
-      level = Level.SINGLE_QUOTE;
-      buffer.push(character);
-    } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) {
-      // single quotation end, e.g. a[href^='https'<--
-      level = levels.pop();
-      buffer.push(character);
-    } else if (character == Marker.DOUBLE_QUOTE && !isQuoted) {
-      // double quotation start, e.g. a[href^="<--
-      levels.push(level);
-      level = Level.DOUBLE_QUOTE;
-      buffer.push(character);
-    } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) {
-      // double quotation end, e.g. a[href^="https"<--
-      level = levels.pop();
-      buffer.push(character);
-    } else if (!isCommentStart && !isCommentEnd && character != Marker.CLOSE_ROUND_BRACKET && character != Marker.OPEN_ROUND_BRACKET && level != Level.COMMENT && !isQuoted && roundBracketLevel > 0) {
-      // character inside any function, e.g. hsla(.<--
-      buffer.push(character);
-    } else if (character == Marker.OPEN_ROUND_BRACKET && !isQuoted && level != Level.COMMENT && !seekingValue) {
-      // round open bracket, e.g. @import url(<--
-      buffer.push(character);
-
-      roundBracketLevel++;
-    } else if (character == Marker.CLOSE_ROUND_BRACKET && !isQuoted && level != Level.COMMENT && !seekingValue) {
-      // round open bracket, e.g. @import url(test.css)<--
-      buffer.push(character);
-
-      roundBracketLevel--;
-    } else if (character == Marker.SEMICOLON && level == Level.BLOCK && buffer[0] == Marker.AT) {
-      // semicolon ending rule at block level, e.g. @import '...';<--
-      serializedBuffer = buffer.join('').trim();
-      allTokens.push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-
-      buffer = [];
-    } else if (character == Marker.COMMA && level == Level.BLOCK && ruleToken) {
-      // comma separator at block level, e.g. a,div,<--
-      serializedBuffer = buffer.join('').trim();
-      ruleToken[1].push([tokenScopeFrom(ruleToken[0]), serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)]]);
-
-      buffer = [];
-    } else if (character == Marker.COMMA && level == Level.BLOCK && tokenTypeFrom(buffer) == Token.AT_RULE) {
-      // comma separator at block level, e.g. @import url(...) screen,<--
-      // keep iterating as end semicolon will create the token
-      buffer.push(character);
-    } else if (character == Marker.COMMA && level == Level.BLOCK) {
-      // comma separator at block level, e.g. a,<--
-      ruleToken = [tokenTypeFrom(buffer), [], []];
-      serializedBuffer = buffer.join('').trim();
-      ruleToken[1].push([tokenScopeFrom(ruleToken[0]), serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext, 0)]]);
-
-      buffer = [];
-    } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK && ruleToken && ruleToken[0] == Token.NESTED_BLOCK) {
-      // open brace opening at-rule at block level, e.g. @media{<--
-      serializedBuffer = buffer.join('').trim();
-      ruleToken[1].push([Token.NESTED_BLOCK_SCOPE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-      allTokens.push(ruleToken);
-
-      levels.push(level);
-      position.column++;
-      position.index++;
-      buffer = [];
-
-      ruleToken[2] = intoTokens(source, externalContext, internalContext, true);
-      ruleToken = null;
-    } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK && tokenTypeFrom(buffer) == Token.NESTED_BLOCK) {
-      // open brace opening at-rule at block level, e.g. @media{<--
-      serializedBuffer = buffer.join('').trim();
-      ruleToken = ruleToken || [Token.NESTED_BLOCK, [], []];
-      ruleToken[1].push([Token.NESTED_BLOCK_SCOPE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-      allTokens.push(ruleToken);
-
-      levels.push(level);
-      position.column++;
-      position.index++;
-      buffer = [];
-
-      ruleToken[2] = intoTokens(source, externalContext, internalContext, true);
-      ruleToken = null;
-    } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK) {
-      // open brace opening rule at block level, e.g. div{<--
-      serializedBuffer = buffer.join('').trim();
-      ruleToken = ruleToken || [tokenTypeFrom(buffer), [], []];
-      ruleToken[1].push([tokenScopeFrom(ruleToken[0]), serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)]]);
-      newTokens = ruleToken[2];
-      allTokens.push(ruleToken);
-
-      levels.push(level);
-      level = Level.RULE;
-      buffer = [];
-    } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && seekingValue) {
-      // open brace opening rule at rule level, e.g. div{--variable:{<--
-      ruleTokens.push(ruleToken);
-      ruleToken = [Token.PROPERTY_BLOCK, []];
-      propertyToken.push(ruleToken);
-      newTokens = ruleToken[1];
-
-      levels.push(level);
-      level = Level.RULE;
-      seekingValue = false;
-    } else if (character == Marker.COLON && level == Level.RULE && !seekingValue) {
-      // colon at rule level, e.g. a{color:<--
-      serializedBuffer = buffer.join('').trim();
-      propertyToken = [Token.PROPERTY, [Token.PROPERTY_NAME, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]];
-      newTokens.push(propertyToken);
-
-      seekingValue = true;
-      buffer = [];
-    } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && ruleTokens.length > 0 && buffer.length > 0 && buffer[0] == Marker.AT) {
-      // semicolon at rule level for at-rule, e.g. a{--color:{@apply(--other-color);<--
-      serializedBuffer = buffer.join('').trim();
-      ruleToken[1].push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-
-      buffer = [];
-    } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && buffer.length > 0) {
-      // semicolon at rule level, e.g. a{color:red;<--
-      serializedBuffer = buffer.join('').trim();
-      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-
-      propertyToken = null;
-      seekingValue = false;
-      buffer = [];
-    } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && buffer.length === 0) {
-      // semicolon after bracketed value at rule level, e.g. a{color:rgb(...);<--
-      propertyToken = null;
-      seekingValue = false;
-    } else if (character == Marker.SEMICOLON && level == Level.RULE && buffer.length > 0 && buffer[0] == Marker.AT) {
-      // semicolon for at-rule at rule level, e.g. a{@apply(--variable);<--
-      serializedBuffer = buffer.join('');
-      newTokens.push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-
-      seekingValue = false;
-      buffer = [];
-    } else if (character == Marker.SEMICOLON && level == Level.RULE && seekingPropertyBlockClosing) {
-      // close brace after a property block at rule level, e.g. a{--custom:{color:red;};<--
-      seekingPropertyBlockClosing = false;
-      buffer = [];
-    } else if (character == Marker.SEMICOLON && level == Level.RULE && buffer.length === 0) {
-      // stray semicolon at rule level, e.g. a{;<--
-      // noop
-    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && seekingValue && buffer.length > 0 && ruleTokens.length > 0) {
-      // close brace at rule level, e.g. a{--color:{color:red}<--
-      serializedBuffer = buffer.join('');
-      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-      propertyToken = null;
-      ruleToken = ruleTokens.pop();
-      newTokens = ruleToken[2];
-
-      level = levels.pop();
-      seekingValue = false;
-      buffer = [];
-    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && buffer.length > 0 && buffer[0] == Marker.AT && ruleTokens.length > 0) {
-      // close brace at rule level for at-rule, e.g. a{--color:{@apply(--other-color)}<--
-      serializedBuffer = buffer.join('');
-      ruleToken[1].push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-      propertyToken = null;
-      ruleToken = ruleTokens.pop();
-      newTokens = ruleToken[2];
-
-      level = levels.pop();
-      seekingValue = false;
-      buffer = [];
-    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && ruleTokens.length > 0) {
-      // close brace at rule level after space, e.g. a{--color:{color:red }<--
-      propertyToken = null;
-      ruleToken = ruleTokens.pop();
-      newTokens = ruleToken[2];
-
-      level = levels.pop();
-      seekingValue = false;
-    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && buffer.length > 0) {
-      // close brace at rule level, e.g. a{color:red}<--
-      serializedBuffer = buffer.join('');
-      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-      propertyToken = null;
-      ruleToken = ruleTokens.pop();
-      newTokens = allTokens;
-
-      level = levels.pop();
-      seekingValue = false;
-      buffer = [];
-    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && buffer.length > 0 && buffer[0] == Marker.AT) {
-      // close brace after at-rule at rule level, e.g. a{@apply(--variable)}<--
-      propertyToken = null;
-      ruleToken = null;
-      serializedBuffer = buffer.join('').trim();
-      newTokens.push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-      newTokens = allTokens;
-
-      level = levels.pop();
-      seekingValue = false;
-      buffer = [];
-    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && levels[levels.length - 1] == Level.RULE) {
-      // close brace after a property block at rule level, e.g. a{--custom:{color:red;}<--
-      propertyToken = null;
-      ruleToken = ruleTokens.pop();
-      newTokens = ruleToken[2];
-
-      level = levels.pop();
-      seekingValue = false;
-      seekingPropertyBlockClosing = true;
-      buffer = [];
-    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE) {
-      // close brace after a rule, e.g. a{color:red;}<--
-      propertyToken = null;
-      ruleToken = null;
-      newTokens = allTokens;
-
-      level = levels.pop();
-      seekingValue = false;
-    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.BLOCK && !isNested && position.index <= source.length - 1) {
-      // stray close brace at block level, e.g. a{color:red}color:blue}<--
-      externalContext.warnings.push('Unexpected \'}\' at ' + formatPosition([position.line, position.column, position.source]) + '.');
-      buffer.push(character);
-    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.BLOCK) {
-      // close brace at block level, e.g. @media screen {...}<--
-      break;
-    } else if (character == Marker.OPEN_ROUND_BRACKET && level == Level.RULE && seekingValue) {
-      // round open bracket, e.g. a{color:hsla(<--
-      buffer.push(character);
-      roundBracketLevel++;
-    } else if (character == Marker.CLOSE_ROUND_BRACKET && level == Level.RULE && seekingValue && roundBracketLevel == 1) {
-      // round close bracket, e.g. a{color:hsla(0,0%,0%)<--
-      buffer.push(character);
-      serializedBuffer = buffer.join('').trim();
-      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-
-      roundBracketLevel--;
-      buffer = [];
-    } else if (character == Marker.CLOSE_ROUND_BRACKET && level == Level.RULE && seekingValue) {
-      // round close bracket within other brackets, e.g. a{width:calc((10rem / 2)<--
-      buffer.push(character);
-      roundBracketLevel--;
-    } else if (character == Marker.FORWARD_SLASH && source[position.index + 1] != Marker.ASTERISK && level == Level.RULE && seekingValue && buffer.length > 0) {
-      // forward slash within a property, e.g. a{background:url(image.png) 0 0/<--
-      serializedBuffer = buffer.join('').trim();
-      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-      propertyToken.push([Token.PROPERTY_VALUE, character, [[position.line, position.column, position.source]]]);
-
-      buffer = [];
-    } else if (character == Marker.FORWARD_SLASH && source[position.index + 1] != Marker.ASTERISK && level == Level.RULE && seekingValue) {
-      // forward slash within a property after space, e.g. a{background:url(image.png) 0 0 /<--
-      propertyToken.push([Token.PROPERTY_VALUE, character, [[position.line, position.column, position.source]]]);
-
-      buffer = [];
-    } else if (character == Marker.COMMA && level == Level.RULE && seekingValue && buffer.length > 0) {
-      // comma within a property, e.g. a{background:url(image.png),<--
-      serializedBuffer = buffer.join('').trim();
-      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-      propertyToken.push([Token.PROPERTY_VALUE, character, [[position.line, position.column, position.source]]]);
-
-      buffer = [];
-    } else if (character == Marker.COMMA && level == Level.RULE && seekingValue) {
-      // comma within a property after space, e.g. a{background:url(image.png) ,<--
-      propertyToken.push([Token.PROPERTY_VALUE, character, [[position.line, position.column, position.source]]]);
-
-      buffer = [];
-    } else if ((isSpace || (isNewLineNix && !isNewLineWin)) && level == Level.RULE && seekingValue && propertyToken && buffer.length > 0) {
-      // space or *nix newline within property, e.g. a{margin:0 <--
-      serializedBuffer = buffer.join('').trim();
-      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-
-      buffer = [];
-    } else if (isNewLineWin && level == Level.RULE && seekingValue && propertyToken && buffer.length > 1) {
-      // win newline within property, e.g. a{margin:0\r\n<--
-      serializedBuffer = buffer.join('').trim();
-      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-
-      buffer = [];
-    } else if (isNewLineWin && level == Level.RULE && seekingValue) {
-      // win newline
-      buffer = [];
-    } else if (buffer.length == 1 && isNewLineWin) {
-      // ignore windows newline which is composed of two characters
-      buffer.pop();
-    } else if (buffer.length > 0 || !isSpace && !isNewLineNix && !isNewLineWin) {
-      // any character
-      buffer.push(character);
-    }
-
-    wasEscaped = isEscaped;
-    isEscaped = !wasEscaped && character == Marker.BACK_SLASH;
-    wasCommentStart = isCommentStart;
-    wasCommentEnd = isCommentEnd;
-
-    position.line = (isNewLineWin || isNewLineNix) ? position.line + 1 : position.line;
-    position.column = (isNewLineWin || isNewLineNix) ? 0 : position.column + 1;
-  }
-
-  if (seekingValue) {
-    externalContext.warnings.push('Missing \'}\' at ' + formatPosition([position.line, position.column, position.source]) + '.');
-  }
-
-  if (seekingValue && buffer.length > 0) {
-    serializedBuffer = buffer.join('').replace(TAIL_BROKEN_VALUE_PATTERN, '');
-    propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
-
-    buffer = [];
-  }
-
-  if (buffer.length > 0) {
-    externalContext.warnings.push('Invalid character(s) \'' + buffer.join('') + '\' at ' + formatPosition(metadata) + '. Ignoring.');
-  }
-
-  return allTokens;
-}
-
-function originalMetadata(metadata, value, externalContext, selectorFallbacks) {
-  var source = metadata[2];
-
-  return externalContext.inputSourceMapTracker.isTracking(source) ?
-    externalContext.inputSourceMapTracker.originalPositionFor(metadata, value.length, selectorFallbacks) :
-    metadata;
-}
-
-function tokenTypeFrom(buffer) {
-  var isAtRule = buffer[0] == Marker.AT || buffer[0] == Marker.UNDERSCORE;
-  var ruleWord = buffer.join('').split(RULE_WORD_SEPARATOR_PATTERN)[0];
-
-  if (isAtRule && BLOCK_RULES.indexOf(ruleWord) > -1) {
-    return Token.NESTED_BLOCK;
-  } else if (isAtRule && AT_RULES.indexOf(ruleWord) > -1) {
-    return Token.AT_RULE;
-  } else if (isAtRule) {
-    return Token.AT_RULE_BLOCK;
-  } else {
-    return Token.RULE;
-  }
-}
-
-function tokenScopeFrom(tokenType) {
-  if (tokenType == Token.RULE) {
-    return Token.RULE_SCOPE;
-  } else if (tokenType == Token.NESTED_BLOCK) {
-    return Token.NESTED_BLOCK_SCOPE;
-  } else if (tokenType == Token.AT_RULE_BLOCK) {
-    return Token.AT_RULE_BLOCK_SCOPE;
-  }
-}
-
-module.exports = tokenize;
-
-},{"../utils/format-position":85,"./marker":81,"./token":82}],84:[function(require,module,exports){
-function cloneArray(array) {
-  var cloned = array.slice(0);
-
-  for (var i = 0, l = cloned.length; i < l; i++) {
-    if (Array.isArray(cloned[i]))
-      cloned[i] = cloneArray(cloned[i]);
-  }
-
-  return cloned;
-}
-
-module.exports = cloneArray;
-
-},{}],85:[function(require,module,exports){
-function formatPosition(metadata) {
-  var line = metadata[0];
-  var column = metadata[1];
-  var source = metadata[2];
-
-  return source ?
-    source + ':' + line + ':' + column :
-    line + ':' + column;
-}
-
-module.exports = formatPosition;
-
-},{}],86:[function(require,module,exports){
-var NO_PROTOCOL_RESOURCE_PATTERN = /^\/\//;
-
-function hasProtocol(uri) {
-  return !NO_PROTOCOL_RESOURCE_PATTERN.test(uri);
-}
-
-module.exports = hasProtocol;
-
-},{}],87:[function(require,module,exports){
-var DATA_URI_PATTERN = /^data:(\S*?)?(;charset=[^;]+)?(;[^,]+?)?,(.+)/;
-
-function isDataUriResource(uri) {
-  return DATA_URI_PATTERN.test(uri);
-}
-
-module.exports = isDataUriResource;
-
-},{}],88:[function(require,module,exports){
-var HTTP_RESOURCE_PATTERN = /^http:\/\//;
-
-function isHttpResource(uri) {
-  return HTTP_RESOURCE_PATTERN.test(uri);
-}
-
-module.exports = isHttpResource;
-
-},{}],89:[function(require,module,exports){
-var HTTPS_RESOURCE_PATTERN = /^https:\/\//;
-
-function isHttpsResource(uri) {
-  return HTTPS_RESOURCE_PATTERN.test(uri);
-}
-
-module.exports = isHttpsResource;
-
-},{}],90:[function(require,module,exports){
-var IMPORT_PREFIX_PATTERN = /^@import/i;
-
-function isImport(value) {
-  return IMPORT_PREFIX_PATTERN.test(value);
-}
-
-module.exports = isImport;
-
-},{}],91:[function(require,module,exports){
-var REMOTE_RESOURCE_PATTERN = /^(\w+:\/\/|\/\/)/;
-
-function isRemoteResource(uri) {
-  return REMOTE_RESOURCE_PATTERN.test(uri);
-}
-
-module.exports = isRemoteResource;
-
-},{}],92:[function(require,module,exports){
-// adapted from http://nedbatchelder.com/blog/200712.html#e20071211T054956
-
-var NUMBER_PATTERN = /([0-9]+)/;
-
-function naturalCompare(value1, value2) {
-  var keys1 = ('' + value1).split(NUMBER_PATTERN).map(tryParseInt);
-  var keys2 = ('' + value2).split(NUMBER_PATTERN).map(tryParseInt);
-  var key1;
-  var key2;
-  var compareFirst = Math.min(keys1.length, keys2.length);
-  var i, l;
-
-  for (i = 0, l = compareFirst; i < l; i++) {
-    key1 = keys1[i];
-    key2 = keys2[i];
-
-    if (key1 != key2) {
-      return key1 > key2 ? 1 : -1;
-    }
-  }
-
-  return keys1.length > keys2.length ? 1 : (keys1.length == keys2.length ? 0 : -1);
-}
-
-function tryParseInt(value) {
-  return ('' + parseInt(value)) == value ?
-    parseInt(value) :
-    value;
-}
-
-module.exports = naturalCompare;
-
-},{}],93:[function(require,module,exports){
-function override(source1, source2) {
-  var target = {};
-  var key1;
-  var key2;
-  var item;
-
-  for (key1 in source1) {
-    item = source1[key1];
-
-    if (Array.isArray(item)) {
-      target[key1] = item.slice(0);
-    } else if (typeof item == 'object' && item !== null) {
-      target[key1] = override(item, {});
-    } else {
-      target[key1] = item;
-    }
-  }
-
-  for (key2 in source2) {
-    item = source2[key2];
-
-    if (key2 in target && Array.isArray(item)) {
-      target[key2] = item.slice(0);
-    } else if (key2 in target && typeof item == 'object' && item !== null) {
-      target[key2] = override(target[key2], item);
-    } else {
-      target[key2] = item;
-    }
-  }
-
-  return target;
-}
-
-module.exports = override;
-
-},{}],94:[function(require,module,exports){
-var Marker = require('../tokenizer/marker');
-
-function split(value, separator) {
-  var openLevel = Marker.OPEN_ROUND_BRACKET;
-  var closeLevel = Marker.CLOSE_ROUND_BRACKET;
-  var level = 0;
-  var cursor = 0;
-  var lastStart = 0;
-  var lastValue;
-  var lastCharacter;
-  var len = value.length;
-  var parts = [];
-
-  if (value.indexOf(separator) == -1) {
-    return [value];
-  }
-
-  if (value.indexOf(openLevel) == -1) {
-    return value.split(separator);
-  }
-
-  while (cursor < len) {
-    if (value[cursor] == openLevel) {
-      level++;
-    } else if (value[cursor] == closeLevel) {
-      level--;
-    }
-
-    if (level === 0 && cursor > 0 && cursor + 1 < len && value[cursor] == separator) {
-      parts.push(value.substring(lastStart, cursor));
-      lastStart = cursor + 1;
-    }
-
-    cursor++;
-  }
-
-  if (lastStart < cursor + 1) {
-    lastValue = value.substring(lastStart);
-    lastCharacter = lastValue[lastValue.length - 1];
-    if (lastCharacter == separator) {
-      lastValue = lastValue.substring(0, lastValue.length - 1);
-    }
-
-    parts.push(lastValue);
-  }
-
-  return parts;
-}
-
-module.exports = split;
-
-},{"../tokenizer/marker":81}],95:[function(require,module,exports){
-var lineBreak = require('os').EOL;
-var emptyCharacter = '';
-
-var Breaks = require('../options/format').Breaks;
-var Spaces = require('../options/format').Spaces;
-
-var Marker = require('../tokenizer/marker');
-var Token = require('../tokenizer/token');
-
-function supportsAfterClosingBrace(token) {
-  return token[1][1] == 'background' || token[1][1] == 'transform' || token[1][1] == 'src';
-}
-
-function afterClosingBrace(token, valueIndex) {
-  return token[valueIndex][1][token[valueIndex][1].length - 1] == Marker.CLOSE_ROUND_BRACKET;
-}
-
-function afterComma(token, valueIndex) {
-  return token[valueIndex][1] == Marker.COMMA;
-}
-
-function afterSlash(token, valueIndex) {
-  return token[valueIndex][1] == Marker.FORWARD_SLASH;
-}
-
-function beforeComma(token, valueIndex) {
-  return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.COMMA;
-}
-
-function beforeSlash(token, valueIndex) {
-  return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.FORWARD_SLASH;
-}
-
-function inFilter(token) {
-  return token[1][1] == 'filter' || token[1][1] == '-ms-filter';
-}
-
-function disallowsSpace(context, token, valueIndex) {
-  return !context.spaceAfterClosingBrace && supportsAfterClosingBrace(token) && afterClosingBrace(token, valueIndex) ||
-    beforeSlash(token, valueIndex) ||
-    afterSlash(token, valueIndex) ||
-    beforeComma(token, valueIndex) ||
-    afterComma(token, valueIndex);
-}
-
-function rules(context, tokens) {
-  var store = context.store;
-
-  for (var i = 0, l = tokens.length; i < l; i++) {
-    store(context, tokens[i]);
-
-    if (i < l - 1) {
-      store(context, comma(context));
-    }
-  }
-}
-
-function body(context, tokens) {
-  var lastPropertyAt = lastPropertyIndex(tokens);
-
-  for (var i = 0, l = tokens.length; i < l; i++) {
-    property(context, tokens, i, lastPropertyAt);
-  }
-}
-
-function lastPropertyIndex(tokens) {
-  var index = tokens.length - 1;
-
-  for (; index >= 0; index--) {
-    if (tokens[index][0] != Token.COMMENT) {
-      break;
-    }
-  }
-
-  return index;
-}
-
-function property(context, tokens, position, lastPropertyAt) {
-  var store = context.store;
-  var token = tokens[position];
-  var isPropertyBlock = token[2][0] == Token.PROPERTY_BLOCK;
-  var needsSemicolon = position < lastPropertyAt || isPropertyBlock;
-  var isLast = position === lastPropertyAt;
-
-  switch (token[0]) {
-    case Token.AT_RULE:
-      store(context, token);
-      store(context, position < lastPropertyAt ? semicolon(context, Breaks.AfterProperty, false) : emptyCharacter);
-      break;
-    case Token.COMMENT:
-      store(context, token);
-      break;
-    case Token.PROPERTY:
-      store(context, token[1]);
-      store(context, colon(context));
-      value(context, token);
-      store(context, needsSemicolon ? semicolon(context, Breaks.AfterProperty, isLast) : emptyCharacter);
-  }
-}
-
-function value(context, token) {
-  var store = context.store;
-  var j, m;
-
-  if (token[2][0] == Token.PROPERTY_BLOCK) {
-    store(context, openBrace(context, Breaks.AfterBlockBegins, false));
-    body(context, token[2][1]);
-    store(context, closeBrace(context, Breaks.AfterBlockEnds, false, true));
-  } else {
-    for (j = 2, m = token.length; j < m; j++) {
-      store(context, token[j]);
-
-      if (j < m - 1 && (inFilter(token) || !disallowsSpace(context, token, j))) {
-        store(context, Marker.SPACE);
-      }
-    }
-  }
-}
-
-function allowsBreak(context, where) {
-  return context.format && context.format.breaks[where];
-}
-
-function allowsSpace(context, where) {
-  return context.format && context.format.spaces[where];
-}
-
-function openBrace(context, where, needsPrefixSpace) {
-  if (context.format) {
-    context.indentBy += context.format.indentBy;
-    context.indentWith = context.format.indentWith.repeat(context.indentBy);
-    return (needsPrefixSpace && allowsSpace(context, Spaces.BeforeBlockBegins) ? Marker.SPACE : emptyCharacter) +
-      Marker.OPEN_CURLY_BRACKET +
-      (allowsBreak(context, where) ? lineBreak : emptyCharacter) +
-      context.indentWith;
-  } else {
-    return Marker.OPEN_CURLY_BRACKET;
-  }
-}
-
-function closeBrace(context, where, beforeBlockEnd, isLast) {
-  if (context.format) {
-    context.indentBy -= context.format.indentBy;
-    context.indentWith = context.format.indentWith.repeat(context.indentBy);
-    return (allowsBreak(context, Breaks.AfterProperty) || beforeBlockEnd && allowsBreak(context, Breaks.BeforeBlockEnds) ? lineBreak : emptyCharacter) +
-      context.indentWith +
-      Marker.CLOSE_CURLY_BRACKET +
-      (isLast ? emptyCharacter : (allowsBreak(context, where) ? lineBreak : emptyCharacter) + context.indentWith);
-  } else {
-    return Marker.CLOSE_CURLY_BRACKET;
-  }
-}
-
-function colon(context) {
-  return context.format ?
-    Marker.COLON + (allowsSpace(context, Spaces.BeforeValue) ? Marker.SPACE : emptyCharacter) :
-    Marker.COLON;
-}
-
-function semicolon(context, where, isLast) {
-  return context.format ?
-    Marker.SEMICOLON + (isLast || !allowsBreak(context, where) ? emptyCharacter : lineBreak + context.indentWith) :
-    Marker.SEMICOLON;
-}
-
-function comma(context) {
-  return context.format ?
-    Marker.COMMA + (allowsBreak(context, Breaks.BetweenSelectors) ? lineBreak : emptyCharacter) + context.indentWith :
-    Marker.COMMA;
-}
-
-function all(context, tokens) {
-  var store = context.store;
-  var token;
-  var isLast;
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-    isLast = i == l - 1;
-
-    switch (token[0]) {
-      case Token.AT_RULE:
-        store(context, token);
-        store(context, semicolon(context, Breaks.AfterAtRule, isLast));
-        break;
-      case Token.AT_RULE_BLOCK:
-        rules(context, token[1]);
-        store(context, openBrace(context, Breaks.AfterRuleBegins, true));
-        body(context, token[2]);
-        store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));
-        break;
-      case Token.NESTED_BLOCK:
-        rules(context, token[1]);
-        store(context, openBrace(context, Breaks.AfterBlockBegins, true));
-        all(context, token[2]);
-        store(context, closeBrace(context, Breaks.AfterBlockEnds, true, isLast));
-        break;
-      case Token.COMMENT:
-        store(context, token);
-        store(context, allowsBreak(context, Breaks.AfterComment) ? lineBreak : emptyCharacter);
-        break;
-      case Token.RULE:
-        rules(context, token[1]);
-        store(context, openBrace(context, Breaks.AfterRuleBegins, true));
-        body(context, token[2]);
-        store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));
-        break;
-    }
-  }
-}
-
-module.exports = {
-  all: all,
-  body: body,
-  property: property,
-  rules: rules,
-  value: value
-};
-
-},{"../options/format":59,"../tokenizer/marker":81,"../tokenizer/token":82,"os":108}],96:[function(require,module,exports){
-var helpers = require('./helpers');
-
-function store(serializeContext, token) {
-  serializeContext.output.push(typeof token == 'string' ? token : token[1]);
-}
-
-function context() {
-  var newContext = {
-    output: [],
-    store: store
-  };
-
-  return newContext;
-}
-
-function all(tokens) {
-  var oneTimeContext = context();
-  helpers.all(oneTimeContext, tokens);
-  return oneTimeContext.output.join('');
-}
-
-function body(tokens) {
-  var oneTimeContext = context();
-  helpers.body(oneTimeContext, tokens);
-  return oneTimeContext.output.join('');
-}
-
-function property(tokens, position) {
-  var oneTimeContext = context();
-  helpers.property(oneTimeContext, tokens, position, true);
-  return oneTimeContext.output.join('');
-}
-
-function rules(tokens) {
-  var oneTimeContext = context();
-  helpers.rules(oneTimeContext, tokens);
-  return oneTimeContext.output.join('');
-}
-
-function value(tokens) {
-  var oneTimeContext = context();
-  helpers.value(oneTimeContext, tokens);
-  return oneTimeContext.output.join('');
-}
-
-module.exports = {
-  all: all,
-  body: body,
-  property: property,
-  rules: rules,
-  value: value
-};
-
-},{"./helpers":95}],97:[function(require,module,exports){
-var all = require('./helpers').all;
-
-var lineBreak = require('os').EOL;
-
-function store(serializeContext, token) {
-  var value = typeof token == 'string' ?
-    token :
-    token[1];
-  var wrap = serializeContext.wrap;
-
-  wrap(serializeContext, value);
-  track(serializeContext, value);
-  serializeContext.output.push(value);
-}
-
-function wrap(serializeContext, value) {
-  if (serializeContext.column + value.length > serializeContext.format.wrapAt) {
-    track(serializeContext, lineBreak);
-    serializeContext.output.push(lineBreak);
-  }
-}
-
-function track(serializeContext, value) {
-  var parts = value.split('\n');
-
-  serializeContext.line += parts.length - 1;
-  serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length);
-}
-
-function serializeStyles(tokens, context) {
-  var serializeContext = {
-    column: 0,
-    format: context.options.format,
-    indentBy: 0,
-    indentWith: '',
-    line: 1,
-    output: [],
-    spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
-    store: store,
-    wrap: context.options.format.wrapAt ?
-      wrap :
-      function () { /* noop */  }
-  };
-
-  all(serializeContext, tokens);
-
-  return {
-    styles: serializeContext.output.join('')
-  };
-}
-
-module.exports = serializeStyles;
-
-},{"./helpers":95,"os":108}],98:[function(require,module,exports){
-(function (process){
-var SourceMapGenerator = require('source-map').SourceMapGenerator;
-var all = require('./helpers').all;
-
-var lineBreak = require('os').EOL;
-var isRemoteResource = require('../utils/is-remote-resource');
-
-var isWindows = process.platform == 'win32';
-
-var NIX_SEPARATOR_PATTERN = /\//g;
-var UNKNOWN_SOURCE = '$stdin';
-var WINDOWS_SEPARATOR = '\\';
-
-function store(serializeContext, element) {
-  var fromString = typeof element == 'string';
-  var value = fromString ? element : element[1];
-  var mappings = fromString ? null : element[2];
-  var wrap = serializeContext.wrap;
-
-  wrap(serializeContext, value);
-  track(serializeContext, value, mappings);
-  serializeContext.output.push(value);
-}
-
-function wrap(serializeContext, value) {
-  if (serializeContext.column + value.length > serializeContext.format.wrapAt) {
-    track(serializeContext, lineBreak, false);
-    serializeContext.output.push(lineBreak);
-  }
-}
-
-function track(serializeContext, value, mappings) {
-  var parts = value.split('\n');
-
-  if (mappings) {
-    trackAllMappings(serializeContext, mappings);
-  }
-
-  serializeContext.line += parts.length - 1;
-  serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length);
-}
-
-function trackAllMappings(serializeContext, mappings) {
-  for (var i = 0, l = mappings.length; i < l; i++) {
-    trackMapping(serializeContext, mappings[i]);
-  }
-}
-
-function trackMapping(serializeContext, mapping) {
-  var line = mapping[0];
-  var column = mapping[1];
-  var originalSource = mapping[2];
-  var source = originalSource;
-  var storedSource = source || UNKNOWN_SOURCE;
-
-  if (isWindows && source && !isRemoteResource(source)) {
-    storedSource = source.replace(NIX_SEPARATOR_PATTERN, WINDOWS_SEPARATOR);
-  }
-
-  serializeContext.outputMap.addMapping({
-    generated: {
-      line: serializeContext.line,
-      column: serializeContext.column
-    },
-    source: storedSource,
-    original: {
-      line: line,
-      column: column
-    }
-  });
-
-  if (serializeContext.inlineSources && (originalSource in serializeContext.sourcesContent)) {
-    serializeContext.outputMap.setSourceContent(storedSource, serializeContext.sourcesContent[originalSource]);
-  }
-}
-
-function serializeStylesAndSourceMap(tokens, context) {
-  var serializeContext = {
-    column: 0,
-    format: context.options.format,
-    indentBy: 0,
-    indentWith: '',
-    inlineSources: context.options.sourceMapInlineSources,
-    line: 1,
-    output: [],
-    outputMap: new SourceMapGenerator(),
-    sourcesContent: context.sourcesContent,
-    spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
-    store: store,
-    wrap: context.options.format.wrapAt ?
-      wrap :
-      function () { /* noop */  }
-  };
-
-  all(serializeContext, tokens);
-
-  return {
-    sourceMap: serializeContext.outputMap,
-    styles: serializeContext.output.join('')
-  };
-}
-
-module.exports = serializeStylesAndSourceMap;
-
-}).call(this,require('_process'))
-},{"../utils/is-remote-resource":91,"./helpers":95,"_process":111,"os":108,"source-map":152}],99:[function(require,module,exports){
-(function (Buffer){
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-// NOTE: These type checking functions intentionally don't use `instanceof`
-// because it is fragile and can be easily faked with `Object.create()`.
-
-function isArray(arg) {
-  if (Array.isArray) {
-    return Array.isArray(arg);
-  }
-  return objectToString(arg) === '[object Array]';
-}
-exports.isArray = isArray;
-
-function isBoolean(arg) {
-  return typeof arg === 'boolean';
-}
-exports.isBoolean = isBoolean;
-
-function isNull(arg) {
-  return arg === null;
-}
-exports.isNull = isNull;
-
-function isNullOrUndefined(arg) {
-  return arg == null;
-}
-exports.isNullOrUndefined = isNullOrUndefined;
-
-function isNumber(arg) {
-  return typeof arg === 'number';
-}
-exports.isNumber = isNumber;
-
-function isString(arg) {
-  return typeof arg === 'string';
-}
-exports.isString = isString;
-
-function isSymbol(arg) {
-  return typeof arg === 'symbol';
-}
-exports.isSymbol = isSymbol;
-
-function isUndefined(arg) {
-  return arg === void 0;
-}
-exports.isUndefined = isUndefined;
-
-function isRegExp(re) {
-  return objectToString(re) === '[object RegExp]';
-}
-exports.isRegExp = isRegExp;
-
-function isObject(arg) {
-  return typeof arg === 'object' && arg !== null;
-}
-exports.isObject = isObject;
-
-function isDate(d) {
-  return objectToString(d) === '[object Date]';
-}
-exports.isDate = isDate;
-
-function isError(e) {
-  return (objectToString(e) === '[object Error]' || e instanceof Error);
-}
-exports.isError = isError;
-
-function isFunction(arg) {
-  return typeof arg === 'function';
-}
-exports.isFunction = isFunction;
-
-function isPrimitive(arg) {
-  return arg === null ||
-         typeof arg === 'boolean' ||
-         typeof arg === 'number' ||
-         typeof arg === 'string' ||
-         typeof arg === 'symbol' ||  // ES6 symbol
-         typeof arg === 'undefined';
-}
-exports.isPrimitive = isPrimitive;
-
-exports.isBuffer = Buffer.isBuffer;
-
-function objectToString(o) {
-  return Object.prototype.toString.call(o);
-}
-
-}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
-},{"../../is-buffer/index.js":105}],100:[function(require,module,exports){
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-function EventEmitter() {
-  this._events = this._events || {};
-  this._maxListeners = this._maxListeners || undefined;
-}
-module.exports = EventEmitter;
-
-// Backwards-compat with node 0.10.x
-EventEmitter.EventEmitter = EventEmitter;
-
-EventEmitter.prototype._events = undefined;
-EventEmitter.prototype._maxListeners = undefined;
-
-// By default EventEmitters will print a warning if more than 10 listeners are
-// added to it. This is a useful default which helps finding memory leaks.
-EventEmitter.defaultMaxListeners = 10;
-
-// Obviously not all Emitters should be limited to 10. This function allows
-// that to be increased. Set to zero for unlimited.
-EventEmitter.prototype.setMaxListeners = function(n) {
-  if (!isNumber(n) || n < 0 || isNaN(n))
-    throw TypeError('n must be a positive number');
-  this._maxListeners = n;
-  return this;
-};
-
-EventEmitter.prototype.emit = function(type) {
-  var er, handler, len, args, i, listeners;
-
-  if (!this._events)
-    this._events = {};
-
-  // If there is no 'error' event listener then throw.
-  if (type === 'error') {
-    if (!this._events.error ||
-        (isObject(this._events.error) && !this._events.error.length)) {
-      er = arguments[1];
-      if (er instanceof Error) {
-        throw er; // Unhandled 'error' event
-      } else {
-        // At least give some kind of context to the user
-        var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
-        err.context = er;
-        throw err;
-      }
-    }
-  }
-
-  handler = this._events[type];
-
-  if (isUndefined(handler))
-    return false;
-
-  if (isFunction(handler)) {
-    switch (arguments.length) {
-      // fast cases
-      case 1:
-        handler.call(this);
-        break;
-      case 2:
-        handler.call(this, arguments[1]);
-        break;
-      case 3:
-        handler.call(this, arguments[1], arguments[2]);
-        break;
-      // slower
-      default:
-        args = Array.prototype.slice.call(arguments, 1);
-        handler.apply(this, args);
-    }
-  } else if (isObject(handler)) {
-    args = Array.prototype.slice.call(arguments, 1);
-    listeners = handler.slice();
-    len = listeners.length;
-    for (i = 0; i < len; i++)
-      listeners[i].apply(this, args);
-  }
-
-  return true;
-};
-
-EventEmitter.prototype.addListener = function(type, listener) {
-  var m;
-
-  if (!isFunction(listener))
-    throw TypeError('listener must be a function');
-
-  if (!this._events)
-    this._events = {};
-
-  // To avoid recursion in the case that type === "newListener"! Before
-  // adding it to the listeners, first emit "newListener".
-  if (this._events.newListener)
-    this.emit('newListener', type,
-              isFunction(listener.listener) ?
-              listener.listener : listener);
-
-  if (!this._events[type])
-    // Optimize the case of one listener. Don't need the extra array object.
-    this._events[type] = listener;
-  else if (isObject(this._events[type]))
-    // If we've already got an array, just append.
-    this._events[type].push(listener);
-  else
-    // Adding the second element, need to change to array.
-    this._events[type] = [this._events[type], listener];
-
-  // Check for listener leak
-  if (isObject(this._events[type]) && !this._events[type].warned) {
-    if (!isUndefined(this._maxListeners)) {
-      m = this._maxListeners;
-    } else {
-      m = EventEmitter.defaultMaxListeners;
-    }
-
-    if (m && m > 0 && this._events[type].length > m) {
-      this._events[type].warned = true;
-      console.error('(node) warning: possible EventEmitter memory ' +
-                    'leak detected. %d listeners added. ' +
-                    'Use emitter.setMaxListeners() to increase limit.',
-                    this._events[type].length);
-      if (typeof console.trace === 'function') {
-        // not supported in IE 10
-        console.trace();
-      }
-    }
-  }
-
-  return this;
-};
-
-EventEmitter.prototype.on = EventEmitter.prototype.addListener;
-
-EventEmitter.prototype.once = function(type, listener) {
-  if (!isFunction(listener))
-    throw TypeError('listener must be a function');
-
-  var fired = false;
-
-  function g() {
-    this.removeListener(type, g);
-
-    if (!fired) {
-      fired = true;
-      listener.apply(this, arguments);
-    }
-  }
-
-  g.listener = listener;
-  this.on(type, g);
-
-  return this;
-};
-
-// emits a 'removeListener' event iff the listener was removed
-EventEmitter.prototype.removeListener = function(type, listener) {
-  var list, position, length, i;
-
-  if (!isFunction(listener))
-    throw TypeError('listener must be a function');
-
-  if (!this._events || !this._events[type])
-    return this;
-
-  list = this._events[type];
-  length = list.length;
-  position = -1;
-
-  if (list === listener ||
-      (isFunction(list.listener) && list.listener === listener)) {
-    delete this._events[type];
-    if (this._events.removeListener)
-      this.emit('removeListener', type, listener);
-
-  } else if (isObject(list)) {
-    for (i = length; i-- > 0;) {
-      if (list[i] === listener ||
-          (list[i].listener && list[i].listener === listener)) {
-        position = i;
-        break;
-      }
-    }
-
-    if (position < 0)
-      return this;
-
-    if (list.length === 1) {
-      list.length = 0;
-      delete this._events[type];
-    } else {
-      list.splice(position, 1);
-    }
-
-    if (this._events.removeListener)
-      this.emit('removeListener', type, listener);
-  }
-
-  return this;
-};
-
-EventEmitter.prototype.removeAllListeners = function(type) {
-  var key, listeners;
-
-  if (!this._events)
-    return this;
-
-  // not listening for removeListener, no need to emit
-  if (!this._events.removeListener) {
-    if (arguments.length === 0)
-      this._events = {};
-    else if (this._events[type])
-      delete this._events[type];
-    return this;
-  }
-
-  // emit removeListener for all listeners on all events
-  if (arguments.length === 0) {
-    for (key in this._events) {
-      if (key === 'removeListener') continue;
-      this.removeAllListeners(key);
-    }
-    this.removeAllListeners('removeListener');
-    this._events = {};
-    return this;
-  }
-
-  listeners = this._events[type];
-
-  if (isFunction(listeners)) {
-    this.removeListener(type, listeners);
-  } else if (listeners) {
-    // LIFO order
-    while (listeners.length)
-      this.removeListener(type, listeners[listeners.length - 1]);
-  }
-  delete this._events[type];
-
-  return this;
-};
-
-EventEmitter.prototype.listeners = function(type) {
-  var ret;
-  if (!this._events || !this._events[type])
-    ret = [];
-  else if (isFunction(this._events[type]))
-    ret = [this._events[type]];
-  else
-    ret = this._events[type].slice();
-  return ret;
-};
-
-EventEmitter.prototype.listenerCount = function(type) {
-  if (this._events) {
-    var evlistener = this._events[type];
-
-    if (isFunction(evlistener))
-      return 1;
-    else if (evlistener)
-      return evlistener.length;
-  }
-  return 0;
-};
-
-EventEmitter.listenerCount = function(emitter, type) {
-  return emitter.listenerCount(type);
-};
-
-function isFunction(arg) {
-  return typeof arg === 'function';
-}
-
-function isNumber(arg) {
-  return typeof arg === 'number';
-}
-
-function isObject(arg) {
-  return typeof arg === 'object' && arg !== null;
-}
-
-function isUndefined(arg) {
-  return arg === void 0;
-}
-
-},{}],101:[function(require,module,exports){
-(function (global){
-/*! https://mths.be/he v1.1.1 by @mathias | MIT license */
-;(function(root) {
-
-       // Detect free variables `exports`.
-       var freeExports = typeof exports == 'object' && exports;
-
-       // Detect free variable `module`.
-       var freeModule = typeof module == 'object' && module &&
-               module.exports == freeExports && module;
-
-       // Detect free variable `global`, from Node.js or Browserified code,
-       // and use it as `root`.
-       var freeGlobal = typeof global == 'object' && global;
-       if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
-               root = freeGlobal;
-       }
-
-       /*--------------------------------------------------------------------------*/
-
-       // All astral symbols.
-       var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
-       // All ASCII symbols (not just printable ASCII) except those listed in the
-       // first column of the overrides table.
-       // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
-       var regexAsciiWhitelist = /[\x01-\x7F]/g;
-       // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
-       // code points listed in the first column of the overrides table on
-       // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.
-       var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;
-
-       var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
-       var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'};
-
-       var regexEscape = /["&'<>`]/g;
-       var escapeMap = {
-               '"': '&quot;',
-               '&': '&amp;',
-               '\'': '&#x27;',
-               '<': '&lt;',
-               // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
-               // following is not strictly necessary unless it’s part of a tag or an
-               // unquoted attribute value. We’re only escaping it to support those
-               // situations, and for XML support.
-               '>': '&gt;',
-               // In Internet Explorer ≤ 8, the backtick character can be used
-               // to break out of (un)quoted attribute values or HTML comments.
-               // See http://html5sec.org/#102, http://html5sec.org/#108, and
-               // http://html5sec.org/#133.
-               '`': '&#x60;'
-       };
-
-       var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
-       var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
-       var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)([=a-zA-Z0-9])?/g;
-       var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'};
-       var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'};
-       var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'};
-       var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];
-
-       /*--------------------------------------------------------------------------*/
-
-       var stringFromCharCode = String.fromCharCode;
-
-       var object = {};
-       var hasOwnProperty = object.hasOwnProperty;
-       var has = function(object, propertyName) {
-               return hasOwnProperty.call(object, propertyName);
-       };
-
-       var contains = function(array, value) {
-               var index = -1;
-               var length = array.length;
-               while (++index < length) {
-                       if (array[index] == value) {
-                               return true;
-                       }
-               }
-               return false;
-       };
-
-       var merge = function(options, defaults) {
-               if (!options) {
-                       return defaults;
-               }
-               var result = {};
-               var key;
-               for (key in defaults) {
-                       // A `hasOwnProperty` check is not needed here, since only recognized
-                       // option names are used anyway. Any others are ignored.
-                       result[key] = has(options, key) ? options[key] : defaults[key];
-               }
-               return result;
-       };
-
-       // Modified version of `ucs2encode`; see https://mths.be/punycode.
-       var codePointToSymbol = function(codePoint, strict) {
-               var output = '';
-               if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
-                       // See issue #4:
-                       // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
-                       // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
-                       // REPLACEMENT CHARACTER.”
-                       if (strict) {
-                               parseError('character reference outside the permissible Unicode range');
-                       }
-                       return '\uFFFD';
-               }
-               if (has(decodeMapNumeric, codePoint)) {
-                       if (strict) {
-                               parseError('disallowed character reference');
-                       }
-                       return decodeMapNumeric[codePoint];
-               }
-               if (strict && contains(invalidReferenceCodePoints, codePoint)) {
-                       parseError('disallowed character reference');
-               }
-               if (codePoint > 0xFFFF) {
-                       codePoint -= 0x10000;
-                       output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
-                       codePoint = 0xDC00 | codePoint & 0x3FF;
-               }
-               output += stringFromCharCode(codePoint);
-               return output;
-       };
-
-       var hexEscape = function(codePoint) {
-               return '&#x' + codePoint.toString(16).toUpperCase() + ';';
-       };
-
-       var decEscape = function(codePoint) {
-               return '&#' + codePoint + ';';
-       };
-
-       var parseError = function(message) {
-               throw Error('Parse error: ' + message);
-       };
-
-       /*--------------------------------------------------------------------------*/
-
-       var encode = function(string, options) {
-               options = merge(options, encode.options);
-               var strict = options.strict;
-               if (strict && regexInvalidRawCodePoint.test(string)) {
-                       parseError('forbidden code point');
-               }
-               var encodeEverything = options.encodeEverything;
-               var useNamedReferences = options.useNamedReferences;
-               var allowUnsafeSymbols = options.allowUnsafeSymbols;
-               var escapeCodePoint = options.decimal ? decEscape : hexEscape;
-
-               var escapeBmpSymbol = function(symbol) {
-                       return escapeCodePoint(symbol.charCodeAt(0));
-               };
-
-               if (encodeEverything) {
-                       // Encode ASCII symbols.
-                       string = string.replace(regexAsciiWhitelist, function(symbol) {
-                               // Use named references if requested & possible.
-                               if (useNamedReferences && has(encodeMap, symbol)) {
-                                       return '&' + encodeMap[symbol] + ';';
-                               }
-                               return escapeBmpSymbol(symbol);
-                       });
-                       // Shorten a few escapes that represent two symbols, of which at least one
-                       // is within the ASCII range.
-                       if (useNamedReferences) {
-                               string = string
-                                       .replace(/&gt;\u20D2/g, '&nvgt;')
-                                       .replace(/&lt;\u20D2/g, '&nvlt;')
-                                       .replace(/&#x66;&#x6A;/g, '&fjlig;');
-                       }
-                       // Encode non-ASCII symbols.
-                       if (useNamedReferences) {
-                               // Encode non-ASCII symbols that can be replaced with a named reference.
-                               string = string.replace(regexEncodeNonAscii, function(string) {
-                                       // Note: there is no need to check `has(encodeMap, string)` here.
-                                       return '&' + encodeMap[string] + ';';
-                               });
-                       }
-                       // Note: any remaining non-ASCII symbols are handled outside of the `if`.
-               } else if (useNamedReferences) {
-                       // Apply named character references.
-                       // Encode `<>"'&` using named character references.
-                       if (!allowUnsafeSymbols) {
-                               string = string.replace(regexEscape, function(string) {
-                                       return '&' + encodeMap[string] + ';'; // no need to check `has()` here
-                               });
-                       }
-                       // Shorten escapes that represent two symbols, of which at least one is
-                       // `<>"'&`.
-                       string = string
-                               .replace(/&gt;\u20D2/g, '&nvgt;')
-                               .replace(/&lt;\u20D2/g, '&nvlt;');
-                       // Encode non-ASCII symbols that can be replaced with a named reference.
-                       string = string.replace(regexEncodeNonAscii, function(string) {
-                               // Note: there is no need to check `has(encodeMap, string)` here.
-                               return '&' + encodeMap[string] + ';';
-                       });
-               } else if (!allowUnsafeSymbols) {
-                       // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled
-                       // using named character references.
-                       string = string.replace(regexEscape, escapeBmpSymbol);
-               }
-               return string
-                       // Encode astral symbols.
-                       .replace(regexAstralSymbols, function($0) {
-                               // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
-                               var high = $0.charCodeAt(0);
-                               var low = $0.charCodeAt(1);
-                               var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
-                               return escapeCodePoint(codePoint);
-                       })
-                       // Encode any remaining BMP symbols that are not printable ASCII symbols
-                       // using a hexadecimal escape.
-                       .replace(regexBmpWhitelist, escapeBmpSymbol);
-       };
-       // Expose default options (so they can be overridden globally).
-       encode.options = {
-               'allowUnsafeSymbols': false,
-               'encodeEverything': false,
-               'strict': false,
-               'useNamedReferences': false,
-               'decimal' : false
-       };
-
-       var decode = function(html, options) {
-               options = merge(options, decode.options);
-               var strict = options.strict;
-               if (strict && regexInvalidEntity.test(html)) {
-                       parseError('malformed character reference');
-               }
-               return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) {
-                       var codePoint;
-                       var semicolon;
-                       var decDigits;
-                       var hexDigits;
-                       var reference;
-                       var next;
-                       if ($1) {
-                               // Decode decimal escapes, e.g. `&#119558;`.
-                               decDigits = $1;
-                               semicolon = $2;
-                               if (strict && !semicolon) {
-                                       parseError('character reference was not terminated by a semicolon');
-                               }
-                               codePoint = parseInt(decDigits, 10);
-                               return codePointToSymbol(codePoint, strict);
-                       }
-                       if ($3) {
-                               // Decode hexadecimal escapes, e.g. `&#x1D306;`.
-                               hexDigits = $3;
-                               semicolon = $4;
-                               if (strict && !semicolon) {
-                                       parseError('character reference was not terminated by a semicolon');
-                               }
-                               codePoint = parseInt(hexDigits, 16);
-                               return codePointToSymbol(codePoint, strict);
-                       }
-                       if ($5) {
-                               // Decode named character references with trailing `;`, e.g. `&copy;`.
-                               reference = $5;
-                               if (has(decodeMap, reference)) {
-                                       return decodeMap[reference];
-                               } else {
-                                       // Ambiguous ampersand. https://mths.be/notes/ambiguous-ampersands
-                                       if (strict) {
-                                               parseError(
-                                                       'named character reference was not terminated by a semicolon'
-                                               );
-                                       }
-                                       return $0;
-                               }
-                       }
-                       // If we’re still here, it’s a legacy reference for sure. No need for an
-                       // extra `if` check.
-                       // Decode named character references without trailing `;`, e.g. `&amp`
-                       // This is only a parse error if it gets converted to `&`, or if it is
-                       // followed by `=` in an attribute context.
-                       reference = $6;
-                       next = $7;
-                       if (next && options.isAttributeValue) {
-                               if (strict && next == '=') {
-                                       parseError('`&` did not start a character reference');
-                               }
-                               return $0;
-                       } else {
-                               if (strict) {
-                                       parseError(
-                                               'named character reference was not terminated by a semicolon'
-                                       );
-                               }
-                               // Note: there is no need to check `has(decodeMapLegacy, reference)`.
-                               return decodeMapLegacy[reference] + (next || '');
-                       }
-               });
-       };
-       // Expose default options (so they can be overridden globally).
-       decode.options = {
-               'isAttributeValue': false,
-               'strict': false
-       };
-
-       var escape = function(string) {
-               return string.replace(regexEscape, function($0) {
-                       // Note: there is no need to check `has(escapeMap, $0)` here.
-                       return escapeMap[$0];
-               });
-       };
-
-       /*--------------------------------------------------------------------------*/
-
-       var he = {
-               'version': '1.1.1',
-               'encode': encode,
-               'decode': decode,
-               'escape': escape,
-               'unescape': decode
-       };
-
-       // Some AMD build optimizers, like r.js, check for specific condition patterns
-       // like the following:
-       if (
-               typeof define == 'function' &&
-               typeof define.amd == 'object' &&
-               define.amd
-       ) {
-               define(function() {
-                       return he;
-               });
-       }       else if (freeExports && !freeExports.nodeType) {
-               if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+
-                       freeModule.exports = he;
-               } else { // in Narwhal or RingoJS v0.7.0-
-                       for (var key in he) {
-                               has(he, key) && (freeExports[key] = he[key]);
-                       }
-               }
-       } else { // in Rhino or a web browser
-               root.he = he;
-       }
-
-}(this));
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],102:[function(require,module,exports){
-var http = require('http');
-
-var https = module.exports;
-
-for (var key in http) {
-    if (http.hasOwnProperty(key)) https[key] = http[key];
-};
-
-https.request = function (params, cb) {
-    if (!params) params = {};
-    params.scheme = 'https';
-    params.protocol = 'https:';
-    return http.request.call(this, params, cb);
-}
-
-},{"http":153}],103:[function(require,module,exports){
-exports.read = function (buffer, offset, isLE, mLen, nBytes) {
-  var e, m
-  var eLen = nBytes * 8 - mLen - 1
-  var eMax = (1 << eLen) - 1
-  var eBias = eMax >> 1
-  var nBits = -7
-  var i = isLE ? (nBytes - 1) : 0
-  var d = isLE ? -1 : 1
-  var s = buffer[offset + i]
-
-  i += d
-
-  e = s & ((1 << (-nBits)) - 1)
-  s >>= (-nBits)
-  nBits += eLen
-  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
-
-  m = e & ((1 << (-nBits)) - 1)
-  e >>= (-nBits)
-  nBits += mLen
-  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
-
-  if (e === 0) {
-    e = 1 - eBias
-  } else if (e === eMax) {
-    return m ? NaN : ((s ? -1 : 1) * Infinity)
-  } else {
-    m = m + Math.pow(2, mLen)
-    e = e - eBias
-  }
-  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
-}
-
-exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
-  var e, m, c
-  var eLen = nBytes * 8 - mLen - 1
-  var eMax = (1 << eLen) - 1
-  var eBias = eMax >> 1
-  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
-  var i = isLE ? 0 : (nBytes - 1)
-  var d = isLE ? 1 : -1
-  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
-
-  value = Math.abs(value)
-
-  if (isNaN(value) || value === Infinity) {
-    m = isNaN(value) ? 1 : 0
-    e = eMax
-  } else {
-    e = Math.floor(Math.log(value) / Math.LN2)
-    if (value * (c = Math.pow(2, -e)) < 1) {
-      e--
-      c *= 2
-    }
-    if (e + eBias >= 1) {
-      value += rt / c
-    } else {
-      value += rt * Math.pow(2, 1 - eBias)
-    }
-    if (value * c >= 2) {
-      e++
-      c /= 2
-    }
-
-    if (e + eBias >= eMax) {
-      m = 0
-      e = eMax
-    } else if (e + eBias >= 1) {
-      m = (value * c - 1) * Math.pow(2, mLen)
-      e = e + eBias
-    } else {
-      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
-      e = 0
-    }
-  }
-
-  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
-
-  e = (e << mLen) | m
-  eLen += mLen
-  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
-
-  buffer[offset + i - d] |= s * 128
-}
-
-},{}],104:[function(require,module,exports){
-if (typeof Object.create === 'function') {
-  // implementation from standard node.js 'util' module
-  module.exports = function inherits(ctor, superCtor) {
-    ctor.super_ = superCtor
-    ctor.prototype = Object.create(superCtor.prototype, {
-      constructor: {
-        value: ctor,
-        enumerable: false,
-        writable: true,
-        configurable: true
-      }
-    });
-  };
-} else {
-  // old school shim for old browsers
-  module.exports = function inherits(ctor, superCtor) {
-    ctor.super_ = superCtor
-    var TempCtor = function () {}
-    TempCtor.prototype = superCtor.prototype
-    ctor.prototype = new TempCtor()
-    ctor.prototype.constructor = ctor
-  }
-}
-
-},{}],105:[function(require,module,exports){
-/*!
- * Determine if an object is a Buffer
- *
- * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
- * @license  MIT
- */
-
-// The _isBuffer check is for Safari 5-7 support, because it's missing
-// Object.prototype.constructor. Remove this eventually
-module.exports = function (obj) {
-  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
-}
-
-function isBuffer (obj) {
-  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
-}
-
-// For Node v0.10 support. Remove this eventually.
-function isSlowBuffer (obj) {
-  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
-}
-
-},{}],106:[function(require,module,exports){
-var toString = {}.toString;
-
-module.exports = Array.isArray || function (arr) {
-  return toString.call(arr) == '[object Array]';
-};
-
-},{}],107:[function(require,module,exports){
-'use strict';
-var xmlChars = require('xml-char-classes');
-
-function getRange(re) {
-       return re.source.slice(1, -1);
-}
-
-// http://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-NCName
-module.exports = new RegExp('^[' + getRange(xmlChars.letter) + '_][' + getRange(xmlChars.letter) + getRange(xmlChars.digit) + '\\.\\-_' + getRange(xmlChars.combiningChar) + getRange(xmlChars.extender) + ']*$');
-
-},{"xml-char-classes":165}],108:[function(require,module,exports){
-exports.endianness = function () { return 'LE' };
-
-exports.hostname = function () {
-    if (typeof location !== 'undefined') {
-        return location.hostname
-    }
-    else return '';
-};
-
-exports.loadavg = function () { return [] };
-
-exports.uptime = function () { return 0 };
-
-exports.freemem = function () {
-    return Number.MAX_VALUE;
-};
-
-exports.totalmem = function () {
-    return Number.MAX_VALUE;
-};
-
-exports.cpus = function () { return [] };
-
-exports.type = function () { return 'Browser' };
-
-exports.release = function () {
-    if (typeof navigator !== 'undefined') {
-        return navigator.appVersion;
-    }
-    return '';
-};
-
-exports.networkInterfaces
-= exports.getNetworkInterfaces
-= function () { return {} };
-
-exports.arch = function () { return 'javascript' };
-
-exports.platform = function () { return 'browser' };
-
-exports.tmpdir = exports.tmpDir = function () {
-    return '/tmp';
-};
-
-exports.EOL = '\n';
-
-},{}],109:[function(require,module,exports){
-(function (process){
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-// resolves . and .. elements in a path array with directory names there
-// must be no slashes, empty elements, or device names (c:\) in the array
-// (so also no leading and trailing slashes - it does not distinguish
-// relative and absolute paths)
-function normalizeArray(parts, allowAboveRoot) {
-  // if the path tries to go above the root, `up` ends up > 0
-  var up = 0;
-  for (var i = parts.length - 1; i >= 0; i--) {
-    var last = parts[i];
-    if (last === '.') {
-      parts.splice(i, 1);
-    } else if (last === '..') {
-      parts.splice(i, 1);
-      up++;
-    } else if (up) {
-      parts.splice(i, 1);
-      up--;
-    }
-  }
-
-  // if the path is allowed to go above the root, restore leading ..s
-  if (allowAboveRoot) {
-    for (; up--; up) {
-      parts.unshift('..');
-    }
-  }
-
-  return parts;
-}
-
-// Split a filename into [root, dir, basename, ext], unix version
-// 'root' is just a slash, or nothing.
-var splitPathRe =
-    /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
-var splitPath = function(filename) {
-  return splitPathRe.exec(filename).slice(1);
-};
-
-// path.resolve([from ...], to)
-// posix version
-exports.resolve = function() {
-  var resolvedPath = '',
-      resolvedAbsolute = false;
-
-  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
-    var path = (i >= 0) ? arguments[i] : process.cwd();
-
-    // Skip empty and invalid entries
-    if (typeof path !== 'string') {
-      throw new TypeError('Arguments to path.resolve must be strings');
-    } else if (!path) {
-      continue;
-    }
-
-    resolvedPath = path + '/' + resolvedPath;
-    resolvedAbsolute = path.charAt(0) === '/';
-  }
-
-  // At this point the path should be resolved to a full absolute path, but
-  // handle relative paths to be safe (might happen when process.cwd() fails)
-
-  // Normalize the path
-  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
-    return !!p;
-  }), !resolvedAbsolute).join('/');
-
-  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
-};
-
-// path.normalize(path)
-// posix version
-exports.normalize = function(path) {
-  var isAbsolute = exports.isAbsolute(path),
-      trailingSlash = substr(path, -1) === '/';
-
-  // Normalize the path
-  path = normalizeArray(filter(path.split('/'), function(p) {
-    return !!p;
-  }), !isAbsolute).join('/');
-
-  if (!path && !isAbsolute) {
-    path = '.';
-  }
-  if (path && trailingSlash) {
-    path += '/';
-  }
-
-  return (isAbsolute ? '/' : '') + path;
-};
-
-// posix version
-exports.isAbsolute = function(path) {
-  return path.charAt(0) === '/';
-};
-
-// posix version
-exports.join = function() {
-  var paths = Array.prototype.slice.call(arguments, 0);
-  return exports.normalize(filter(paths, function(p, index) {
-    if (typeof p !== 'string') {
-      throw new TypeError('Arguments to path.join must be strings');
-    }
-    return p;
-  }).join('/'));
-};
-
-
-// path.relative(from, to)
-// posix version
-exports.relative = function(from, to) {
-  from = exports.resolve(from).substr(1);
-  to = exports.resolve(to).substr(1);
-
-  function trim(arr) {
-    var start = 0;
-    for (; start < arr.length; start++) {
-      if (arr[start] !== '') break;
-    }
-
-    var end = arr.length - 1;
-    for (; end >= 0; end--) {
-      if (arr[end] !== '') break;
-    }
-
-    if (start > end) return [];
-    return arr.slice(start, end - start + 1);
-  }
-
-  var fromParts = trim(from.split('/'));
-  var toParts = trim(to.split('/'));
-
-  var length = Math.min(fromParts.length, toParts.length);
-  var samePartsLength = length;
-  for (var i = 0; i < length; i++) {
-    if (fromParts[i] !== toParts[i]) {
-      samePartsLength = i;
-      break;
-    }
-  }
-
-  var outputParts = [];
-  for (var i = samePartsLength; i < fromParts.length; i++) {
-    outputParts.push('..');
-  }
-
-  outputParts = outputParts.concat(toParts.slice(samePartsLength));
-
-  return outputParts.join('/');
-};
-
-exports.sep = '/';
-exports.delimiter = ':';
-
-exports.dirname = function(path) {
-  var result = splitPath(path),
-      root = result[0],
-      dir = result[1];
-
-  if (!root && !dir) {
-    // No dirname whatsoever
-    return '.';
-  }
-
-  if (dir) {
-    // It has a dirname, strip trailing slash
-    dir = dir.substr(0, dir.length - 1);
-  }
-
-  return root + dir;
-};
-
-
-exports.basename = function(path, ext) {
-  var f = splitPath(path)[2];
-  // TODO: make this comparison case-insensitive on windows?
-  if (ext && f.substr(-1 * ext.length) === ext) {
-    f = f.substr(0, f.length - ext.length);
-  }
-  return f;
-};
-
-
-exports.extname = function(path) {
-  return splitPath(path)[3];
-};
-
-function filter (xs, f) {
-    if (xs.filter) return xs.filter(f);
-    var res = [];
-    for (var i = 0; i < xs.length; i++) {
-        if (f(xs[i], i, xs)) res.push(xs[i]);
-    }
-    return res;
-}
-
-// String.prototype.substr - negative index don't work in IE8
-var substr = 'ab'.substr(-1) === 'b'
-    ? function (str, start, len) { return str.substr(start, len) }
-    : function (str, start, len) {
-        if (start < 0) start = str.length + start;
-        return str.substr(start, len);
-    }
-;
-
-}).call(this,require('_process'))
-},{"_process":111}],110:[function(require,module,exports){
-(function (process){
-'use strict';
-
-if (!process.version ||
-    process.version.indexOf('v0.') === 0 ||
-    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
-  module.exports = nextTick;
-} else {
-  module.exports = process.nextTick;
-}
-
-function nextTick(fn, arg1, arg2, arg3) {
-  if (typeof fn !== 'function') {
-    throw new TypeError('"callback" argument must be a function');
-  }
-  var len = arguments.length;
-  var args, i;
-  switch (len) {
-  case 0:
-  case 1:
-    return process.nextTick(fn);
-  case 2:
-    return process.nextTick(function afterTickOne() {
-      fn.call(null, arg1);
-    });
-  case 3:
-    return process.nextTick(function afterTickTwo() {
-      fn.call(null, arg1, arg2);
-    });
-  case 4:
-    return process.nextTick(function afterTickThree() {
-      fn.call(null, arg1, arg2, arg3);
-    });
-  default:
-    args = new Array(len - 1);
-    i = 0;
-    while (i < args.length) {
-      args[i++] = arguments[i];
-    }
-    return process.nextTick(function afterTick() {
-      fn.apply(null, args);
-    });
-  }
-}
-
-}).call(this,require('_process'))
-},{"_process":111}],111:[function(require,module,exports){
-// shim for using process in browser
-var process = module.exports = {};
-
-// cached from whatever global is present so that test runners that stub it
-// don't break things.  But we need to wrap it in a try catch in case it is
-// wrapped in strict mode code which doesn't define any globals.  It's inside a
-// function because try/catches deoptimize in certain engines.
-
-var cachedSetTimeout;
-var cachedClearTimeout;
-
-function defaultSetTimout() {
-    throw new Error('setTimeout has not been defined');
-}
-function defaultClearTimeout () {
-    throw new Error('clearTimeout has not been defined');
-}
-(function () {
-    try {
-        if (typeof setTimeout === 'function') {
-            cachedSetTimeout = setTimeout;
-        } else {
-            cachedSetTimeout = defaultSetTimout;
-        }
-    } catch (e) {
-        cachedSetTimeout = defaultSetTimout;
-    }
-    try {
-        if (typeof clearTimeout === 'function') {
-            cachedClearTimeout = clearTimeout;
-        } else {
-            cachedClearTimeout = defaultClearTimeout;
-        }
-    } catch (e) {
-        cachedClearTimeout = defaultClearTimeout;
-    }
-} ())
-function runTimeout(fun) {
-    if (cachedSetTimeout === setTimeout) {
-        //normal enviroments in sane situations
-        return setTimeout(fun, 0);
-    }
-    // if setTimeout wasn't available but was latter defined
-    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
-        cachedSetTimeout = setTimeout;
-        return setTimeout(fun, 0);
-    }
-    try {
-        // when when somebody has screwed with setTimeout but no I.E. maddness
-        return cachedSetTimeout(fun, 0);
-    } catch(e){
-        try {
-            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
-            return cachedSetTimeout.call(null, fun, 0);
-        } catch(e){
-            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
-            return cachedSetTimeout.call(this, fun, 0);
-        }
-    }
-
-
-}
-function runClearTimeout(marker) {
-    if (cachedClearTimeout === clearTimeout) {
-        //normal enviroments in sane situations
-        return clearTimeout(marker);
-    }
-    // if clearTimeout wasn't available but was latter defined
-    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
-        cachedClearTimeout = clearTimeout;
-        return clearTimeout(marker);
-    }
-    try {
-        // when when somebody has screwed with setTimeout but no I.E. maddness
-        return cachedClearTimeout(marker);
-    } catch (e){
-        try {
-            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
-            return cachedClearTimeout.call(null, marker);
-        } catch (e){
-            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
-            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
-            return cachedClearTimeout.call(this, marker);
-        }
-    }
-
-
-
-}
-var queue = [];
-var draining = false;
-var currentQueue;
-var queueIndex = -1;
-
-function cleanUpNextTick() {
-    if (!draining || !currentQueue) {
-        return;
-    }
-    draining = false;
-    if (currentQueue.length) {
-        queue = currentQueue.concat(queue);
-    } else {
-        queueIndex = -1;
-    }
-    if (queue.length) {
-        drainQueue();
-    }
-}
-
-function drainQueue() {
-    if (draining) {
-        return;
-    }
-    var timeout = runTimeout(cleanUpNextTick);
-    draining = true;
-
-    var len = queue.length;
-    while(len) {
-        currentQueue = queue;
-        queue = [];
-        while (++queueIndex < len) {
-            if (currentQueue) {
-                currentQueue[queueIndex].run();
-            }
-        }
-        queueIndex = -1;
-        len = queue.length;
-    }
-    currentQueue = null;
-    draining = false;
-    runClearTimeout(timeout);
-}
-
-process.nextTick = function (fun) {
-    var args = new Array(arguments.length - 1);
-    if (arguments.length > 1) {
-        for (var i = 1; i < arguments.length; i++) {
-            args[i - 1] = arguments[i];
-        }
-    }
-    queue.push(new Item(fun, args));
-    if (queue.length === 1 && !draining) {
-        runTimeout(drainQueue);
-    }
-};
-
-// v8 likes predictible objects
-function Item(fun, array) {
-    this.fun = fun;
-    this.array = array;
-}
-Item.prototype.run = function () {
-    this.fun.apply(null, this.array);
-};
-process.title = 'browser';
-process.browser = true;
-process.env = {};
-process.argv = [];
-process.version = ''; // empty string to avoid regexp issues
-process.versions = {};
-
-function noop() {}
-
-process.on = noop;
-process.addListener = noop;
-process.once = noop;
-process.off = noop;
-process.removeListener = noop;
-process.removeAllListeners = noop;
-process.emit = noop;
-process.prependListener = noop;
-process.prependOnceListener = noop;
-
-process.listeners = function (name) { return [] }
-
-process.binding = function (name) {
-    throw new Error('process.binding is not supported');
-};
-
-process.cwd = function () { return '/' };
-process.chdir = function (dir) {
-    throw new Error('process.chdir is not supported');
-};
-process.umask = function() { return 0; };
-
-},{}],112:[function(require,module,exports){
-(function (global){
-/*! https://mths.be/punycode v1.4.1 by @mathias */
-;(function(root) {
-
-       /** Detect free variables */
-       var freeExports = typeof exports == 'object' && exports &&
-               !exports.nodeType && exports;
-       var freeModule = typeof module == 'object' && module &&
-               !module.nodeType && module;
-       var freeGlobal = typeof global == 'object' && global;
-       if (
-               freeGlobal.global === freeGlobal ||
-               freeGlobal.window === freeGlobal ||
-               freeGlobal.self === freeGlobal
-       ) {
-               root = freeGlobal;
-       }
-
-       /**
-        * The `punycode` object.
-        * @name punycode
-        * @type Object
-        */
-       var punycode,
-
-       /** Highest positive signed 32-bit float value */
-       maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
-
-       /** Bootstring parameters */
-       base = 36,
-       tMin = 1,
-       tMax = 26,
-       skew = 38,
-       damp = 700,
-       initialBias = 72,
-       initialN = 128, // 0x80
-       delimiter = '-', // '\x2D'
-
-       /** Regular expressions */
-       regexPunycode = /^xn--/,
-       regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
-       regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
-
-       /** Error messages */
-       errors = {
-               'overflow': 'Overflow: input needs wider integers to process',
-               'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
-               'invalid-input': 'Invalid input'
-       },
-
-       /** Convenience shortcuts */
-       baseMinusTMin = base - tMin,
-       floor = Math.floor,
-       stringFromCharCode = String.fromCharCode,
-
-       /** Temporary variable */
-       key;
-
-       /*--------------------------------------------------------------------------*/
-
-       /**
-        * A generic error utility function.
-        * @private
-        * @param {String} type The error type.
-        * @returns {Error} Throws a `RangeError` with the applicable error message.
-        */
-       function error(type) {
-               throw new RangeError(errors[type]);
-       }
-
-       /**
-        * A generic `Array#map` utility function.
-        * @private
-        * @param {Array} array The array to iterate over.
-        * @param {Function} callback The function that gets called for every array
-        * item.
-        * @returns {Array} A new array of values returned by the callback function.
-        */
-       function map(array, fn) {
-               var length = array.length;
-               var result = [];
-               while (length--) {
-                       result[length] = fn(array[length]);
-               }
-               return result;
-       }
-
-       /**
-        * A simple `Array#map`-like wrapper to work with domain name strings or email
-        * addresses.
-        * @private
-        * @param {String} domain The domain name or email address.
-        * @param {Function} callback The function that gets called for every
-        * character.
-        * @returns {Array} A new string of characters returned by the callback
-        * function.
-        */
-       function mapDomain(string, fn) {
-               var parts = string.split('@');
-               var result = '';
-               if (parts.length > 1) {
-                       // In email addresses, only the domain name should be punycoded. Leave
-                       // the local part (i.e. everything up to `@`) intact.
-                       result = parts[0] + '@';
-                       string = parts[1];
-               }
-               // Avoid `split(regex)` for IE8 compatibility. See #17.
-               string = string.replace(regexSeparators, '\x2E');
-               var labels = string.split('.');
-               var encoded = map(labels, fn).join('.');
-               return result + encoded;
-       }
-
-       /**
-        * Creates an array containing the numeric code points of each Unicode
-        * character in the string. While JavaScript uses UCS-2 internally,
-        * this function will convert a pair of surrogate halves (each of which
-        * UCS-2 exposes as separate characters) into a single code point,
-        * matching UTF-16.
-        * @see `punycode.ucs2.encode`
-        * @see <https://mathiasbynens.be/notes/javascript-encoding>
-        * @memberOf punycode.ucs2
-        * @name decode
-        * @param {String} string The Unicode input string (UCS-2).
-        * @returns {Array} The new array of code points.
-        */
-       function ucs2decode(string) {
-               var output = [],
-                   counter = 0,
-                   length = string.length,
-                   value,
-                   extra;
-               while (counter < length) {
-                       value = string.charCodeAt(counter++);
-                       if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
-                               // high surrogate, and there is a next character
-                               extra = string.charCodeAt(counter++);
-                               if ((extra & 0xFC00) == 0xDC00) { // low surrogate
-                                       output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
-                               } else {
-                                       // unmatched surrogate; only append this code unit, in case the next
-                                       // code unit is the high surrogate of a surrogate pair
-                                       output.push(value);
-                                       counter--;
-                               }
-                       } else {
-                               output.push(value);
-                       }
-               }
-               return output;
-       }
-
-       /**
-        * Creates a string based on an array of numeric code points.
-        * @see `punycode.ucs2.decode`
-        * @memberOf punycode.ucs2
-        * @name encode
-        * @param {Array} codePoints The array of numeric code points.
-        * @returns {String} The new Unicode string (UCS-2).
-        */
-       function ucs2encode(array) {
-               return map(array, function(value) {
-                       var output = '';
-                       if (value > 0xFFFF) {
-                               value -= 0x10000;
-                               output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
-                               value = 0xDC00 | value & 0x3FF;
-                       }
-                       output += stringFromCharCode(value);
-                       return output;
-               }).join('');
-       }
-
-       /**
-        * Converts a basic code point into a digit/integer.
-        * @see `digitToBasic()`
-        * @private
-        * @param {Number} codePoint The basic numeric code point value.
-        * @returns {Number} The numeric value of a basic code point (for use in
-        * representing integers) in the range `0` to `base - 1`, or `base` if
-        * the code point does not represent a value.
-        */
-       function basicToDigit(codePoint) {
-               if (codePoint - 48 < 10) {
-                       return codePoint - 22;
-               }
-               if (codePoint - 65 < 26) {
-                       return codePoint - 65;
-               }
-               if (codePoint - 97 < 26) {
-                       return codePoint - 97;
-               }
-               return base;
-       }
-
-       /**
-        * Converts a digit/integer into a basic code point.
-        * @see `basicToDigit()`
-        * @private
-        * @param {Number} digit The numeric value of a basic code point.
-        * @returns {Number} The basic code point whose value (when used for
-        * representing integers) is `digit`, which needs to be in the range
-        * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
-        * used; else, the lowercase form is used. The behavior is undefined
-        * if `flag` is non-zero and `digit` has no uppercase form.
-        */
-       function digitToBasic(digit, flag) {
-               //  0..25 map to ASCII a..z or A..Z
-               // 26..35 map to ASCII 0..9
-               return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
-       }
-
-       /**
-        * Bias adaptation function as per section 3.4 of RFC 3492.
-        * https://tools.ietf.org/html/rfc3492#section-3.4
-        * @private
-        */
-       function adapt(delta, numPoints, firstTime) {
-               var k = 0;
-               delta = firstTime ? floor(delta / damp) : delta >> 1;
-               delta += floor(delta / numPoints);
-               for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
-                       delta = floor(delta / baseMinusTMin);
-               }
-               return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
-       }
-
-       /**
-        * Converts a Punycode string of ASCII-only symbols to a string of Unicode
-        * symbols.
-        * @memberOf punycode
-        * @param {String} input The Punycode string of ASCII-only symbols.
-        * @returns {String} The resulting string of Unicode symbols.
-        */
-       function decode(input) {
-               // Don't use UCS-2
-               var output = [],
-                   inputLength = input.length,
-                   out,
-                   i = 0,
-                   n = initialN,
-                   bias = initialBias,
-                   basic,
-                   j,
-                   index,
-                   oldi,
-                   w,
-                   k,
-                   digit,
-                   t,
-                   /** Cached calculation results */
-                   baseMinusT;
-
-               // Handle the basic code points: let `basic` be the number of input code
-               // points before the last delimiter, or `0` if there is none, then copy
-               // the first basic code points to the output.
-
-               basic = input.lastIndexOf(delimiter);
-               if (basic < 0) {
-                       basic = 0;
-               }
-
-               for (j = 0; j < basic; ++j) {
-                       // if it's not a basic code point
-                       if (input.charCodeAt(j) >= 0x80) {
-                               error('not-basic');
-                       }
-                       output.push(input.charCodeAt(j));
-               }
-
-               // Main decoding loop: start just after the last delimiter if any basic code
-               // points were copied; start at the beginning otherwise.
-
-               for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
-
-                       // `index` is the index of the next character to be consumed.
-                       // Decode a generalized variable-length integer into `delta`,
-                       // which gets added to `i`. The overflow checking is easier
-                       // if we increase `i` as we go, then subtract off its starting
-                       // value at the end to obtain `delta`.
-                       for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
-
-                               if (index >= inputLength) {
-                                       error('invalid-input');
-                               }
-
-                               digit = basicToDigit(input.charCodeAt(index++));
-
-                               if (digit >= base || digit > floor((maxInt - i) / w)) {
-                                       error('overflow');
-                               }
-
-                               i += digit * w;
-                               t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
-
-                               if (digit < t) {
-                                       break;
-                               }
-
-                               baseMinusT = base - t;
-                               if (w > floor(maxInt / baseMinusT)) {
-                                       error('overflow');
-                               }
-
-                               w *= baseMinusT;
-
-                       }
-
-                       out = output.length + 1;
-                       bias = adapt(i - oldi, out, oldi == 0);
-
-                       // `i` was supposed to wrap around from `out` to `0`,
-                       // incrementing `n` each time, so we'll fix that now:
-                       if (floor(i / out) > maxInt - n) {
-                               error('overflow');
-                       }
-
-                       n += floor(i / out);
-                       i %= out;
-
-                       // Insert `n` at position `i` of the output
-                       output.splice(i++, 0, n);
-
-               }
-
-               return ucs2encode(output);
-       }
-
-       /**
-        * Converts a string of Unicode symbols (e.g. a domain name label) to a
-        * Punycode string of ASCII-only symbols.
-        * @memberOf punycode
-        * @param {String} input The string of Unicode symbols.
-        * @returns {String} The resulting Punycode string of ASCII-only symbols.
-        */
-       function encode(input) {
-               var n,
-                   delta,
-                   handledCPCount,
-                   basicLength,
-                   bias,
-                   j,
-                   m,
-                   q,
-                   k,
-                   t,
-                   currentValue,
-                   output = [],
-                   /** `inputLength` will hold the number of code points in `input`. */
-                   inputLength,
-                   /** Cached calculation results */
-                   handledCPCountPlusOne,
-                   baseMinusT,
-                   qMinusT;
-
-               // Convert the input in UCS-2 to Unicode
-               input = ucs2decode(input);
-
-               // Cache the length
-               inputLength = input.length;
-
-               // Initialize the state
-               n = initialN;
-               delta = 0;
-               bias = initialBias;
-
-               // Handle the basic code points
-               for (j = 0; j < inputLength; ++j) {
-                       currentValue = input[j];
-                       if (currentValue < 0x80) {
-                               output.push(stringFromCharCode(currentValue));
-                       }
-               }
-
-               handledCPCount = basicLength = output.length;
-
-               // `handledCPCount` is the number of code points that have been handled;
-               // `basicLength` is the number of basic code points.
-
-               // Finish the basic string - if it is not empty - with a delimiter
-               if (basicLength) {
-                       output.push(delimiter);
-               }
-
-               // Main encoding loop:
-               while (handledCPCount < inputLength) {
-
-                       // All non-basic code points < n have been handled already. Find the next
-                       // larger one:
-                       for (m = maxInt, j = 0; j < inputLength; ++j) {
-                               currentValue = input[j];
-                               if (currentValue >= n && currentValue < m) {
-                                       m = currentValue;
-                               }
-                       }
-
-                       // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
-                       // but guard against overflow
-                       handledCPCountPlusOne = handledCPCount + 1;
-                       if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
-                               error('overflow');
-                       }
-
-                       delta += (m - n) * handledCPCountPlusOne;
-                       n = m;
-
-                       for (j = 0; j < inputLength; ++j) {
-                               currentValue = input[j];
-
-                               if (currentValue < n && ++delta > maxInt) {
-                                       error('overflow');
-                               }
-
-                               if (currentValue == n) {
-                                       // Represent delta as a generalized variable-length integer
-                                       for (q = delta, k = base; /* no condition */; k += base) {
-                                               t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
-                                               if (q < t) {
-                                                       break;
-                                               }
-                                               qMinusT = q - t;
-                                               baseMinusT = base - t;
-                                               output.push(
-                                                       stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
-                                               );
-                                               q = floor(qMinusT / baseMinusT);
-                                       }
-
-                                       output.push(stringFromCharCode(digitToBasic(q, 0)));
-                                       bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
-                                       delta = 0;
-                                       ++handledCPCount;
-                               }
-                       }
-
-                       ++delta;
-                       ++n;
-
-               }
-               return output.join('');
-       }
-
-       /**
-        * Converts a Punycode string representing a domain name or an email address
-        * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
-        * it doesn't matter if you call it on a string that has already been
-        * converted to Unicode.
-        * @memberOf punycode
-        * @param {String} input The Punycoded domain name or email address to
-        * convert to Unicode.
-        * @returns {String} The Unicode representation of the given Punycode
-        * string.
-        */
-       function toUnicode(input) {
-               return mapDomain(input, function(string) {
-                       return regexPunycode.test(string)
-                               ? decode(string.slice(4).toLowerCase())
-                               : string;
-               });
-       }
-
-       /**
-        * Converts a Unicode string representing a domain name or an email address to
-        * Punycode. Only the non-ASCII parts of the domain name will be converted,
-        * i.e. it doesn't matter if you call it with a domain that's already in
-        * ASCII.
-        * @memberOf punycode
-        * @param {String} input The domain name or email address to convert, as a
-        * Unicode string.
-        * @returns {String} The Punycode representation of the given domain name or
-        * email address.
-        */
-       function toASCII(input) {
-               return mapDomain(input, function(string) {
-                       return regexNonASCII.test(string)
-                               ? 'xn--' + encode(string)
-                               : string;
-               });
-       }
-
-       /*--------------------------------------------------------------------------*/
-
-       /** Define the public API */
-       punycode = {
-               /**
-                * A string representing the current Punycode.js version number.
-                * @memberOf punycode
-                * @type String
-                */
-               'version': '1.4.1',
-               /**
-                * An object of methods to convert from JavaScript's internal character
-                * representation (UCS-2) to Unicode code points, and back.
-                * @see <https://mathiasbynens.be/notes/javascript-encoding>
-                * @memberOf punycode
-                * @type Object
-                */
-               'ucs2': {
-                       'decode': ucs2decode,
-                       'encode': ucs2encode
-               },
-               'decode': decode,
-               'encode': encode,
-               'toASCII': toASCII,
-               'toUnicode': toUnicode
-       };
-
-       /** Expose `punycode` */
-       // Some AMD build optimizers, like r.js, check for specific condition patterns
-       // like the following:
-       if (
-               typeof define == 'function' &&
-               typeof define.amd == 'object' &&
-               define.amd
-       ) {
-               define('punycode', function() {
-                       return punycode;
-               });
-       } else if (freeExports && freeModule) {
-               if (module.exports == freeExports) {
-                       // in Node.js, io.js, or RingoJS v0.8.0+
-                       freeModule.exports = punycode;
-               } else {
-                       // in Narwhal or RingoJS v0.7.0-
-                       for (key in punycode) {
-                               punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
-                       }
-               }
-       } else {
-               // in Rhino or a web browser
-               root.punycode = punycode;
-       }
-
-}(this));
-
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],113:[function(require,module,exports){
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-'use strict';
-
-// If obj.hasOwnProperty has been overridden, then calling
-// obj.hasOwnProperty(prop) will break.
-// See: https://github.com/joyent/node/issues/1707
-function hasOwnProperty(obj, prop) {
-  return Object.prototype.hasOwnProperty.call(obj, prop);
-}
-
-module.exports = function(qs, sep, eq, options) {
-  sep = sep || '&';
-  eq = eq || '=';
-  var obj = {};
-
-  if (typeof qs !== 'string' || qs.length === 0) {
-    return obj;
-  }
-
-  var regexp = /\+/g;
-  qs = qs.split(sep);
-
-  var maxKeys = 1000;
-  if (options && typeof options.maxKeys === 'number') {
-    maxKeys = options.maxKeys;
-  }
-
-  var len = qs.length;
-  // maxKeys <= 0 means that we should not limit keys count
-  if (maxKeys > 0 && len > maxKeys) {
-    len = maxKeys;
-  }
-
-  for (var i = 0; i < len; ++i) {
-    var x = qs[i].replace(regexp, '%20'),
-        idx = x.indexOf(eq),
-        kstr, vstr, k, v;
-
-    if (idx >= 0) {
-      kstr = x.substr(0, idx);
-      vstr = x.substr(idx + 1);
-    } else {
-      kstr = x;
-      vstr = '';
-    }
-
-    k = decodeURIComponent(kstr);
-    v = decodeURIComponent(vstr);
-
-    if (!hasOwnProperty(obj, k)) {
-      obj[k] = v;
-    } else if (isArray(obj[k])) {
-      obj[k].push(v);
-    } else {
-      obj[k] = [obj[k], v];
-    }
-  }
-
-  return obj;
-};
-
-var isArray = Array.isArray || function (xs) {
-  return Object.prototype.toString.call(xs) === '[object Array]';
-};
-
-},{}],114:[function(require,module,exports){
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-'use strict';
-
-var stringifyPrimitive = function(v) {
-  switch (typeof v) {
-    case 'string':
-      return v;
-
-    case 'boolean':
-      return v ? 'true' : 'false';
-
-    case 'number':
-      return isFinite(v) ? v : '';
-
-    default:
-      return '';
-  }
+var Keywords = {
+  '^': [
+    'inherit',
+    'initial',
+    'unset'
+  ],
+  '*-style': [
+    'auto',
+    'dashed',
+    'dotted',
+    'double',
+    'groove',
+    'hidden',
+    'inset',
+    'none',
+    'outset',
+    'ridge',
+    'solid'
+  ],
+  'animation-direction': [
+    'alternate',
+    'alternate-reverse',
+    'normal',
+    'reverse'
+  ],
+  'animation-fill-mode': [
+    'backwards',
+    'both',
+    'forwards',
+    'none'
+  ],
+  'animation-iteration-count': [
+    'infinite'
+  ],
+  'animation-name': [
+    'none'
+  ],
+  'animation-play-state': [
+    'paused',
+    'running'
+  ],
+  'animation-timing-function': [
+    'ease',
+    'ease-in',
+    'ease-in-out',
+    'ease-out',
+    'linear',
+    'step-end',
+    'step-start'
+  ],
+  'background-attachment': [
+    'fixed',
+    'inherit',
+    'local',
+    'scroll'
+  ],
+  'background-clip': [
+    'border-box',
+    'content-box',
+    'inherit',
+    'padding-box',
+    'text'
+  ],
+  'background-origin': [
+    'border-box',
+    'content-box',
+    'inherit',
+    'padding-box'
+  ],
+  'background-position': [
+    'bottom',
+    'center',
+    'left',
+    'right',
+    'top'
+  ],
+  'background-repeat': [
+    'no-repeat',
+    'inherit',
+    'repeat',
+    'repeat-x',
+    'repeat-y',
+    'round',
+    'space'
+  ],
+  'background-size': [
+    'auto',
+    'cover',
+    'contain'
+  ],
+  'border-collapse': [
+    'collapse',
+    'inherit',
+    'separate'
+  ],
+  'bottom': [
+    'auto'
+  ],
+  'clear': [
+    'both',
+    'left',
+    'none',
+    'right'
+  ],
+  'color': [
+    'transparent'
+  ],
+  'cursor': [
+    'all-scroll',
+    'auto',
+    'col-resize',
+    'crosshair',
+    'default',
+    'e-resize',
+    'help',
+    'move',
+    'n-resize',
+    'ne-resize',
+    'no-drop',
+    'not-allowed',
+    'nw-resize',
+    'pointer',
+    'progress',
+    'row-resize',
+    's-resize',
+    'se-resize',
+    'sw-resize',
+    'text',
+    'vertical-text',
+    'w-resize',
+    'wait'
+  ],
+  'display': [
+    'block',
+    'inline',
+    'inline-block',
+    'inline-table',
+    'list-item',
+    'none',
+    'table',
+    'table-caption',
+    'table-cell',
+    'table-column',
+    'table-column-group',
+    'table-footer-group',
+    'table-header-group',
+    'table-row',
+    'table-row-group'
+  ],
+  'float': [
+    'left',
+    'none',
+    'right'
+  ],
+  'left': [
+    'auto'
+  ],
+  'font': [
+    'caption',
+    'icon',
+    'menu',
+    'message-box',
+    'small-caption',
+    'status-bar',
+    'unset'
+  ],
+  'font-size': [
+    'large',
+    'larger',
+    'medium',
+    'small',
+    'smaller',
+    'x-large',
+    'x-small',
+    'xx-large',
+    'xx-small'
+  ],
+  'font-stretch': [
+    'condensed',
+    'expanded',
+    'extra-condensed',
+    'extra-expanded',
+    'normal',
+    'semi-condensed',
+    'semi-expanded',
+    'ultra-condensed',
+    'ultra-expanded'
+  ],
+  'font-style': [
+    'italic',
+    'normal',
+    'oblique'
+  ],
+  'font-variant': [
+    'normal',
+    'small-caps'
+  ],
+  'font-weight': [
+    '100',
+    '200',
+    '300',
+    '400',
+    '500',
+    '600',
+    '700',
+    '800',
+    '900',
+    'bold',
+    'bolder',
+    'lighter',
+    'normal'
+  ],
+  'line-height': [
+    'normal'
+  ],
+  'list-style-position': [
+    'inside',
+    'outside'
+  ],
+  'list-style-type': [
+    'armenian',
+    'circle',
+    'decimal',
+    'decimal-leading-zero',
+    'disc',
+    'decimal|disc', // this is the default value of list-style-type, see comment in compactable.js
+    'georgian',
+    'lower-alpha',
+    'lower-greek',
+    'lower-latin',
+    'lower-roman',
+    'none',
+    'square',
+    'upper-alpha',
+    'upper-latin',
+    'upper-roman'
+  ],
+  'overflow': [
+    'auto',
+    'hidden',
+    'scroll',
+    'visible'
+  ],
+  'position': [
+    'absolute',
+    'fixed',
+    'relative',
+    'static'
+  ],
+  'right': [
+    'auto'
+  ],
+  'text-align': [
+    'center',
+    'justify',
+    'left',
+    'left|right', // this is the default value of list-style-type, see comment in compactable.js
+    'right'
+  ],
+  'text-decoration': [
+    'line-through',
+    'none',
+    'overline',
+    'underline'
+  ],
+  'text-overflow': [
+    'clip',
+    'ellipsis'
+  ],
+  'top': [
+    'auto'
+  ],
+  'vertical-align': [
+    'baseline',
+    'bottom',
+    'middle',
+    'sub',
+    'super',
+    'text-bottom',
+    'text-top',
+    'top'
+  ],
+  'visibility': [
+    'collapse',
+    'hidden',
+    'visible'
+  ],
+  'white-space': [
+    'normal',
+    'nowrap',
+    'pre'
+  ],
+  'width': [
+    'inherit',
+    'initial',
+    'medium',
+    'thick',
+    'thin'
+  ]
 };
 
-module.exports = function(obj, sep, eq, name) {
-  sep = sep || '&';
-  eq = eq || '=';
-  if (obj === null) {
-    obj = undefined;
-  }
-
-  if (typeof obj === 'object') {
-    return map(objectKeys(obj), function(k) {
-      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
-      if (isArray(obj[k])) {
-        return map(obj[k], function(v) {
-          return ks + encodeURIComponent(stringifyPrimitive(v));
-        }).join(sep);
-      } else {
-        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
-      }
-    }).join(sep);
-
-  }
-
-  if (!name) return '';
-  return encodeURIComponent(stringifyPrimitive(name)) + eq +
-         encodeURIComponent(stringifyPrimitive(obj));
-};
+var Units = [
+  '%',
+  'ch',
+  'cm',
+  'em',
+  'ex',
+  'in',
+  'mm',
+  'pc',
+  'pt',
+  'px',
+  'rem',
+  'vh',
+  'vm',
+  'vmax',
+  'vmin',
+  'vw'
+];
 
-var isArray = Array.isArray || function (xs) {
-  return Object.prototype.toString.call(xs) === '[object Array]';
-};
+function isAnimationTimingFunction() {
+  var isTimingFunctionKeyword = isKeyword('animation-timing-function');
 
-function map (xs, f) {
-  if (xs.map) return xs.map(f);
-  var res = [];
-  for (var i = 0; i < xs.length; i++) {
-    res.push(f(xs[i], i));
-  }
-  return res;
+  return function (value) {
+    return isTimingFunctionKeyword(value) || animationTimingFunctionRegex.test(value);
+  };
 }
-
-var objectKeys = Object.keys || function (obj) {
-  var res = [];
-  for (var key in obj) {
-    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
-  }
-  return res;
-};
-
-},{}],115:[function(require,module,exports){
-'use strict';
-
-exports.decode = exports.parse = require('./decode');
-exports.encode = exports.stringify = require('./encode');
-
-},{"./decode":113,"./encode":114}],116:[function(require,module,exports){
-// a duplex stream is just a stream that is both readable and writable.
-// Since JS doesn't have multiple prototypal inheritance, this class
-// prototypally inherits from Readable, and then parasitically from
-// Writable.
-
-'use strict';
-
-/*<replacement>*/
-
-var objectKeys = Object.keys || function (obj) {
-  var keys = [];
-  for (var key in obj) {
-    keys.push(key);
-  }return keys;
-};
-/*</replacement>*/
-
-module.exports = Duplex;
-
-/*<replacement>*/
-var processNextTick = require('process-nextick-args');
-/*</replacement>*/
-
-/*<replacement>*/
-var util = require('core-util-is');
-util.inherits = require('inherits');
-/*</replacement>*/
-
-var Readable = require('./_stream_readable');
-var Writable = require('./_stream_writable');
-
-util.inherits(Duplex, Readable);
-
-var keys = objectKeys(Writable.prototype);
-for (var v = 0; v < keys.length; v++) {
-  var method = keys[v];
-  if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
+
+function isColor(value) {
+  return value != 'auto' &&
+    (
+      isKeyword('color')(value) ||
+      isHexColor(value) ||
+      isColorFunction(value) ||
+      isNamedEntity(value)
+    );
 }
 
-function Duplex(options) {
-  if (!(this instanceof Duplex)) return new Duplex(options);
+function isColorFunction(value) {
+  return isRgbColor(value) || isHslColor(value);
+}
 
-  Readable.call(this, options);
-  Writable.call(this, options);
+function isDynamicUnit(value) {
+  return calcRegex.test(value);
+}
 
-  if (options && options.readable === false) this.readable = false;
+function isFunction(value) {
+  return functionAnyRegex.test(value);
+}
 
-  if (options && options.writable === false) this.writable = false;
+function isHexColor(value) {
+  return shortHexColorRegex.test(value) || longHexColorRegex.test(value);
+}
 
-  this.allowHalfOpen = true;
-  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
+function isHslColor(value) {
+  return hslColorRegex.test(value);
+}
 
-  this.once('end', onend);
+function isIdentifier(value) {
+  return identifierRegex.test(value);
 }
 
-// the no-half-open enforcer
-function onend() {
-  // if we allow half-open state, or if the writable side ended,
-  // then we're ok.
-  if (this.allowHalfOpen || this._writableState.ended) return;
+function isImage(value) {
+  return value == 'none' || value == 'inherit' || isUrl(value);
+}
 
-  // no more data can be written.
-  // But allow more writes to happen in this tick.
-  processNextTick(onEndNT, this);
+function isKeyword(propertyName) {
+  return function(value) {
+    return Keywords[propertyName].indexOf(value) > -1;
+  };
 }
 
-function onEndNT(self) {
-  self.end();
+function isNamedEntity(value) {
+  return namedEntityRegex.test(value);
 }
 
-function forEach(xs, f) {
-  for (var i = 0, l = xs.length; i < l; i++) {
-    f(xs[i], i);
-  }
+function isNumber(value) {
+  return value.length > 0 && ('' + parseFloat(value)) === value;
 }
-},{"./_stream_readable":118,"./_stream_writable":120,"core-util-is":99,"inherits":104,"process-nextick-args":110}],117:[function(require,module,exports){
-// a passthrough stream.
-// basically just the most minimal sort of Transform stream.
-// Every written chunk gets output as-is.
 
-'use strict';
+function isRgbColor(value) {
+  return rgbColorRegex.test(value);
+}
 
-module.exports = PassThrough;
+function isPrefixed(value) {
+  return prefixRegex.test(value);
+}
 
-var Transform = require('./_stream_transform');
+function isPositiveNumber(value) {
+  return isNumber(value) &&
+    parseFloat(value) >= 0;
+}
 
-/*<replacement>*/
-var util = require('core-util-is');
-util.inherits = require('inherits');
-/*</replacement>*/
+function isVariable(value) {
+  return variableRegex.test(value);
+}
 
-util.inherits(PassThrough, Transform);
+function isTime(value) {
+  return timeRegex.test(value);
+}
 
-function PassThrough(options) {
-  if (!(this instanceof PassThrough)) return new PassThrough(options);
+function isUnit(compatibleCssUnitRegex, value) {
+  return compatibleCssUnitRegex.test(value);
+}
 
-  Transform.call(this, options);
+function isUrl(value) {
+  return urlRegex.test(value);
 }
 
-PassThrough.prototype._transform = function (chunk, encoding, cb) {
-  cb(null, chunk);
-};
-},{"./_stream_transform":119,"core-util-is":99,"inherits":104}],118:[function(require,module,exports){
-(function (process){
-'use strict';
+function isZIndex(value) {
+  return value == 'auto' ||
+    isNumber(value) ||
+    isKeyword('^')(value);
+}
 
-module.exports = Readable;
+function validator(compatibility) {
+  var validUnits = Units.slice(0).filter(function (value) {
+    return !(value in compatibility.units) || compatibility.units[value] === true;
+  });
 
-/*<replacement>*/
-var processNextTick = require('process-nextick-args');
-/*</replacement>*/
+  var compatibleCssUnitRegex = new RegExp('^(\\-?\\.?\\d+\\.?\\d*(' + validUnits.join('|') + '|)|auto|inherit)$', 'i');
 
-/*<replacement>*/
-var isArray = require('isarray');
-/*</replacement>*/
+  return {
+    colorOpacity: compatibility.colors.opacity,
+    isAnimationDirectionKeyword: isKeyword('animation-direction'),
+    isAnimationFillModeKeyword: isKeyword('animation-fill-mode'),
+    isAnimationIterationCountKeyword: isKeyword('animation-iteration-count'),
+    isAnimationNameKeyword: isKeyword('animation-name'),
+    isAnimationPlayStateKeyword: isKeyword('animation-play-state'),
+    isAnimationTimingFunction: isAnimationTimingFunction(),
+    isBackgroundAttachmentKeyword: isKeyword('background-attachment'),
+    isBackgroundClipKeyword: isKeyword('background-clip'),
+    isBackgroundOriginKeyword: isKeyword('background-origin'),
+    isBackgroundPositionKeyword: isKeyword('background-position'),
+    isBackgroundRepeatKeyword: isKeyword('background-repeat'),
+    isBackgroundSizeKeyword: isKeyword('background-size'),
+    isColor: isColor,
+    isColorFunction: isColorFunction,
+    isDynamicUnit: isDynamicUnit,
+    isFontKeyword: isKeyword('font'),
+    isFontSizeKeyword: isKeyword('font-size'),
+    isFontStretchKeyword: isKeyword('font-stretch'),
+    isFontStyleKeyword: isKeyword('font-style'),
+    isFontVariantKeyword: isKeyword('font-variant'),
+    isFontWeightKeyword: isKeyword('font-weight'),
+    isFunction: isFunction,
+    isGlobal: isKeyword('^'),
+    isHslColor: isHslColor,
+    isIdentifier: isIdentifier,
+    isImage: isImage,
+    isKeyword: isKeyword,
+    isLineHeightKeyword: isKeyword('line-height'),
+    isListStylePositionKeyword: isKeyword('list-style-position'),
+    isListStyleTypeKeyword: isKeyword('list-style-type'),
+    isPrefixed: isPrefixed,
+    isPositiveNumber: isPositiveNumber,
+    isRgbColor: isRgbColor,
+    isStyleKeyword: isKeyword('*-style'),
+    isTime: isTime,
+    isUnit: isUnit.bind(null, compatibleCssUnitRegex),
+    isUrl: isUrl,
+    isVariable: isVariable,
+    isWidth: isKeyword('width'),
+    isZIndex: isZIndex
+  };
+}
 
-/*<replacement>*/
-var Duplex;
-/*</replacement>*/
+module.exports = validator;
 
-Readable.ReadableState = ReadableState;
+},{}],59:[function(require,module,exports){
+var Hack = require('./hack');
 
-/*<replacement>*/
-var EE = require('events').EventEmitter;
+var Marker = require('../tokenizer/marker');
+var Token = require('../tokenizer/token');
 
-var EElistenerCount = function (emitter, type) {
-  return emitter.listeners(type).length;
+var Match = {
+  ASTERISK: '*',
+  BACKSLASH: '\\',
+  BANG: '!',
+  BANG_SUFFIX_PATTERN: /!\w+$/,
+  IMPORTANT_TOKEN: '!important',
+  IMPORTANT_TOKEN_PATTERN: new RegExp('!important$', 'i'),
+  IMPORTANT_WORD: 'important',
+  IMPORTANT_WORD_PATTERN: new RegExp('important$', 'i'),
+  SUFFIX_BANG_PATTERN: /!$/,
+  UNDERSCORE: '_',
+  VARIABLE_REFERENCE_PATTERN: /var\(--.+\)$/
 };
-/*</replacement>*/
 
-/*<replacement>*/
-var Stream = require('./internal/streams/stream');
-/*</replacement>*/
+function wrapAll(properties, includeVariable, skipProperties) {
+  var wrapped = [];
+  var single;
+  var property;
+  var i;
 
-var Buffer = require('buffer').Buffer;
-/*<replacement>*/
-var bufferShim = require('buffer-shims');
-/*</replacement>*/
+  for (i = properties.length - 1; i >= 0; i--) {
+    property = properties[i];
 
-/*<replacement>*/
-var util = require('core-util-is');
-util.inherits = require('inherits');
-/*</replacement>*/
+    if (property[0] != Token.PROPERTY) {
+      continue;
+    }
 
-/*<replacement>*/
-var debugUtil = require('util');
-var debug = void 0;
-if (debugUtil && debugUtil.debuglog) {
-  debug = debugUtil.debuglog('stream');
-} else {
-  debug = function () {};
+    if (!includeVariable && someVariableReferences(property)) {
+      continue;
+    }
+
+    if (skipProperties && skipProperties.indexOf(property[1][1]) > -1) {
+      continue;
+    }
+
+    single = wrapSingle(property);
+    single.all = properties;
+    single.position = i;
+    wrapped.unshift(single);
+  }
+
+  return wrapped;
 }
-/*</replacement>*/
 
-var BufferList = require('./internal/streams/BufferList');
-var StringDecoder;
+function someVariableReferences(property) {
+  var i, l;
+  var value;
 
-util.inherits(Readable, Stream);
+  // skipping `property` and property name tokens
+  for (i = 2, l = property.length; i < l; i++) {
+    value = property[i];
 
-var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
+    if (value[0] != Token.PROPERTY_VALUE) {
+      continue;
+    }
 
-function prependListener(emitter, event, fn) {
-  // Sadly this is not cacheable as some libraries bundle their own
-  // event emitter implementation with them.
-  if (typeof emitter.prependListener === 'function') {
-    return emitter.prependListener(event, fn);
-  } else {
-    // This is a hack to make sure that our error handler is attached before any
-    // userland ones.  NEVER DO THIS. This is here only because this code needs
-    // to continue to work with older versions of Node.js that do not include
-    // the prependListener() method. The goal is to eventually remove this hack.
-    if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
+    if (isVariableReference(value[1])) {
+      return true;
+    }
   }
+
+  return false;
 }
 
-function ReadableState(options, stream) {
-  Duplex = Duplex || require('./_stream_duplex');
+function isVariableReference(value) {
+  return Match.VARIABLE_REFERENCE_PATTERN.test(value);
+}
 
-  options = options || {};
+function isMultiplex(property) {
+  var value;
+  var i, l;
 
-  // object stream flag. Used to make read(n) ignore n and to
-  // make all the buffer merging and length checks go away
-  this.objectMode = !!options.objectMode;
+  for (i = 3, l = property.length; i < l; i++) {
+    value = property[i];
 
-  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
+    if (value[0] == Token.PROPERTY_VALUE && (value[1] == Marker.COMMA || value[1] == Marker.FORWARD_SLASH)) {
+      return true;
+    }
+  }
 
-  // the point at which it stops calling _read() to fill the buffer
-  // Note: 0 is a valid value, means "don't call _read preemptively ever"
-  var hwm = options.highWaterMark;
-  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
-  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
+  return false;
+}
 
-  // cast to ints.
-  this.highWaterMark = ~~this.highWaterMark;
+function hackFrom(property) {
+  var match = false;
+  var name = property[1][1];
+  var lastValue = property[property.length - 1];
 
-  // A linked list is used to store data chunks instead of an array because the
-  // linked list can remove elements from the beginning faster than
-  // array.shift()
-  this.buffer = new BufferList();
-  this.length = 0;
-  this.pipes = null;
-  this.pipesCount = 0;
-  this.flowing = null;
-  this.ended = false;
-  this.endEmitted = false;
-  this.reading = false;
+  if (name[0] == Match.UNDERSCORE) {
+    match = [Hack.UNDERSCORE];
+  } else if (name[0] == Match.ASTERISK) {
+    match = [Hack.ASTERISK];
+  } else if (lastValue[1][0] == Match.BANG && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN)) {
+    match = [Hack.BANG];
+  } else if (lastValue[1].indexOf(Match.BANG) > 0 && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN) && Match.BANG_SUFFIX_PATTERN.test(lastValue[1])) {
+    match = [Hack.BANG];
+  } else if (lastValue[1].indexOf(Match.BACKSLASH) > 0 && lastValue[1].indexOf(Match.BACKSLASH) == lastValue[1].length - Match.BACKSLASH.length - 1) {
+    match = [Hack.BACKSLASH, lastValue[1].substring(lastValue[1].indexOf(Match.BACKSLASH) + 1)];
+  } else if (lastValue[1].indexOf(Match.BACKSLASH) === 0 && lastValue[1].length == 2) {
+    match = [Hack.BACKSLASH, lastValue[1].substring(1)];
+  }
 
-  // a flag to be able to tell if the onwrite cb is called immediately,
-  // or on a later tick.  We set this to true at first, because any
-  // actions that shouldn't happen until "later" should generally also
-  // not happen before the first write call.
-  this.sync = true;
+  return match;
+}
 
-  // whenever we return null, then we set a flag to say
-  // that we're awaiting a 'readable' event emission.
-  this.needReadable = false;
-  this.emittedReadable = false;
-  this.readableListening = false;
-  this.resumeScheduled = false;
+function isImportant(property) {
+  if (property.length < 3)
+    return false;
 
-  // Crypto is kind of old and crusty.  Historically, its default string
-  // encoding is 'binary' so we have to make this configurable.
-  // Everything else in the universe uses 'utf8', though.
-  this.defaultEncoding = options.defaultEncoding || 'utf8';
+  var lastValue = property[property.length - 1];
+  if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) {
+    return true;
+  } else if (Match.IMPORTANT_WORD_PATTERN.test(lastValue[1]) && Match.SUFFIX_BANG_PATTERN.test(property[property.length - 2][1])) {
+    return true;
+  }
+
+  return false;
+}
 
-  // when piping, we only care about 'readable' events that happen
-  // after read()ing all the bytes and not getting any pushback.
-  this.ranOut = false;
+function stripImportant(property) {
+  var lastValue = property[property.length - 1];
+  var oneButLastValue = property[property.length - 2];
 
-  // the number of writers that are awaiting a drain event in .pipe()s
-  this.awaitDrain = 0;
+  if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) {
+    lastValue[1] = lastValue[1].replace(Match.IMPORTANT_TOKEN_PATTERN, '');
+  } else {
+    lastValue[1] = lastValue[1].replace(Match.IMPORTANT_WORD_PATTERN, '');
+    oneButLastValue[1] = oneButLastValue[1].replace(Match.SUFFIX_BANG_PATTERN, '');
+  }
 
-  // if true, a maybeReadMore has been scheduled
-  this.readingMore = false;
+  if (lastValue[1].length === 0) {
+    property.pop();
+  }
 
-  this.decoder = null;
-  this.encoding = null;
-  if (options.encoding) {
-    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
-    this.decoder = new StringDecoder(options.encoding);
-    this.encoding = options.encoding;
+  if (oneButLastValue[1].length === 0) {
+    property.pop();
   }
 }
 
-function Readable(options) {
-  Duplex = Duplex || require('./_stream_duplex');
+function stripPrefixHack(property) {
+  property[1][1] = property[1][1].substring(1);
+}
 
-  if (!(this instanceof Readable)) return new Readable(options);
+function stripSuffixHack(property, hackFrom) {
+  var lastValue = property[property.length - 1];
+  lastValue[1] = lastValue[1]
+    .substring(0, lastValue[1].indexOf(hackFrom[0] == Hack.BACKSLASH ? Match.BACKSLASH : Match.BANG))
+    .trim();
 
-  this._readableState = new ReadableState(options, this);
+  if (lastValue[1].length === 0) {
+    property.pop();
+  }
+}
 
-  // legacy
-  this.readable = true;
+function wrapSingle(property) {
+  var importantProperty = isImportant(property);
+  if (importantProperty) {
+    stripImportant(property);
+  }
 
-  if (options && typeof options.read === 'function') this._read = options.read;
+  var whichHack = hackFrom(property);
+  if (whichHack[0] == Hack.ASTERISK || whichHack[0] == Hack.UNDERSCORE) {
+    stripPrefixHack(property);
+  } else if (whichHack[0] == Hack.BACKSLASH || whichHack[0] == Hack.BANG) {
+    stripSuffixHack(property, whichHack);
+  }
 
-  Stream.call(this);
+  return {
+    block: property[2] && property[2][0] == Token.PROPERTY_BLOCK,
+    components: [],
+    dirty: false,
+    hack: whichHack,
+    important: importantProperty,
+    name: property[1][1],
+    multiplex: property.length > 3 ? isMultiplex(property) : false,
+    position: 0,
+    shorthand: false,
+    unused: false,
+    value: property.slice(2)
+  };
 }
 
-// Manually shove something into the read() buffer.
-// This returns true if the highWaterMark has not been hit yet,
-// similar to how Writable.write() returns true if you should
-// write() some more.
-Readable.prototype.push = function (chunk, encoding) {
-  var state = this._readableState;
+module.exports = {
+  all: wrapAll,
+  single: wrapSingle
+};
 
-  if (!state.objectMode && typeof chunk === 'string') {
-    encoding = encoding || state.defaultEncoding;
-    if (encoding !== state.encoding) {
-      chunk = bufferShim.from(chunk, encoding);
-      encoding = '';
+},{"../tokenizer/marker":84,"../tokenizer/token":85,"./hack":9}],60:[function(require,module,exports){
+var DEFAULTS = {
+  '*': {
+    colors: {
+      opacity: true // rgba / hsla
+    },
+    properties: {
+      backgroundClipMerging: true, // background-clip to shorthand
+      backgroundOriginMerging: true, // background-origin to shorthand
+      backgroundSizeMerging: true, // background-size to shorthand
+      colors: true, // any kind of color transformations, like `#ff00ff` to `#f0f` or `#fff` into `red`
+      ieBangHack: false, // !ie suffix hacks on IE<8
+      ieFilters: false, // whether to preserve `filter` and `-ms-filter` properties
+      iePrefixHack: false, // underscore / asterisk prefix hacks on IE
+      ieSuffixHack: false, // \9 suffix hacks on IE6-9
+      merging: true, // merging properties into one
+      shorterLengthUnits: false, // optimize pixel units into `pt`, `pc` or `in` units
+      spaceAfterClosingBrace: true, // 'url() no-repeat' to 'url()no-repeat'
+      urlQuotes: false, // whether to wrap content of `url()` into quotes or not
+      zeroUnits: true // 0[unit] -> 0
+    },
+    selectors: {
+      adjacentSpace: false, // div+ nav Android stock browser hack
+      ie7Hack: false, // *+html hack
+      mergeablePseudoClasses: [
+        ':active',
+        ':after',
+        ':before',
+        ':empty',
+        ':checked',
+        ':disabled',
+        ':empty',
+        ':enabled',
+        ':first-child',
+        ':first-letter',
+        ':first-line',
+        ':first-of-type',
+        ':focus',
+        ':hover',
+        ':lang',
+        ':last-child',
+        ':last-of-type',
+        ':link',
+        ':not',
+        ':nth-child',
+        ':nth-last-child',
+        ':nth-last-of-type',
+        ':nth-of-type',
+        ':only-child',
+        ':only-of-type',
+        ':root',
+        ':target',
+        ':visited'
+      ], // selectors with these pseudo-classes can be merged as these are universally supported
+      mergeablePseudoElements: [
+        '::after',
+        '::before',
+        '::first-letter',
+        '::first-line'
+      ], // selectors with these pseudo-elements can be merged as these are universally supported
+      mergeLimit: 8191, // number of rules that can be safely merged together
+      multiplePseudoMerging: true
+    },
+    units: {
+      ch: true,
+      in: true,
+      pc: true,
+      pt: true,
+      rem: true,
+      vh: true,
+      vm: true, // vm is vmin on IE9+ see https://developer.mozilla.org/en-US/docs/Web/CSS/length
+      vmax: true,
+      vmin: true,
+      vw: true
     }
   }
-
-  return readableAddChunk(this, state, chunk, encoding, false);
 };
 
-// Unshift should *always* be something directly out of read()
-Readable.prototype.unshift = function (chunk) {
-  var state = this._readableState;
-  return readableAddChunk(this, state, chunk, '', true);
-};
+DEFAULTS.ie11 = DEFAULTS['*'];
 
-Readable.prototype.isPaused = function () {
-  return this._readableState.flowing === false;
-};
+DEFAULTS.ie10 = DEFAULTS['*'];
 
-function readableAddChunk(stream, state, chunk, encoding, addToFront) {
-  var er = chunkInvalid(state, chunk);
-  if (er) {
-    stream.emit('error', er);
-  } else if (chunk === null) {
-    state.reading = false;
-    onEofChunk(stream, state);
-  } else if (state.objectMode || chunk && chunk.length > 0) {
-    if (state.ended && !addToFront) {
-      var e = new Error('stream.push() after EOF');
-      stream.emit('error', e);
-    } else if (state.endEmitted && addToFront) {
-      var _e = new Error('stream.unshift() after end event');
-      stream.emit('error', _e);
-    } else {
-      var skipAdd;
-      if (state.decoder && !addToFront && !encoding) {
-        chunk = state.decoder.write(chunk);
-        skipAdd = !state.objectMode && chunk.length === 0;
-      }
+DEFAULTS.ie9 = merge(DEFAULTS['*'], {
+  properties: {
+    ieFilters: true,
+    ieSuffixHack: true
+  }
+});
 
-      if (!addToFront) state.reading = false;
+DEFAULTS.ie8 = merge(DEFAULTS.ie9, {
+  colors: {
+    opacity: false
+  },
+  properties: {
+    backgroundClipMerging: false,
+    backgroundOriginMerging: false,
+    backgroundSizeMerging: false,
+    iePrefixHack: true,
+    merging: false
+  },
+  selectors: {
+    mergeablePseudoClasses: [
+      ':after',
+      ':before',
+      ':first-child',
+      ':first-letter',
+      ':focus',
+      ':hover',
+      ':visited'
+    ],
+    mergeablePseudoElements: []
+  },
+  units: {
+    ch: false,
+    rem: false,
+    vh: false,
+    vm: false,
+    vmax: false,
+    vmin: false,
+    vw: false
+  }
+});
 
-      // Don't add to the buffer if we've decoded to an empty string chunk and
-      // we're not in object mode
-      if (!skipAdd) {
-        // if we want the data now, just emit it.
-        if (state.flowing && state.length === 0 && !state.sync) {
-          stream.emit('data', chunk);
-          stream.read(0);
-        } else {
-          // update the buffer info.
-          state.length += state.objectMode ? 1 : chunk.length;
-          if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
+DEFAULTS.ie7 = merge(DEFAULTS.ie8, {
+  properties: {
+    ieBangHack: true
+  },
+  selectors: {
+    ie7Hack: true,
+    mergeablePseudoClasses: [
+      ':first-child',
+      ':first-letter',
+      ':hover',
+      ':visited'
+    ]
+  },
+});
+
+function compatibilityFrom(source) {
+  return merge(DEFAULTS['*'], calculateSource(source));
+}
 
-          if (state.needReadable) emitReadable(stream);
-        }
-      }
+function merge(source, target) {
+  for (var key in source) {
+    var value = source[key];
 
-      maybeReadMore(stream, state);
+    if (typeof value === 'object' && !Array.isArray(value)) {
+      target[key] = merge(value, target[key] || {});
+    } else {
+      target[key] = key in target ? target[key] : value;
     }
-  } else if (!addToFront) {
-    state.reading = false;
   }
 
-  return needMoreData(state);
+  return target;
 }
 
-// if it's past the high water mark, we can push in some more.
-// Also, if we have no data yet, we can stand some
-// more bytes.  This is to work around cases where hwm=0,
-// such as the repl.  Also, if the push() triggered a
-// readable event, and the user called read(largeNumber) such that
-// needReadable was set, then we ought to push more, so that another
-// 'readable' event will be triggered.
-function needMoreData(state) {
-  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
-}
+function calculateSource(source) {
+  if (typeof source == 'object')
+    return source;
 
-// backwards compatibility.
-Readable.prototype.setEncoding = function (enc) {
-  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
-  this._readableState.decoder = new StringDecoder(enc);
-  this._readableState.encoding = enc;
-  return this;
-};
+  if (!/[,\+\-]/.test(source))
+    return DEFAULTS[source] || DEFAULTS['*'];
 
-// Don't raise the hwm > 8MB
-var MAX_HWM = 0x800000;
-function computeNewHighWaterMark(n) {
-  if (n >= MAX_HWM) {
-    n = MAX_HWM;
-  } else {
-    // Get the next highest power of 2 to prevent increasing hwm excessively in
-    // tiny amounts
-    n--;
-    n |= n >>> 1;
-    n |= n >>> 2;
-    n |= n >>> 4;
-    n |= n >>> 8;
-    n |= n >>> 16;
-    n++;
-  }
-  return n;
-}
+  var parts = source.split(',');
+  var template = parts[0] in DEFAULTS ?
+    DEFAULTS[parts.shift()] :
+    DEFAULTS['*'];
 
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function howMuchToRead(n, state) {
-  if (n <= 0 || state.length === 0 && state.ended) return 0;
-  if (state.objectMode) return 1;
-  if (n !== n) {
-    // Only flow one buffer at a time
-    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
-  }
-  // If we're asking for more than the current hwm, then raise the hwm.
-  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
-  if (n <= state.length) return n;
-  // Don't have enough
-  if (!state.ended) {
-    state.needReadable = true;
-    return 0;
-  }
-  return state.length;
+  source = {};
+
+  parts.forEach(function (part) {
+    var isAdd = part[0] == '+';
+    var key = part.substring(1).split('.');
+    var group = key[0];
+    var option = key[1];
+
+    source[group] = source[group] || {};
+    source[group][option] = isAdd;
+  });
+
+  return merge(template, source);
 }
 
-// you can override either this method, or the async _read(n) below.
-Readable.prototype.read = function (n) {
-  debug('read', n);
-  n = parseInt(n, 10);
-  var state = this._readableState;
-  var nOrig = n;
+module.exports = compatibilityFrom;
 
-  if (n !== 0) state.emittedReadable = false;
+},{}],61:[function(require,module,exports){
+var loadRemoteResource = require('../reader/load-remote-resource');
 
-  // if we're doing read(0) to trigger a readable event, but we
-  // already have a bunch of data in the buffer, then just trigger
-  // the 'readable' event and move on.
-  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
-    debug('read: emitReadable', state.length, state.ended);
-    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
-    return null;
-  }
+function fetchFrom(callback) {
+  return callback || loadRemoteResource;
+}
 
-  n = howMuchToRead(n, state);
+module.exports = fetchFrom;
 
-  // if we've ended, and we're now clear, then finish it up.
-  if (n === 0 && state.ended) {
-    if (state.length === 0) endReadable(this);
-    return null;
-  }
+},{"../reader/load-remote-resource":75}],62:[function(require,module,exports){
+var override = require('../utils/override');
 
-  // All the actual chunk generation logic needs to be
-  // *below* the call to _read.  The reason is that in certain
-  // synthetic stream cases, such as passthrough streams, _read
-  // may be a completely synchronous operation which may change
-  // the state of the read buffer, providing enough data when
-  // before there was *not* enough.
-  //
-  // So, the steps are:
-  // 1. Figure out what the state of things will be after we do
-  // a read from the buffer.
-  //
-  // 2. If that resulting state will trigger a _read, then call _read.
-  // Note that this may be asynchronous, or synchronous.  Yes, it is
-  // deeply ugly to write APIs this way, but that still doesn't mean
-  // that the Readable class should behave improperly, as streams are
-  // designed to be sync/async agnostic.
-  // Take note if the _read call is sync or async (ie, if the read call
-  // has returned yet), so that we know whether or not it's safe to emit
-  // 'readable' etc.
-  //
-  // 3. Actually pull the requested chunks out of the buffer and return.
+var Breaks = {
+  AfterAtRule: 'afterAtRule',
+  AfterBlockBegins: 'afterBlockBegins',
+  AfterBlockEnds: 'afterBlockEnds',
+  AfterComment: 'afterComment',
+  AfterProperty: 'afterProperty',
+  AfterRuleBegins: 'afterRuleBegins',
+  AfterRuleEnds: 'afterRuleEnds',
+  BeforeBlockEnds: 'beforeBlockEnds',
+  BetweenSelectors: 'betweenSelectors'
+};
 
-  // if we need a readable event, then we need to do some reading.
-  var doRead = state.needReadable;
-  debug('need readable', doRead);
+var IndentWith = {
+  Space: ' ',
+  Tab: '\t'
+};
 
-  // if we currently have less than the highWaterMark, then also read some
-  if (state.length === 0 || state.length - n < state.highWaterMark) {
-    doRead = true;
-    debug('length less than watermark', doRead);
-  }
+var Spaces = {
+  AroundSelectorRelation: 'aroundSelectorRelation',
+  BeforeBlockBegins: 'beforeBlockBegins',
+  BeforeValue: 'beforeValue'
+};
 
-  // however, if we've ended, then there's no point, and if we're already
-  // reading, then it's unnecessary.
-  if (state.ended || state.reading) {
-    doRead = false;
-    debug('reading or ended', doRead);
-  } else if (doRead) {
-    debug('do read');
-    state.reading = true;
-    state.sync = true;
-    // if the length is currently zero, then we *need* a readable event.
-    if (state.length === 0) state.needReadable = true;
-    // call internal read method
-    this._read(state.highWaterMark);
-    state.sync = false;
-    // If _read pushed data synchronously, then `reading` will be false,
-    // and we need to re-evaluate how much data we can return to the user.
-    if (!state.reading) n = howMuchToRead(nOrig, state);
-  }
+var DEFAULTS = {
+  breaks: breaks(false),
+  indentBy: 0,
+  indentWith: IndentWith.Space,
+  spaces: spaces(false),
+  wrapAt: false
+};
 
-  var ret;
-  if (n > 0) ret = fromList(n, state);else ret = null;
+var BEAUTIFY_ALIAS = 'beautify';
+var KEEP_BREAKS_ALIAS = 'keep-breaks';
 
-  if (ret === null) {
-    state.needReadable = true;
-    n = 0;
-  } else {
-    state.length -= n;
-  }
+var OPTION_SEPARATOR = ';';
+var OPTION_NAME_VALUE_SEPARATOR = ':';
+var HASH_VALUES_OPTION_SEPARATOR = ',';
+var HASH_VALUES_NAME_VALUE_SEPARATOR = '=';
 
-  if (state.length === 0) {
-    // If we have nothing in the buffer, then we want to know
-    // as soon as we *do* get something into the buffer.
-    if (!state.ended) state.needReadable = true;
+var FALSE_KEYWORD_1 = 'false';
+var FALSE_KEYWORD_2 = 'off';
+var TRUE_KEYWORD_1 = 'true';
+var TRUE_KEYWORD_2 = 'on';
 
-    // If we tried to read() past the EOF, then emit end on the next tick.
-    if (nOrig !== n && state.ended) endReadable(this);
-  }
+function breaks(value) {
+  var breakOptions = {};
 
-  if (ret !== null) this.emit('data', ret);
+  breakOptions[Breaks.AfterAtRule] = value;
+  breakOptions[Breaks.AfterBlockBegins] = value;
+  breakOptions[Breaks.AfterBlockEnds] = value;
+  breakOptions[Breaks.AfterComment] = value;
+  breakOptions[Breaks.AfterProperty] = value;
+  breakOptions[Breaks.AfterRuleBegins] = value;
+  breakOptions[Breaks.AfterRuleEnds] = value;
+  breakOptions[Breaks.BeforeBlockEnds] = value;
+  breakOptions[Breaks.BetweenSelectors] = value;
 
-  return ret;
-};
+  return breakOptions;
+}
 
-function chunkInvalid(state, chunk) {
-  var er = null;
-  if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
-    er = new TypeError('Invalid non-string/buffer chunk');
-  }
-  return er;
+function spaces(value) {
+  var spaceOptions = {};
+
+  spaceOptions[Spaces.AroundSelectorRelation] = value;
+  spaceOptions[Spaces.BeforeBlockBegins] = value;
+  spaceOptions[Spaces.BeforeValue] = value;
+
+  return spaceOptions;
 }
 
-function onEofChunk(stream, state) {
-  if (state.ended) return;
-  if (state.decoder) {
-    var chunk = state.decoder.end();
-    if (chunk && chunk.length) {
-      state.buffer.push(chunk);
-      state.length += state.objectMode ? 1 : chunk.length;
-    }
+function formatFrom(source) {
+  if (source === undefined || source === false) {
+    return false;
   }
-  state.ended = true;
 
-  // emit 'readable' now to make sure it gets picked up.
-  emitReadable(stream);
-}
+  if (typeof source == 'object' && 'indentBy' in source) {
+    source = override(source, { indentBy: parseInt(source.indentBy) });
+  }
 
-// Don't emit readable right away in sync mode, because this can trigger
-// another read() call => stack overflow.  This way, it might trigger
-// a nextTick recursion warning, but that's not so bad.
-function emitReadable(stream) {
-  var state = stream._readableState;
-  state.needReadable = false;
-  if (!state.emittedReadable) {
-    debug('emitReadable', state.flowing);
-    state.emittedReadable = true;
-    if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
+  if (typeof source == 'object' && 'indentWith' in source) {
+    source = override(source, { indentWith: mapIndentWith(source.indentWith) });
   }
-}
 
-function emitReadable_(stream) {
-  debug('emit readable');
-  stream.emit('readable');
-  flow(stream);
-}
+  if (typeof source == 'object') {
+    return override(DEFAULTS, source);
+  }
 
-// at this point, the user has presumably seen the 'readable' event,
-// and called read() to consume some data.  that may have triggered
-// in turn another _read(n) call, in which case reading = true if
-// it's in progress.
-// However, if we're not ended, or reading, and the length < hwm,
-// then go ahead and try to read some more preemptively.
-function maybeReadMore(stream, state) {
-  if (!state.readingMore) {
-    state.readingMore = true;
-    processNextTick(maybeReadMore_, stream, state);
+  if (typeof source == 'object') {
+    return override(DEFAULTS, source);
   }
-}
 
-function maybeReadMore_(stream, state) {
-  var len = state.length;
-  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
-    debug('maybeReadMore read 0');
-    stream.read(0);
-    if (len === state.length)
-      // didn't get any data, stop spinning.
-      break;else len = state.length;
+  if (typeof source == 'string' && source == BEAUTIFY_ALIAS) {
+    return override(DEFAULTS, {
+      breaks: breaks(true),
+      indentBy: 2,
+      spaces: spaces(true)
+    });
   }
-  state.readingMore = false;
+
+  if (typeof source == 'string' && source == KEEP_BREAKS_ALIAS) {
+    return override(DEFAULTS, {
+      breaks: {
+        afterAtRule: true,
+        afterBlockBegins: true,
+        afterBlockEnds: true,
+        afterComment: true,
+        afterRuleEnds: true,
+        beforeBlockEnds: true
+      }
+    });
+  }
+
+  if (typeof source == 'string') {
+    return override(DEFAULTS, toHash(source));
+  }
+
+  return DEFAULTS;
 }
 
-// abstract method.  to be overridden in specific implementation classes.
-// call cb(er, data) where data is <= n in length.
-// for virtual (non-string, non-buffer) streams, "length" is somewhat
-// arbitrary, and perhaps not very meaningful.
-Readable.prototype._read = function (n) {
-  this.emit('error', new Error('_read() is not implemented'));
-};
+function toHash(string) {
+  return string
+    .split(OPTION_SEPARATOR)
+    .reduce(function (accumulator, directive) {
+      var parts = directive.split(OPTION_NAME_VALUE_SEPARATOR);
+      var name = parts[0];
+      var value = parts[1];
 
-Readable.prototype.pipe = function (dest, pipeOpts) {
-  var src = this;
-  var state = this._readableState;
+      if (name == 'breaks' || name == 'spaces') {
+        accumulator[name] = hashValuesToHash(value);
+      } else if (name == 'indentBy' || name == 'wrapAt') {
+        accumulator[name] = parseInt(value);
+      } else if (name == 'indentWith') {
+        accumulator[name] = mapIndentWith(value);
+      }
 
-  switch (state.pipesCount) {
-    case 0:
-      state.pipes = dest;
-      break;
-    case 1:
-      state.pipes = [state.pipes, dest];
-      break;
-    default:
-      state.pipes.push(dest);
-      break;
-  }
-  state.pipesCount += 1;
-  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+      return accumulator;
+    }, {});
+}
 
-  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
+function hashValuesToHash(string) {
+  return string
+    .split(HASH_VALUES_OPTION_SEPARATOR)
+    .reduce(function (accumulator, directive) {
+      var parts = directive.split(HASH_VALUES_NAME_VALUE_SEPARATOR);
+      var name = parts[0];
+      var value = parts[1];
 
-  var endFn = doEnd ? onend : cleanup;
-  if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
+      accumulator[name] = normalizeValue(value);
 
-  dest.on('unpipe', onunpipe);
-  function onunpipe(readable) {
-    debug('onunpipe');
-    if (readable === src) {
-      cleanup();
-    }
+      return accumulator;
+    }, {});
+}
+
+
+function normalizeValue(value) {
+  switch (value) {
+    case FALSE_KEYWORD_1:
+    case FALSE_KEYWORD_2:
+      return false;
+    case TRUE_KEYWORD_1:
+    case TRUE_KEYWORD_2:
+      return true;
+    default:
+      return value;
   }
+}
 
-  function onend() {
-    debug('onend');
-    dest.end();
+function mapIndentWith(value) {
+  switch (value) {
+    case 'space':
+      return IndentWith.Space;
+    case 'tab':
+      return IndentWith.Tab;
+    default:
+      return value;
   }
+}
 
-  // when the dest drains, it reduces the awaitDrain counter
-  // on the source.  This would be more elegant with a .once()
-  // handler in flow(), but adding and removing repeatedly is
-  // too slow.
-  var ondrain = pipeOnDrain(src);
-  dest.on('drain', ondrain);
+module.exports = {
+  Breaks: Breaks,
+  Spaces: Spaces,
+  formatFrom: formatFrom
+};
 
-  var cleanedUp = false;
-  function cleanup() {
-    debug('cleanup');
-    // cleanup event handlers once the pipe is broken
-    dest.removeListener('close', onclose);
-    dest.removeListener('finish', onfinish);
-    dest.removeListener('drain', ondrain);
-    dest.removeListener('error', onerror);
-    dest.removeListener('unpipe', onunpipe);
-    src.removeListener('end', onend);
-    src.removeListener('end', cleanup);
-    src.removeListener('data', ondata);
+},{"../utils/override":96}],63:[function(require,module,exports){
+(function (process){
+var url = require('url');
 
-    cleanedUp = true;
+var override = require('../utils/override');
 
-    // if the reader is waiting for a drain event from this
-    // specific writer, then it would cause it to never start
-    // flowing again.
-    // So, if this is awaiting a drain, then we just call it now.
-    // If we don't know, then assume that we are waiting for one.
-    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
-  }
+function inlineRequestFrom(option) {
+  return override(
+    /* jshint camelcase: false */
+    proxyOptionsFrom(process.env.HTTP_PROXY || process.env.http_proxy),
+    option || {}
+  );
+}
 
-  // If the user pushes more data while we're writing to dest then we'll end up
-  // in ondata again. However, we only want to increase awaitDrain once because
-  // dest will only emit one 'drain' event for the multiple writes.
-  // => Introduce a guard on increasing awaitDrain.
-  var increasedAwaitDrain = false;
-  src.on('data', ondata);
-  function ondata(chunk) {
-    debug('ondata');
-    increasedAwaitDrain = false;
-    var ret = dest.write(chunk);
-    if (false === ret && !increasedAwaitDrain) {
-      // If the user unpiped during `dest.write()`, it is possible
-      // to get stuck in a permanently paused state if that write
-      // also returned false.
-      // => Check whether `dest` is still a piping destination.
-      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
-        debug('false write response, pause', src._readableState.awaitDrain);
-        src._readableState.awaitDrain++;
-        increasedAwaitDrain = true;
-      }
-      src.pause();
-    }
-  }
+function proxyOptionsFrom(httpProxy) {
+  return httpProxy ?
+    {
+      hostname: url.parse(httpProxy).hostname,
+      port: parseInt(url.parse(httpProxy).port)
+    } :
+    {};
+}
 
-  // if the dest has an error, then stop piping into it.
-  // however, don't suppress the throwing behavior for this.
-  function onerror(er) {
-    debug('onerror', er);
-    unpipe();
-    dest.removeListener('error', onerror);
-    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
-  }
+module.exports = inlineRequestFrom;
 
-  // Make sure our error handler is attached before userland ones.
-  prependListener(dest, 'error', onerror);
+}).call(this,require('_process'))
+},{"../utils/override":96,"_process":114,"url":161}],64:[function(require,module,exports){
+var DEFAULT_TIMEOUT = 5000;
 
-  // Both close and finish should trigger unpipe, but only once.
-  function onclose() {
-    dest.removeListener('finish', onfinish);
-    unpipe();
-  }
-  dest.once('close', onclose);
-  function onfinish() {
-    debug('onfinish');
-    dest.removeListener('close', onclose);
-    unpipe();
+function inlineTimeoutFrom(option) {
+  return option || DEFAULT_TIMEOUT;
+}
+
+module.exports = inlineTimeoutFrom;
+
+},{}],65:[function(require,module,exports){
+function inlineOptionsFrom(rules) {
+  if (Array.isArray(rules)) {
+    return rules;
   }
-  dest.once('finish', onfinish);
 
-  function unpipe() {
-    debug('unpipe');
-    src.unpipe(dest);
+  if (rules === false) {
+    return ['none'];
   }
 
-  // tell the dest that it's being piped to
-  dest.emit('pipe', src);
+  return undefined === rules ?
+    ['local'] :
+    rules.split(',');
+}
 
-  // start the flow if it hasn't been started already.
-  if (!state.flowing) {
-    debug('pipe resume');
-    src.resume();
-  }
+module.exports = inlineOptionsFrom;
 
-  return dest;
+},{}],66:[function(require,module,exports){
+var roundingPrecisionFrom = require('./rounding-precision').roundingPrecisionFrom;
+
+var override = require('../utils/override');
+
+var OptimizationLevel = {
+  Zero: '0',
+  One: '1',
+  Two: '2'
 };
 
-function pipeOnDrain(src) {
-  return function () {
-    var state = src._readableState;
-    debug('pipeOnDrain', state.awaitDrain);
-    if (state.awaitDrain) state.awaitDrain--;
-    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
-      state.flowing = true;
-      flow(src);
-    }
-  };
-}
+var DEFAULTS = {};
 
-Readable.prototype.unpipe = function (dest) {
-  var state = this._readableState;
+DEFAULTS[OptimizationLevel.Zero] = {};
+DEFAULTS[OptimizationLevel.One] = {
+  cleanupCharsets: true,
+  normalizeUrls: true,
+  optimizeBackground: true,
+  optimizeBorderRadius: true,
+  optimizeFilter: true,
+  optimizeFontWeight: true,
+  optimizeOutline: true,
+  removeEmpty: true,
+  removeNegativePaddings: true,
+  removeQuotes: true,
+  removeWhitespace: true,
+  replaceMultipleZeros: true,
+  replaceTimeUnits: true,
+  replaceZeroUnits: true,
+  roundingPrecision: roundingPrecisionFrom(undefined),
+  selectorsSortingMethod: 'standard',
+  specialComments: 'all',
+  tidyAtRules: true,
+  tidyBlockScopes: true,
+  tidySelectors: true,
+  transform: noop
+};
+DEFAULTS[OptimizationLevel.Two] = {
+  mergeAdjacentRules: true,
+  mergeIntoShorthands: true,
+  mergeMedia: true,
+  mergeNonAdjacentRules: true,
+  mergeSemantically: false,
+  overrideProperties: true,
+  removeEmpty: true,
+  reduceNonAdjacentRules: true,
+  removeDuplicateFontRules: true,
+  removeDuplicateMediaBlocks: true,
+  removeDuplicateRules: true,
+  removeUnusedAtRules: false,
+  restructureRules: false,
+  skipProperties: []
+};
 
-  // if we're not piping anywhere, then do nothing.
-  if (state.pipesCount === 0) return this;
+var ALL_KEYWORD_1 = '*';
+var ALL_KEYWORD_2 = 'all';
+var FALSE_KEYWORD_1 = 'false';
+var FALSE_KEYWORD_2 = 'off';
+var TRUE_KEYWORD_1 = 'true';
+var TRUE_KEYWORD_2 = 'on';
 
-  // just one destination.  most common case.
-  if (state.pipesCount === 1) {
-    // passed in one, but it's not the right one.
-    if (dest && dest !== state.pipes) return this;
+var LIST_VALUE_SEPARATOR = ',';
+var OPTION_SEPARATOR = ';';
+var OPTION_VALUE_SEPARATOR = ':';
 
-    if (!dest) dest = state.pipes;
+function noop() {}
 
-    // got a match.
-    state.pipes = null;
-    state.pipesCount = 0;
-    state.flowing = false;
-    if (dest) dest.emit('unpipe', this);
-    return this;
+function optimizationLevelFrom(source) {
+  var level = override(DEFAULTS, {});
+  var Zero = OptimizationLevel.Zero;
+  var One = OptimizationLevel.One;
+  var Two = OptimizationLevel.Two;
+
+
+  if (undefined === source) {
+    delete level[Two];
+    return level;
   }
 
-  // slow case. multiple pipe destinations.
+  if (typeof source == 'string') {
+    source = parseInt(source);
+  }
 
-  if (!dest) {
-    // remove all.
-    var dests = state.pipes;
-    var len = state.pipesCount;
-    state.pipes = null;
-    state.pipesCount = 0;
-    state.flowing = false;
+  if (typeof source == 'number' && source === parseInt(Two)) {
+    return level;
+  }
 
-    for (var i = 0; i < len; i++) {
-      dests[i].emit('unpipe', this);
-    }return this;
+  if (typeof source == 'number' && source === parseInt(One)) {
+    delete level[Two];
+    return level;
   }
 
-  // try to find the right one.
-  var index = indexOf(state.pipes, dest);
-  if (index === -1) return this;
+  if (typeof source == 'number' && source === parseInt(Zero)) {
+    delete level[Two];
+    delete level[One];
+    return level;
+  }
 
-  state.pipes.splice(index, 1);
-  state.pipesCount -= 1;
-  if (state.pipesCount === 1) state.pipes = state.pipes[0];
+  if (typeof source == 'object') {
+    source = covertValuesToHashes(source);
+  }
 
-  dest.emit('unpipe', this);
+  if (One in source && 'roundingPrecision' in source[One]) {
+    source[One].roundingPrecision = roundingPrecisionFrom(source[One].roundingPrecision);
+  }
 
-  return this;
-};
+  if (Two in source && 'skipProperties' in source[Two] && typeof(source[Two].skipProperties) == 'string') {
+    source[Two].skipProperties = source[Two].skipProperties.split(LIST_VALUE_SEPARATOR);
+  }
 
-// set up data events if they are asked for
-// Ensure readable listeners eventually get something
-Readable.prototype.on = function (ev, fn) {
-  var res = Stream.prototype.on.call(this, ev, fn);
+  if (Zero in source || One in source || Two in source) {
+    level[Zero] = override(level[Zero], source[Zero]);
+  }
 
-  if (ev === 'data') {
-    // Start flowing on next tick if stream isn't explicitly paused
-    if (this._readableState.flowing !== false) this.resume();
-  } else if (ev === 'readable') {
-    var state = this._readableState;
-    if (!state.endEmitted && !state.readableListening) {
-      state.readableListening = state.needReadable = true;
-      state.emittedReadable = false;
-      if (!state.reading) {
-        processNextTick(nReadingNextTick, this);
-      } else if (state.length) {
-        emitReadable(this, state);
-      }
-    }
+  if (One in source && ALL_KEYWORD_1 in source[One]) {
+    level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_1])));
+    delete source[One][ALL_KEYWORD_1];
   }
 
-  return res;
-};
-Readable.prototype.addListener = Readable.prototype.on;
+  if (One in source && ALL_KEYWORD_2 in source[One]) {
+    level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_2])));
+    delete source[One][ALL_KEYWORD_2];
+  }
 
-function nReadingNextTick(self) {
-  debug('readable nexttick read 0');
-  self.read(0);
-}
+  if (One in source || Two in source) {
+    level[One] = override(level[One], source[One]);
+  } else {
+    delete level[One];
+  }
 
-// pause() and resume() are remnants of the legacy readable stream API
-// If the user uses them, then switch into old mode.
-Readable.prototype.resume = function () {
-  var state = this._readableState;
-  if (!state.flowing) {
-    debug('resume');
-    state.flowing = true;
-    resume(this, state);
+  if (Two in source && ALL_KEYWORD_1 in source[Two]) {
+    level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_1])));
+    delete source[Two][ALL_KEYWORD_1];
   }
-  return this;
-};
 
-function resume(stream, state) {
-  if (!state.resumeScheduled) {
-    state.resumeScheduled = true;
-    processNextTick(resume_, stream, state);
+  if (Two in source && ALL_KEYWORD_2 in source[Two]) {
+    level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_2])));
+    delete source[Two][ALL_KEYWORD_2];
+  }
+
+  if (Two in source) {
+    level[Two] = override(level[Two], source[Two]);
+  } else {
+    delete level[Two];
   }
+
+  return level;
 }
 
-function resume_(stream, state) {
-  if (!state.reading) {
-    debug('resume read 0');
-    stream.read(0);
+function defaults(level, value) {
+  var options = override(DEFAULTS[level], {});
+  var key;
+
+  for (key in options) {
+    if (typeof options[key] == 'boolean') {
+      options[key] = value;
+    }
   }
 
-  state.resumeScheduled = false;
-  state.awaitDrain = 0;
-  stream.emit('resume');
-  flow(stream);
-  if (state.flowing && !state.reading) stream.read(0);
+  return options;
 }
 
-Readable.prototype.pause = function () {
-  debug('call pause flowing=%j', this._readableState.flowing);
-  if (false !== this._readableState.flowing) {
-    debug('pause');
-    this._readableState.flowing = false;
-    this.emit('pause');
+function normalizeValue(value) {
+  switch (value) {
+    case FALSE_KEYWORD_1:
+    case FALSE_KEYWORD_2:
+      return false;
+    case TRUE_KEYWORD_1:
+    case TRUE_KEYWORD_2:
+      return true;
+    default:
+      return value;
   }
-  return this;
-};
-
-function flow(stream) {
-  var state = stream._readableState;
-  debug('flow', state.flowing);
-  while (state.flowing && stream.read() !== null) {}
 }
 
-// wrap an old-style stream as the async data source.
-// This is *not* part of the readable stream interface.
-// It is an ugly unfortunate mess of history.
-Readable.prototype.wrap = function (stream) {
-  var state = this._readableState;
-  var paused = false;
-
-  var self = this;
-  stream.on('end', function () {
-    debug('wrapped end');
-    if (state.decoder && !state.ended) {
-      var chunk = state.decoder.end();
-      if (chunk && chunk.length) self.push(chunk);
-    }
-
-    self.push(null);
-  });
+function covertValuesToHashes(source) {
+  var clonedSource = override(source, {});
+  var level;
+  var i;
 
-  stream.on('data', function (chunk) {
-    debug('wrapped data');
-    if (state.decoder) chunk = state.decoder.write(chunk);
+  for (i = 0; i <= 2; i++) {
+    level = '' + i;
 
-    // don't skip over falsy values in objectMode
-    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
+    if (level in clonedSource && (clonedSource[level] === undefined || clonedSource[level] === false)) {
+      delete clonedSource[level];
+    }
 
-    var ret = self.push(chunk);
-    if (!ret) {
-      paused = true;
-      stream.pause();
+    if (level in clonedSource && clonedSource[level] === true) {
+      clonedSource[level] = {};
     }
-  });
 
-  // proxy all the other methods.
-  // important when wrapping filters and duplexes.
-  for (var i in stream) {
-    if (this[i] === undefined && typeof stream[i] === 'function') {
-      this[i] = function (method) {
-        return function () {
-          return stream[method].apply(stream, arguments);
-        };
-      }(i);
+    if (level in clonedSource && typeof clonedSource[level] == 'string') {
+      clonedSource[level] = covertToHash(clonedSource[level], level);
     }
   }
 
-  // proxy certain important events.
-  for (var n = 0; n < kProxyEvents.length; n++) {
-    stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
-  }
+  return clonedSource;
+}
 
-  // when we try to consume some more bytes, simply unpause the
-  // underlying stream.
-  self._read = function (n) {
-    debug('wrapped _read', n);
-    if (paused) {
-      paused = false;
-      stream.resume();
-    }
-  };
+function covertToHash(asString, level) {
+  return asString
+    .split(OPTION_SEPARATOR)
+    .reduce(function (accumulator, directive) {
+      var parts = directive.split(OPTION_VALUE_SEPARATOR);
+      var name = parts[0];
+      var value = parts[1];
+      var normalizedValue = normalizeValue(value);
 
-  return self;
+      if (ALL_KEYWORD_1 == name || ALL_KEYWORD_2 == name) {
+        accumulator = override(accumulator, defaults(level, normalizedValue));
+      } else {
+        accumulator[name] = normalizedValue;
+      }
+
+      return accumulator;
+    }, {});
+}
+
+module.exports = {
+  OptimizationLevel: OptimizationLevel,
+  optimizationLevelFrom: optimizationLevelFrom,
 };
 
-// exposed for testing purposes only.
-Readable._fromList = fromList;
+},{"../utils/override":96,"./rounding-precision":69}],67:[function(require,module,exports){
+(function (process){
+var path = require('path');
 
-// Pluck off n bytes from an array of buffers.
-// Length is the combined lengths of all the buffers in the list.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function fromList(n, state) {
-  // nothing buffered
-  if (state.length === 0) return null;
+function rebaseToFrom(option) {
+  return option ? path.resolve(option) : process.cwd();
+}
 
-  var ret;
-  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
-    // read it all, truncate the list
-    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
-    state.buffer.clear();
-  } else {
-    // read part of list
-    ret = fromListPartial(n, state.buffer, state.decoder);
-  }
+module.exports = rebaseToFrom;
 
-  return ret;
+}).call(this,require('_process'))
+},{"_process":114,"path":112}],68:[function(require,module,exports){
+function rebaseFrom(rebaseOption) {
+  return undefined === rebaseOption ? true : !!rebaseOption;
 }
 
-// Extracts only enough buffered data to satisfy the amount requested.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function fromListPartial(n, list, hasStrings) {
-  var ret;
-  if (n < list.head.data.length) {
-    // slice is the same for buffers and strings
-    ret = list.head.data.slice(0, n);
-    list.head.data = list.head.data.slice(n);
-  } else if (n === list.head.data.length) {
-    // first chunk is a perfect match
-    ret = list.shift();
-  } else {
-    // result spans more than one buffer
-    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
-  }
-  return ret;
+module.exports = rebaseFrom;
+
+},{}],69:[function(require,module,exports){
+var override = require('../utils/override');
+
+var INTEGER_PATTERN = /^\d+$/;
+
+var ALL_UNITS = ['*', 'all'];
+var DEFAULT_PRECISION = 'off'; // all precision changes are disabled
+var DIRECTIVES_SEPARATOR = ','; // e.g. *=5,px=3
+var DIRECTIVE_VALUE_SEPARATOR = '='; // e.g. *=5
+
+function roundingPrecisionFrom(source) {
+  return override(defaults(DEFAULT_PRECISION), buildPrecisionFrom(source));
 }
 
-// Copies a specified amount of characters from the list of buffered data
-// chunks.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function copyFromBufferString(n, list) {
-  var p = list.head;
-  var c = 1;
-  var ret = p.data;
-  n -= ret.length;
-  while (p = p.next) {
-    var str = p.data;
-    var nb = n > str.length ? str.length : n;
-    if (nb === str.length) ret += str;else ret += str.slice(0, n);
-    n -= nb;
-    if (n === 0) {
-      if (nb === str.length) {
-        ++c;
-        if (p.next) list.head = p.next;else list.head = list.tail = null;
-      } else {
-        list.head = p;
-        p.data = str.slice(nb);
-      }
-      break;
-    }
-    ++c;
-  }
-  list.length -= c;
-  return ret;
+function defaults(value) {
+  return {
+    'ch': value,
+    'cm': value,
+    'em': value,
+    'ex': value,
+    'in': value,
+    'mm': value,
+    'pc': value,
+    'pt': value,
+    'px': value,
+    'q': value,
+    'rem': value,
+    'vh': value,
+    'vmax': value,
+    'vmin': value,
+    'vw': value,
+    '%': value
+  };
 }
 
-// Copies a specified amount of bytes from the list of buffered data chunks.
-// This function is designed to be inlinable, so please take care when making
-// changes to the function body.
-function copyFromBuffer(n, list) {
-  var ret = bufferShim.allocUnsafe(n);
-  var p = list.head;
-  var c = 1;
-  p.data.copy(ret);
-  n -= p.data.length;
-  while (p = p.next) {
-    var buf = p.data;
-    var nb = n > buf.length ? buf.length : n;
-    buf.copy(ret, ret.length - n, 0, nb);
-    n -= nb;
-    if (n === 0) {
-      if (nb === buf.length) {
-        ++c;
-        if (p.next) list.head = p.next;else list.head = list.tail = null;
-      } else {
-        list.head = p;
-        p.data = buf.slice(nb);
-      }
-      break;
-    }
-    ++c;
+function buildPrecisionFrom(source) {
+  if (source === null || source === undefined) {
+    return {};
   }
-  list.length -= c;
-  return ret;
-}
 
-function endReadable(stream) {
-  var state = stream._readableState;
+  if (typeof source == 'boolean') {
+    return {};
+  }
 
-  // If we get here before consuming all the bytes, then that is a
-  // bug in node.  Should never happen.
-  if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
+  if (typeof source == 'number' && source == -1) {
+    return defaults(DEFAULT_PRECISION);
+  }
 
-  if (!state.endEmitted) {
-    state.ended = true;
-    processNextTick(endReadableNT, state, stream);
+  if (typeof source == 'number') {
+    return defaults(source);
   }
-}
 
-function endReadableNT(state, stream) {
-  // Check that we didn't get one last unshift.
-  if (!state.endEmitted && state.length === 0) {
-    state.endEmitted = true;
-    stream.readable = false;
-    stream.emit('end');
+  if (typeof source == 'string' && INTEGER_PATTERN.test(source)) {
+    return defaults(parseInt(source));
   }
-}
 
-function forEach(xs, f) {
-  for (var i = 0, l = xs.length; i < l; i++) {
-    f(xs[i], i);
+  if (typeof source == 'string' && source == DEFAULT_PRECISION) {
+    return defaults(DEFAULT_PRECISION);
   }
-}
 
-function indexOf(xs, x) {
-  for (var i = 0, l = xs.length; i < l; i++) {
-    if (xs[i] === x) return i;
+  if (typeof source == 'object') {
+    return source;
   }
-  return -1;
+
+  return source
+    .split(DIRECTIVES_SEPARATOR)
+    .reduce(function (accumulator, directive) {
+      var directiveParts = directive.split(DIRECTIVE_VALUE_SEPARATOR);
+      var name = directiveParts[0];
+      var value = parseInt(directiveParts[1]);
+
+      if (isNaN(value) || value == -1) {
+        value = DEFAULT_PRECISION;
+      }
+
+      if (ALL_UNITS.indexOf(name) > -1) {
+        accumulator = override(accumulator, defaults(value));
+      } else {
+        accumulator[name] = value;
+      }
+
+      return accumulator;
+    }, {});
 }
-}).call(this,require('_process'))
-},{"./_stream_duplex":116,"./internal/streams/BufferList":121,"./internal/streams/stream":122,"_process":111,"buffer":5,"buffer-shims":4,"core-util-is":99,"events":100,"inherits":104,"isarray":106,"process-nextick-args":110,"string_decoder/":123,"util":2}],119:[function(require,module,exports){
-// a transform stream is a readable/writable stream where you do
-// something with the data.  Sometimes it's called a "filter",
-// but that's not a great name for it, since that implies a thing where
-// some bits pass through, and others are simply ignored.  (That would
-// be a valid example of a transform, of course.)
-//
-// While the output is causally related to the input, it's not a
-// necessarily symmetric or synchronous transformation.  For example,
-// a zlib stream might take multiple plain-text writes(), and then
-// emit a single compressed chunk some time in the future.
-//
-// Here's how this works:
-//
-// The Transform stream has all the aspects of the readable and writable
-// stream classes.  When you write(chunk), that calls _write(chunk,cb)
-// internally, and returns false if there's a lot of pending writes
-// buffered up.  When you call read(), that calls _read(n) until
-// there's enough pending readable data buffered up.
-//
-// In a transform stream, the written data is placed in a buffer.  When
-// _read(n) is called, it transforms the queued up data, calling the
-// buffered _write cb's as it consumes chunks.  If consuming a single
-// written chunk would result in multiple output chunks, then the first
-// outputted bit calls the readcb, and subsequent chunks just go into
-// the read buffer, and will cause it to emit 'readable' if necessary.
-//
-// This way, back-pressure is actually determined by the reading side,
-// since _read has to be called to start processing a new chunk.  However,
-// a pathological inflate type of transform can cause excessive buffering
-// here.  For example, imagine a stream where every byte of input is
-// interpreted as an integer from 0-255, and then results in that many
-// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
-// 1kb of data being output.  In this case, you could write a very small
-// amount of input, and end up with a very large amount of output.  In
-// such a pathological inflating mechanism, there'd be no way to tell
-// the system to stop doing the transform.  A single 4MB write could
-// cause the system to run out of memory.
-//
-// However, even in such a pathological case, only a single written chunk
-// would be consumed, and then the rest would wait (un-transformed) until
-// the results of the previous transformed chunk were consumed.
 
-'use strict';
+module.exports = {
+  DEFAULT: DEFAULT_PRECISION,
+  roundingPrecisionFrom: roundingPrecisionFrom
+};
 
-module.exports = Transform;
+},{"../utils/override":96}],70:[function(require,module,exports){
+(function (global,Buffer){
+var fs = require('fs');
+var path = require('path');
 
-var Duplex = require('./_stream_duplex');
+var isAllowedResource = require('./is-allowed-resource');
+var matchDataUri = require('./match-data-uri');
+var rebaseLocalMap = require('./rebase-local-map');
+var rebaseRemoteMap = require('./rebase-remote-map');
 
-/*<replacement>*/
-var util = require('core-util-is');
-util.inherits = require('inherits');
-/*</replacement>*/
+var Token = require('../tokenizer/token');
+var hasProtocol = require('../utils/has-protocol');
+var isDataUriResource = require('../utils/is-data-uri-resource');
+var isRemoteResource = require('../utils/is-remote-resource');
 
-util.inherits(Transform, Duplex);
+var MAP_MARKER_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/;
 
-function TransformState(stream) {
-  this.afterTransform = function (er, data) {
-    return afterTransform(stream, er, data);
+function applySourceMaps(tokens, context, callback) {
+  var applyContext = {
+    callback: callback,
+    fetch: context.options.fetch,
+    index: 0,
+    inline: context.options.inline,
+    inlineRequest: context.options.inlineRequest,
+    inlineTimeout: context.options.inlineTimeout,
+    inputSourceMapTracker: context.inputSourceMapTracker,
+    localOnly: context.localOnly,
+    processedTokens: [],
+    rebaseTo: context.options.rebaseTo,
+    sourceTokens: tokens,
+    warnings: context.warnings
   };
 
-  this.needTransform = false;
-  this.transforming = false;
-  this.writecb = null;
-  this.writechunk = null;
-  this.writeencoding = null;
+  return context.options.sourceMap && tokens.length > 0 ?
+    doApplySourceMaps(applyContext) :
+    callback(tokens);
 }
 
-function afterTransform(stream, er, data) {
-  var ts = stream._transformState;
-  ts.transforming = false;
+function doApplySourceMaps(applyContext) {
+  var singleSourceTokens = [];
+  var lastSource = findTokenSource(applyContext.sourceTokens[0]);
+  var source;
+  var token;
+  var l;
 
-  var cb = ts.writecb;
+  for (l = applyContext.sourceTokens.length; applyContext.index < l; applyContext.index++) {
+    token = applyContext.sourceTokens[applyContext.index];
+    source = findTokenSource(token);
 
-  if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
+    if (source != lastSource) {
+      singleSourceTokens = [];
+      lastSource = source;
+    }
 
-  ts.writechunk = null;
-  ts.writecb = null;
+    singleSourceTokens.push(token);
+    applyContext.processedTokens.push(token);
 
-  if (data !== null && data !== undefined) stream.push(data);
+    if (token[0] == Token.COMMENT && MAP_MARKER_PATTERN.test(token[1])) {
+      return fetchAndApplySourceMap(token[1], source, singleSourceTokens, applyContext);
+    }
+  }
 
-  cb(er);
+  return applyContext.callback(applyContext.processedTokens);
+}
 
-  var rs = stream._readableState;
-  rs.reading = false;
-  if (rs.needReadable || rs.length < rs.highWaterMark) {
-    stream._read(rs.highWaterMark);
+function findTokenSource(token) {
+  var scope;
+  var metadata;
+
+  if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT) {
+    metadata = token[2][0];
+  } else {
+    scope = token[1][0];
+    metadata = scope[2][0];
   }
+
+  return metadata[2];
 }
 
-function Transform(options) {
-  if (!(this instanceof Transform)) return new Transform(options);
+function fetchAndApplySourceMap(sourceMapComment, source, singleSourceTokens, applyContext) {
+  return extractInputSourceMapFrom(sourceMapComment, applyContext, function (inputSourceMap) {
+    if (inputSourceMap) {
+      applyContext.inputSourceMapTracker.track(source, inputSourceMap);
+      applySourceMapRecursively(singleSourceTokens, applyContext.inputSourceMapTracker);
+    }
 
-  Duplex.call(this, options);
+    applyContext.index++;
+    return doApplySourceMaps(applyContext);
+  });
+}
 
-  this._transformState = new TransformState(this);
+function extractInputSourceMapFrom(sourceMapComment, applyContext, whenSourceMapReady) {
+  var uri = MAP_MARKER_PATTERN.exec(sourceMapComment)[1];
+  var absoluteUri;
+  var sourceMap;
+  var rebasedMap;
 
-  var stream = this;
+  if (isDataUriResource(uri)) {
+    sourceMap = extractInputSourceMapFromDataUri(uri);
+    return whenSourceMapReady(sourceMap);
+  } else if (isRemoteResource(uri)) {
+    return loadInputSourceMapFromRemoteUri(uri, applyContext, function (sourceMap) {
+      var parsedMap;
 
-  // start out asking for a readable event once data is transformed.
-  this._readableState.needReadable = true;
+      if (sourceMap) {
+        parsedMap = JSON.parse(sourceMap);
+        rebasedMap = rebaseRemoteMap(parsedMap, uri);
+        whenSourceMapReady(rebasedMap);
+      } else {
+        whenSourceMapReady(null);
+      }
+    });
+  } else {
+    // at this point `uri` is already rebased, see lib/reader/rebase.js#rebaseSourceMapComment
+    // it is rebased to be consistent with rebasing other URIs
+    // however here we need to resolve it back to read it from disk
+    absoluteUri = path.resolve(applyContext.rebaseTo, uri);
+    sourceMap = loadInputSourceMapFromLocalUri(absoluteUri, applyContext);
 
-  // we have implemented the _read method, and done the other things
-  // that Readable wants before the first _read call, so unset the
-  // sync guard flag.
-  this._readableState.sync = false;
+    if (sourceMap) {
+      rebasedMap = rebaseLocalMap(sourceMap, absoluteUri, applyContext.rebaseTo);
+      return whenSourceMapReady(rebasedMap);
+    } else {
+      return whenSourceMapReady(null);
+    }
+  }
+}
 
-  if (options) {
-    if (typeof options.transform === 'function') this._transform = options.transform;
+function extractInputSourceMapFromDataUri(uri) {
+  var dataUriMatch = matchDataUri(uri);
+  var charset = dataUriMatch[2] ? dataUriMatch[2].split(/[=;]/)[2] : 'us-ascii';
+  var encoding = dataUriMatch[3] ? dataUriMatch[3].split(';')[1] : 'utf8';
+  var data = encoding == 'utf8' ? global.unescape(dataUriMatch[4]) : dataUriMatch[4];
 
-    if (typeof options.flush === 'function') this._flush = options.flush;
+  var buffer = new Buffer(data, encoding);
+  buffer.charset = charset;
+
+  return JSON.parse(buffer.toString());
+}
+
+function loadInputSourceMapFromRemoteUri(uri, applyContext, whenLoaded) {
+  var isAllowed = isAllowedResource(uri, true, applyContext.inline);
+  var isRuntimeResource = !hasProtocol(uri);
+
+  if (applyContext.localOnly) {
+    applyContext.warnings.push('Cannot fetch remote resource from "' + uri + '" as no callback given.');
+    return whenLoaded(null);
+  } else if (isRuntimeResource) {
+    applyContext.warnings.push('Cannot fetch "' + uri + '" as no protocol given.');
+    return whenLoaded(null);
+  } else if (!isAllowed) {
+    applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.');
+    return whenLoaded(null);
   }
 
-  // When the writable side finishes, then flush out anything remaining.
-  this.once('prefinish', function () {
-    if (typeof this._flush === 'function') this._flush(function (er, data) {
-      done(stream, er, data);
-    });else done(stream);
+  applyContext.fetch(uri, applyContext.inlineRequest, applyContext.inlineTimeout, function (error, body) {
+    if (error) {
+      applyContext.warnings.push('Missing source map at "' + uri + '" - ' + error);
+      return whenLoaded(null);
+    }
+
+    whenLoaded(body);
   });
 }
 
-Transform.prototype.push = function (chunk, encoding) {
-  this._transformState.needTransform = false;
-  return Duplex.prototype.push.call(this, chunk, encoding);
-};
-
-// This is the part where you do stuff!
-// override this function in implementation classes.
-// 'chunk' is an input chunk.
-//
-// Call `push(newChunk)` to pass along transformed output
-// to the readable side.  You may call 'push' zero or more times.
-//
-// Call `cb(err)` when you are done with this chunk.  If you pass
-// an error, then that'll put the hurt on the whole operation.  If you
-// never call cb(), then you'll never get another chunk.
-Transform.prototype._transform = function (chunk, encoding, cb) {
-  throw new Error('_transform() is not implemented');
-};
+function loadInputSourceMapFromLocalUri(uri, applyContext) {
+  var isAllowed = isAllowedResource(uri, false, applyContext.inline);
+  var sourceMap;
 
-Transform.prototype._write = function (chunk, encoding, cb) {
-  var ts = this._transformState;
-  ts.writecb = cb;
-  ts.writechunk = chunk;
-  ts.writeencoding = encoding;
-  if (!ts.transforming) {
-    var rs = this._readableState;
-    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
+  if (!fs.existsSync(uri) || !fs.statSync(uri).isFile()) {
+    applyContext.warnings.push('Ignoring local source map at "' + uri + '" as resource is missing.');
+    return null;
+  } else if (!isAllowed) {
+    applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.');
+    return null;
   }
-};
 
-// Doesn't matter what the args are here.
-// _transform does all the work.
-// That we got here means that the readable side wants more data.
-Transform.prototype._read = function (n) {
-  var ts = this._transformState;
+  sourceMap = fs.readFileSync(uri, 'utf-8');
+  return JSON.parse(sourceMap);
+}
 
-  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
-    ts.transforming = true;
-    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
-  } else {
-    // mark that we need a transform, so that any data that comes in
-    // will get processed, now that we've asked for it.
-    ts.needTransform = true;
-  }
-};
+function applySourceMapRecursively(tokens, inputSourceMapTracker) {
+  var token;
+  var i, l;
 
-function done(stream, er, data) {
-  if (er) return stream.emit('error', er);
+  for (i = 0, l = tokens.length; i < l; i++) {
+    token = tokens[i];
 
-  if (data !== null && data !== undefined) stream.push(data);
+    switch (token[0]) {
+      case Token.AT_RULE:
+        applySourceMapTo(token, inputSourceMapTracker);
+        break;
+      case Token.AT_RULE_BLOCK:
+        applySourceMapRecursively(token[1], inputSourceMapTracker);
+        applySourceMapRecursively(token[2], inputSourceMapTracker);
+        break;
+      case Token.AT_RULE_BLOCK_SCOPE:
+        applySourceMapTo(token, inputSourceMapTracker);
+        break;
+      case Token.NESTED_BLOCK:
+        applySourceMapRecursively(token[1], inputSourceMapTracker);
+        applySourceMapRecursively(token[2], inputSourceMapTracker);
+        break;
+      case Token.NESTED_BLOCK_SCOPE:
+        applySourceMapTo(token, inputSourceMapTracker);
+        break;
+      case Token.COMMENT:
+        applySourceMapTo(token, inputSourceMapTracker);
+        break;
+      case Token.PROPERTY:
+        applySourceMapRecursively(token, inputSourceMapTracker);
+        break;
+      case Token.PROPERTY_BLOCK:
+        applySourceMapRecursively(token[1], inputSourceMapTracker);
+        break;
+      case Token.PROPERTY_NAME:
+        applySourceMapTo(token, inputSourceMapTracker);
+        break;
+      case Token.PROPERTY_VALUE:
+        applySourceMapTo(token, inputSourceMapTracker);
+        break;
+      case Token.RULE:
+        applySourceMapRecursively(token[1], inputSourceMapTracker);
+        applySourceMapRecursively(token[2], inputSourceMapTracker);
+        break;
+      case Token.RULE_SCOPE:
+        applySourceMapTo(token, inputSourceMapTracker);
+    }
+  }
 
-  // if there's nothing in the write buffer, then that means
-  // that nothing more will ever be provided
-  var ws = stream._writableState;
-  var ts = stream._transformState;
+  return tokens;
+}
 
-  if (ws.length) throw new Error('Calling transform done when ws.length != 0');
+function applySourceMapTo(token, inputSourceMapTracker) {
+  var value = token[1];
+  var metadata = token[2];
+  var newMetadata = [];
+  var i, l;
 
-  if (ts.transforming) throw new Error('Calling transform done when still transforming');
+  for (i = 0, l = metadata.length; i < l; i++) {
+    newMetadata.push(inputSourceMapTracker.originalPositionFor(metadata[i], value.length));
+  }
 
-  return stream.push(null);
+  token[2] = newMetadata;
 }
-},{"./_stream_duplex":116,"core-util-is":99,"inherits":104}],120:[function(require,module,exports){
-(function (process){
-// A bit simpler than readable streams.
-// Implement an async ._write(chunk, encoding, cb), and it'll handle all
-// the drain event emission and buffering.
-
-'use strict';
 
-module.exports = Writable;
+module.exports = applySourceMaps;
 
-/*<replacement>*/
-var processNextTick = require('process-nextick-args');
-/*</replacement>*/
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
+},{"../tokenizer/token":85,"../utils/has-protocol":89,"../utils/is-data-uri-resource":90,"../utils/is-remote-resource":94,"./is-allowed-resource":73,"./match-data-uri":76,"./rebase-local-map":79,"./rebase-remote-map":80,"buffer":5,"fs":3,"path":112}],71:[function(require,module,exports){
+var split = require('../utils/split');
 
-/*<replacement>*/
-var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
-/*</replacement>*/
+var BRACE_PREFIX = /^\(/;
+var BRACE_SUFFIX = /\)$/;
+var IMPORT_PREFIX_PATTERN = /^@import/i;
+var QUOTE_PREFIX_PATTERN = /['"]\s*/;
+var QUOTE_SUFFIX_PATTERN = /\s*['"]/;
+var URL_PREFIX_PATTERN = /^url\(\s*/i;
+var URL_SUFFIX_PATTERN = /\s*\)/i;
 
-/*<replacement>*/
-var Duplex;
-/*</replacement>*/
+function extractImportUrlAndMedia(atRuleValue) {
+  var uri;
+  var mediaQuery;
+  var stripped;
+  var parts;
 
-Writable.WritableState = WritableState;
+  stripped = atRuleValue
+    .replace(IMPORT_PREFIX_PATTERN, '')
+    .trim()
+    .replace(URL_PREFIX_PATTERN, '(')
+    .replace(URL_SUFFIX_PATTERN, ')')
+    .replace(QUOTE_PREFIX_PATTERN, '')
+    .replace(QUOTE_SUFFIX_PATTERN, '');
 
-/*<replacement>*/
-var util = require('core-util-is');
-util.inherits = require('inherits');
-/*</replacement>*/
+  parts = split(stripped, ' ');
 
-/*<replacement>*/
-var internalUtil = {
-  deprecate: require('util-deprecate')
-};
-/*</replacement>*/
+  uri = parts[0]
+    .replace(BRACE_PREFIX, '')
+    .replace(BRACE_SUFFIX, '');
+  mediaQuery = parts.slice(1).join(' ');
 
-/*<replacement>*/
-var Stream = require('./internal/streams/stream');
-/*</replacement>*/
+  return [uri, mediaQuery];
+}
 
-var Buffer = require('buffer').Buffer;
-/*<replacement>*/
-var bufferShim = require('buffer-shims');
-/*</replacement>*/
+module.exports = extractImportUrlAndMedia;
 
-util.inherits(Writable, Stream);
+},{"../utils/split":97}],72:[function(require,module,exports){
+var SourceMapConsumer = require('source-map').SourceMapConsumer;
 
-function nop() {}
+function inputSourceMapTracker() {
+  var maps = {};
 
-function WriteReq(chunk, encoding, cb) {
-  this.chunk = chunk;
-  this.encoding = encoding;
-  this.callback = cb;
-  this.next = null;
+  return {
+    all: all.bind(null, maps),
+    isTracking: isTracking.bind(null, maps),
+    originalPositionFor: originalPositionFor.bind(null, maps),
+    track: track.bind(null, maps)
+  };
 }
 
-function WritableState(options, stream) {
-  Duplex = Duplex || require('./_stream_duplex');
-
-  options = options || {};
-
-  // object stream flag to indicate whether or not this stream
-  // contains buffers or objects.
-  this.objectMode = !!options.objectMode;
+function all(maps) {
+  return maps;
+}
 
-  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
+function isTracking(maps, source) {
+  return source in maps;
+}
 
-  // the point at which write() starts returning false
-  // Note: 0 is a valid value, means that we always return false if
-  // the entire buffer is not flushed immediately on write()
-  var hwm = options.highWaterMark;
-  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
-  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
+function originalPositionFor(maps, metadata, range, selectorFallbacks) {
+  var line = metadata[0];
+  var column = metadata[1];
+  var source = metadata[2];
+  var position = {
+    line: line,
+    column: column + range
+  };
+  var originalPosition;
 
-  // cast to ints.
-  this.highWaterMark = ~~this.highWaterMark;
+  while (!originalPosition && position.column > column) {
+    position.column--;
+    originalPosition = maps[source].originalPositionFor(position);
+  }
 
-  // drain event flag.
-  this.needDrain = false;
-  // at the start of calling end()
-  this.ending = false;
-  // when end() has been called, and returned
-  this.ended = false;
-  // when 'finish' is emitted
-  this.finished = false;
+  if (originalPosition.line === null && line > 1 && selectorFallbacks > 0) {
+    return originalPositionFor(maps, [line - 1, column, source], range, selectorFallbacks - 1);
+  }
 
-  // should we decode strings into buffers before passing to _write?
-  // this is here so that some node-core streams can optimize string
-  // handling at a lower level.
-  var noDecode = options.decodeStrings === false;
-  this.decodeStrings = !noDecode;
+  return originalPosition.line !== null ?
+    toMetadata(originalPosition) :
+    metadata;
+}
 
-  // Crypto is kind of old and crusty.  Historically, its default string
-  // encoding is 'binary' so we have to make this configurable.
-  // Everything else in the universe uses 'utf8', though.
-  this.defaultEncoding = options.defaultEncoding || 'utf8';
+function toMetadata(asHash) {
+  return [asHash.line, asHash.column, asHash.source];
+}
 
-  // not an actual buffer we keep track of, but a measurement
-  // of how much we're waiting to get pushed to some underlying
-  // socket or file.
-  this.length = 0;
+function track(maps, source, data) {
+  maps[source] = new SourceMapConsumer(data);
+}
 
-  // a flag to see when we're in the middle of a write.
-  this.writing = false;
+module.exports = inputSourceMapTracker;
 
-  // when true all writes will be buffered until .uncork() call
-  this.corked = 0;
+},{"source-map":155}],73:[function(require,module,exports){
+var path = require('path');
+var url = require('url');
 
-  // a flag to be able to tell if the onwrite cb is called immediately,
-  // or on a later tick.  We set this to true at first, because any
-  // actions that shouldn't happen until "later" should generally also
-  // not happen before the first write call.
-  this.sync = true;
+var isRemoteResource = require('../utils/is-remote-resource');
+var hasProtocol = require('../utils/has-protocol');
 
-  // a flag to know if we're processing previously buffered items, which
-  // may call the _write() callback in the same tick, so that we don't
-  // end up in an overlapped onwrite situation.
-  this.bufferProcessing = false;
+var HTTP_PROTOCOL = 'http:';
 
-  // the callback that's passed to _write(chunk,cb)
-  this.onwrite = function (er) {
-    onwrite(stream, er);
-  };
+function isAllowedResource(uri, isRemote, rules) {
+  var match;
+  var absoluteUri;
+  var allowed = isRemote ? false : true;
+  var rule;
+  var isNegated;
+  var normalizedRule;
+  var i;
 
-  // the callback that the user supplies to write(chunk,encoding,cb)
-  this.writecb = null;
+  if (rules.length === 0) {
+    return false;
+  }
 
-  // the amount that is being written when _write is called.
-  this.writelen = 0;
+  if (isRemote && !hasProtocol(uri)) {
+    uri = HTTP_PROTOCOL + uri;
+  }
 
-  this.bufferedRequest = null;
-  this.lastBufferedRequest = null;
+  match = isRemote ?
+    url.parse(uri).host :
+    uri;
 
-  // number of pending user-supplied write callbacks
-  // this must be 0 before 'finish' can be emitted
-  this.pendingcb = 0;
+  absoluteUri = isRemote ?
+    uri :
+    path.resolve(uri);
 
-  // emit prefinish if the only thing we're waiting for is _write cbs
-  // This is relevant for synchronous Transform streams
-  this.prefinished = false;
+  for (i = 0; i < rules.length; i++) {
+    rule = rules[i];
+    isNegated = rule[0] == '!';
+    normalizedRule = rule.substring(1);
 
-  // True if the error was already emitted and should not be thrown again
-  this.errorEmitted = false;
+    if (isNegated && isRemote && isRemoteRule(normalizedRule)) {
+      allowed = allowed && !isAllowedResource(uri, true, [normalizedRule]);
+    } else if (isNegated && !isRemote && !isRemoteRule(normalizedRule)) {
+      allowed = allowed && !isAllowedResource(uri, false, [normalizedRule]);
+    } else if (isNegated) {
+      allowed = allowed && true;
+    } else if (rule == 'all') {
+      allowed = true;
+    } else if (isRemote && rule == 'local') {
+      allowed = allowed || false;
+    } else if (isRemote && rule == 'remote') {
+      allowed = true;
+    } else if (!isRemote && rule == 'remote') {
+      allowed = false;
+    } else if (!isRemote && rule == 'local') {
+      allowed = true;
+    } else if (rule === match) {
+      allowed = true;
+    } else if (rule === uri) {
+      allowed = true;
+    } else if (isRemote && absoluteUri.indexOf(rule) === 0) {
+      allowed = true;
+    } else if (!isRemote && absoluteUri.indexOf(path.resolve(rule)) === 0) {
+      allowed = true;
+    } else if (isRemote != isRemoteRule(normalizedRule)) {
+      allowed = allowed && true;
+    } else {
+      allowed = false;
+    }
+  }
 
-  // count buffered requests
-  this.bufferedRequestCount = 0;
+  return allowed;
+}
 
-  // allocate the first CorkedRequest, there is always
-  // one allocated and free to use, and we maintain at most two
-  this.corkedRequestsFree = new CorkedRequest(this);
+function isRemoteRule(rule) {
+  return isRemoteResource(rule) || url.parse(HTTP_PROTOCOL + '//' + rule).host == rule;
 }
 
-WritableState.prototype.getBuffer = function getBuffer() {
-  var current = this.bufferedRequest;
-  var out = [];
-  while (current) {
-    out.push(current);
-    current = current.next;
-  }
-  return out;
-};
+module.exports = isAllowedResource;
 
-(function () {
-  try {
-    Object.defineProperty(WritableState.prototype, 'buffer', {
-      get: internalUtil.deprecate(function () {
-        return this.getBuffer();
-      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
-    });
-  } catch (_) {}
-})();
+},{"../utils/has-protocol":89,"../utils/is-remote-resource":94,"path":112,"url":161}],74:[function(require,module,exports){
+var fs = require('fs');
+var path = require('path');
 
-// Test _writableState for inheritance to account for Duplex streams,
-// whose prototype chain only points to Readable.
-var realHasInstance;
-if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
-  realHasInstance = Function.prototype[Symbol.hasInstance];
-  Object.defineProperty(Writable, Symbol.hasInstance, {
-    value: function (object) {
-      if (realHasInstance.call(this, object)) return true;
+var isAllowedResource = require('./is-allowed-resource');
 
-      return object && object._writableState instanceof WritableState;
-    }
-  });
-} else {
-  realHasInstance = function (object) {
-    return object instanceof this;
+var hasProtocol = require('../utils/has-protocol');
+var isRemoteResource = require('../utils/is-remote-resource');
+
+function loadOriginalSources(context, callback) {
+  var loadContext = {
+    callback: callback,
+    fetch: context.options.fetch,
+    index: 0,
+    inline: context.options.inline,
+    inlineRequest: context.options.inlineRequest,
+    inlineTimeout: context.options.inlineTimeout,
+    localOnly: context.localOnly,
+    rebaseTo: context.options.rebaseTo,
+    sourcesContent: context.sourcesContent,
+    uriToSource: uriToSourceMapping(context.inputSourceMapTracker.all()),
+    warnings: context.warnings
   };
+
+  return context.options.sourceMap && context.options.sourceMapInlineSources ?
+    doLoadOriginalSources(loadContext) :
+    callback();
 }
 
-function Writable(options) {
-  Duplex = Duplex || require('./_stream_duplex');
+function uriToSourceMapping(allSourceMapConsumers) {
+  var mapping = {};
+  var consumer;
+  var uri;
+  var source;
+  var i, l;
 
-  // Writable ctor is applied to Duplexes, too.
-  // `realHasInstance` is necessary because using plain `instanceof`
-  // would return false, as no `_writableState` property is attached.
+  for (source in allSourceMapConsumers) {
+    consumer = allSourceMapConsumers[source];
 
-  // Trying to use the custom `instanceof` for Writable here will also break the
-  // Node.js LazyTransform implementation, which has a non-trivial getter for
-  // `_writableState` that would lead to infinite recursion.
-  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
-    return new Writable(options);
+    for (i = 0, l = consumer.sources.length; i < l; i++) {
+      uri = consumer.sources[i];
+      source = consumer.sourceContentFor(uri, true);
+
+      mapping[uri] = source;
+    }
   }
 
-  this._writableState = new WritableState(options, this);
+  return mapping;
+}
 
-  // legacy.
-  this.writable = true;
+function doLoadOriginalSources(loadContext) {
+  var uris = Object.keys(loadContext.uriToSource);
+  var uri;
+  var source;
+  var total;
 
-  if (options) {
-    if (typeof options.write === 'function') this._write = options.write;
+  for (total = uris.length; loadContext.index < total; loadContext.index++) {
+    uri = uris[loadContext.index];
+    source = loadContext.uriToSource[uri];
 
-    if (typeof options.writev === 'function') this._writev = options.writev;
+    if (source) {
+      loadContext.sourcesContent[uri] = source;
+    } else {
+      return loadOriginalSource(uri, loadContext);
+    }
   }
 
-  Stream.call(this);
-}
-
-// Otherwise people can pipe Writable streams, which is just wrong.
-Writable.prototype.pipe = function () {
-  this.emit('error', new Error('Cannot pipe, not readable'));
-};
-
-function writeAfterEnd(stream, cb) {
-  var er = new Error('write after end');
-  // TODO: defer error events consistently everywhere, not just the cb
-  stream.emit('error', er);
-  processNextTick(cb, er);
+  return loadContext.callback();
 }
 
-// Checks that a user-supplied chunk is valid, especially for the particular
-// mode the stream is in. Currently this means that `null` is never accepted
-// and undefined/non-string values are only allowed in object mode.
-function validChunk(stream, state, chunk, cb) {
-  var valid = true;
-  var er = false;
+function loadOriginalSource(uri, loadContext) {
+  var content;
 
-  if (chunk === null) {
-    er = new TypeError('May not write null values to stream');
-  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
-    er = new TypeError('Invalid non-string/buffer chunk');
-  }
-  if (er) {
-    stream.emit('error', er);
-    processNextTick(cb, er);
-    valid = false;
+  if (isRemoteResource(uri)) {
+    return loadOriginalSourceFromRemoteUri(uri, loadContext, function (content) {
+      loadContext.index++;
+      loadContext.sourcesContent[uri] = content;
+      return doLoadOriginalSources(loadContext);
+    });
+  } else {
+    content = loadOriginalSourceFromLocalUri(uri, loadContext);
+    loadContext.index++;
+    loadContext.sourcesContent[uri] = content;
+    return doLoadOriginalSources(loadContext);
   }
-  return valid;
 }
 
-Writable.prototype.write = function (chunk, encoding, cb) {
-  var state = this._writableState;
-  var ret = false;
-  var isBuf = Buffer.isBuffer(chunk);
+function loadOriginalSourceFromRemoteUri(uri, loadContext, whenLoaded) {
+  var isAllowed = isAllowedResource(uri, true, loadContext.inline);
+  var isRuntimeResource = !hasProtocol(uri);
 
-  if (typeof encoding === 'function') {
-    cb = encoding;
-    encoding = null;
+  if (loadContext.localOnly) {
+    loadContext.warnings.push('Cannot fetch remote resource from "' + uri + '" as no callback given.');
+    return whenLoaded(null);
+  } else if (isRuntimeResource) {
+    loadContext.warnings.push('Cannot fetch "' + uri + '" as no protocol given.');
+    return whenLoaded(null);
+  } else if (!isAllowed) {
+    loadContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.');
+    return whenLoaded(null);
   }
 
-  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
+  loadContext.fetch(uri, loadContext.inlineRequest, loadContext.inlineTimeout, function (error, content) {
+    if (error) {
+      loadContext.warnings.push('Missing original source at "' + uri + '" - ' + error);
+    }
 
-  if (typeof cb !== 'function') cb = nop;
+    whenLoaded(content);
+  });
+}
 
-  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
-    state.pendingcb++;
-    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
+function loadOriginalSourceFromLocalUri(relativeUri, loadContext) {
+  var isAllowed = isAllowedResource(relativeUri, false, loadContext.inline);
+  var absoluteUri = path.resolve(loadContext.rebaseTo, relativeUri);
+
+  if (!fs.existsSync(absoluteUri) || !fs.statSync(absoluteUri).isFile()) {
+    loadContext.warnings.push('Ignoring local source map at "' + absoluteUri + '" as resource is missing.');
+    return null;
+  } else if (!isAllowed) {
+    loadContext.warnings.push('Cannot fetch "' + absoluteUri + '" as resource is not allowed.');
+    return null;
   }
 
-  return ret;
-};
+  return fs.readFileSync(absoluteUri, 'utf8');
+}
 
-Writable.prototype.cork = function () {
-  var state = this._writableState;
+module.exports = loadOriginalSources;
 
-  state.corked++;
-};
+},{"../utils/has-protocol":89,"../utils/is-remote-resource":94,"./is-allowed-resource":73,"fs":3,"path":112}],75:[function(require,module,exports){
+var http = require('http');
+var https = require('https');
+var url = require('url');
 
-Writable.prototype.uncork = function () {
-  var state = this._writableState;
+var isHttpResource = require('../utils/is-http-resource');
+var isHttpsResource = require('../utils/is-https-resource');
+var override = require('../utils/override');
 
-  if (state.corked) {
-    state.corked--;
+var HTTP_PROTOCOL = 'http:';
 
-    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
-  }
-};
+function loadRemoteResource(uri, inlineRequest, inlineTimeout, callback) {
+  var proxyProtocol = inlineRequest.protocol || inlineRequest.hostname;
+  var errorHandled = false;
+  var requestOptions;
+  var fetch;
 
-Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
-  // node::ParseEncoding() requires lower case.
-  if (typeof encoding === 'string') encoding = encoding.toLowerCase();
-  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
-  this._writableState.defaultEncoding = encoding;
-  return this;
-};
+  requestOptions = override(
+    url.parse(uri),
+    inlineRequest || {}
+  );
 
-function decodeChunk(state, chunk, encoding) {
-  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
-    chunk = bufferShim.from(chunk, encoding);
+  if (inlineRequest.hostname !== undefined) {
+    // overwrite as we always expect a http proxy currently
+    requestOptions.protocol = inlineRequest.protocol || HTTP_PROTOCOL;
+    requestOptions.path = requestOptions.href;
   }
-  return chunk;
-}
 
-// if we're already writing something, then just put this
-// in the queue, and wait our turn.  Otherwise, call _write
-// If we return false, then we need a drain event, so set that flag.
-function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
-  if (!isBuf) {
-    chunk = decodeChunk(state, chunk, encoding);
-    if (Buffer.isBuffer(chunk)) encoding = 'buffer';
-  }
-  var len = state.objectMode ? 1 : chunk.length;
+  fetch = (proxyProtocol && !isHttpsResource(proxyProtocol)) || isHttpResource(uri) ?
+    http.get :
+    https.get;
 
-  state.length += len;
+  fetch(requestOptions, function (res) {
+    var chunks = [];
+    var movedUri;
 
-  var ret = state.length < state.highWaterMark;
-  // we must ensure that previous needDrain will not be reset to false.
-  if (!ret) state.needDrain = true;
+    if (errorHandled) {
+      return;
+    }
 
-  if (state.writing || state.corked) {
-    var last = state.lastBufferedRequest;
-    state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
-    if (last) {
-      last.next = state.lastBufferedRequest;
-    } else {
-      state.bufferedRequest = state.lastBufferedRequest;
+    if (res.statusCode < 200 || res.statusCode > 399) {
+      return callback(res.statusCode, null);
+    } else if (res.statusCode > 299) {
+      movedUri = url.resolve(uri, res.headers.location);
+      return loadRemoteResource(movedUri, inlineRequest, inlineTimeout, callback);
     }
-    state.bufferedRequestCount += 1;
-  } else {
-    doWrite(stream, state, false, len, chunk, encoding, cb);
-  }
 
-  return ret;
-}
+    res.on('data', function (chunk) {
+      chunks.push(chunk.toString());
+    });
+    res.on('end', function () {
+      var body = chunks.join('');
+      callback(null, body);
+    });
+  })
+  .on('error', function (res) {
+    if (errorHandled) {
+      return;
+    }
 
-function doWrite(stream, state, writev, len, chunk, encoding, cb) {
-  state.writelen = len;
-  state.writecb = cb;
-  state.writing = true;
-  state.sync = true;
-  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
-  state.sync = false;
+    errorHandled = true;
+    callback(res.message, null);
+  })
+  .on('timeout', function () {
+    if (errorHandled) {
+      return;
+    }
+
+    errorHandled = true;
+    callback('timeout', null);
+  })
+  .setTimeout(inlineTimeout);
 }
 
-function onwriteError(stream, state, sync, er, cb) {
-  --state.pendingcb;
-  if (sync) processNextTick(cb, er);else cb(er);
+module.exports = loadRemoteResource;
 
-  stream._writableState.errorEmitted = true;
-  stream.emit('error', er);
+},{"../utils/is-http-resource":91,"../utils/is-https-resource":92,"../utils/override":96,"http":156,"https":105,"url":161}],76:[function(require,module,exports){
+var DATA_URI_PATTERN = /^data:(\S*?)?(;charset=[^;]+)?(;[^,]+?)?,(.+)/;
+
+function matchDataUri(uri) {
+  return DATA_URI_PATTERN.exec(uri);
 }
 
-function onwriteStateUpdate(state) {
-  state.writing = false;
-  state.writecb = null;
-  state.length -= state.writelen;
-  state.writelen = 0;
+module.exports = matchDataUri;
+
+},{}],77:[function(require,module,exports){
+var UNIX_SEPARATOR = '/';
+var WINDOWS_SEPARATOR_PATTERN = /\\/g;
+
+function normalizePath(path) {
+  return path.replace(WINDOWS_SEPARATOR_PATTERN, UNIX_SEPARATOR);
 }
 
-function onwrite(stream, er) {
-  var state = stream._writableState;
-  var sync = state.sync;
-  var cb = state.writecb;
+module.exports = normalizePath;
 
-  onwriteStateUpdate(state);
+},{}],78:[function(require,module,exports){
+(function (Buffer,process){
+var fs = require('fs');
+var path = require('path');
 
-  if (er) onwriteError(stream, state, sync, er, cb);else {
-    // Check if we're actually ready to finish, but don't emit yet
-    var finished = needFinish(state);
+var applySourceMaps = require('./apply-source-maps');
+var extractImportUrlAndMedia = require('./extract-import-url-and-media');
+var isAllowedResource = require('./is-allowed-resource');
+var loadOriginalSources = require('./load-original-sources');
+var normalizePath = require('./normalize-path');
+var rebase = require('./rebase');
+var rebaseLocalMap = require('./rebase-local-map');
+var rebaseRemoteMap = require('./rebase-remote-map');
+var restoreImport = require('./restore-import');
 
-    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
-      clearBuffer(stream, state);
-    }
+var tokenize = require('../tokenizer/tokenize');
+var Token = require('../tokenizer/token');
+var Marker = require('../tokenizer/marker');
+var hasProtocol = require('../utils/has-protocol');
+var isImport = require('../utils/is-import');
+var isRemoteResource = require('../utils/is-remote-resource');
 
-    if (sync) {
-      /*<replacement>*/
-      asyncWrite(afterWrite, stream, state, finished, cb);
-      /*</replacement>*/
+var UNKNOWN_URI = 'uri:unknown';
+
+function readSources(input, context, callback) {
+  return doReadSources(input, context, function (tokens) {
+    return applySourceMaps(tokens, context, function () {
+      return loadOriginalSources(context, function () { return callback(tokens); });
+    });
+  });
+}
+
+function doReadSources(input, context, callback) {
+  if (typeof input == 'string') {
+    return fromString(input, context, callback);
+  } else if (Buffer.isBuffer(input)) {
+    return fromString(input.toString(), context, callback);
+  } else if (Array.isArray(input)) {
+    return fromArray(input, context, callback);
+  } else if (typeof input == 'object') {
+    return fromHash(input, context, callback);
+  }
+}
+
+function fromString(input, context, callback) {
+  context.source = undefined;
+  context.sourcesContent[undefined] = input;
+  context.stats.originalSize += input.length;
+
+  return fromStyles(input, context, { inline: context.options.inline }, callback);
+}
+
+function fromArray(input, context, callback) {
+  var inputAsImports = input.reduce(function (accumulator, uriOrHash) {
+    if (typeof uriOrHash === 'string') {
+      return addStringSource(uriOrHash, accumulator);
     } else {
-      afterWrite(stream, state, finished, cb);
+      return addHashSource(uriOrHash, context, accumulator);
     }
-  }
+
+  }, []);
+
+  return fromStyles(inputAsImports.join(''), context, { inline: ['all'] }, callback);
 }
 
-function afterWrite(stream, state, finished, cb) {
-  if (!finished) onwriteDrain(stream, state);
-  state.pendingcb--;
-  cb();
-  finishMaybe(stream, state);
+function fromHash(input, context, callback) {
+  var inputAsImports = addHashSource(input, context, []);
+  return fromStyles(inputAsImports.join(''), context, { inline: ['all'] }, callback);
 }
 
-// Must force callback to be called on nextTick, so that we don't
-// emit 'drain' before the write() consumer gets the 'false' return
-// value, and has a chance to attach a 'drain' listener.
-function onwriteDrain(stream, state) {
-  if (state.length === 0 && state.needDrain) {
-    state.needDrain = false;
-    stream.emit('drain');
-  }
+function addStringSource(input, imports) {
+  imports.push(restoreAsImport(normalizeUri(input)));
+  return imports;
 }
 
-// if there's something in the buffer waiting, then process it
-function clearBuffer(stream, state) {
-  state.bufferProcessing = true;
-  var entry = state.bufferedRequest;
+function addHashSource(input, context, imports) {
+  var uri;
+  var normalizedUri;
+  var source;
 
-  if (stream._writev && entry && entry.next) {
-    // Fast case, write everything using _writev()
-    var l = state.bufferedRequestCount;
-    var buffer = new Array(l);
-    var holder = state.corkedRequestsFree;
-    holder.entry = entry;
+  for (uri in input) {
+    source = input[uri];
+    normalizedUri = normalizeUri(uri);
 
-    var count = 0;
-    while (entry) {
-      buffer[count] = entry;
-      entry = entry.next;
-      count += 1;
-    }
+    imports.push(restoreAsImport(normalizedUri));
 
-    doWrite(stream, state, true, state.length, buffer, '', holder.finish);
+    context.sourcesContent[normalizedUri] = source.styles;
 
-    // doWrite is almost always async, defer these to save a bit of time
-    // as the hot path ends with doWrite
-    state.pendingcb++;
-    state.lastBufferedRequest = null;
-    if (holder.next) {
-      state.corkedRequestsFree = holder.next;
-      holder.next = null;
-    } else {
-      state.corkedRequestsFree = new CorkedRequest(state);
+    if (source.sourceMap) {
+      trackSourceMap(source.sourceMap, normalizedUri, context);
     }
-  } else {
-    // Slow case, write chunks one-by-one
-    while (entry) {
-      var chunk = entry.chunk;
-      var encoding = entry.encoding;
-      var cb = entry.callback;
-      var len = state.objectMode ? 1 : chunk.length;
+  }
 
-      doWrite(stream, state, false, len, chunk, encoding, cb);
-      entry = entry.next;
-      // if we didn't call the onwrite immediately, then
-      // it means that we need to wait until it does.
-      // also, that means that the chunk and cb are currently
-      // being processed, so move the buffer counter past them.
-      if (state.writing) {
-        break;
-      }
-    }
+  return imports;
+}
 
-    if (entry === null) state.lastBufferedRequest = null;
+function normalizeUri(uri) {
+  var currentPath = path.resolve('');
+  var absoluteUri;
+  var relativeToCurrentPath;
+  var normalizedUri;
+
+  if (isRemoteResource(uri)) {
+    return uri;
   }
 
-  state.bufferedRequestCount = 0;
-  state.bufferedRequest = entry;
-  state.bufferProcessing = false;
-}
+  absoluteUri = path.isAbsolute(uri) ?
+    uri :
+    path.resolve(uri);
+  relativeToCurrentPath = path.relative(currentPath, absoluteUri);
+  normalizedUri = normalizePath(relativeToCurrentPath);
 
-Writable.prototype._write = function (chunk, encoding, cb) {
-  cb(new Error('_write() is not implemented'));
-};
+  return normalizedUri;
+}
 
-Writable.prototype._writev = null;
+function trackSourceMap(sourceMap, uri, context) {
+  var parsedMap = typeof sourceMap == 'string' ?
+      JSON.parse(sourceMap) :
+      sourceMap;
+  var rebasedMap = isRemoteResource(uri) ?
+    rebaseRemoteMap(parsedMap, uri) :
+    rebaseLocalMap(parsedMap, uri || UNKNOWN_URI, context.options.rebaseTo);
 
-Writable.prototype.end = function (chunk, encoding, cb) {
-  var state = this._writableState;
+  context.inputSourceMapTracker.track(uri, rebasedMap);
+}
 
-  if (typeof chunk === 'function') {
-    cb = chunk;
-    chunk = null;
-    encoding = null;
-  } else if (typeof encoding === 'function') {
-    cb = encoding;
-    encoding = null;
-  }
+function restoreAsImport(uri) {
+  return restoreImport('url(' + uri + ')', '') + Marker.SEMICOLON;
+}
 
-  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
+function fromStyles(styles, context, parentInlinerContext, callback) {
+  var tokens;
+  var rebaseConfig = {};
 
-  // .end() fully uncorks
-  if (state.corked) {
-    state.corked = 1;
-    this.uncork();
+  if (!context.source) {
+    rebaseConfig.fromBase = path.resolve('');
+    rebaseConfig.toBase = context.options.rebaseTo;
+  } else if (isRemoteResource(context.source)) {
+    rebaseConfig.fromBase = context.source;
+    rebaseConfig.toBase = context.source;
+  } else if (path.isAbsolute(context.source)) {
+    rebaseConfig.fromBase = path.dirname(context.source);
+    rebaseConfig.toBase = context.options.rebaseTo;
+  } else {
+    rebaseConfig.fromBase = path.dirname(path.resolve(context.source));
+    rebaseConfig.toBase = context.options.rebaseTo;
   }
 
-  // ignore unnecessary end() calls.
-  if (!state.ending && !state.finished) endWritable(this, state, cb);
-};
+  tokens = tokenize(styles, context);
+  tokens = rebase(tokens, context.options.rebase, context.validator, rebaseConfig);
 
-function needFinish(state) {
-  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
+  return allowsAnyImports(parentInlinerContext.inline) ?
+    inline(tokens, context, parentInlinerContext, callback) :
+    callback(tokens);
 }
 
-function prefinish(stream, state) {
-  if (!state.prefinished) {
-    state.prefinished = true;
-    stream.emit('prefinish');
-  }
+function allowsAnyImports(inline) {
+  return !(inline.length == 1 && inline[0] == 'none');
 }
 
-function finishMaybe(stream, state) {
-  var need = needFinish(state);
-  if (need) {
-    if (state.pendingcb === 0) {
-      prefinish(stream, state);
-      state.finished = true;
-      stream.emit('finish');
+function inline(tokens, externalContext, parentInlinerContext, callback) {
+  var inlinerContext = {
+    afterContent: false,
+    callback: callback,
+    errors: externalContext.errors,
+    externalContext: externalContext,
+    fetch: externalContext.options.fetch,
+    inlinedStylesheets: parentInlinerContext.inlinedStylesheets || externalContext.inlinedStylesheets,
+    inline: parentInlinerContext.inline,
+    inlineRequest: externalContext.options.inlineRequest,
+    inlineTimeout: externalContext.options.inlineTimeout,
+    isRemote: parentInlinerContext.isRemote || false,
+    localOnly: externalContext.localOnly,
+    outputTokens: [],
+    rebaseTo: externalContext.options.rebaseTo,
+    sourceTokens: tokens,
+    warnings: externalContext.warnings
+  };
+
+  return doInlineImports(inlinerContext);
+}
+
+function doInlineImports(inlinerContext) {
+  var token;
+  var i, l;
+
+  for (i = 0, l = inlinerContext.sourceTokens.length; i < l; i++) {
+    token = inlinerContext.sourceTokens[i];
+
+    if (token[0] == Token.AT_RULE && isImport(token[1])) {
+      inlinerContext.sourceTokens.splice(0, i);
+      return inlineStylesheet(token, inlinerContext);
+    } else if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT) {
+      inlinerContext.outputTokens.push(token);
     } else {
-      prefinish(stream, state);
+      inlinerContext.outputTokens.push(token);
+      inlinerContext.afterContent = true;
     }
   }
-  return need;
+
+  inlinerContext.sourceTokens = [];
+  return inlinerContext.callback(inlinerContext.outputTokens);
 }
 
-function endWritable(stream, state, cb) {
-  state.ending = true;
-  finishMaybe(stream, state);
-  if (cb) {
-    if (state.finished) processNextTick(cb);else stream.once('finish', cb);
-  }
-  state.ended = true;
-  stream.writable = false;
+function inlineStylesheet(token, inlinerContext) {
+  var uriAndMediaQuery = extractImportUrlAndMedia(token[1]);
+  var uri = uriAndMediaQuery[0];
+  var mediaQuery = uriAndMediaQuery[1];
+  var metadata = token[2];
+
+  return isRemoteResource(uri) ?
+    inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext) :
+    inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext);
 }
 
-// It seems a linked list but it is not
-// there will be only 2 of these for each stream
-function CorkedRequest(state) {
-  var _this = this;
+function inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext) {
+  var isAllowed = isAllowedResource(uri, true, inlinerContext.inline);
+  var originalUri = uri;
+  var isLoaded = uri in inlinerContext.externalContext.sourcesContent;
+  var isRuntimeResource = !hasProtocol(uri);
+
+  if (inlinerContext.inlinedStylesheets.indexOf(uri) > -1) {
+    inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as it has already been imported.');
+    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
+    return doInlineImports(inlinerContext);
+  } else if (inlinerContext.localOnly && inlinerContext.afterContent) {
+    inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as no callback given and after other content.');
+    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
+    return doInlineImports(inlinerContext);
+  } else if (isRuntimeResource) {
+    inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as no protocol given.');
+    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
+    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
+    return doInlineImports(inlinerContext);
+  } else if (inlinerContext.localOnly && !isLoaded) {
+    inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as no callback given.');
+    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
+    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
+    return doInlineImports(inlinerContext);
+  } else if (!isAllowed && inlinerContext.afterContent) {
+    inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as resource is not allowed and after other content.');
+    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
+    return doInlineImports(inlinerContext);
+  } else if (!isAllowed) {
+    inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as resource is not allowed.');
+    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
+    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
+    return doInlineImports(inlinerContext);
+  }
+
+  inlinerContext.inlinedStylesheets.push(uri);
 
-  this.next = null;
-  this.entry = null;
-  this.finish = function (err) {
-    var entry = _this.entry;
-    _this.entry = null;
-    while (entry) {
-      var cb = entry.callback;
-      state.pendingcb--;
-      cb(err);
-      entry = entry.next;
-    }
-    if (state.corkedRequestsFree) {
-      state.corkedRequestsFree.next = _this;
-    } else {
-      state.corkedRequestsFree = _this;
+  function whenLoaded(error, importedStyles) {
+    if (error) {
+      inlinerContext.errors.push('Broken @import declaration of "' + uri + '" - ' + error);
+
+      return process.nextTick(function () {
+        inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
+        inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
+        doInlineImports(inlinerContext);
+      });
     }
-  };
-}
-}).call(this,require('_process'))
-},{"./_stream_duplex":116,"./internal/streams/stream":122,"_process":111,"buffer":5,"buffer-shims":4,"core-util-is":99,"inherits":104,"process-nextick-args":110,"util-deprecate":161}],121:[function(require,module,exports){
-'use strict';
 
-var Buffer = require('buffer').Buffer;
-/*<replacement>*/
-var bufferShim = require('buffer-shims');
-/*</replacement>*/
+    inlinerContext.inline = inlinerContext.externalContext.options.inline;
+    inlinerContext.isRemote = true;
 
-module.exports = BufferList;
+    inlinerContext.externalContext.source = originalUri;
+    inlinerContext.externalContext.sourcesContent[uri] = importedStyles;
+    inlinerContext.externalContext.stats.originalSize += importedStyles.length;
 
-function BufferList() {
-  this.head = null;
-  this.tail = null;
-  this.length = 0;
-}
+    return fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function (importedTokens) {
+      importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata);
 
-BufferList.prototype.push = function (v) {
-  var entry = { data: v, next: null };
-  if (this.length > 0) this.tail.next = entry;else this.head = entry;
-  this.tail = entry;
-  ++this.length;
-};
+      inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens);
+      inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
 
-BufferList.prototype.unshift = function (v) {
-  var entry = { data: v, next: this.head };
-  if (this.length === 0) this.tail = entry;
-  this.head = entry;
-  ++this.length;
-};
+      return doInlineImports(inlinerContext);
+    });
+  }
 
-BufferList.prototype.shift = function () {
-  if (this.length === 0) return;
-  var ret = this.head.data;
-  if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
-  --this.length;
-  return ret;
-};
+  return isLoaded ?
+    whenLoaded(null, inlinerContext.externalContext.sourcesContent[uri]) :
+    inlinerContext.fetch(uri, inlinerContext.inlineRequest, inlinerContext.inlineTimeout, whenLoaded);
+}
 
-BufferList.prototype.clear = function () {
-  this.head = this.tail = null;
-  this.length = 0;
-};
+function inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext) {
+  var currentPath = path.resolve('');
+  var absoluteUri = path.isAbsolute(uri) ?
+    path.resolve(currentPath, uri[0] == '/' ? uri.substring(1) : uri) :
+    path.resolve(inlinerContext.rebaseTo, uri);
+  var relativeToCurrentPath = path.relative(currentPath, absoluteUri);
+  var importedStyles;
+  var importedTokens;
+  var isAllowed = isAllowedResource(uri, false, inlinerContext.inline);
+  var normalizedPath = normalizePath(relativeToCurrentPath);
+  var isLoaded = normalizedPath in inlinerContext.externalContext.sourcesContent;
 
-BufferList.prototype.join = function (s) {
-  if (this.length === 0) return '';
-  var p = this.head;
-  var ret = '' + p.data;
-  while (p = p.next) {
-    ret += s + p.data;
-  }return ret;
-};
+  if (inlinerContext.inlinedStylesheets.indexOf(absoluteUri) > -1) {
+    inlinerContext.warnings.push('Ignoring local @import of "' + uri + '" as it has already been imported.');
+  } else if (!isLoaded && (!fs.existsSync(absoluteUri) || !fs.statSync(absoluteUri).isFile())) {
+    inlinerContext.errors.push('Ignoring local @import of "' + uri + '" as resource is missing.');
+  } else if (!isAllowed && inlinerContext.afterContent) {
+    inlinerContext.warnings.push('Ignoring local @import of "' + uri + '" as resource is not allowed and after other content.');
+  } else if (inlinerContext.afterContent) {
+    inlinerContext.warnings.push('Ignoring local @import of "' + uri + '" as after other content.');
+  } else if (!isAllowed) {
+    inlinerContext.warnings.push('Skipping local @import of "' + uri + '" as resource is not allowed.');
+    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
+  } else {
+    importedStyles = isLoaded ?
+      inlinerContext.externalContext.sourcesContent[normalizedPath] :
+      fs.readFileSync(absoluteUri, 'utf-8');
 
-BufferList.prototype.concat = function (n) {
-  if (this.length === 0) return bufferShim.alloc(0);
-  if (this.length === 1) return this.head.data;
-  var ret = bufferShim.allocUnsafe(n >>> 0);
-  var p = this.head;
-  var i = 0;
-  while (p) {
-    p.data.copy(ret, i);
-    i += p.data.length;
-    p = p.next;
-  }
-  return ret;
-};
-},{"buffer":5,"buffer-shims":4}],122:[function(require,module,exports){
-module.exports = require('events').EventEmitter;
+    inlinerContext.inlinedStylesheets.push(absoluteUri);
+    inlinerContext.inline = inlinerContext.externalContext.options.inline;
 
-},{"events":100}],123:[function(require,module,exports){
-'use strict';
+    inlinerContext.externalContext.source = normalizedPath;
+    inlinerContext.externalContext.sourcesContent[normalizedPath] = importedStyles;
+    inlinerContext.externalContext.stats.originalSize += importedStyles.length;
 
-var Buffer = require('buffer').Buffer;
-var bufferShim = require('buffer-shims');
+    importedTokens = fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function (tokens) { return tokens; });
+    importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata);
 
-var isEncoding = Buffer.isEncoding || function (encoding) {
-  encoding = '' + encoding;
-  switch (encoding && encoding.toLowerCase()) {
-    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
-      return true;
-    default:
-      return false;
+    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens);
   }
-};
 
-function _normalizeEncoding(enc) {
-  if (!enc) return 'utf8';
-  var retried;
-  while (true) {
-    switch (enc) {
-      case 'utf8':
-      case 'utf-8':
-        return 'utf8';
-      case 'ucs2':
-      case 'ucs-2':
-      case 'utf16le':
-      case 'utf-16le':
-        return 'utf16le';
-      case 'latin1':
-      case 'binary':
-        return 'latin1';
-      case 'base64':
-      case 'ascii':
-      case 'hex':
-        return enc;
-      default:
-        if (retried) return; // undefined
-        enc = ('' + enc).toLowerCase();
-        retried = true;
-    }
-  }
-};
+  inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
 
-// Do not cache `Buffer.isEncoding` when checking encoding names as some
-// modules monkey-patch it to support additional encodings
-function normalizeEncoding(enc) {
-  var nenc = _normalizeEncoding(enc);
-  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
-  return nenc || enc;
+  return doInlineImports(inlinerContext);
 }
 
-// StringDecoder provides an interface for efficiently splitting a series of
-// buffers into a series of JS strings without breaking apart multi-byte
-// characters.
-exports.StringDecoder = StringDecoder;
-function StringDecoder(encoding) {
-  this.encoding = normalizeEncoding(encoding);
-  var nb;
-  switch (this.encoding) {
-    case 'utf16le':
-      this.text = utf16Text;
-      this.end = utf16End;
-      nb = 4;
-      break;
-    case 'utf8':
-      this.fillLast = utf8FillLast;
-      nb = 4;
-      break;
-    case 'base64':
-      this.text = base64Text;
-      this.end = base64End;
-      nb = 3;
-      break;
-    default:
-      this.write = simpleWrite;
-      this.end = simpleEnd;
-      return;
+function wrapInMedia(tokens, mediaQuery, metadata) {
+  if (mediaQuery) {
+    return [[Token.NESTED_BLOCK, [[Token.NESTED_BLOCK_SCOPE, '@media ' + mediaQuery, metadata]], tokens]];
+  } else {
+    return tokens;
   }
-  this.lastNeed = 0;
-  this.lastTotal = 0;
-  this.lastChar = bufferShim.allocUnsafe(nb);
 }
 
-StringDecoder.prototype.write = function (buf) {
-  if (buf.length === 0) return '';
-  var r;
-  var i;
-  if (this.lastNeed) {
-    r = this.fillLast(buf);
-    if (r === undefined) return '';
-    i = this.lastNeed;
-    this.lastNeed = 0;
-  } else {
-    i = 0;
-  }
-  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
-  return r || '';
-};
+module.exports = readSources;
+
+}).call(this,{"isBuffer":require("../../../is-buffer/index.js")},require('_process'))
+},{"../../../is-buffer/index.js":108,"../tokenizer/marker":84,"../tokenizer/token":85,"../tokenizer/tokenize":86,"../utils/has-protocol":89,"../utils/is-import":93,"../utils/is-remote-resource":94,"./apply-source-maps":70,"./extract-import-url-and-media":71,"./is-allowed-resource":73,"./load-original-sources":74,"./normalize-path":77,"./rebase":81,"./rebase-local-map":79,"./rebase-remote-map":80,"./restore-import":82,"_process":114,"fs":3,"path":112}],79:[function(require,module,exports){
+var path = require('path');
+
+function rebaseLocalMap(sourceMap, sourceUri, rebaseTo) {
+  var currentPath = path.resolve('');
+  var absoluteUri = path.resolve(currentPath, sourceUri);
+  var absoluteUriDirectory = path.dirname(absoluteUri);
+
+  sourceMap.sources = sourceMap.sources.map(function(source) {
+    return path.relative(rebaseTo, path.resolve(absoluteUriDirectory, source));
+  });
+
+  return sourceMap;
+}
+
+module.exports = rebaseLocalMap;
+
+},{"path":112}],80:[function(require,module,exports){
+var path = require('path');
+var url = require('url');
+
+function rebaseRemoteMap(sourceMap, sourceUri) {
+  var sourceDirectory = path.dirname(sourceUri);
+
+  sourceMap.sources = sourceMap.sources.map(function(source) {
+    return url.resolve(sourceDirectory, source);
+  });
 
-StringDecoder.prototype.end = utf8End;
+  return sourceMap;
+}
 
-// Returns only complete characters in a Buffer
-StringDecoder.prototype.text = utf8Text;
+module.exports = rebaseRemoteMap;
 
-// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
-StringDecoder.prototype.fillLast = function (buf) {
-  if (this.lastNeed <= buf.length) {
-    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
-    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
-  }
-  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
-  this.lastNeed -= buf.length;
-};
+},{"path":112,"url":161}],81:[function(require,module,exports){
+var extractImportUrlAndMedia = require('./extract-import-url-and-media');
+var restoreImport = require('./restore-import');
+var rewriteUrl = require('./rewrite-url');
 
-// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
-// continuation byte.
-function utf8CheckByte(byte) {
-  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
-  return -1;
+var Token = require('../tokenizer/token');
+var isImport = require('../utils/is-import');
+
+var SOURCE_MAP_COMMENT_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/;
+
+function rebase(tokens, rebaseAll, validator, rebaseConfig) {
+  return rebaseAll ?
+    rebaseEverything(tokens, validator, rebaseConfig) :
+    rebaseAtRules(tokens, validator, rebaseConfig);
 }
 
-// Checks at most 3 bytes at the end of a Buffer in order to detect an
-// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
-// needed to complete the UTF-8 character (if applicable) are returned.
-function utf8CheckIncomplete(self, buf, i) {
-  var j = buf.length - 1;
-  if (j < i) return 0;
-  var nb = utf8CheckByte(buf[j]);
-  if (nb >= 0) {
-    if (nb > 0) self.lastNeed = nb - 1;
-    return nb;
-  }
-  if (--j < i) return 0;
-  nb = utf8CheckByte(buf[j]);
-  if (nb >= 0) {
-    if (nb > 0) self.lastNeed = nb - 2;
-    return nb;
-  }
-  if (--j < i) return 0;
-  nb = utf8CheckByte(buf[j]);
-  if (nb >= 0) {
-    if (nb > 0) {
-      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
+function rebaseEverything(tokens, validator, rebaseConfig) {
+  var token;
+  var i, l;
+
+  for (i = 0, l = tokens.length; i < l; i++) {
+    token = tokens[i];
+
+    switch (token[0]) {
+      case Token.AT_RULE:
+        rebaseAtRule(token, validator, rebaseConfig);
+        break;
+      case Token.AT_RULE_BLOCK:
+        rebaseProperties(token[2], validator, rebaseConfig);
+        break;
+      case Token.COMMENT:
+        rebaseSourceMapComment(token, rebaseConfig);
+        break;
+      case Token.NESTED_BLOCK:
+        rebaseEverything(token[2], validator, rebaseConfig);
+        break;
+      case Token.RULE:
+        rebaseProperties(token[2], validator, rebaseConfig);
+        break;
     }
-    return nb;
   }
-  return 0;
+
+  return tokens;
 }
 
-// Validates as many continuation bytes for a multi-byte UTF-8 character as
-// needed or are available. If we see a non-continuation byte where we expect
-// one, we "replace" the validated continuation bytes we've seen so far with
-// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
-// behavior. The continuation byte check is included three times in the case
-// where all of the continuation bytes for a character exist in the same buffer.
-// It is also done this way as a slight performance increase instead of using a
-// loop.
-function utf8CheckExtraBytes(self, buf, p) {
-  if ((buf[0] & 0xC0) !== 0x80) {
-    self.lastNeed = 0;
-    return '\ufffd'.repeat(p);
-  }
-  if (self.lastNeed > 1 && buf.length > 1) {
-    if ((buf[1] & 0xC0) !== 0x80) {
-      self.lastNeed = 1;
-      return '\ufffd'.repeat(p + 1);
-    }
-    if (self.lastNeed > 2 && buf.length > 2) {
-      if ((buf[2] & 0xC0) !== 0x80) {
-        self.lastNeed = 2;
-        return '\ufffd'.repeat(p + 2);
-      }
+function rebaseAtRules(tokens, validator, rebaseConfig) {
+  var token;
+  var i, l;
+
+  for (i = 0, l = tokens.length; i < l; i++) {
+    token = tokens[i];
+
+    switch (token[0]) {
+      case Token.AT_RULE:
+        rebaseAtRule(token, validator, rebaseConfig);
+        break;
     }
   }
+
+  return tokens;
 }
 
-// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
-function utf8FillLast(buf) {
-  var p = this.lastTotal - this.lastNeed;
-  var r = utf8CheckExtraBytes(this, buf, p);
-  if (r !== undefined) return r;
-  if (this.lastNeed <= buf.length) {
-    buf.copy(this.lastChar, p, 0, this.lastNeed);
-    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+function rebaseAtRule(token, validator, rebaseConfig) {
+  if (!isImport(token[1])) {
+    return;
   }
-  buf.copy(this.lastChar, p, 0, buf.length);
-  this.lastNeed -= buf.length;
-}
 
-// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
-// partial character, the character's bytes are buffered until the required
-// number of bytes are available.
-function utf8Text(buf, i) {
-  var total = utf8CheckIncomplete(this, buf, i);
-  if (!this.lastNeed) return buf.toString('utf8', i);
-  this.lastTotal = total;
-  var end = buf.length - (total - this.lastNeed);
-  buf.copy(this.lastChar, 0, end);
-  return buf.toString('utf8', i, end);
+  var uriAndMediaQuery = extractImportUrlAndMedia(token[1]);
+  var newUrl = rewriteUrl(uriAndMediaQuery[0], rebaseConfig);
+  var mediaQuery = uriAndMediaQuery[1];
+
+  token[1] = restoreImport(newUrl, mediaQuery);
 }
 
-// For UTF-8, a replacement character for each buffered byte of a (partial)
-// character needs to be added to the output.
-function utf8End(buf) {
-  var r = buf && buf.length ? this.write(buf) : '';
-  if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
-  return r;
+function rebaseSourceMapComment(token, rebaseConfig) {
+  var matches = SOURCE_MAP_COMMENT_PATTERN.exec(token[1]);
+
+  if (matches && matches[1].indexOf('data:') === -1) {
+    token[1] = token[1].replace(matches[1], rewriteUrl(matches[1], rebaseConfig, true));
+  }
 }
 
-// UTF-16LE typically needs two bytes per character, but even if we have an even
-// number of bytes available, we need to check if we end on a leading/high
-// surrogate. In that case, we need to wait for the next two bytes in order to
-// decode the last character properly.
-function utf16Text(buf, i) {
-  if ((buf.length - i) % 2 === 0) {
-    var r = buf.toString('utf16le', i);
-    if (r) {
-      var c = r.charCodeAt(r.length - 1);
-      if (c >= 0xD800 && c <= 0xDBFF) {
-        this.lastNeed = 2;
-        this.lastTotal = 4;
-        this.lastChar[0] = buf[buf.length - 2];
-        this.lastChar[1] = buf[buf.length - 1];
-        return r.slice(0, -1);
+function rebaseProperties(properties, validator, rebaseConfig) {
+  var property;
+  var value;
+  var i, l;
+  var j, m;
+
+  for (i = 0, l = properties.length; i < l; i++) {
+    property = properties[i];
+
+    for (j = 2 /* 0 is Token.PROPERTY, 1 is name */, m = property.length; j < m; j++) {
+      value = property[j][1];
+
+      if (validator.isUrl(value)) {
+        property[j][1] = rewriteUrl(value, rebaseConfig);
       }
     }
-    return r;
   }
-  this.lastNeed = 1;
-  this.lastTotal = 2;
-  this.lastChar[0] = buf[buf.length - 1];
-  return buf.toString('utf16le', i, buf.length - 1);
 }
 
-// For UTF-16LE we do not explicitly append special replacement characters if we
-// end on a partial character, we simply let v8 handle that.
-function utf16End(buf) {
-  var r = buf && buf.length ? this.write(buf) : '';
-  if (this.lastNeed) {
-    var end = this.lastTotal - this.lastNeed;
-    return r + this.lastChar.toString('utf16le', 0, end);
-  }
-  return r;
+module.exports = rebase;
+
+},{"../tokenizer/token":85,"../utils/is-import":93,"./extract-import-url-and-media":71,"./restore-import":82,"./rewrite-url":83}],82:[function(require,module,exports){
+function restoreImport(uri, mediaQuery) {
+  return ('@import ' + uri + ' ' + mediaQuery).trim();
 }
 
-function base64Text(buf, i) {
-  var n = (buf.length - i) % 3;
-  if (n === 0) return buf.toString('base64', i);
-  this.lastNeed = 3 - n;
-  this.lastTotal = 3;
-  if (n === 1) {
-    this.lastChar[0] = buf[buf.length - 1];
-  } else {
-    this.lastChar[0] = buf[buf.length - 2];
-    this.lastChar[1] = buf[buf.length - 1];
+module.exports = restoreImport;
+
+},{}],83:[function(require,module,exports){
+(function (process){
+var path = require('path');
+var url = require('url');
+
+var DOUBLE_QUOTE = '"';
+var SINGLE_QUOTE = '\'';
+var URL_PREFIX = 'url(';
+var URL_SUFFIX = ')';
+
+var QUOTE_PREFIX_PATTERN = /^["']/;
+var QUOTE_SUFFIX_PATTERN = /["']$/;
+var ROUND_BRACKETS_PATTERN = /[\(\)]/;
+var URL_PREFIX_PATTERN = /^url\(/i;
+var URL_SUFFIX_PATTERN = /\)$/;
+var WHITESPACE_PATTERN = /\s/;
+
+var isWindows = process.platform == 'win32';
+
+function rebase(uri, rebaseConfig) {
+  if (!rebaseConfig) {
+    return uri;
   }
-  return buf.toString('base64', i, buf.length - n);
+
+  if (isAbsolute(uri) && !isRemote(rebaseConfig.toBase)) {
+    return uri;
+  }
+
+  if (isRemote(uri) || isSVGMarker(uri) || isInternal(uri)) {
+    return uri;
+  }
+
+  if (isData(uri)) {
+    return '\'' + uri + '\'';
+  }
+
+  if (isRemote(rebaseConfig.toBase)) {
+    return url.resolve(rebaseConfig.toBase, uri);
+  }
+
+  return rebaseConfig.absolute ?
+    normalize(absolute(uri, rebaseConfig)) :
+    normalize(relative(uri, rebaseConfig));
 }
 
-function base64End(buf) {
-  var r = buf && buf.length ? this.write(buf) : '';
-  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
-  return r;
+function isAbsolute(uri) {
+  return path.isAbsolute(uri);
 }
 
-// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
-function simpleWrite(buf) {
-  return buf.toString(this.encoding);
+function isSVGMarker(uri) {
+  return uri[0] == '#';
 }
 
-function simpleEnd(buf) {
-  return buf && buf.length ? this.write(buf) : '';
+function isInternal(uri) {
+  return /^\w+:\w+/.test(uri);
 }
-},{"buffer":5,"buffer-shims":4}],124:[function(require,module,exports){
-exports = module.exports = require('./lib/_stream_readable.js');
-exports.Stream = exports;
-exports.Readable = exports;
-exports.Writable = require('./lib/_stream_writable.js');
-exports.Duplex = require('./lib/_stream_duplex.js');
-exports.Transform = require('./lib/_stream_transform.js');
-exports.PassThrough = require('./lib/_stream_passthrough.js');
 
-},{"./lib/_stream_duplex.js":116,"./lib/_stream_passthrough.js":117,"./lib/_stream_readable.js":118,"./lib/_stream_transform.js":119,"./lib/_stream_writable.js":120}],125:[function(require,module,exports){
-"use strict";
+function isRemote(uri) {
+  return /^[^:]+?:\/\//.test(uri) || uri.indexOf('//') === 0;
+}
 
-module.exports =
-{
-       // Output
-       ABSOLUTE:      "absolute",
-       PATH_RELATIVE: "pathRelative",
-       ROOT_RELATIVE: "rootRelative",
-       SHORTEST:      "shortest"
-};
+function isData(uri) {
+  return uri.indexOf('data:') === 0;
+}
 
-},{}],126:[function(require,module,exports){
-"use strict";
+function absolute(uri, rebaseConfig) {
+  return path
+    .resolve(path.join(rebaseConfig.fromBase || '', uri))
+    .replace(rebaseConfig.toBase, '');
+}
 
-var constants = require("./constants");
+function relative(uri, rebaseConfig) {
+  return path.relative(rebaseConfig.toBase, path.join(rebaseConfig.fromBase || '', uri));
+}
+
+function normalize(uri) {
+  return isWindows ? uri.replace(/\\/g, '/') : uri;
+}
 
+function quoteFor(unquotedUrl) {
+  if (unquotedUrl.indexOf(SINGLE_QUOTE) > -1) {
+    return DOUBLE_QUOTE;
+  } else if (unquotedUrl.indexOf(DOUBLE_QUOTE) > -1) {
+    return SINGLE_QUOTE;
+  } else if (hasWhitespace(unquotedUrl) || hasRoundBrackets(unquotedUrl)) {
+    return SINGLE_QUOTE;
+  } else {
+    return '';
+  }
+}
 
+function hasWhitespace(url) {
+  return WHITESPACE_PATTERN.test(url);
+}
 
-function formatAuth(urlObj, options)
-{
-       if (urlObj.auth && !options.removeAuth && (urlObj.extra.relation.maximumHost || options.output===constants.ABSOLUTE))
-       {
-               return urlObj.auth + "@";
-       }
-       
-       return "";
+function hasRoundBrackets(url) {
+  return ROUND_BRACKETS_PATTERN.test(url);
 }
 
+function rewriteUrl(originalUrl, rebaseConfig, pathOnly) {
+  var strippedUrl = originalUrl
+    .replace(URL_PREFIX_PATTERN, '')
+    .replace(URL_SUFFIX_PATTERN, '')
+    .trim();
+
+  var unquotedUrl = strippedUrl
+    .replace(QUOTE_PREFIX_PATTERN, '')
+    .replace(QUOTE_SUFFIX_PATTERN, '')
+    .trim();
 
+  var quote = strippedUrl[0] == SINGLE_QUOTE || strippedUrl[0] == DOUBLE_QUOTE ?
+    strippedUrl[0] :
+    quoteFor(unquotedUrl);
 
-function formatHash(urlObj, options)
-{
-       return urlObj.hash ? urlObj.hash : "";
+  return pathOnly ?
+    rebase(unquotedUrl, rebaseConfig) :
+    URL_PREFIX + quote + rebase(unquotedUrl, rebaseConfig) + quote + URL_SUFFIX;
 }
 
+module.exports = rewriteUrl;
 
+}).call(this,require('_process'))
+},{"_process":114,"path":112,"url":161}],84:[function(require,module,exports){
+var Marker = {
+  ASTERISK: '*',
+  AT: '@',
+  BACK_SLASH: '\\',
+  CLOSE_CURLY_BRACKET: '}',
+  CLOSE_ROUND_BRACKET: ')',
+  CLOSE_SQUARE_BRACKET: ']',
+  COLON: ':',
+  COMMA: ',',
+  DOUBLE_QUOTE: '"',
+  EXCLAMATION: '!',
+  FORWARD_SLASH: '/',
+  INTERNAL: '-clean-css-',
+  NEW_LINE_NIX: '\n',
+  NEW_LINE_WIN: '\r',
+  OPEN_CURLY_BRACKET: '{',
+  OPEN_ROUND_BRACKET: '(',
+  OPEN_SQUARE_BRACKET: '[',
+  SEMICOLON: ';',
+  SINGLE_QUOTE: '\'',
+  SPACE: ' ',
+  TAB: '\t',
+  UNDERSCORE: '_'
+};
 
-function formatHost(urlObj, options)
-{
-       if (urlObj.host.full && (urlObj.extra.relation.maximumAuth || options.output===constants.ABSOLUTE))
-       {
-               return urlObj.host.full;
-       }
-       
-       return "";
-}
+module.exports = Marker;
 
+},{}],85:[function(require,module,exports){
+var Token = {
+  AT_RULE: 'at-rule', // e.g. `@import`, `@charset`
+  AT_RULE_BLOCK: 'at-rule-block', // e.g. `@font-face{...}`
+  AT_RULE_BLOCK_SCOPE: 'at-rule-block-scope', // e.g. `@font-face`
+  COMMENT: 'comment', // e.g. `/* comment */`
+  NESTED_BLOCK: 'nested-block', // e.g. `@media screen{...}`, `@keyframes animation {...}`
+  NESTED_BLOCK_SCOPE: 'nested-block-scope', // e.g. `@media`, `@keyframes`
+  PROPERTY: 'property', // e.g. `color:red`
+  PROPERTY_BLOCK: 'property-block', // e.g. `--var:{color:red}`
+  PROPERTY_NAME: 'property-name', // e.g. `color`
+  PROPERTY_VALUE: 'property-value', // e.g. `red`
+  RULE: 'rule', // e.g `div > a{...}`
+  RULE_SCOPE: 'rule-scope' // e.g `div > a`
+};
 
+module.exports = Token;
 
-function formatPath(urlObj, options)
-{
-       var str = "";
-       
-       var absolutePath = urlObj.path.absolute.string;
-       var relativePath = urlObj.path.relative.string;
-       var resource = showResource(urlObj, options);
-       
-       if (urlObj.extra.relation.maximumHost || options.output===constants.ABSOLUTE || options.output===constants.ROOT_RELATIVE)
-       {
-               str = absolutePath;
-       }
-       else if (relativePath.length<=absolutePath.length && options.output===constants.SHORTEST || options.output===constants.PATH_RELATIVE)
-       {
-               str = relativePath;
-               
-               if (str === "")
-               {
-                       var query = showQuery(urlObj,options) && !!getQuery(urlObj,options);
-                       
-                       if (urlObj.extra.relation.maximumPath && !resource)
-                       {
-                               str = "./";
-                       }
-                       else if (urlObj.extra.relation.overridesQuery && !resource && !query)
-                       {
-                               str = "./";
-                       }
-               }
-       }
-       else
-       {
-               str = absolutePath;
-       }
-       
-       if ( str==="/" && !resource && options.removeRootTrailingSlash && (!urlObj.extra.relation.minimumPort || options.output===constants.ABSOLUTE) )
-       {
-               str = "";
-       }
-       
-       return str;
-}
+},{}],86:[function(require,module,exports){
+var Marker = require('./marker');
+var Token = require('./token');
 
+var formatPosition = require('../utils/format-position');
 
+var Level = {
+  BLOCK: 'block',
+  COMMENT: 'comment',
+  DOUBLE_QUOTE: 'double-quote',
+  RULE: 'rule',
+  SINGLE_QUOTE: 'single-quote'
+};
 
-function formatPort(urlObj, options)
-{
-       if (urlObj.port && !urlObj.extra.portIsDefault && urlObj.extra.relation.maximumHost)
-       {
-               return ":" + urlObj.port;
-       }
-       
-       return "";
-}
+var AT_RULES = [
+  '@charset',
+  '@import'
+];
+
+var BLOCK_RULES = [
+  '@-moz-document',
+  '@document',
+  '@-moz-keyframes',
+  '@-ms-keyframes',
+  '@-o-keyframes',
+  '@-webkit-keyframes',
+  '@keyframes',
+  '@media',
+  '@supports'
+];
 
+var RULE_WORD_SEPARATOR_PATTERN = /[\s\(]/;
+var TAIL_BROKEN_VALUE_PATTERN = /[\s|\}]*$/;
 
+function tokenize(source, externalContext) {
+  var internalContext = {
+    level: Level.BLOCK,
+    position: {
+      source: externalContext.source || undefined,
+      line: 1,
+      column: 0,
+      index: 0
+    }
+  };
 
-function formatQuery(urlObj, options)
-{
-       return showQuery(urlObj,options) ? getQuery(urlObj, options) : "";
+  return intoTokens(source, externalContext, internalContext, false);
 }
 
+function intoTokens(source, externalContext, internalContext, isNested) {
+  var allTokens = [];
+  var newTokens = allTokens;
+  var lastToken;
+  var ruleToken;
+  var ruleTokens = [];
+  var propertyToken;
+  var metadata;
+  var metadatas = [];
+  var level = internalContext.level;
+  var levels = [];
+  var buffer = [];
+  var buffers = [];
+  var serializedBuffer;
+  var roundBracketLevel = 0;
+  var isQuoted;
+  var isSpace;
+  var isNewLineNix;
+  var isNewLineWin;
+  var isCommentStart;
+  var wasCommentStart = false;
+  var isCommentEnd;
+  var wasCommentEnd = false;
+  var isEscaped;
+  var wasEscaped = false;
+  var seekingValue = false;
+  var seekingPropertyBlockClosing = false;
+  var position = internalContext.position;
+
+  for (; position.index < source.length; position.index++) {
+    var character = source[position.index];
 
+    isQuoted = level == Level.SINGLE_QUOTE || level == Level.DOUBLE_QUOTE;
+    isSpace = character == Marker.SPACE || character == Marker.TAB;
+    isNewLineNix = character == Marker.NEW_LINE_NIX;
+    isNewLineWin = character == Marker.NEW_LINE_NIX && source[position.index - 1] == Marker.NEW_LINE_WIN;
+    isCommentStart = !wasCommentEnd && level != Level.COMMENT && !isQuoted && character == Marker.ASTERISK && source[position.index - 1] == Marker.FORWARD_SLASH;
+    isCommentEnd = !wasCommentStart && level == Level.COMMENT && character == Marker.FORWARD_SLASH && source[position.index - 1] == Marker.ASTERISK;
 
-function formatResource(urlObj, options)
-{
-       return showResource(urlObj,options) ? urlObj.resource : "";
-}
+    metadata = buffer.length === 0 ?
+      [position.line, position.column, position.source] :
+      metadata;
 
+    if (isEscaped) {
+      // previous character was a backslash
+      buffer.push(character);
+    } else if (!isCommentEnd && level == Level.COMMENT) {
+      buffer.push(character);
+    } else if (isCommentStart && (level == Level.BLOCK || level == Level.RULE) && buffer.length > 1) {
+      // comment start within block preceded by some content, e.g. div/*<--
+      metadatas.push(metadata);
+      buffer.push(character);
+      buffers.push(buffer.slice(0, buffer.length - 2));
 
+      buffer = buffer.slice(buffer.length - 2);
+      metadata = [position.line, position.column - 1, position.source];
 
-function formatScheme(urlObj, options)
-{
-       var str = "";
-       
-       if (urlObj.extra.relation.maximumHost || options.output===constants.ABSOLUTE)
-       {
-               if (!urlObj.extra.relation.minimumScheme || !options.schemeRelative || options.output===constants.ABSOLUTE)
-               {
-                       str += urlObj.scheme + "://";
-               }
-               else
-               {
-                       str += "//";
-               }
-       }
-       
-       return str;
-}
+      levels.push(level);
+      level = Level.COMMENT;
+    } else if (isCommentStart) {
+      // comment start, e.g. /*<--
+      levels.push(level);
+      level = Level.COMMENT;
+      buffer.push(character);
+    } else if (isCommentEnd) {
+      // comment end, e.g. /* comment */<--
+      serializedBuffer = buffer.join('').trim() + character;
+      lastToken = [Token.COMMENT, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]];
+      newTokens.push(lastToken);
 
+      level = levels.pop();
+      metadata = metadatas.pop() || null;
+      buffer = buffers.pop() || [];
+    } else if (character == Marker.SINGLE_QUOTE && !isQuoted) {
+      // single quotation start, e.g. a[href^='https<--
+      levels.push(level);
+      level = Level.SINGLE_QUOTE;
+      buffer.push(character);
+    } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) {
+      // single quotation end, e.g. a[href^='https'<--
+      level = levels.pop();
+      buffer.push(character);
+    } else if (character == Marker.DOUBLE_QUOTE && !isQuoted) {
+      // double quotation start, e.g. a[href^="<--
+      levels.push(level);
+      level = Level.DOUBLE_QUOTE;
+      buffer.push(character);
+    } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) {
+      // double quotation end, e.g. a[href^="https"<--
+      level = levels.pop();
+      buffer.push(character);
+    } else if (!isCommentStart && !isCommentEnd && character != Marker.CLOSE_ROUND_BRACKET && character != Marker.OPEN_ROUND_BRACKET && level != Level.COMMENT && !isQuoted && roundBracketLevel > 0) {
+      // character inside any function, e.g. hsla(.<--
+      buffer.push(character);
+    } else if (character == Marker.OPEN_ROUND_BRACKET && !isQuoted && level != Level.COMMENT && !seekingValue) {
+      // round open bracket, e.g. @import url(<--
+      buffer.push(character);
 
+      roundBracketLevel++;
+    } else if (character == Marker.CLOSE_ROUND_BRACKET && !isQuoted && level != Level.COMMENT && !seekingValue) {
+      // round open bracket, e.g. @import url(test.css)<--
+      buffer.push(character);
 
-function formatUrl(urlObj, options)
-{
-       var url = "";
-       
-       url += formatScheme(urlObj, options);
-       url += formatAuth(urlObj, options);
-       url += formatHost(urlObj, options);
-       url += formatPort(urlObj, options);
-       url += formatPath(urlObj, options);
-       url += formatResource(urlObj, options);
-       url += formatQuery(urlObj, options);
-       url += formatHash(urlObj, options);
-       
-       return url;
-}
+      roundBracketLevel--;
+    } else if (character == Marker.SEMICOLON && level == Level.BLOCK && buffer[0] == Marker.AT) {
+      // semicolon ending rule at block level, e.g. @import '...';<--
+      serializedBuffer = buffer.join('').trim();
+      allTokens.push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
 
+      buffer = [];
+    } else if (character == Marker.COMMA && level == Level.BLOCK && ruleToken) {
+      // comma separator at block level, e.g. a,div,<--
+      serializedBuffer = buffer.join('').trim();
+      ruleToken[1].push([tokenScopeFrom(ruleToken[0]), serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)]]);
 
+      buffer = [];
+    } else if (character == Marker.COMMA && level == Level.BLOCK && tokenTypeFrom(buffer) == Token.AT_RULE) {
+      // comma separator at block level, e.g. @import url(...) screen,<--
+      // keep iterating as end semicolon will create the token
+      buffer.push(character);
+    } else if (character == Marker.COMMA && level == Level.BLOCK) {
+      // comma separator at block level, e.g. a,<--
+      ruleToken = [tokenTypeFrom(buffer), [], []];
+      serializedBuffer = buffer.join('').trim();
+      ruleToken[1].push([tokenScopeFrom(ruleToken[0]), serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext, 0)]]);
 
-function getQuery(urlObj, options)
-{
-       var stripQuery = options.removeEmptyQueries && urlObj.extra.relation.minimumPort;
-       
-       return urlObj.query.string[ stripQuery ? "stripped" : "full" ];
-}
+      buffer = [];
+    } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK && ruleToken && ruleToken[0] == Token.NESTED_BLOCK) {
+      // open brace opening at-rule at block level, e.g. @media{<--
+      serializedBuffer = buffer.join('').trim();
+      ruleToken[1].push([Token.NESTED_BLOCK_SCOPE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
+      allTokens.push(ruleToken);
 
+      levels.push(level);
+      position.column++;
+      position.index++;
+      buffer = [];
 
+      ruleToken[2] = intoTokens(source, externalContext, internalContext, true);
+      ruleToken = null;
+    } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK && tokenTypeFrom(buffer) == Token.NESTED_BLOCK) {
+      // open brace opening at-rule at block level, e.g. @media{<--
+      serializedBuffer = buffer.join('').trim();
+      ruleToken = ruleToken || [Token.NESTED_BLOCK, [], []];
+      ruleToken[1].push([Token.NESTED_BLOCK_SCOPE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
+      allTokens.push(ruleToken);
 
-function showQuery(urlObj, options)
-{
-       return !urlObj.extra.relation.minimumQuery || options.output===constants.ABSOLUTE || options.output===constants.ROOT_RELATIVE;
-}
+      levels.push(level);
+      position.column++;
+      position.index++;
+      buffer = [];
 
+      ruleToken[2] = intoTokens(source, externalContext, internalContext, true);
+      ruleToken = null;
+    } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK) {
+      // open brace opening rule at block level, e.g. div{<--
+      serializedBuffer = buffer.join('').trim();
+      ruleToken = ruleToken || [tokenTypeFrom(buffer), [], []];
+      ruleToken[1].push([tokenScopeFrom(ruleToken[0]), serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)]]);
+      newTokens = ruleToken[2];
+      allTokens.push(ruleToken);
 
+      levels.push(level);
+      level = Level.RULE;
+      buffer = [];
+    } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && seekingValue) {
+      // open brace opening rule at rule level, e.g. div{--variable:{<--
+      ruleTokens.push(ruleToken);
+      ruleToken = [Token.PROPERTY_BLOCK, []];
+      propertyToken.push(ruleToken);
+      newTokens = ruleToken[1];
 
-function showResource(urlObj, options)
-{
-       var removeIndex = options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex;
-       var removeMatchingResource = urlObj.extra.relation.minimumResource && options.output!==constants.ABSOLUTE && options.output!==constants.ROOT_RELATIVE;
-       
-       return !!urlObj.resource && !removeMatchingResource && !removeIndex;
-}
+      levels.push(level);
+      level = Level.RULE;
+      seekingValue = false;
+    } else if (character == Marker.COLON && level == Level.RULE && !seekingValue) {
+      // colon at rule level, e.g. a{color:<--
+      serializedBuffer = buffer.join('').trim();
+      propertyToken = [Token.PROPERTY, [Token.PROPERTY_NAME, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]];
+      newTokens.push(propertyToken);
 
+      seekingValue = true;
+      buffer = [];
+    } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && ruleTokens.length > 0 && buffer.length > 0 && buffer[0] == Marker.AT) {
+      // semicolon at rule level for at-rule, e.g. a{--color:{@apply(--other-color);<--
+      serializedBuffer = buffer.join('').trim();
+      ruleToken[1].push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
 
+      buffer = [];
+    } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && buffer.length > 0) {
+      // semicolon at rule level, e.g. a{color:red;<--
+      serializedBuffer = buffer.join('').trim();
+      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
 
-module.exports = formatUrl;
+      propertyToken = null;
+      seekingValue = false;
+      buffer = [];
+    } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && buffer.length === 0) {
+      // semicolon after bracketed value at rule level, e.g. a{color:rgb(...);<--
+      propertyToken = null;
+      seekingValue = false;
+    } else if (character == Marker.SEMICOLON && level == Level.RULE && buffer.length > 0 && buffer[0] == Marker.AT) {
+      // semicolon for at-rule at rule level, e.g. a{@apply(--variable);<--
+      serializedBuffer = buffer.join('');
+      newTokens.push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
 
-},{"./constants":125}],127:[function(require,module,exports){
-"use strict";
+      seekingValue = false;
+      buffer = [];
+    } else if (character == Marker.SEMICOLON && level == Level.RULE && seekingPropertyBlockClosing) {
+      // close brace after a property block at rule level, e.g. a{--custom:{color:red;};<--
+      seekingPropertyBlockClosing = false;
+      buffer = [];
+    } else if (character == Marker.SEMICOLON && level == Level.RULE && buffer.length === 0) {
+      // stray semicolon at rule level, e.g. a{;<--
+      // noop
+    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && seekingValue && buffer.length > 0 && ruleTokens.length > 0) {
+      // close brace at rule level, e.g. a{--color:{color:red}<--
+      serializedBuffer = buffer.join('');
+      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
+      propertyToken = null;
+      ruleToken = ruleTokens.pop();
+      newTokens = ruleToken[2];
 
-var constants  = require("./constants");
-var formatUrl  = require("./format");
-var getOptions = require("./options");
-var objUtils   = require("./util/object");
-var parseUrl   = require("./parse");
-var relateUrl  = require("./relate");
+      level = levels.pop();
+      seekingValue = false;
+      buffer = [];
+    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && buffer.length > 0 && buffer[0] == Marker.AT && ruleTokens.length > 0) {
+      // close brace at rule level for at-rule, e.g. a{--color:{@apply(--other-color)}<--
+      serializedBuffer = buffer.join('');
+      ruleToken[1].push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
+      propertyToken = null;
+      ruleToken = ruleTokens.pop();
+      newTokens = ruleToken[2];
 
+      level = levels.pop();
+      seekingValue = false;
+      buffer = [];
+    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && ruleTokens.length > 0) {
+      // close brace at rule level after space, e.g. a{--color:{color:red }<--
+      propertyToken = null;
+      ruleToken = ruleTokens.pop();
+      newTokens = ruleToken[2];
 
+      level = levels.pop();
+      seekingValue = false;
+    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && propertyToken && buffer.length > 0) {
+      // close brace at rule level, e.g. a{color:red}<--
+      serializedBuffer = buffer.join('');
+      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
+      propertyToken = null;
+      ruleToken = ruleTokens.pop();
+      newTokens = allTokens;
 
-function RelateUrl(from, options)
-{
-       this.options = getOptions(options,
-       {
-               defaultPorts: {ftp:21, http:80, https:443},
-               directoryIndexes: ["index.html"],
-               ignore_www: false,
-               output: RelateUrl.SHORTEST,
-               rejectedSchemes: ["data","javascript","mailto"],
-               removeAuth: false,
-               removeDirectoryIndexes: true,
-               removeEmptyQueries: false,
-               removeRootTrailingSlash: true,
-               schemeRelative: true,
-               site: undefined,
-               slashesDenoteHost: true
-       });
-       
-       this.from = parseUrl.from(from, this.options, null);
-}
+      level = levels.pop();
+      seekingValue = false;
+      buffer = [];
+    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && buffer.length > 0 && buffer[0] == Marker.AT) {
+      // close brace after at-rule at rule level, e.g. a{@apply(--variable)}<--
+      propertyToken = null;
+      ruleToken = null;
+      serializedBuffer = buffer.join('').trim();
+      newTokens.push([Token.AT_RULE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
+      newTokens = allTokens;
 
+      level = levels.pop();
+      seekingValue = false;
+      buffer = [];
+    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE && levels[levels.length - 1] == Level.RULE) {
+      // close brace after a property block at rule level, e.g. a{--custom:{color:red;}<--
+      propertyToken = null;
+      ruleToken = ruleTokens.pop();
+      newTokens = ruleToken[2];
 
+      level = levels.pop();
+      seekingValue = false;
+      seekingPropertyBlockClosing = true;
+      buffer = [];
+    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE) {
+      // close brace after a rule, e.g. a{color:red;}<--
+      propertyToken = null;
+      ruleToken = null;
+      newTokens = allTokens;
 
-/*
-       Usage: instance=new RelateUrl(); instance.relate();
-*/
-RelateUrl.prototype.relate = function(from, to, options)
-{
-       // relate(to,options)
-       if ( objUtils.isPlainObject(to) )
-       {
-               options = to;
-               to = from;
-               from = null;
-       }
-       // relate(to)
-       else if (!to)
-       {
-               to = from;
-               from = null;
-       }
-       
-       options = getOptions(options, this.options);
-       from = from || options.site;
-       from = parseUrl.from(from, options, this.from);
-       
-       if (!from || !from.href)
-       {
-               throw new Error("from value not defined.");
-       }
-       else if (from.extra.hrefInfo.minimumPathOnly)
-       {
-               throw new Error("from value supplied is not absolute: "+from.href);
-       }
-       
-       to = parseUrl.to(to, options);
-       
-       if (to.valid===false) return to.href;
-       
-       to = relateUrl(from, to, options);
-       to = formatUrl(to, options);
-       
-       return to;
-}
+      level = levels.pop();
+      seekingValue = false;
+    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.BLOCK && !isNested && position.index <= source.length - 1) {
+      // stray close brace at block level, e.g. a{color:red}color:blue}<--
+      externalContext.warnings.push('Unexpected \'}\' at ' + formatPosition([position.line, position.column, position.source]) + '.');
+      buffer.push(character);
+    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.BLOCK) {
+      // close brace at block level, e.g. @media screen {...}<--
+      break;
+    } else if (character == Marker.OPEN_ROUND_BRACKET && level == Level.RULE && seekingValue) {
+      // round open bracket, e.g. a{color:hsla(<--
+      buffer.push(character);
+      roundBracketLevel++;
+    } else if (character == Marker.CLOSE_ROUND_BRACKET && level == Level.RULE && seekingValue && roundBracketLevel == 1) {
+      // round close bracket, e.g. a{color:hsla(0,0%,0%)<--
+      buffer.push(character);
+      serializedBuffer = buffer.join('').trim();
+      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
 
+      roundBracketLevel--;
+      buffer = [];
+    } else if (character == Marker.CLOSE_ROUND_BRACKET && level == Level.RULE && seekingValue) {
+      // round close bracket within other brackets, e.g. a{width:calc((10rem / 2)<--
+      buffer.push(character);
+      roundBracketLevel--;
+    } else if (character == Marker.FORWARD_SLASH && source[position.index + 1] != Marker.ASTERISK && level == Level.RULE && seekingValue && buffer.length > 0) {
+      // forward slash within a property, e.g. a{background:url(image.png) 0 0/<--
+      serializedBuffer = buffer.join('').trim();
+      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
+      propertyToken.push([Token.PROPERTY_VALUE, character, [[position.line, position.column, position.source]]]);
 
+      buffer = [];
+    } else if (character == Marker.FORWARD_SLASH && source[position.index + 1] != Marker.ASTERISK && level == Level.RULE && seekingValue) {
+      // forward slash within a property after space, e.g. a{background:url(image.png) 0 0 /<--
+      propertyToken.push([Token.PROPERTY_VALUE, character, [[position.line, position.column, position.source]]]);
 
-/*
-       Usage: RelateUrl.relate();
-*/
-RelateUrl.relate = function(from, to, options)
-{
-       return new RelateUrl().relate(from, to, options);
-}
+      buffer = [];
+    } else if (character == Marker.COMMA && level == Level.RULE && seekingValue && buffer.length > 0) {
+      // comma within a property, e.g. a{background:url(image.png),<--
+      serializedBuffer = buffer.join('').trim();
+      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
+      propertyToken.push([Token.PROPERTY_VALUE, character, [[position.line, position.column, position.source]]]);
 
+      buffer = [];
+    } else if (character == Marker.COMMA && level == Level.RULE && seekingValue) {
+      // comma within a property after space, e.g. a{background:url(image.png) ,<--
+      propertyToken.push([Token.PROPERTY_VALUE, character, [[position.line, position.column, position.source]]]);
 
+      buffer = [];
+    } else if ((isSpace || (isNewLineNix && !isNewLineWin)) && level == Level.RULE && seekingValue && propertyToken && buffer.length > 0) {
+      // space or *nix newline within property, e.g. a{margin:0 <--
+      serializedBuffer = buffer.join('').trim();
+      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
 
-// Make constants accessible from API
-objUtils.shallowMerge(RelateUrl, constants);
+      buffer = [];
+    } else if (isNewLineWin && level == Level.RULE && seekingValue && propertyToken && buffer.length > 1) {
+      // win newline within property, e.g. a{margin:0\r\n<--
+      serializedBuffer = buffer.join('').trim();
+      propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
 
+      buffer = [];
+    } else if (isNewLineWin && level == Level.RULE && seekingValue) {
+      // win newline
+      buffer = [];
+    } else if (buffer.length == 1 && isNewLineWin) {
+      // ignore windows newline which is composed of two characters
+      buffer.pop();
+    } else if (buffer.length > 0 || !isSpace && !isNewLineNix && !isNewLineWin) {
+      // any character
+      buffer.push(character);
+    }
 
+    wasEscaped = isEscaped;
+    isEscaped = !wasEscaped && character == Marker.BACK_SLASH;
+    wasCommentStart = isCommentStart;
+    wasCommentEnd = isCommentEnd;
 
-module.exports = RelateUrl;
+    position.line = (isNewLineWin || isNewLineNix) ? position.line + 1 : position.line;
+    position.column = (isNewLineWin || isNewLineNix) ? 0 : position.column + 1;
+  }
 
-},{"./constants":125,"./format":126,"./options":128,"./parse":131,"./relate":138,"./util/object":140}],128:[function(require,module,exports){
-"use strict";
+  if (seekingValue) {
+    externalContext.warnings.push('Missing \'}\' at ' + formatPosition([position.line, position.column, position.source]) + '.');
+  }
 
-var objUtils = require("./util/object");
+  if (seekingValue && buffer.length > 0) {
+    serializedBuffer = buffer.join('').replace(TAIL_BROKEN_VALUE_PATTERN, '');
+    propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]);
 
+    buffer = [];
+  }
 
+  if (buffer.length > 0) {
+    externalContext.warnings.push('Invalid character(s) \'' + buffer.join('') + '\' at ' + formatPosition(metadata) + '. Ignoring.');
+  }
 
-function getOptions(options, defaults)
-{
-       if ( objUtils.isPlainObject(options) )
-       {
-               var newOptions = {};
-               
-               for (var i in defaults)
-               {
-                       if ( defaults.hasOwnProperty(i) )
-                       {
-                               if (options[i] !== undefined)
-                               {
-                                       newOptions[i] = mergeOption(options[i], defaults[i]);
-                               }
-                               else
-                               {
-                                       newOptions[i] = defaults[i];
-                               }
-                       }
-               }
-               
-               return newOptions;
-       }
-       else
-       {
-               return defaults;
-       }
+  return allTokens;
 }
 
+function originalMetadata(metadata, value, externalContext, selectorFallbacks) {
+  var source = metadata[2];
 
+  return externalContext.inputSourceMapTracker.isTracking(source) ?
+    externalContext.inputSourceMapTracker.originalPositionFor(metadata, value.length, selectorFallbacks) :
+    metadata;
+}
 
-function mergeOption(newValues, defaultValues)
-{
-       if (defaultValues instanceof Object && newValues instanceof Object)
-       {
-               if (defaultValues instanceof Array && newValues instanceof Array)
-               {
-                       return defaultValues.concat(newValues);
-               }
-               else
-               {
-                       return objUtils.shallowMerge(newValues, defaultValues);
-               }
-       }
-       
-       return newValues;
+function tokenTypeFrom(buffer) {
+  var isAtRule = buffer[0] == Marker.AT || buffer[0] == Marker.UNDERSCORE;
+  var ruleWord = buffer.join('').split(RULE_WORD_SEPARATOR_PATTERN)[0];
+
+  if (isAtRule && BLOCK_RULES.indexOf(ruleWord) > -1) {
+    return Token.NESTED_BLOCK;
+  } else if (isAtRule && AT_RULES.indexOf(ruleWord) > -1) {
+    return Token.AT_RULE;
+  } else if (isAtRule) {
+    return Token.AT_RULE_BLOCK;
+  } else {
+    return Token.RULE;
+  }
 }
 
+function tokenScopeFrom(tokenType) {
+  if (tokenType == Token.RULE) {
+    return Token.RULE_SCOPE;
+  } else if (tokenType == Token.NESTED_BLOCK) {
+    return Token.NESTED_BLOCK_SCOPE;
+  } else if (tokenType == Token.AT_RULE_BLOCK) {
+    return Token.AT_RULE_BLOCK_SCOPE;
+  }
+}
 
+module.exports = tokenize;
 
-module.exports = getOptions;
+},{"../utils/format-position":88,"./marker":84,"./token":85}],87:[function(require,module,exports){
+function cloneArray(array) {
+  var cloned = array.slice(0);
 
-},{"./util/object":140}],129:[function(require,module,exports){
-"use strict";
+  for (var i = 0, l = cloned.length; i < l; i++) {
+    if (Array.isArray(cloned[i]))
+      cloned[i] = cloneArray(cloned[i]);
+  }
 
-function parseHost(urlObj, options)
-{
-       // TWEAK :: condition only for speed optimization
-       if (options.ignore_www)
-       {
-               var host = urlObj.host.full;
-               
-               if (host)
-               {
-                       var stripped = host;
-                       
-                       if (host.indexOf("www.") === 0)
-                       {
-                               stripped = host.substr(4);
-                       }
-                       
-                       urlObj.host.stripped = stripped;
-               }
-       }
+  return cloned;
 }
 
+module.exports = cloneArray;
 
+},{}],88:[function(require,module,exports){
+function formatPosition(metadata) {
+  var line = metadata[0];
+  var column = metadata[1];
+  var source = metadata[2];
 
-module.exports = parseHost;
-
-},{}],130:[function(require,module,exports){
-"use strict";
-
-function hrefInfo(urlObj)
-{
-       var minimumPathOnly     = (!urlObj.scheme && !urlObj.auth && !urlObj.host.full && !urlObj.port);
-       var minimumResourceOnly = (minimumPathOnly && !urlObj.path.absolute.string);
-       var minimumQueryOnly    = (minimumResourceOnly && !urlObj.resource);
-       var minimumHashOnly     = (minimumQueryOnly && !urlObj.query.string.full.length);
-       var empty               = (minimumHashOnly && !urlObj.hash);
-       
-       urlObj.extra.hrefInfo.minimumPathOnly     = minimumPathOnly;
-       urlObj.extra.hrefInfo.minimumResourceOnly = minimumResourceOnly;
-       urlObj.extra.hrefInfo.minimumQueryOnly    = minimumQueryOnly;
-       urlObj.extra.hrefInfo.minimumHashOnly     = minimumHashOnly;
-       urlObj.extra.hrefInfo.empty = empty;
+  return source ?
+    source + ':' + line + ':' + column :
+    line + ':' + column;
 }
 
+module.exports = formatPosition;
 
+},{}],89:[function(require,module,exports){
+var NO_PROTOCOL_RESOURCE_PATTERN = /^\/\//;
 
-module.exports = hrefInfo;
-
-},{}],131:[function(require,module,exports){
-"use strict";
-
-var hrefInfo   = require("./hrefInfo");
-var parseHost  = require("./host");
-var parsePath  = require("./path");
-var parsePort  = require("./port");
-var parseQuery = require("./query");
-var parseUrlString = require("./urlstring");
-var pathUtils      = require("../util/path");
+function hasProtocol(uri) {
+  return !NO_PROTOCOL_RESOURCE_PATTERN.test(uri);
+}
 
+module.exports = hasProtocol;
 
+},{}],90:[function(require,module,exports){
+var DATA_URI_PATTERN = /^data:(\S*?)?(;charset=[^;]+)?(;[^,]+?)?,(.+)/;
 
-function parseFromUrl(url, options, fallback)
-{
-       if (url)
-       {
-               var urlObj = parseUrl(url, options);
-               
-               // Because the following occurs in the relate stage for "to" URLs,
-               // such had to be mostly duplicated here
-               
-               var pathArray = pathUtils.resolveDotSegments(urlObj.path.absolute.array);
-               
-               urlObj.path.absolute.array  = pathArray;
-               urlObj.path.absolute.string = "/" + pathUtils.join(pathArray);
-               
-               return urlObj;
-       }
-       else
-       {
-               return fallback;
-       }
+function isDataUriResource(uri) {
+  return DATA_URI_PATTERN.test(uri);
 }
 
+module.exports = isDataUriResource;
 
+},{}],91:[function(require,module,exports){
+var HTTP_RESOURCE_PATTERN = /^http:\/\//;
 
-function parseUrl(url, options)
-{
-       var urlObj = parseUrlString(url, options);
-       
-       if (urlObj.valid===false) return urlObj;
-       
-       parseHost(urlObj, options);
-       parsePort(urlObj, options);
-       parsePath(urlObj, options);
-       parseQuery(urlObj, options);
-       hrefInfo(urlObj);
-       
-       return urlObj;
+function isHttpResource(uri) {
+  return HTTP_RESOURCE_PATTERN.test(uri);
 }
 
+module.exports = isHttpResource;
 
+},{}],92:[function(require,module,exports){
+var HTTPS_RESOURCE_PATTERN = /^https:\/\//;
 
-module.exports =
-{
-       from: parseFromUrl,
-       to:   parseUrl
-};
+function isHttpsResource(uri) {
+  return HTTPS_RESOURCE_PATTERN.test(uri);
+}
 
-},{"../util/path":141,"./host":129,"./hrefInfo":130,"./path":132,"./port":133,"./query":134,"./urlstring":135}],132:[function(require,module,exports){
-"use strict";
+module.exports = isHttpsResource;
 
-function isDirectoryIndex(resource, options)
-{
-       var verdict = false;
-       
-       options.directoryIndexes.every( function(index)
-       {
-               if (index === resource)
-               {
-                       verdict = true;
-                       return false;
-               }
-               
-               return true;
-       });
-       
-       return verdict;
+},{}],93:[function(require,module,exports){
+var IMPORT_PREFIX_PATTERN = /^@import/i;
+
+function isImport(value) {
+  return IMPORT_PREFIX_PATTERN.test(value);
 }
 
+module.exports = isImport;
 
+},{}],94:[function(require,module,exports){
+var REMOTE_RESOURCE_PATTERN = /^(\w+:\/\/|\/\/)/;
 
-function parsePath(urlObj, options)
-{
-       var path = urlObj.path.absolute.string;
-       
-       if (path)
-       {
-               var lastSlash = path.lastIndexOf("/");
-               
-               if (lastSlash > -1)
-               {
-                       if (++lastSlash < path.length)
-                       {
-                               var resource = path.substr(lastSlash);
-                               
-                               if (resource!=="." && resource!=="..")
-                               {
-                                       urlObj.resource = resource;
-                                       path = path.substr(0, lastSlash);
-                               }
-                               else
-                               {
-                                       path += "/";
-                               }
-                       }
-                       
-                       urlObj.path.absolute.string = path;
-                       urlObj.path.absolute.array = splitPath(path);
-               }
-               else if (path==="." || path==="..")
-               {
-                       // "..?var", "..#anchor", etc ... not "..index.html"
-                       path += "/";
-                       
-                       urlObj.path.absolute.string = path;
-                       urlObj.path.absolute.array = splitPath(path);
-               }
-               else
-               {
-                       // Resource-only
-                       urlObj.resource = path;
-                       urlObj.path.absolute.string = null;
-               }
-               
-               urlObj.extra.resourceIsIndex = isDirectoryIndex(urlObj.resource, options);
-       }
-       // Else: query/hash-only or empty
+function isRemoteResource(uri) {
+  return REMOTE_RESOURCE_PATTERN.test(uri);
 }
 
+module.exports = isRemoteResource;
 
+},{}],95:[function(require,module,exports){
+// adapted from http://nedbatchelder.com/blog/200712.html#e20071211T054956
 
-function splitPath(path)
-{
-       // TWEAK :: condition only for speed optimization
-       if (path !== "/")
-       {
-               var cleaned = [];
-               
-               path.split("/").forEach( function(dir)
-               {
-                       // Cleanup -- splitting "/dir/" becomes ["","dir",""]
-                       if (dir !== "")
-                       {
-                               cleaned.push(dir);
-                       }
-               });
-               
-               return cleaned;
-       }
-       else
-       {
-               // Faster to skip the above block and just create an array
-               return [];
-       }
-}
+var NUMBER_PATTERN = /([0-9]+)/;
 
+function naturalCompare(value1, value2) {
+  var keys1 = ('' + value1).split(NUMBER_PATTERN).map(tryParseInt);
+  var keys2 = ('' + value2).split(NUMBER_PATTERN).map(tryParseInt);
+  var key1;
+  var key2;
+  var compareFirst = Math.min(keys1.length, keys2.length);
+  var i, l;
 
+  for (i = 0, l = compareFirst; i < l; i++) {
+    key1 = keys1[i];
+    key2 = keys2[i];
 
-module.exports = parsePath;
+    if (key1 != key2) {
+      return key1 > key2 ? 1 : -1;
+    }
+  }
 
-},{}],133:[function(require,module,exports){
-"use strict";
+  return keys1.length > keys2.length ? 1 : (keys1.length == keys2.length ? 0 : -1);
+}
 
-function parsePort(urlObj, options)
-{
-       var defaultPort = -1;
-       
-       for (var i in options.defaultPorts)
-       {
-               if ( i===urlObj.scheme && options.defaultPorts.hasOwnProperty(i) )
-               {
-                       defaultPort = options.defaultPorts[i];
-                       break;
-               }
-       }
-       
-       if (defaultPort > -1)
-       {
-               // Force same type as urlObj.port
-               defaultPort = defaultPort.toString();
-               
-               if (urlObj.port === null)
-               {
-                       urlObj.port = defaultPort;
-               }
-               
-               urlObj.extra.portIsDefault = (urlObj.port === defaultPort);
-       }
+function tryParseInt(value) {
+  return ('' + parseInt(value)) == value ?
+    parseInt(value) :
+    value;
 }
 
+module.exports = naturalCompare;
 
+},{}],96:[function(require,module,exports){
+function override(source1, source2) {
+  var target = {};
+  var key1;
+  var key2;
+  var item;
 
-module.exports = parsePort;
+  for (key1 in source1) {
+    item = source1[key1];
 
-},{}],134:[function(require,module,exports){
-"use strict";
-var hasOwnProperty = Object.prototype.hasOwnProperty;
+    if (Array.isArray(item)) {
+      target[key1] = item.slice(0);
+    } else if (typeof item == 'object' && item !== null) {
+      target[key1] = override(item, {});
+    } else {
+      target[key1] = item;
+    }
+  }
 
+  for (key2 in source2) {
+    item = source2[key2];
 
+    if (key2 in target && Array.isArray(item)) {
+      target[key2] = item.slice(0);
+    } else if (key2 in target && typeof item == 'object' && item !== null) {
+      target[key2] = override(target[key2], item);
+    } else {
+      target[key2] = item;
+    }
+  }
 
-function parseQuery(urlObj, options)
-{
-       urlObj.query.string.full = stringify(urlObj.query.object, false);
-       
-       // TWEAK :: condition only for speed optimization
-       if (options.removeEmptyQueries)
-       {
-               urlObj.query.string.stripped = stringify(urlObj.query.object, true);
-       }
+  return target;
 }
 
+module.exports = override;
 
+},{}],97:[function(require,module,exports){
+var Marker = require('../tokenizer/marker');
 
-function stringify(queryObj, removeEmptyQueries)
-{
-       var count = 0;
-       var str = "";
-       
-       for (var i in queryObj)
-       {
-               if ( i!=="" && hasOwnProperty.call(queryObj, i)===true )
-               {
-                       var value = queryObj[i];
-                       
-                       if (value !== "" || !removeEmptyQueries)
-                       {
-                               str += (++count===1) ? "?" : "&";
-                               
-                               i = encodeURIComponent(i);
-                               
-                               if (value !== "")
-                               {
-                                       str += i +"="+ encodeURIComponent(value).replace(/%20/g,"+");
-                               }
-                               else
-                               {
-                                       str += i;
-                               }
-                       }
-               }
-       }
-       
-       return str;
-}
+function split(value, separator) {
+  var openLevel = Marker.OPEN_ROUND_BRACKET;
+  var closeLevel = Marker.CLOSE_ROUND_BRACKET;
+  var level = 0;
+  var cursor = 0;
+  var lastStart = 0;
+  var lastValue;
+  var lastCharacter;
+  var len = value.length;
+  var parts = [];
 
+  if (value.indexOf(separator) == -1) {
+    return [value];
+  }
 
+  if (value.indexOf(openLevel) == -1) {
+    return value.split(separator);
+  }
 
-module.exports = parseQuery;
+  while (cursor < len) {
+    if (value[cursor] == openLevel) {
+      level++;
+    } else if (value[cursor] == closeLevel) {
+      level--;
+    }
 
-},{}],135:[function(require,module,exports){
-"use strict";
+    if (level === 0 && cursor > 0 && cursor + 1 < len && value[cursor] == separator) {
+      parts.push(value.substring(lastStart, cursor));
+      lastStart = cursor + 1;
+    }
 
-var _parseUrl = require("url").parse;
+    cursor++;
+  }
 
+  if (lastStart < cursor + 1) {
+    lastValue = value.substring(lastStart);
+    lastCharacter = lastValue[lastValue.length - 1];
+    if (lastCharacter == separator) {
+      lastValue = lastValue.substring(0, lastValue.length - 1);
+    }
 
+    parts.push(lastValue);
+  }
 
-/*
-       Customize the URL object that Node generates
-       because:
-       
-       * necessary data for later
-       * urlObj.host is useless
-       * urlObj.hostname is too long
-       * urlObj.path is useless
-       * urlObj.pathname is too long
-       * urlObj.protocol is inaccurate; should be called "scheme"
-       * urlObj.search is mostly useless
-*/
-function clean(urlObj)
-{
-       var scheme = urlObj.protocol;
-       
-       if (scheme)
-       {
-               // Remove ":" suffix
-               if (scheme.indexOf(":") === scheme.length-1)
-               {
-                       scheme = scheme.substr(0, scheme.length-1);
-               }
-       }
-       
-       urlObj.host =
-       {
-               // TODO :: unescape(encodeURIComponent(s)) ? ... http://ecmanaut.blogspot.ca/2006/07/encoding-decoding-utf8-in-javascript.html
-               full: urlObj.hostname,
-               stripped: null
-       };
-       
-       urlObj.path =
-       {
-               absolute:
-               {
-                       array: null,
-                       string: urlObj.pathname
-               },
-               relative:
-               {
-                       array: null,
-                       string: null
-               }
-       };
-       
-       urlObj.query =
-       {
-               object: urlObj.query,
-               string:
-               {
-                       full: null,
-                       stripped: null
-               }
-       };
-       
-       urlObj.extra =
-       {
-               hrefInfo:
-               {
-                       minimumPathOnly: null,
-                       minimumResourceOnly: null,
-                       minimumQueryOnly: null,
-                       minimumHashOnly: null,
-                       empty: null,
-                       
-                       separatorOnlyQuery: urlObj.search==="?"
-               },
-               portIsDefault: null,
-               relation:
-               {
-                       maximumScheme: null,
-                       maximumAuth: null,
-                       maximumHost: null,
-                       maximumPort: null,
-                       maximumPath: null,
-                       maximumResource: null,
-                       maximumQuery: null,
-                       maximumHash: null,
-                       
-                       minimumScheme: null,
-                       minimumAuth: null,
-                       minimumHost: null,
-                       minimumPort: null,
-                       minimumPath: null,
-                       minimumResource: null,
-                       minimumQuery: null,
-                       minimumHash: null,
-                       
-                       overridesQuery: null
-               },
-               resourceIsIndex: null,
-               slashes: urlObj.slashes
-       };
-       
-       urlObj.resource = null;
-       urlObj.scheme = scheme;
-       delete urlObj.hostname;
-       delete urlObj.pathname;
-       delete urlObj.protocol;
-       delete urlObj.search;
-       delete urlObj.slashes;
-       
-       return urlObj;
+  return parts;
+}
+
+module.exports = split;
+
+},{"../tokenizer/marker":84}],98:[function(require,module,exports){
+var lineBreak = require('os').EOL;
+var emptyCharacter = '';
+
+var Breaks = require('../options/format').Breaks;
+var Spaces = require('../options/format').Spaces;
+
+var Marker = require('../tokenizer/marker');
+var Token = require('../tokenizer/token');
+
+function supportsAfterClosingBrace(token) {
+  return token[1][1] == 'background' || token[1][1] == 'transform' || token[1][1] == 'src';
 }
 
+function afterClosingBrace(token, valueIndex) {
+  return token[valueIndex][1][token[valueIndex][1].length - 1] == Marker.CLOSE_ROUND_BRACKET;
+}
 
+function afterComma(token, valueIndex) {
+  return token[valueIndex][1] == Marker.COMMA;
+}
 
-function validScheme(url, options)
-{
-       var valid = true;
-       
-       options.rejectedSchemes.every( function(rejectedScheme)
-       {
-               valid = !(url.indexOf(rejectedScheme+":") === 0);
-               
-               // Break loop
-               return valid;
-       });
-       
-       return valid;
+function afterSlash(token, valueIndex) {
+  return token[valueIndex][1] == Marker.FORWARD_SLASH;
 }
 
+function beforeComma(token, valueIndex) {
+  return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.COMMA;
+}
 
+function beforeSlash(token, valueIndex) {
+  return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.FORWARD_SLASH;
+}
 
-function parseUrlString(url, options)
-{
-       if ( validScheme(url,options) )
-       {
-               return clean( _parseUrl(url, true, options.slashesDenoteHost) );
-       }
-       else
-       {
-               return {href:url, valid:false};
-       }
+function inFilter(token) {
+  return token[1][1] == 'filter' || token[1][1] == '-ms-filter';
 }
 
+function disallowsSpace(context, token, valueIndex) {
+  return !context.spaceAfterClosingBrace && supportsAfterClosingBrace(token) && afterClosingBrace(token, valueIndex) ||
+    beforeSlash(token, valueIndex) ||
+    afterSlash(token, valueIndex) ||
+    beforeComma(token, valueIndex) ||
+    afterComma(token, valueIndex);
+}
 
+function rules(context, tokens) {
+  var store = context.store;
 
-module.exports = parseUrlString;
+  for (var i = 0, l = tokens.length; i < l; i++) {
+    store(context, tokens[i]);
 
-},{"url":159}],136:[function(require,module,exports){
-"use strict";
+    if (i < l - 1) {
+      store(context, comma(context));
+    }
+  }
+}
 
-var findRelation = require("./findRelation");
-var objUtils     = require("../util/object");
-var pathUtils    = require("../util/path");
+function body(context, tokens) {
+  var lastPropertyAt = lastPropertyIndex(tokens);
 
+  for (var i = 0, l = tokens.length; i < l; i++) {
+    property(context, tokens, i, lastPropertyAt);
+  }
+}
 
+function lastPropertyIndex(tokens) {
+  var index = tokens.length - 1;
 
-function absolutize(urlObj, siteUrlObj, options)
-{
-       findRelation.upToPath(urlObj, siteUrlObj, options);
-       
-       // Fill in relative URLs
-       if (urlObj.extra.relation.minimumScheme) urlObj.scheme = siteUrlObj.scheme;
-       if (urlObj.extra.relation.minimumAuth)   urlObj.auth   = siteUrlObj.auth;
-       if (urlObj.extra.relation.minimumHost)   urlObj.host   = objUtils.clone(siteUrlObj.host);
-       if (urlObj.extra.relation.minimumPort)   copyPort(urlObj, siteUrlObj);
-       if (urlObj.extra.relation.minimumScheme) copyPath(urlObj, siteUrlObj);
-       
-       // Check remaining relativeness now that path has been copied and/or resolved
-       findRelation.pathOn(urlObj, siteUrlObj, options);
-       
-       // Fill in relative URLs
-       if (urlObj.extra.relation.minimumResource) copyResource(urlObj, siteUrlObj);
-       if (urlObj.extra.relation.minimumQuery)    urlObj.query = objUtils.clone(siteUrlObj.query);
-       if (urlObj.extra.relation.minimumHash)     urlObj.hash  = siteUrlObj.hash;
+  for (; index >= 0; index--) {
+    if (tokens[index][0] != Token.COMMENT) {
+      break;
+    }
+  }
+
+  return index;
 }
 
+function property(context, tokens, position, lastPropertyAt) {
+  var store = context.store;
+  var token = tokens[position];
+  var isPropertyBlock = token[2][0] == Token.PROPERTY_BLOCK;
+  var needsSemicolon = position < lastPropertyAt || isPropertyBlock;
+  var isLast = position === lastPropertyAt;
 
+  switch (token[0]) {
+    case Token.AT_RULE:
+      store(context, token);
+      store(context, semicolon(context, Breaks.AfterProperty, false));
+      break;
+    case Token.COMMENT:
+      store(context, token);
+      break;
+    case Token.PROPERTY:
+      store(context, token[1]);
+      store(context, colon(context));
+      value(context, token);
+      store(context, needsSemicolon ? semicolon(context, Breaks.AfterProperty, isLast) : emptyCharacter);
+  }
+}
 
-/*
-       Get an absolute path that's relative to site url.
-*/
-function copyPath(urlObj, siteUrlObj)
-{
-       if (urlObj.extra.relation.maximumHost || !urlObj.extra.hrefInfo.minimumResourceOnly)
-       {
-               var pathArray = urlObj.path.absolute.array;
-               var pathString = "/";
-               
-               // If not erroneous URL
-               if (pathArray)
-               {
-                       // If is relative path
-                       if (urlObj.extra.hrefInfo.minimumPathOnly && urlObj.path.absolute.string.indexOf("/")!==0)
-                       {
-                               // Append path to site path
-                               pathArray = siteUrlObj.path.absolute.array.concat(pathArray);
-                       }
-                       
-                       pathArray   = pathUtils.resolveDotSegments(pathArray);
-                       pathString += pathUtils.join(pathArray);
-               }
-               else
-               {
-                       pathArray = [];
-               }
-               
-               urlObj.path.absolute.array  = pathArray;
-               urlObj.path.absolute.string = pathString;
-       }
-       else
-       {
-               // Resource-, query- or hash-only or empty
-               urlObj.path = objUtils.clone(siteUrlObj.path);
-       }
+function value(context, token) {
+  var store = context.store;
+  var j, m;
+
+  if (token[2][0] == Token.PROPERTY_BLOCK) {
+    store(context, openBrace(context, Breaks.AfterBlockBegins, false));
+    body(context, token[2][1]);
+    store(context, closeBrace(context, Breaks.AfterBlockEnds, false, true));
+  } else {
+    for (j = 2, m = token.length; j < m; j++) {
+      store(context, token[j]);
+
+      if (j < m - 1 && (inFilter(token) || !disallowsSpace(context, token, j))) {
+        store(context, Marker.SPACE);
+      }
+    }
+  }
+}
+
+function allowsBreak(context, where) {
+  return context.format && context.format.breaks[where];
+}
+
+function allowsSpace(context, where) {
+  return context.format && context.format.spaces[where];
+}
+
+function openBrace(context, where, needsPrefixSpace) {
+  if (context.format) {
+    context.indentBy += context.format.indentBy;
+    context.indentWith = context.format.indentWith.repeat(context.indentBy);
+    return (needsPrefixSpace && allowsSpace(context, Spaces.BeforeBlockBegins) ? Marker.SPACE : emptyCharacter) +
+      Marker.OPEN_CURLY_BRACKET +
+      (allowsBreak(context, where) ? lineBreak : emptyCharacter) +
+      context.indentWith;
+  } else {
+    return Marker.OPEN_CURLY_BRACKET;
+  }
+}
+
+function closeBrace(context, where, beforeBlockEnd, isLast) {
+  if (context.format) {
+    context.indentBy -= context.format.indentBy;
+    context.indentWith = context.format.indentWith.repeat(context.indentBy);
+    return (allowsBreak(context, Breaks.AfterProperty) || beforeBlockEnd && allowsBreak(context, Breaks.BeforeBlockEnds) ? lineBreak : emptyCharacter) +
+      context.indentWith +
+      Marker.CLOSE_CURLY_BRACKET +
+      (isLast ? emptyCharacter : (allowsBreak(context, where) ? lineBreak : emptyCharacter) + context.indentWith);
+  } else {
+    return Marker.CLOSE_CURLY_BRACKET;
+  }
+}
+
+function colon(context) {
+  return context.format ?
+    Marker.COLON + (allowsSpace(context, Spaces.BeforeValue) ? Marker.SPACE : emptyCharacter) :
+    Marker.COLON;
+}
+
+function semicolon(context, where, isLast) {
+  return context.format ?
+    Marker.SEMICOLON + (isLast || !allowsBreak(context, where) ? emptyCharacter : lineBreak + context.indentWith) :
+    Marker.SEMICOLON;
+}
+
+function comma(context) {
+  return context.format ?
+    Marker.COMMA + (allowsBreak(context, Breaks.BetweenSelectors) ? lineBreak : emptyCharacter) + context.indentWith :
+    Marker.COMMA;
+}
+
+function all(context, tokens) {
+  var store = context.store;
+  var token;
+  var isLast;
+  var i, l;
+
+  for (i = 0, l = tokens.length; i < l; i++) {
+    token = tokens[i];
+    isLast = i == l - 1;
+
+    switch (token[0]) {
+      case Token.AT_RULE:
+        store(context, token);
+        store(context, semicolon(context, Breaks.AfterAtRule, isLast));
+        break;
+      case Token.AT_RULE_BLOCK:
+        rules(context, token[1]);
+        store(context, openBrace(context, Breaks.AfterRuleBegins, true));
+        body(context, token[2]);
+        store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));
+        break;
+      case Token.NESTED_BLOCK:
+        rules(context, token[1]);
+        store(context, openBrace(context, Breaks.AfterBlockBegins, true));
+        all(context, token[2]);
+        store(context, closeBrace(context, Breaks.AfterBlockEnds, true, isLast));
+        break;
+      case Token.COMMENT:
+        store(context, token);
+        store(context, allowsBreak(context, Breaks.AfterComment) ? lineBreak : emptyCharacter);
+        break;
+      case Token.RULE:
+        rules(context, token[1]);
+        store(context, openBrace(context, Breaks.AfterRuleBegins, true));
+        body(context, token[2]);
+        store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));
+        break;
+    }
+  }
 }
 
+module.exports = {
+  all: all,
+  body: body,
+  property: property,
+  rules: rules,
+  value: value
+};
 
+},{"../options/format":62,"../tokenizer/marker":84,"../tokenizer/token":85,"os":111}],99:[function(require,module,exports){
+var helpers = require('./helpers');
 
-function copyPort(urlObj, siteUrlObj)
-{
-       urlObj.port = siteUrlObj.port;
-       
-       urlObj.extra.portIsDefault = siteUrlObj.extra.portIsDefault;
+function store(serializeContext, token) {
+  serializeContext.output.push(typeof token == 'string' ? token : token[1]);
 }
 
+function context() {
+  var newContext = {
+    output: [],
+    store: store
+  };
 
-
-function copyResource(urlObj, siteUrlObj)
-{
-       urlObj.resource = siteUrlObj.resource;
-       
-       urlObj.extra.resourceIsIndex = siteUrlObj.extra.resourceIsIndex;
+  return newContext;
 }
 
-
-
-module.exports = absolutize;
-
-},{"../util/object":140,"../util/path":141,"./findRelation":137}],137:[function(require,module,exports){
-"use strict";
-
-function findRelation_upToPath(urlObj, siteUrlObj, options)
-{
-       // Path- or root-relative URL
-       var pathOnly = urlObj.extra.hrefInfo.minimumPathOnly;
-       
-       // Matching scheme, scheme-relative or path-only
-       var minimumScheme = (urlObj.scheme===siteUrlObj.scheme || !urlObj.scheme);
-       
-       // Matching auth, ignoring auth or path-only
-       var minimumAuth = minimumScheme && (urlObj.auth===siteUrlObj.auth || options.removeAuth || pathOnly);
-       
-       // Matching host or path-only
-       var www = options.ignore_www ? "stripped" : "full";
-       var minimumHost = minimumAuth && (urlObj.host[www]===siteUrlObj.host[www] || pathOnly);
-       
-       // Matching port or path-only
-       var minimumPort = minimumHost && (urlObj.port===siteUrlObj.port || pathOnly);
-       
-       urlObj.extra.relation.minimumScheme = minimumScheme;
-       urlObj.extra.relation.minimumAuth   = minimumAuth;
-       urlObj.extra.relation.minimumHost   = minimumHost;
-       urlObj.extra.relation.minimumPort   = minimumPort;
-       
-       urlObj.extra.relation.maximumScheme = !minimumScheme || minimumScheme && !minimumAuth;
-       urlObj.extra.relation.maximumAuth   = !minimumScheme || minimumScheme && !minimumHost;
-       urlObj.extra.relation.maximumHost   = !minimumScheme || minimumScheme && !minimumPort;
+function all(tokens) {
+  var oneTimeContext = context();
+  helpers.all(oneTimeContext, tokens);
+  return oneTimeContext.output.join('');
 }
 
+function body(tokens) {
+  var oneTimeContext = context();
+  helpers.body(oneTimeContext, tokens);
+  return oneTimeContext.output.join('');
+}
 
-
-function findRelation_pathOn(urlObj, siteUrlObj, options)
-{
-       var queryOnly = urlObj.extra.hrefInfo.minimumQueryOnly;
-       var hashOnly  = urlObj.extra.hrefInfo.minimumHashOnly;
-       var empty     = urlObj.extra.hrefInfo.empty;    // not required, but self-documenting
-       
-       // From upToPath()
-       var minimumPort   = urlObj.extra.relation.minimumPort;
-       var minimumScheme = urlObj.extra.relation.minimumScheme;
-       
-       // Matching port and path
-       var minimumPath = minimumPort && urlObj.path.absolute.string===siteUrlObj.path.absolute.string;
-       
-       // Matching resource or query/hash-only or empty
-       var matchingResource = (urlObj.resource===siteUrlObj.resource || !urlObj.resource && siteUrlObj.extra.resourceIsIndex) || (options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex && !siteUrlObj.resource);
-       var minimumResource = minimumPath && (matchingResource || queryOnly || hashOnly || empty);
-       
-       // Matching query or hash-only/empty
-       var query = options.removeEmptyQueries ? "stripped" : "full";
-       var urlQuery = urlObj.query.string[query];
-       var siteUrlQuery = siteUrlObj.query.string[query];
-       var minimumQuery = (minimumResource && !!urlQuery && urlQuery===siteUrlQuery) || ((hashOnly || empty) && !urlObj.extra.hrefInfo.separatorOnlyQuery);
-       
-       var minimumHash = minimumQuery && urlObj.hash===siteUrlObj.hash;
-       
-       urlObj.extra.relation.minimumPath     = minimumPath;
-       urlObj.extra.relation.minimumResource = minimumResource;
-       urlObj.extra.relation.minimumQuery    = minimumQuery;
-       urlObj.extra.relation.minimumHash     = minimumHash;
-       
-       urlObj.extra.relation.maximumPort     = !minimumScheme || minimumScheme && !minimumPath;
-       urlObj.extra.relation.maximumPath     = !minimumScheme || minimumScheme && !minimumResource;
-       urlObj.extra.relation.maximumResource = !minimumScheme || minimumScheme && !minimumQuery;
-       urlObj.extra.relation.maximumQuery    = !minimumScheme || minimumScheme && !minimumHash;
-       urlObj.extra.relation.maximumHash     = !minimumScheme || minimumScheme && !minimumHash;        // there's nothing after hash, so it's the same as maximumQuery
-       
-       // Matching path and/or resource with existing but non-matching site query
-       urlObj.extra.relation.overridesQuery  = minimumPath && urlObj.extra.relation.maximumResource && !minimumQuery && !!siteUrlQuery;
+function property(tokens, position) {
+  var oneTimeContext = context();
+  helpers.property(oneTimeContext, tokens, position, true);
+  return oneTimeContext.output.join('');
 }
 
+function rules(tokens) {
+  var oneTimeContext = context();
+  helpers.rules(oneTimeContext, tokens);
+  return oneTimeContext.output.join('');
+}
 
+function value(tokens) {
+  var oneTimeContext = context();
+  helpers.value(oneTimeContext, tokens);
+  return oneTimeContext.output.join('');
+}
 
-module.exports =
-{
-       pathOn:   findRelation_pathOn,
-       upToPath: findRelation_upToPath
+module.exports = {
+  all: all,
+  body: body,
+  property: property,
+  rules: rules,
+  value: value
 };
 
-},{}],138:[function(require,module,exports){
-"use strict";
+},{"./helpers":98}],100:[function(require,module,exports){
+var all = require('./helpers').all;
 
-var absolutize = require("./absolutize");
-var relativize = require("./relativize");
+var lineBreak = require('os').EOL;
 
+function store(serializeContext, token) {
+  var value = typeof token == 'string' ?
+    token :
+    token[1];
+  var wrap = serializeContext.wrap;
 
+  wrap(serializeContext, value);
+  track(serializeContext, value);
+  serializeContext.output.push(value);
+}
 
-function relateUrl(siteUrlObj, urlObj, options)
-{
-       absolutize(urlObj, siteUrlObj, options);
-       relativize(urlObj, siteUrlObj, options);
-       
-       return urlObj;
+function wrap(serializeContext, value) {
+  if (serializeContext.column + value.length > serializeContext.format.wrapAt) {
+    track(serializeContext, lineBreak);
+    serializeContext.output.push(lineBreak);
+  }
 }
 
+function track(serializeContext, value) {
+  var parts = value.split('\n');
 
+  serializeContext.line += parts.length - 1;
+  serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length);
+}
 
-module.exports = relateUrl;
+function serializeStyles(tokens, context) {
+  var serializeContext = {
+    column: 0,
+    format: context.options.format,
+    indentBy: 0,
+    indentWith: '',
+    line: 1,
+    output: [],
+    spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
+    store: store,
+    wrap: context.options.format.wrapAt ?
+      wrap :
+      function () { /* noop */  }
+  };
 
-},{"./absolutize":136,"./relativize":139}],139:[function(require,module,exports){
-"use strict";
+  all(serializeContext, tokens);
 
-var pathUtils = require("../util/path");
+  return {
+    styles: serializeContext.output.join('')
+  };
+}
 
+module.exports = serializeStyles;
 
+},{"./helpers":98,"os":111}],101:[function(require,module,exports){
+(function (process){
+var SourceMapGenerator = require('source-map').SourceMapGenerator;
+var all = require('./helpers').all;
 
-/*
-       Get a path relative to the site path.
-*/
-function relatePath(absolutePath, siteAbsolutePath)
-{
-       var relativePath = [];
-       
-       // At this point, it's related to the host/port
-       var related = true;
-       var parentIndex = -1;
-       
-       // Find parents
-       siteAbsolutePath.forEach( function(siteAbsoluteDir, i)
-       {
-               if (related)
-               {
-                       if (absolutePath[i] !== siteAbsoluteDir)
-                       {
-                               related = false;
-                       }
-                       else
-                       {
-                               parentIndex = i;
-                       }
-               }
-               
-               if (!related)
-               {
-                       // Up one level
-                       relativePath.push("..");
-               }
-       });
-       
-       // Form path
-       absolutePath.forEach( function(dir, i)
-       {
-               if (i > parentIndex)
-               {
-                       relativePath.push(dir);
-               }
-       });
-       
-       return relativePath;
-}
+var lineBreak = require('os').EOL;
+var isRemoteResource = require('../utils/is-remote-resource');
+
+var isWindows = process.platform == 'win32';
 
+var NIX_SEPARATOR_PATTERN = /\//g;
+var UNKNOWN_SOURCE = '$stdin';
+var WINDOWS_SEPARATOR = '\\';
 
+function store(serializeContext, element) {
+  var fromString = typeof element == 'string';
+  var value = fromString ? element : element[1];
+  var mappings = fromString ? null : element[2];
+  var wrap = serializeContext.wrap;
 
-function relativize(urlObj, siteUrlObj, options)
-{
-       if (urlObj.extra.relation.minimumScheme)
-       {
-               var pathArray = relatePath(urlObj.path.absolute.array, siteUrlObj.path.absolute.array);
-               
-               urlObj.path.relative.array  = pathArray;
-               urlObj.path.relative.string = pathUtils.join(pathArray);
-       }
+  wrap(serializeContext, value);
+  track(serializeContext, value, mappings);
+  serializeContext.output.push(value);
 }
 
+function wrap(serializeContext, value) {
+  if (serializeContext.column + value.length > serializeContext.format.wrapAt) {
+    track(serializeContext, lineBreak, false);
+    serializeContext.output.push(lineBreak);
+  }
+}
 
+function track(serializeContext, value, mappings) {
+  var parts = value.split('\n');
 
-module.exports = relativize;
+  if (mappings) {
+    trackAllMappings(serializeContext, mappings);
+  }
 
-},{"../util/path":141}],140:[function(require,module,exports){
-"use strict";
+  serializeContext.line += parts.length - 1;
+  serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length);
+}
 
-/*
-       Deep-clone an object.
-*/
-function clone(obj)
-{
-       if (obj instanceof Object)
-       {
-               var clonedObj = (obj instanceof Array) ? [] : {};
-               
-               for (var i in obj)
-               {
-                       if ( obj.hasOwnProperty(i) )
-                       {
-                               clonedObj[i] = clone( obj[i] );
-                       }
-               }
-               
-               return clonedObj;
-       }
-       
-       return obj;
+function trackAllMappings(serializeContext, mappings) {
+  for (var i = 0, l = mappings.length; i < l; i++) {
+    trackMapping(serializeContext, mappings[i]);
+  }
 }
 
+function trackMapping(serializeContext, mapping) {
+  var line = mapping[0];
+  var column = mapping[1];
+  var originalSource = mapping[2];
+  var source = originalSource;
+  var storedSource = source || UNKNOWN_SOURCE;
+
+  if (isWindows && source && !isRemoteResource(source)) {
+    storedSource = source.replace(NIX_SEPARATOR_PATTERN, WINDOWS_SEPARATOR);
+  }
 
+  serializeContext.outputMap.addMapping({
+    generated: {
+      line: serializeContext.line,
+      column: serializeContext.column
+    },
+    source: storedSource,
+    original: {
+      line: line,
+      column: column
+    }
+  });
 
-/*
-       https://github.com/jonschlinkert/is-plain-object
-*/
-function isPlainObject(obj)
-{
-       return !!obj && typeof obj==="object" && obj.constructor===Object;
+  if (serializeContext.inlineSources && (originalSource in serializeContext.sourcesContent)) {
+    serializeContext.outputMap.setSourceContent(storedSource, serializeContext.sourcesContent[originalSource]);
+  }
 }
 
+function serializeStylesAndSourceMap(tokens, context) {
+  var serializeContext = {
+    column: 0,
+    format: context.options.format,
+    indentBy: 0,
+    indentWith: '',
+    inlineSources: context.options.sourceMapInlineSources,
+    line: 1,
+    output: [],
+    outputMap: new SourceMapGenerator(),
+    sourcesContent: context.sourcesContent,
+    spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
+    store: store,
+    wrap: context.options.format.wrapAt ?
+      wrap :
+      function () { /* noop */  }
+  };
 
+  all(serializeContext, tokens);
 
-/*
-       Shallow-merge two objects.
-*/
-function shallowMerge(target, source)
-{
-       if (target instanceof Object && source instanceof Object)
-       {
-               for (var i in source)
-               {
-                       if ( source.hasOwnProperty(i) )
-                       {
-                               target[i] = source[i];
-                       }
-               }
-       }
-       
-       return target;
+  return {
+    sourceMap: serializeContext.outputMap,
+    styles: serializeContext.output.join('')
+  };
 }
 
+module.exports = serializeStylesAndSourceMap;
 
+}).call(this,require('_process'))
+},{"../utils/is-remote-resource":94,"./helpers":98,"_process":114,"os":111,"source-map":155}],102:[function(require,module,exports){
+(function (Buffer){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-module.exports =
-{
-       clone: clone,
-       isPlainObject: isPlainObject,
-       shallowMerge: shallowMerge
-};
-
-},{}],141:[function(require,module,exports){
-"use strict";
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
 
-function joinPath(pathArray)
-{
-       if (pathArray.length > 0)
-       {
-               return pathArray.join("/") + "/";
-       }
-       else
-       {
-               return "";
-       }
+function isArray(arg) {
+  if (Array.isArray) {
+    return Array.isArray(arg);
+  }
+  return objectToString(arg) === '[object Array]';
 }
+exports.isArray = isArray;
 
+function isBoolean(arg) {
+  return typeof arg === 'boolean';
+}
+exports.isBoolean = isBoolean;
 
+function isNull(arg) {
+  return arg === null;
+}
+exports.isNull = isNull;
 
-function resolveDotSegments(pathArray)
-{
-       var pathAbsolute = [];
-       
-       pathArray.forEach( function(dir)
-       {
-               if (dir !== "..")
-               {
-                       if (dir !== ".")
-                       {
-                               pathAbsolute.push(dir);
-                       }
-               }
-               else
-               {
-                       // Remove parent
-                       if (pathAbsolute.length > 0)
-                       {
-                               pathAbsolute.splice(pathAbsolute.length-1, 1);
-                       }
-               }
-       });
-       
-       return pathAbsolute;
+function isNullOrUndefined(arg) {
+  return arg == null;
 }
+exports.isNullOrUndefined = isNullOrUndefined;
 
+function isNumber(arg) {
+  return typeof arg === 'number';
+}
+exports.isNumber = isNumber;
 
+function isString(arg) {
+  return typeof arg === 'string';
+}
+exports.isString = isString;
 
-module.exports =
-{
-       join: joinPath,
-       resolveDotSegments: resolveDotSegments
-};
+function isSymbol(arg) {
+  return typeof arg === 'symbol';
+}
+exports.isSymbol = isSymbol;
 
-},{}],142:[function(require,module,exports){
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
+function isUndefined(arg) {
+  return arg === void 0;
+}
+exports.isUndefined = isUndefined;
 
-var util = require('./util');
-var has = Object.prototype.hasOwnProperty;
+function isRegExp(re) {
+  return objectToString(re) === '[object RegExp]';
+}
+exports.isRegExp = isRegExp;
 
-/**
- * A data structure which is a combination of an array and a set. Adding a new
- * member is O(1), testing for membership is O(1), and finding the index of an
- * element is O(1). Removing elements from the set is not supported. Only
- * strings are supported for membership.
- */
-function ArraySet() {
-  this._array = [];
-  this._set = Object.create(null);
+function isObject(arg) {
+  return typeof arg === 'object' && arg !== null;
+}
+exports.isObject = isObject;
+
+function isDate(d) {
+  return objectToString(d) === '[object Date]';
 }
+exports.isDate = isDate;
 
-/**
- * Static method for creating ArraySet instances from an existing array.
- */
-ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
-  var set = new ArraySet();
-  for (var i = 0, len = aArray.length; i < len; i++) {
-    set.add(aArray[i], aAllowDuplicates);
-  }
-  return set;
-};
+function isError(e) {
+  return (objectToString(e) === '[object Error]' || e instanceof Error);
+}
+exports.isError = isError;
 
-/**
- * Return how many unique items are in this ArraySet. If duplicates have been
- * added, than those do not count towards the size.
- *
- * @returns Number
- */
-ArraySet.prototype.size = function ArraySet_size() {
-  return Object.getOwnPropertyNames(this._set).length;
-};
+function isFunction(arg) {
+  return typeof arg === 'function';
+}
+exports.isFunction = isFunction;
 
-/**
- * Add the given string to this set.
- *
- * @param String aStr
- */
-ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
-  var sStr = util.toSetString(aStr);
-  var isDuplicate = has.call(this._set, sStr);
-  var idx = this._array.length;
-  if (!isDuplicate || aAllowDuplicates) {
-    this._array.push(aStr);
-  }
-  if (!isDuplicate) {
-    this._set[sStr] = idx;
-  }
-};
+function isPrimitive(arg) {
+  return arg === null ||
+         typeof arg === 'boolean' ||
+         typeof arg === 'number' ||
+         typeof arg === 'string' ||
+         typeof arg === 'symbol' ||  // ES6 symbol
+         typeof arg === 'undefined';
+}
+exports.isPrimitive = isPrimitive;
 
-/**
- * Is the given string a member of this set?
- *
- * @param String aStr
- */
-ArraySet.prototype.has = function ArraySet_has(aStr) {
-  var sStr = util.toSetString(aStr);
-  return has.call(this._set, sStr);
-};
+exports.isBuffer = Buffer.isBuffer;
 
-/**
- * What is the index of the given string in the array?
- *
- * @param String aStr
- */
-ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
-  var sStr = util.toSetString(aStr);
-  if (has.call(this._set, sStr)) {
-    return this._set[sStr];
-  }
-  throw new Error('"' + aStr + '" is not in the set.');
-};
+function objectToString(o) {
+  return Object.prototype.toString.call(o);
+}
 
-/**
- * What is the element at the given index?
- *
- * @param Number aIdx
- */
-ArraySet.prototype.at = function ArraySet_at(aIdx) {
-  if (aIdx >= 0 && aIdx < this._array.length) {
-    return this._array[aIdx];
-  }
-  throw new Error('No element indexed by ' + aIdx);
-};
+}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
+},{"../../is-buffer/index.js":108}],103:[function(require,module,exports){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-/**
- * Returns the array representation of this set (which has the proper indices
- * indicated by indexOf). Note that this is a copy of the internal array used
- * for storing the members so that no one can mess with internal state.
- */
-ArraySet.prototype.toArray = function ArraySet_toArray() {
-  return this._array.slice();
-};
+function EventEmitter() {
+  this._events = this._events || {};
+  this._maxListeners = this._maxListeners || undefined;
+}
+module.exports = EventEmitter;
 
-exports.ArraySet = ArraySet;
+// Backwards-compat with node 0.10.x
+EventEmitter.EventEmitter = EventEmitter;
 
-},{"./util":151}],143:[function(require,module,exports){
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- *
- * Based on the Base 64 VLQ implementation in Closure Compiler:
- * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
- *
- * Copyright 2011 The Closure Compiler Authors. All rights reserved.
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above
- *    copyright notice, this list of conditions and the following
- *    disclaimer in the documentation and/or other materials provided
- *    with the distribution.
- *  * Neither the name of Google Inc. nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
+EventEmitter.prototype._events = undefined;
+EventEmitter.prototype._maxListeners = undefined;
 
-var base64 = require('./base64');
+// By default EventEmitters will print a warning if more than 10 listeners are
+// added to it. This is a useful default which helps finding memory leaks.
+EventEmitter.defaultMaxListeners = 10;
 
-// A single base 64 digit can contain 6 bits of data. For the base 64 variable
-// length quantities we use in the source map spec, the first bit is the sign,
-// the next four bits are the actual value, and the 6th bit is the
-// continuation bit. The continuation bit tells us whether there are more
-// digits in this value following this digit.
-//
-//   Continuation
-//   |    Sign
-//   |    |
-//   V    V
-//   101011
+// Obviously not all Emitters should be limited to 10. This function allows
+// that to be increased. Set to zero for unlimited.
+EventEmitter.prototype.setMaxListeners = function(n) {
+  if (!isNumber(n) || n < 0 || isNaN(n))
+    throw TypeError('n must be a positive number');
+  this._maxListeners = n;
+  return this;
+};
 
-var VLQ_BASE_SHIFT = 5;
+EventEmitter.prototype.emit = function(type) {
+  var er, handler, len, args, i, listeners;
 
-// binary: 100000
-var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
+  if (!this._events)
+    this._events = {};
 
-// binary: 011111
-var VLQ_BASE_MASK = VLQ_BASE - 1;
+  // If there is no 'error' event listener then throw.
+  if (type === 'error') {
+    if (!this._events.error ||
+        (isObject(this._events.error) && !this._events.error.length)) {
+      er = arguments[1];
+      if (er instanceof Error) {
+        throw er; // Unhandled 'error' event
+      } else {
+        // At least give some kind of context to the user
+        var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
+        err.context = er;
+        throw err;
+      }
+    }
+  }
 
-// binary: 100000
-var VLQ_CONTINUATION_BIT = VLQ_BASE;
+  handler = this._events[type];
 
-/**
- * Converts from a two-complement value to a value where the sign bit is
- * placed in the least significant bit.  For example, as decimals:
- *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
- *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
- */
-function toVLQSigned(aValue) {
-  return aValue < 0
-    ? ((-aValue) << 1) + 1
-    : (aValue << 1) + 0;
-}
+  if (isUndefined(handler))
+    return false;
 
-/**
- * Converts to a two-complement value from a value where the sign bit is
- * placed in the least significant bit.  For example, as decimals:
- *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
- *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
- */
-function fromVLQSigned(aValue) {
-  var isNegative = (aValue & 1) === 1;
-  var shifted = aValue >> 1;
-  return isNegative
-    ? -shifted
-    : shifted;
-}
+  if (isFunction(handler)) {
+    switch (arguments.length) {
+      // fast cases
+      case 1:
+        handler.call(this);
+        break;
+      case 2:
+        handler.call(this, arguments[1]);
+        break;
+      case 3:
+        handler.call(this, arguments[1], arguments[2]);
+        break;
+      // slower
+      default:
+        args = Array.prototype.slice.call(arguments, 1);
+        handler.apply(this, args);
+    }
+  } else if (isObject(handler)) {
+    args = Array.prototype.slice.call(arguments, 1);
+    listeners = handler.slice();
+    len = listeners.length;
+    for (i = 0; i < len; i++)
+      listeners[i].apply(this, args);
+  }
 
-/**
- * Returns the base 64 VLQ encoded value.
- */
-exports.encode = function base64VLQ_encode(aValue) {
-  var encoded = "";
-  var digit;
+  return true;
+};
 
-  var vlq = toVLQSigned(aValue);
+EventEmitter.prototype.addListener = function(type, listener) {
+  var m;
 
-  do {
-    digit = vlq & VLQ_BASE_MASK;
-    vlq >>>= VLQ_BASE_SHIFT;
-    if (vlq > 0) {
-      // There are still more digits in this value, so we must make sure the
-      // continuation bit is marked.
-      digit |= VLQ_CONTINUATION_BIT;
-    }
-    encoded += base64.encode(digit);
-  } while (vlq > 0);
+  if (!isFunction(listener))
+    throw TypeError('listener must be a function');
 
-  return encoded;
-};
+  if (!this._events)
+    this._events = {};
 
-/**
- * Decodes the next base 64 VLQ value from the given string and returns the
- * value and the rest of the string via the out parameter.
- */
-exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
-  var strLen = aStr.length;
-  var result = 0;
-  var shift = 0;
-  var continuation, digit;
+  // To avoid recursion in the case that type === "newListener"! Before
+  // adding it to the listeners, first emit "newListener".
+  if (this._events.newListener)
+    this.emit('newListener', type,
+              isFunction(listener.listener) ?
+              listener.listener : listener);
 
-  do {
-    if (aIndex >= strLen) {
-      throw new Error("Expected more digits in base 64 VLQ value.");
-    }
+  if (!this._events[type])
+    // Optimize the case of one listener. Don't need the extra array object.
+    this._events[type] = listener;
+  else if (isObject(this._events[type]))
+    // If we've already got an array, just append.
+    this._events[type].push(listener);
+  else
+    // Adding the second element, need to change to array.
+    this._events[type] = [this._events[type], listener];
 
-    digit = base64.decode(aStr.charCodeAt(aIndex++));
-    if (digit === -1) {
-      throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
+  // Check for listener leak
+  if (isObject(this._events[type]) && !this._events[type].warned) {
+    if (!isUndefined(this._maxListeners)) {
+      m = this._maxListeners;
+    } else {
+      m = EventEmitter.defaultMaxListeners;
     }
 
-    continuation = !!(digit & VLQ_CONTINUATION_BIT);
-    digit &= VLQ_BASE_MASK;
-    result = result + (digit << shift);
-    shift += VLQ_BASE_SHIFT;
-  } while (continuation);
+    if (m && m > 0 && this._events[type].length > m) {
+      this._events[type].warned = true;
+      console.error('(node) warning: possible EventEmitter memory ' +
+                    'leak detected. %d listeners added. ' +
+                    'Use emitter.setMaxListeners() to increase limit.',
+                    this._events[type].length);
+      if (typeof console.trace === 'function') {
+        // not supported in IE 10
+        console.trace();
+      }
+    }
+  }
 
-  aOutParam.value = fromVLQSigned(result);
-  aOutParam.rest = aIndex;
+  return this;
 };
 
-},{"./base64":144}],144:[function(require,module,exports){
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
+EventEmitter.prototype.on = EventEmitter.prototype.addListener;
 
-var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
+EventEmitter.prototype.once = function(type, listener) {
+  if (!isFunction(listener))
+    throw TypeError('listener must be a function');
 
-/**
- * Encode an integer in the range of 0 to 63 to a single base 64 digit.
- */
-exports.encode = function (number) {
-  if (0 <= number && number < intToCharMap.length) {
-    return intToCharMap[number];
+  var fired = false;
+
+  function g() {
+    this.removeListener(type, g);
+
+    if (!fired) {
+      fired = true;
+      listener.apply(this, arguments);
+    }
   }
-  throw new TypeError("Must be between 0 and 63: " + number);
-};
 
-/**
- * Decode a single base 64 character code digit to an integer. Returns -1 on
- * failure.
- */
-exports.decode = function (charCode) {
-  var bigA = 65;     // 'A'
-  var bigZ = 90;     // 'Z'
+  g.listener = listener;
+  this.on(type, g);
 
-  var littleA = 97;  // 'a'
-  var littleZ = 122; // 'z'
+  return this;
+};
 
-  var zero = 48;     // '0'
-  var nine = 57;     // '9'
+// emits a 'removeListener' event iff the listener was removed
+EventEmitter.prototype.removeListener = function(type, listener) {
+  var list, position, length, i;
 
-  var plus = 43;     // '+'
-  var slash = 47;    // '/'
+  if (!isFunction(listener))
+    throw TypeError('listener must be a function');
 
-  var littleOffset = 26;
-  var numberOffset = 52;
+  if (!this._events || !this._events[type])
+    return this;
 
-  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
-  if (bigA <= charCode && charCode <= bigZ) {
-    return (charCode - bigA);
-  }
+  list = this._events[type];
+  length = list.length;
+  position = -1;
 
-  // 26 - 51: abcdefghijklmnopqrstuvwxyz
-  if (littleA <= charCode && charCode <= littleZ) {
-    return (charCode - littleA + littleOffset);
-  }
+  if (list === listener ||
+      (isFunction(list.listener) && list.listener === listener)) {
+    delete this._events[type];
+    if (this._events.removeListener)
+      this.emit('removeListener', type, listener);
 
-  // 52 - 61: 0123456789
-  if (zero <= charCode && charCode <= nine) {
-    return (charCode - zero + numberOffset);
-  }
+  } else if (isObject(list)) {
+    for (i = length; i-- > 0;) {
+      if (list[i] === listener ||
+          (list[i].listener && list[i].listener === listener)) {
+        position = i;
+        break;
+      }
+    }
 
-  // 62: +
-  if (charCode == plus) {
-    return 62;
-  }
+    if (position < 0)
+      return this;
 
-  // 63: /
-  if (charCode == slash) {
-    return 63;
+    if (list.length === 1) {
+      list.length = 0;
+      delete this._events[type];
+    } else {
+      list.splice(position, 1);
+    }
+
+    if (this._events.removeListener)
+      this.emit('removeListener', type, listener);
   }
 
-  // Invalid base64 digit.
-  return -1;
+  return this;
 };
 
-},{}],145:[function(require,module,exports){
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-exports.GREATEST_LOWER_BOUND = 1;
-exports.LEAST_UPPER_BOUND = 2;
+EventEmitter.prototype.removeAllListeners = function(type) {
+  var key, listeners;
 
-/**
- * Recursive implementation of binary search.
- *
- * @param aLow Indices here and lower do not contain the needle.
- * @param aHigh Indices here and higher do not contain the needle.
- * @param aNeedle The element being searched for.
- * @param aHaystack The non-empty array being searched.
- * @param aCompare Function which takes two elements and returns -1, 0, or 1.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- *     closest element that is smaller than or greater than the one we are
- *     searching for, respectively, if the exact element cannot be found.
- */
-function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
-  // This function terminates when one of the following is true:
-  //
-  //   1. We find the exact element we are looking for.
-  //
-  //   2. We did not find the exact element, but we can return the index of
-  //      the next-closest element.
-  //
-  //   3. We did not find the exact element, and there is no next-closest
-  //      element than the one we are searching for, so we return -1.
-  var mid = Math.floor((aHigh - aLow) / 2) + aLow;
-  var cmp = aCompare(aNeedle, aHaystack[mid], true);
-  if (cmp === 0) {
-    // Found the element we are looking for.
-    return mid;
-  }
-  else if (cmp > 0) {
-    // Our needle is greater than aHaystack[mid].
-    if (aHigh - mid > 1) {
-      // The element is in the upper half.
-      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
-    }
+  if (!this._events)
+    return this;
 
-    // The exact needle element was not found in this haystack. Determine if
-    // we are in termination case (3) or (2) and return the appropriate thing.
-    if (aBias == exports.LEAST_UPPER_BOUND) {
-      return aHigh < aHaystack.length ? aHigh : -1;
-    } else {
-      return mid;
-    }
+  // not listening for removeListener, no need to emit
+  if (!this._events.removeListener) {
+    if (arguments.length === 0)
+      this._events = {};
+    else if (this._events[type])
+      delete this._events[type];
+    return this;
   }
-  else {
-    // Our needle is less than aHaystack[mid].
-    if (mid - aLow > 1) {
-      // The element is in the lower half.
-      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
-    }
 
-    // we are in termination case (3) or (2) and return the appropriate thing.
-    if (aBias == exports.LEAST_UPPER_BOUND) {
-      return mid;
-    } else {
-      return aLow < 0 ? -1 : aLow;
+  // emit removeListener for all listeners on all events
+  if (arguments.length === 0) {
+    for (key in this._events) {
+      if (key === 'removeListener') continue;
+      this.removeAllListeners(key);
     }
+    this.removeAllListeners('removeListener');
+    this._events = {};
+    return this;
   }
-}
 
-/**
- * This is an implementation of binary search which will always try and return
- * the index of the closest element if there is no exact hit. This is because
- * mappings between original and generated line/col pairs are single points,
- * and there is an implicit region between each of them, so a miss just means
- * that you aren't on the very start of a region.
- *
- * @param aNeedle The element you are looking for.
- * @param aHaystack The array that is being searched.
- * @param aCompare A function which takes the needle and an element in the
- *     array and returns -1, 0, or 1 depending on whether the needle is less
- *     than, equal to, or greater than the element, respectively.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- *     closest element that is smaller than or greater than the one we are
- *     searching for, respectively, if the exact element cannot be found.
- *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
- */
-exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
-  if (aHaystack.length === 0) {
-    return -1;
-  }
+  listeners = this._events[type];
 
-  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
-                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);
-  if (index < 0) {
-    return -1;
+  if (isFunction(listeners)) {
+    this.removeListener(type, listeners);
+  } else if (listeners) {
+    // LIFO order
+    while (listeners.length)
+      this.removeListener(type, listeners[listeners.length - 1]);
   }
+  delete this._events[type];
 
-  // We have found either the exact element, or the next-closest element than
-  // the one we are searching for. However, there may be more than one such
-  // element. Make sure we always return the smallest of these.
-  while (index - 1 >= 0) {
-    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
-      break;
-    }
-    --index;
+  return this;
+};
+
+EventEmitter.prototype.listeners = function(type) {
+  var ret;
+  if (!this._events || !this._events[type])
+    ret = [];
+  else if (isFunction(this._events[type]))
+    ret = [this._events[type]];
+  else
+    ret = this._events[type].slice();
+  return ret;
+};
+
+EventEmitter.prototype.listenerCount = function(type) {
+  if (this._events) {
+    var evlistener = this._events[type];
+
+    if (isFunction(evlistener))
+      return 1;
+    else if (evlistener)
+      return evlistener.length;
   }
+  return 0;
+};
 
-  return index;
+EventEmitter.listenerCount = function(emitter, type) {
+  return emitter.listenerCount(type);
 };
 
-},{}],146:[function(require,module,exports){
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2014 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
+function isFunction(arg) {
+  return typeof arg === 'function';
+}
 
-var util = require('./util');
+function isNumber(arg) {
+  return typeof arg === 'number';
+}
 
-/**
- * Determine whether mappingB is after mappingA with respect to generated
- * position.
- */
-function generatedPositionAfter(mappingA, mappingB) {
-  // Optimized for most common case
-  var lineA = mappingA.generatedLine;
-  var lineB = mappingB.generatedLine;
-  var columnA = mappingA.generatedColumn;
-  var columnB = mappingB.generatedColumn;
-  return lineB > lineA || lineB == lineA && columnB >= columnA ||
-         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
+function isObject(arg) {
+  return typeof arg === 'object' && arg !== null;
 }
 
-/**
- * A data structure to provide a sorted view of accumulated mappings in a
- * performance conscious manner. It trades a neglibable overhead in general
- * case for a large speedup in case of mappings being added in order.
- */
-function MappingList() {
-  this._array = [];
-  this._sorted = true;
-  // Serves as infimum
-  this._last = {generatedLine: -1, generatedColumn: 0};
+function isUndefined(arg) {
+  return arg === void 0;
 }
 
-/**
- * Iterate through internal items. This method takes the same arguments that
- * `Array.prototype.forEach` takes.
- *
- * NOTE: The order of the mappings is NOT guaranteed.
- */
-MappingList.prototype.unsortedForEach =
-  function MappingList_forEach(aCallback, aThisArg) {
-    this._array.forEach(aCallback, aThisArg);
-  };
+},{}],104:[function(require,module,exports){
+(function (global){
+/*! https://mths.be/he v1.1.1 by @mathias | MIT license */
+;(function(root) {
+
+       // Detect free variables `exports`.
+       var freeExports = typeof exports == 'object' && exports;
+
+       // Detect free variable `module`.
+       var freeModule = typeof module == 'object' && module &&
+               module.exports == freeExports && module;
+
+       // Detect free variable `global`, from Node.js or Browserified code,
+       // and use it as `root`.
+       var freeGlobal = typeof global == 'object' && global;
+       if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
+               root = freeGlobal;
+       }
+
+       /*--------------------------------------------------------------------------*/
+
+       // All astral symbols.
+       var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+       // All ASCII symbols (not just printable ASCII) except those listed in the
+       // first column of the overrides table.
+       // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
+       var regexAsciiWhitelist = /[\x01-\x7F]/g;
+       // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
+       // code points listed in the first column of the overrides table on
+       // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.
+       var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;
+
+       var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
+       var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'};
+
+       var regexEscape = /["&'<>`]/g;
+       var escapeMap = {
+               '"': '&quot;',
+               '&': '&amp;',
+               '\'': '&#x27;',
+               '<': '&lt;',
+               // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
+               // following is not strictly necessary unless it’s part of a tag or an
+               // unquoted attribute value. We’re only escaping it to support those
+               // situations, and for XML support.
+               '>': '&gt;',
+               // In Internet Explorer ≤ 8, the backtick character can be used
+               // to break out of (un)quoted attribute values or HTML comments.
+               // See http://html5sec.org/#102, http://html5sec.org/#108, and
+               // http://html5sec.org/#133.
+               '`': '&#x60;'
+       };
+
+       var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
+       var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
+       var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)([=a-zA-Z0-9])?/g;
+       var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'};
+       var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'};
+       var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'};
+       var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];
+
+       /*--------------------------------------------------------------------------*/
+
+       var stringFromCharCode = String.fromCharCode;
+
+       var object = {};
+       var hasOwnProperty = object.hasOwnProperty;
+       var has = function(object, propertyName) {
+               return hasOwnProperty.call(object, propertyName);
+       };
+
+       var contains = function(array, value) {
+               var index = -1;
+               var length = array.length;
+               while (++index < length) {
+                       if (array[index] == value) {
+                               return true;
+                       }
+               }
+               return false;
+       };
+
+       var merge = function(options, defaults) {
+               if (!options) {
+                       return defaults;
+               }
+               var result = {};
+               var key;
+               for (key in defaults) {
+                       // A `hasOwnProperty` check is not needed here, since only recognized
+                       // option names are used anyway. Any others are ignored.
+                       result[key] = has(options, key) ? options[key] : defaults[key];
+               }
+               return result;
+       };
+
+       // Modified version of `ucs2encode`; see https://mths.be/punycode.
+       var codePointToSymbol = function(codePoint, strict) {
+               var output = '';
+               if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
+                       // See issue #4:
+                       // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
+                       // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
+                       // REPLACEMENT CHARACTER.”
+                       if (strict) {
+                               parseError('character reference outside the permissible Unicode range');
+                       }
+                       return '\uFFFD';
+               }
+               if (has(decodeMapNumeric, codePoint)) {
+                       if (strict) {
+                               parseError('disallowed character reference');
+                       }
+                       return decodeMapNumeric[codePoint];
+               }
+               if (strict && contains(invalidReferenceCodePoints, codePoint)) {
+                       parseError('disallowed character reference');
+               }
+               if (codePoint > 0xFFFF) {
+                       codePoint -= 0x10000;
+                       output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
+                       codePoint = 0xDC00 | codePoint & 0x3FF;
+               }
+               output += stringFromCharCode(codePoint);
+               return output;
+       };
 
-/**
- * Add the given source mapping.
- *
- * @param Object aMapping
- */
-MappingList.prototype.add = function MappingList_add(aMapping) {
-  if (generatedPositionAfter(this._last, aMapping)) {
-    this._last = aMapping;
-    this._array.push(aMapping);
-  } else {
-    this._sorted = false;
-    this._array.push(aMapping);
-  }
-};
+       var hexEscape = function(codePoint) {
+               return '&#x' + codePoint.toString(16).toUpperCase() + ';';
+       };
 
-/**
- * Returns the flat, sorted array of mappings. The mappings are sorted by
- * generated position.
- *
- * WARNING: This method returns internal data without copying, for
- * performance. The return value must NOT be mutated, and should be treated as
- * an immutable borrow. If you want to take ownership, you must make your own
- * copy.
- */
-MappingList.prototype.toArray = function MappingList_toArray() {
-  if (!this._sorted) {
-    this._array.sort(util.compareByGeneratedPositionsInflated);
-    this._sorted = true;
-  }
-  return this._array;
-};
+       var decEscape = function(codePoint) {
+               return '&#' + codePoint + ';';
+       };
 
-exports.MappingList = MappingList;
+       var parseError = function(message) {
+               throw Error('Parse error: ' + message);
+       };
 
-},{"./util":151}],147:[function(require,module,exports){
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
+       /*--------------------------------------------------------------------------*/
 
-// It turns out that some (most?) JavaScript engines don't self-host
-// `Array.prototype.sort`. This makes sense because C++ will likely remain
-// faster than JS when doing raw CPU-intensive sorting. However, when using a
-// custom comparator function, calling back and forth between the VM's C++ and
-// JIT'd JS is rather slow *and* loses JIT type information, resulting in
-// worse generated code for the comparator function than would be optimal. In
-// fact, when sorting with a comparator, these costs outweigh the benefits of
-// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
-// a ~3500ms mean speed-up in `bench/bench.html`.
+       var encode = function(string, options) {
+               options = merge(options, encode.options);
+               var strict = options.strict;
+               if (strict && regexInvalidRawCodePoint.test(string)) {
+                       parseError('forbidden code point');
+               }
+               var encodeEverything = options.encodeEverything;
+               var useNamedReferences = options.useNamedReferences;
+               var allowUnsafeSymbols = options.allowUnsafeSymbols;
+               var escapeCodePoint = options.decimal ? decEscape : hexEscape;
 
-/**
- * Swap the elements indexed by `x` and `y` in the array `ary`.
- *
- * @param {Array} ary
- *        The array.
- * @param {Number} x
- *        The index of the first item.
- * @param {Number} y
- *        The index of the second item.
- */
-function swap(ary, x, y) {
-  var temp = ary[x];
-  ary[x] = ary[y];
-  ary[y] = temp;
-}
+               var escapeBmpSymbol = function(symbol) {
+                       return escapeCodePoint(symbol.charCodeAt(0));
+               };
 
-/**
- * Returns a random integer within the range `low .. high` inclusive.
- *
- * @param {Number} low
- *        The lower bound on the range.
- * @param {Number} high
- *        The upper bound on the range.
- */
-function randomIntInRange(low, high) {
-  return Math.round(low + (Math.random() * (high - low)));
-}
+               if (encodeEverything) {
+                       // Encode ASCII symbols.
+                       string = string.replace(regexAsciiWhitelist, function(symbol) {
+                               // Use named references if requested & possible.
+                               if (useNamedReferences && has(encodeMap, symbol)) {
+                                       return '&' + encodeMap[symbol] + ';';
+                               }
+                               return escapeBmpSymbol(symbol);
+                       });
+                       // Shorten a few escapes that represent two symbols, of which at least one
+                       // is within the ASCII range.
+                       if (useNamedReferences) {
+                               string = string
+                                       .replace(/&gt;\u20D2/g, '&nvgt;')
+                                       .replace(/&lt;\u20D2/g, '&nvlt;')
+                                       .replace(/&#x66;&#x6A;/g, '&fjlig;');
+                       }
+                       // Encode non-ASCII symbols.
+                       if (useNamedReferences) {
+                               // Encode non-ASCII symbols that can be replaced with a named reference.
+                               string = string.replace(regexEncodeNonAscii, function(string) {
+                                       // Note: there is no need to check `has(encodeMap, string)` here.
+                                       return '&' + encodeMap[string] + ';';
+                               });
+                       }
+                       // Note: any remaining non-ASCII symbols are handled outside of the `if`.
+               } else if (useNamedReferences) {
+                       // Apply named character references.
+                       // Encode `<>"'&` using named character references.
+                       if (!allowUnsafeSymbols) {
+                               string = string.replace(regexEscape, function(string) {
+                                       return '&' + encodeMap[string] + ';'; // no need to check `has()` here
+                               });
+                       }
+                       // Shorten escapes that represent two symbols, of which at least one is
+                       // `<>"'&`.
+                       string = string
+                               .replace(/&gt;\u20D2/g, '&nvgt;')
+                               .replace(/&lt;\u20D2/g, '&nvlt;');
+                       // Encode non-ASCII symbols that can be replaced with a named reference.
+                       string = string.replace(regexEncodeNonAscii, function(string) {
+                               // Note: there is no need to check `has(encodeMap, string)` here.
+                               return '&' + encodeMap[string] + ';';
+                       });
+               } else if (!allowUnsafeSymbols) {
+                       // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled
+                       // using named character references.
+                       string = string.replace(regexEscape, escapeBmpSymbol);
+               }
+               return string
+                       // Encode astral symbols.
+                       .replace(regexAstralSymbols, function($0) {
+                               // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+                               var high = $0.charCodeAt(0);
+                               var low = $0.charCodeAt(1);
+                               var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
+                               return escapeCodePoint(codePoint);
+                       })
+                       // Encode any remaining BMP symbols that are not printable ASCII symbols
+                       // using a hexadecimal escape.
+                       .replace(regexBmpWhitelist, escapeBmpSymbol);
+       };
+       // Expose default options (so they can be overridden globally).
+       encode.options = {
+               'allowUnsafeSymbols': false,
+               'encodeEverything': false,
+               'strict': false,
+               'useNamedReferences': false,
+               'decimal' : false
+       };
 
-/**
- * The Quick Sort algorithm.
- *
- * @param {Array} ary
- *        An array to sort.
- * @param {function} comparator
- *        Function to use to compare two items.
- * @param {Number} p
- *        Start index of the array
- * @param {Number} r
- *        End index of the array
- */
-function doQuickSort(ary, comparator, p, r) {
-  // If our lower bound is less than our upper bound, we (1) partition the
-  // array into two pieces and (2) recurse on each half. If it is not, this is
-  // the empty array and our base case.
+       var decode = function(html, options) {
+               options = merge(options, decode.options);
+               var strict = options.strict;
+               if (strict && regexInvalidEntity.test(html)) {
+                       parseError('malformed character reference');
+               }
+               return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) {
+                       var codePoint;
+                       var semicolon;
+                       var decDigits;
+                       var hexDigits;
+                       var reference;
+                       var next;
+                       if ($1) {
+                               // Decode decimal escapes, e.g. `&#119558;`.
+                               decDigits = $1;
+                               semicolon = $2;
+                               if (strict && !semicolon) {
+                                       parseError('character reference was not terminated by a semicolon');
+                               }
+                               codePoint = parseInt(decDigits, 10);
+                               return codePointToSymbol(codePoint, strict);
+                       }
+                       if ($3) {
+                               // Decode hexadecimal escapes, e.g. `&#x1D306;`.
+                               hexDigits = $3;
+                               semicolon = $4;
+                               if (strict && !semicolon) {
+                                       parseError('character reference was not terminated by a semicolon');
+                               }
+                               codePoint = parseInt(hexDigits, 16);
+                               return codePointToSymbol(codePoint, strict);
+                       }
+                       if ($5) {
+                               // Decode named character references with trailing `;`, e.g. `&copy;`.
+                               reference = $5;
+                               if (has(decodeMap, reference)) {
+                                       return decodeMap[reference];
+                               } else {
+                                       // Ambiguous ampersand. https://mths.be/notes/ambiguous-ampersands
+                                       if (strict) {
+                                               parseError(
+                                                       'named character reference was not terminated by a semicolon'
+                                               );
+                                       }
+                                       return $0;
+                               }
+                       }
+                       // If we’re still here, it’s a legacy reference for sure. No need for an
+                       // extra `if` check.
+                       // Decode named character references without trailing `;`, e.g. `&amp`
+                       // This is only a parse error if it gets converted to `&`, or if it is
+                       // followed by `=` in an attribute context.
+                       reference = $6;
+                       next = $7;
+                       if (next && options.isAttributeValue) {
+                               if (strict && next == '=') {
+                                       parseError('`&` did not start a character reference');
+                               }
+                               return $0;
+                       } else {
+                               if (strict) {
+                                       parseError(
+                                               'named character reference was not terminated by a semicolon'
+                                       );
+                               }
+                               // Note: there is no need to check `has(decodeMapLegacy, reference)`.
+                               return decodeMapLegacy[reference] + (next || '');
+                       }
+               });
+       };
+       // Expose default options (so they can be overridden globally).
+       decode.options = {
+               'isAttributeValue': false,
+               'strict': false
+       };
 
-  if (p < r) {
-    // (1) Partitioning.
-    //
-    // The partitioning chooses a pivot between `p` and `r` and moves all
-    // elements that are less than or equal to the pivot to the before it, and
-    // all the elements that are greater than it after it. The effect is that
-    // once partition is done, the pivot is in the exact place it will be when
-    // the array is put in sorted order, and it will not need to be moved
-    // again. This runs in O(n) time.
+       var escape = function(string) {
+               return string.replace(regexEscape, function($0) {
+                       // Note: there is no need to check `has(escapeMap, $0)` here.
+                       return escapeMap[$0];
+               });
+       };
 
-    // Always choose a random pivot so that an input array which is reverse
-    // sorted does not cause O(n^2) running time.
-    var pivotIndex = randomIntInRange(p, r);
-    var i = p - 1;
+       /*--------------------------------------------------------------------------*/
 
-    swap(ary, pivotIndex, r);
-    var pivot = ary[r];
+       var he = {
+               'version': '1.1.1',
+               'encode': encode,
+               'decode': decode,
+               'escape': escape,
+               'unescape': decode
+       };
 
-    // Immediately after `j` is incremented in this loop, the following hold
-    // true:
-    //
-    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
-    //
-    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
-    for (var j = p; j < r; j++) {
-      if (comparator(ary[j], pivot) <= 0) {
-        i += 1;
-        swap(ary, i, j);
-      }
-    }
+       // Some AMD build optimizers, like r.js, check for specific condition patterns
+       // like the following:
+       if (
+               typeof define == 'function' &&
+               typeof define.amd == 'object' &&
+               define.amd
+       ) {
+               define(function() {
+                       return he;
+               });
+       }       else if (freeExports && !freeExports.nodeType) {
+               if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+
+                       freeModule.exports = he;
+               } else { // in Narwhal or RingoJS v0.7.0-
+                       for (var key in he) {
+                               has(he, key) && (freeExports[key] = he[key]);
+                       }
+               }
+       } else { // in Rhino or a web browser
+               root.he = he;
+       }
 
-    swap(ary, i + 1, j);
-    var q = i + 1;
+}(this));
 
-    // (2) Recurse on each half.
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],105:[function(require,module,exports){
+var http = require('http');
 
-    doQuickSort(ary, comparator, p, q - 1);
-    doQuickSort(ary, comparator, q + 1, r);
-  }
-}
+var https = module.exports;
 
-/**
- * Sort the given array in-place with the given comparator function.
- *
- * @param {Array} ary
- *        An array to sort.
- * @param {function} comparator
- *        Function to use to compare two items.
- */
-exports.quickSort = function (ary, comparator) {
-  doQuickSort(ary, comparator, 0, ary.length - 1);
+for (var key in http) {
+    if (http.hasOwnProperty(key)) https[key] = http[key];
 };
 
-},{}],148:[function(require,module,exports){
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var util = require('./util');
-var binarySearch = require('./binary-search');
-var ArraySet = require('./array-set').ArraySet;
-var base64VLQ = require('./base64-vlq');
-var quickSort = require('./quick-sort').quickSort;
-
-function SourceMapConsumer(aSourceMap) {
-  var sourceMap = aSourceMap;
-  if (typeof aSourceMap === 'string') {
-    sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
-  }
-
-  return sourceMap.sections != null
-    ? new IndexedSourceMapConsumer(sourceMap)
-    : new BasicSourceMapConsumer(sourceMap);
-}
-
-SourceMapConsumer.fromSourceMap = function(aSourceMap) {
-  return BasicSourceMapConsumer.fromSourceMap(aSourceMap);
+https.request = function (params, cb) {
+    if (!params) params = {};
+    params.scheme = 'https';
+    params.protocol = 'https:';
+    return http.request.call(this, params, cb);
 }
 
-/**
- * The version of the source mapping spec that we are consuming.
- */
-SourceMapConsumer.prototype._version = 3;
-
-// `__generatedMappings` and `__originalMappings` are arrays that hold the
-// parsed mapping coordinates from the source map's "mappings" attribute. They
-// are lazily instantiated, accessed via the `_generatedMappings` and
-// `_originalMappings` getters respectively, and we only parse the mappings
-// and create these arrays once queried for a source location. We jump through
-// these hoops because there can be many thousands of mappings, and parsing
-// them is expensive, so we only want to do it if we must.
-//
-// Each object in the arrays is of the form:
-//
-//     {
-//       generatedLine: The line number in the generated code,
-//       generatedColumn: The column number in the generated code,
-//       source: The path to the original source file that generated this
-//               chunk of code,
-//       originalLine: The line number in the original source that
-//                     corresponds to this chunk of generated code,
-//       originalColumn: The column number in the original source that
-//                       corresponds to this chunk of generated code,
-//       name: The name of the original symbol which generated this chunk of
-//             code.
-//     }
-//
-// All properties except for `generatedLine` and `generatedColumn` can be
-// `null`.
-//
-// `_generatedMappings` is ordered by the generated positions.
-//
-// `_originalMappings` is ordered by the original positions.
-
-SourceMapConsumer.prototype.__generatedMappings = null;
-Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
-  get: function () {
-    if (!this.__generatedMappings) {
-      this._parseMappings(this._mappings, this.sourceRoot);
-    }
-
-    return this.__generatedMappings;
-  }
-});
-
-SourceMapConsumer.prototype.__originalMappings = null;
-Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
-  get: function () {
-    if (!this.__originalMappings) {
-      this._parseMappings(this._mappings, this.sourceRoot);
-    }
-
-    return this.__originalMappings;
-  }
-});
-
-SourceMapConsumer.prototype._charIsMappingSeparator =
-  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
-    var c = aStr.charAt(index);
-    return c === ";" || c === ",";
-  };
-
-/**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-SourceMapConsumer.prototype._parseMappings =
-  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
-    throw new Error("Subclasses must implement _parseMappings");
-  };
-
-SourceMapConsumer.GENERATED_ORDER = 1;
-SourceMapConsumer.ORIGINAL_ORDER = 2;
+},{"http":156}],106:[function(require,module,exports){
+exports.read = function (buffer, offset, isLE, mLen, nBytes) {
+  var e, m
+  var eLen = nBytes * 8 - mLen - 1
+  var eMax = (1 << eLen) - 1
+  var eBias = eMax >> 1
+  var nBits = -7
+  var i = isLE ? (nBytes - 1) : 0
+  var d = isLE ? -1 : 1
+  var s = buffer[offset + i]
 
-SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
-SourceMapConsumer.LEAST_UPPER_BOUND = 2;
+  i += d
 
-/**
- * Iterate over each mapping between an original source/line/column and a
- * generated line/column in this source map.
- *
- * @param Function aCallback
- *        The function that is called with each mapping.
- * @param Object aContext
- *        Optional. If specified, this object will be the value of `this` every
- *        time that `aCallback` is called.
- * @param aOrder
- *        Either `SourceMapConsumer.GENERATED_ORDER` or
- *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
- *        iterate over the mappings sorted by the generated file's line/column
- *        order or the original's source/line/column order, respectively. Defaults to
- *        `SourceMapConsumer.GENERATED_ORDER`.
- */
-SourceMapConsumer.prototype.eachMapping =
-  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
-    var context = aContext || null;
-    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
+  e = s & ((1 << (-nBits)) - 1)
+  s >>= (-nBits)
+  nBits += eLen
+  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
 
-    var mappings;
-    switch (order) {
-    case SourceMapConsumer.GENERATED_ORDER:
-      mappings = this._generatedMappings;
-      break;
-    case SourceMapConsumer.ORIGINAL_ORDER:
-      mappings = this._originalMappings;
-      break;
-    default:
-      throw new Error("Unknown order of iteration.");
-    }
+  m = e & ((1 << (-nBits)) - 1)
+  e >>= (-nBits)
+  nBits += mLen
+  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
 
-    var sourceRoot = this.sourceRoot;
-    mappings.map(function (mapping) {
-      var source = mapping.source === null ? null : this._sources.at(mapping.source);
-      if (source != null && sourceRoot != null) {
-        source = util.join(sourceRoot, source);
-      }
-      return {
-        source: source,
-        generatedLine: mapping.generatedLine,
-        generatedColumn: mapping.generatedColumn,
-        originalLine: mapping.originalLine,
-        originalColumn: mapping.originalColumn,
-        name: mapping.name === null ? null : this._names.at(mapping.name)
-      };
-    }, this).forEach(aCallback, context);
-  };
+  if (e === 0) {
+    e = 1 - eBias
+  } else if (e === eMax) {
+    return m ? NaN : ((s ? -1 : 1) * Infinity)
+  } else {
+    m = m + Math.pow(2, mLen)
+    e = e - eBias
+  }
+  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
+}
 
-/**
- * Returns all generated line and column information for the original source,
- * line, and column provided. If no column is provided, returns all mappings
- * corresponding to a either the line we are searching for or the next
- * closest line that has any mappings. Otherwise, returns all mappings
- * corresponding to the given line and either the column we are searching for
- * or the next closest column that has any offsets.
- *
- * The only argument is an object with the following properties:
- *
- *   - source: The filename of the original source.
- *   - line: The line number in the original source.
- *   - column: Optional. the column number in the original source.
- *
- * and an array of objects is returned, each with the following properties:
- *
- *   - line: The line number in the generated source, or null.
- *   - column: The column number in the generated source, or null.
- */
-SourceMapConsumer.prototype.allGeneratedPositionsFor =
-  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
-    var line = util.getArg(aArgs, 'line');
+exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
+  var e, m, c
+  var eLen = nBytes * 8 - mLen - 1
+  var eMax = (1 << eLen) - 1
+  var eBias = eMax >> 1
+  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
+  var i = isLE ? 0 : (nBytes - 1)
+  var d = isLE ? 1 : -1
+  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
 
-    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
-    // returns the index of the closest mapping less than the needle. By
-    // setting needle.originalColumn to 0, we thus find the last mapping for
-    // the given line, provided such a mapping exists.
-    var needle = {
-      source: util.getArg(aArgs, 'source'),
-      originalLine: line,
-      originalColumn: util.getArg(aArgs, 'column', 0)
-    };
+  value = Math.abs(value)
 
-    if (this.sourceRoot != null) {
-      needle.source = util.relative(this.sourceRoot, needle.source);
+  if (isNaN(value) || value === Infinity) {
+    m = isNaN(value) ? 1 : 0
+    e = eMax
+  } else {
+    e = Math.floor(Math.log(value) / Math.LN2)
+    if (value * (c = Math.pow(2, -e)) < 1) {
+      e--
+      c *= 2
     }
-    if (!this._sources.has(needle.source)) {
-      return [];
+    if (e + eBias >= 1) {
+      value += rt / c
+    } else {
+      value += rt * Math.pow(2, 1 - eBias)
+    }
+    if (value * c >= 2) {
+      e++
+      c /= 2
     }
-    needle.source = this._sources.indexOf(needle.source);
-
-    var mappings = [];
-
-    var index = this._findMapping(needle,
-                                  this._originalMappings,
-                                  "originalLine",
-                                  "originalColumn",
-                                  util.compareByOriginalPositions,
-                                  binarySearch.LEAST_UPPER_BOUND);
-    if (index >= 0) {
-      var mapping = this._originalMappings[index];
 
-      if (aArgs.column === undefined) {
-        var originalLine = mapping.originalLine;
+    if (e + eBias >= eMax) {
+      m = 0
+      e = eMax
+    } else if (e + eBias >= 1) {
+      m = (value * c - 1) * Math.pow(2, mLen)
+      e = e + eBias
+    } else {
+      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
+      e = 0
+    }
+  }
 
-        // Iterate until either we run out of mappings, or we run into
-        // a mapping for a different line than the one we found. Since
-        // mappings are sorted, this is guaranteed to find all mappings for
-        // the line we found.
-        while (mapping && mapping.originalLine === originalLine) {
-          mappings.push({
-            line: util.getArg(mapping, 'generatedLine', null),
-            column: util.getArg(mapping, 'generatedColumn', null),
-            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
-          });
+  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
 
-          mapping = this._originalMappings[++index];
-        }
-      } else {
-        var originalColumn = mapping.originalColumn;
+  e = (e << mLen) | m
+  eLen += mLen
+  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
 
-        // Iterate until either we run out of mappings, or we run into
-        // a mapping for a different line than the one we were searching for.
-        // Since mappings are sorted, this is guaranteed to find all mappings for
-        // the line we are searching for.
-        while (mapping &&
-               mapping.originalLine === line &&
-               mapping.originalColumn == originalColumn) {
-          mappings.push({
-            line: util.getArg(mapping, 'generatedLine', null),
-            column: util.getArg(mapping, 'generatedColumn', null),
-            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
-          });
+  buffer[offset + i - d] |= s * 128
+}
 
-          mapping = this._originalMappings[++index];
-        }
+},{}],107:[function(require,module,exports){
+if (typeof Object.create === 'function') {
+  // implementation from standard node.js 'util' module
+  module.exports = function inherits(ctor, superCtor) {
+    ctor.super_ = superCtor
+    ctor.prototype = Object.create(superCtor.prototype, {
+      constructor: {
+        value: ctor,
+        enumerable: false,
+        writable: true,
+        configurable: true
       }
-    }
-
-    return mappings;
+    });
   };
+} else {
+  // old school shim for old browsers
+  module.exports = function inherits(ctor, superCtor) {
+    ctor.super_ = superCtor
+    var TempCtor = function () {}
+    TempCtor.prototype = superCtor.prototype
+    ctor.prototype = new TempCtor()
+    ctor.prototype.constructor = ctor
+  }
+}
 
-exports.SourceMapConsumer = SourceMapConsumer;
-
-/**
- * A BasicSourceMapConsumer instance represents a parsed source map which we can
- * query for information about the original file positions by giving it a file
- * position in the generated source.
- *
- * The only parameter is the raw source map (either as a JSON string, or
- * already parsed to an object). According to the spec, source maps have the
- * following attributes:
- *
- *   - version: Which version of the source map spec this map is following.
- *   - sources: An array of URLs to the original source files.
- *   - names: An array of identifiers which can be referrenced by individual mappings.
- *   - sourceRoot: Optional. The URL root from which all sources are relative.
- *   - sourcesContent: Optional. An array of contents of the original source files.
- *   - mappings: A string of base64 VLQs which contain the actual mappings.
- *   - file: Optional. The generated file this source map is associated with.
- *
- * Here is an example source map, taken from the source map spec[0]:
- *
- *     {
- *       version : 3,
- *       file: "out.js",
- *       sourceRoot : "",
- *       sources: ["foo.js", "bar.js"],
- *       names: ["src", "maps", "are", "fun"],
- *       mappings: "AA,AB;;ABCDE;"
- *     }
+},{}],108:[function(require,module,exports){
+/*!
+ * Determine if an object is a Buffer
  *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
+ * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
+ * @license  MIT
  */
-function BasicSourceMapConsumer(aSourceMap) {
-  var sourceMap = aSourceMap;
-  if (typeof aSourceMap === 'string') {
-    sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
-  }
 
-  var version = util.getArg(sourceMap, 'version');
-  var sources = util.getArg(sourceMap, 'sources');
-  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
-  // requires the array) to play nice here.
-  var names = util.getArg(sourceMap, 'names', []);
-  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
-  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
-  var mappings = util.getArg(sourceMap, 'mappings');
-  var file = util.getArg(sourceMap, 'file', null);
+// The _isBuffer check is for Safari 5-7 support, because it's missing
+// Object.prototype.constructor. Remove this eventually
+module.exports = function (obj) {
+  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
+}
 
-  // Once again, Sass deviates from the spec and supplies the version as a
-  // string rather than a number, so we use loose equality checking here.
-  if (version != this._version) {
-    throw new Error('Unsupported version: ' + version);
-  }
+function isBuffer (obj) {
+  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
+}
 
-  sources = sources
-    .map(String)
-    // Some source maps produce relative source paths like "./foo.js" instead of
-    // "foo.js".  Normalize these first so that future comparisons will succeed.
-    // See bugzil.la/1090768.
-    .map(util.normalize)
-    // Always ensure that absolute sources are internally stored relative to
-    // the source root, if the source root is absolute. Not doing this would
-    // be particularly problematic when the source root is a prefix of the
-    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
-    .map(function (source) {
-      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
-        ? util.relative(sourceRoot, source)
-        : source;
-    });
+// For Node v0.10 support. Remove this eventually.
+function isSlowBuffer (obj) {
+  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
+}
+
+},{}],109:[function(require,module,exports){
+var toString = {}.toString;
 
-  // Pass `true` below to allow duplicate names and sources. While source maps
-  // are intended to be compressed and deduplicated, the TypeScript compiler
-  // sometimes generates source maps with duplicates in them. See Github issue
-  // #72 and bugzil.la/889492.
-  this._names = ArraySet.fromArray(names.map(String), true);
-  this._sources = ArraySet.fromArray(sources, true);
+module.exports = Array.isArray || function (arr) {
+  return toString.call(arr) == '[object Array]';
+};
 
-  this.sourceRoot = sourceRoot;
-  this.sourcesContent = sourcesContent;
-  this._mappings = mappings;
-  this.file = file;
+},{}],110:[function(require,module,exports){
+'use strict';
+var xmlChars = require('xml-char-classes');
+
+function getRange(re) {
+       return re.source.slice(1, -1);
 }
 
-BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
-BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
+// http://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-NCName
+module.exports = new RegExp('^[' + getRange(xmlChars.letter) + '_][' + getRange(xmlChars.letter) + getRange(xmlChars.digit) + '\\.\\-_' + getRange(xmlChars.combiningChar) + getRange(xmlChars.extender) + ']*$');
 
-/**
- * Create a BasicSourceMapConsumer from a SourceMapGenerator.
- *
- * @param SourceMapGenerator aSourceMap
- *        The source map that will be consumed.
- * @returns BasicSourceMapConsumer
- */
-BasicSourceMapConsumer.fromSourceMap =
-  function SourceMapConsumer_fromSourceMap(aSourceMap) {
-    var smc = Object.create(BasicSourceMapConsumer.prototype);
+},{"xml-char-classes":164}],111:[function(require,module,exports){
+exports.endianness = function () { return 'LE' };
 
-    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
-    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
-    smc.sourceRoot = aSourceMap._sourceRoot;
-    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
-                                                            smc.sourceRoot);
-    smc.file = aSourceMap._file;
+exports.hostname = function () {
+    if (typeof location !== 'undefined') {
+        return location.hostname
+    }
+    else return '';
+};
 
-    // Because we are modifying the entries (by converting string sources and
-    // names to indices into the sources and names ArraySets), we have to make
-    // a copy of the entry or else bad things happen. Shared mutable state
-    // strikes again! See github issue #191.
+exports.loadavg = function () { return [] };
 
-    var generatedMappings = aSourceMap._mappings.toArray().slice();
-    var destGeneratedMappings = smc.__generatedMappings = [];
-    var destOriginalMappings = smc.__originalMappings = [];
+exports.uptime = function () { return 0 };
 
-    for (var i = 0, length = generatedMappings.length; i < length; i++) {
-      var srcMapping = generatedMappings[i];
-      var destMapping = new Mapping;
-      destMapping.generatedLine = srcMapping.generatedLine;
-      destMapping.generatedColumn = srcMapping.generatedColumn;
+exports.freemem = function () {
+    return Number.MAX_VALUE;
+};
 
-      if (srcMapping.source) {
-        destMapping.source = sources.indexOf(srcMapping.source);
-        destMapping.originalLine = srcMapping.originalLine;
-        destMapping.originalColumn = srcMapping.originalColumn;
+exports.totalmem = function () {
+    return Number.MAX_VALUE;
+};
 
-        if (srcMapping.name) {
-          destMapping.name = names.indexOf(srcMapping.name);
-        }
+exports.cpus = function () { return [] };
 
-        destOriginalMappings.push(destMapping);
-      }
+exports.type = function () { return 'Browser' };
 
-      destGeneratedMappings.push(destMapping);
+exports.release = function () {
+    if (typeof navigator !== 'undefined') {
+        return navigator.appVersion;
     }
+    return '';
+};
 
-    quickSort(smc.__originalMappings, util.compareByOriginalPositions);
+exports.networkInterfaces
+= exports.getNetworkInterfaces
+= function () { return {} };
 
-    return smc;
-  };
+exports.arch = function () { return 'javascript' };
 
-/**
- * The version of the source mapping spec that we are consuming.
- */
-BasicSourceMapConsumer.prototype._version = 3;
+exports.platform = function () { return 'browser' };
 
-/**
- * The list of original sources.
- */
-Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
-  get: function () {
-    return this._sources.toArray().map(function (s) {
-      return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;
-    }, this);
+exports.tmpdir = exports.tmpDir = function () {
+    return '/tmp';
+};
+
+exports.EOL = '\n';
+
+},{}],112:[function(require,module,exports){
+(function (process){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+// resolves . and .. elements in a path array with directory names there
+// must be no slashes, empty elements, or device names (c:\) in the array
+// (so also no leading and trailing slashes - it does not distinguish
+// relative and absolute paths)
+function normalizeArray(parts, allowAboveRoot) {
+  // if the path tries to go above the root, `up` ends up > 0
+  var up = 0;
+  for (var i = parts.length - 1; i >= 0; i--) {
+    var last = parts[i];
+    if (last === '.') {
+      parts.splice(i, 1);
+    } else if (last === '..') {
+      parts.splice(i, 1);
+      up++;
+    } else if (up) {
+      parts.splice(i, 1);
+      up--;
+    }
   }
-});
 
-/**
- * Provide the JIT with a nice shape / hidden class.
- */
-function Mapping() {
-  this.generatedLine = 0;
-  this.generatedColumn = 0;
-  this.source = null;
-  this.originalLine = null;
-  this.originalColumn = null;
-  this.name = null;
+  // if the path is allowed to go above the root, restore leading ..s
+  if (allowAboveRoot) {
+    for (; up--; up) {
+      parts.unshift('..');
+    }
+  }
+
+  return parts;
 }
 
-/**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-BasicSourceMapConsumer.prototype._parseMappings =
-  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
-    var generatedLine = 1;
-    var previousGeneratedColumn = 0;
-    var previousOriginalLine = 0;
-    var previousOriginalColumn = 0;
-    var previousSource = 0;
-    var previousName = 0;
-    var length = aStr.length;
-    var index = 0;
-    var cachedSegments = {};
-    var temp = {};
-    var originalMappings = [];
-    var generatedMappings = [];
-    var mapping, str, segment, end, value;
+// Split a filename into [root, dir, basename, ext], unix version
+// 'root' is just a slash, or nothing.
+var splitPathRe =
+    /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
+var splitPath = function(filename) {
+  return splitPathRe.exec(filename).slice(1);
+};
 
-    while (index < length) {
-      if (aStr.charAt(index) === ';') {
-        generatedLine++;
-        index++;
-        previousGeneratedColumn = 0;
-      }
-      else if (aStr.charAt(index) === ',') {
-        index++;
-      }
-      else {
-        mapping = new Mapping();
-        mapping.generatedLine = generatedLine;
+// path.resolve([from ...], to)
+// posix version
+exports.resolve = function() {
+  var resolvedPath = '',
+      resolvedAbsolute = false;
 
-        // Because each offset is encoded relative to the previous one,
-        // many segments often have the same encoding. We can exploit this
-        // fact by caching the parsed variable length fields of each segment,
-        // allowing us to avoid a second parse if we encounter the same
-        // segment again.
-        for (end = index; end < length; end++) {
-          if (this._charIsMappingSeparator(aStr, end)) {
-            break;
-          }
-        }
-        str = aStr.slice(index, end);
+  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
+    var path = (i >= 0) ? arguments[i] : process.cwd();
 
-        segment = cachedSegments[str];
-        if (segment) {
-          index += str.length;
-        } else {
-          segment = [];
-          while (index < end) {
-            base64VLQ.decode(aStr, index, temp);
-            value = temp.value;
-            index = temp.rest;
-            segment.push(value);
-          }
+    // Skip empty and invalid entries
+    if (typeof path !== 'string') {
+      throw new TypeError('Arguments to path.resolve must be strings');
+    } else if (!path) {
+      continue;
+    }
 
-          if (segment.length === 2) {
-            throw new Error('Found a source, but no line and column');
-          }
+    resolvedPath = path + '/' + resolvedPath;
+    resolvedAbsolute = path.charAt(0) === '/';
+  }
 
-          if (segment.length === 3) {
-            throw new Error('Found a source and line, but no column');
-          }
+  // At this point the path should be resolved to a full absolute path, but
+  // handle relative paths to be safe (might happen when process.cwd() fails)
+
+  // Normalize the path
+  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
+    return !!p;
+  }), !resolvedAbsolute).join('/');
 
-          cachedSegments[str] = segment;
-        }
+  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
+};
 
-        // Generated column.
-        mapping.generatedColumn = previousGeneratedColumn + segment[0];
-        previousGeneratedColumn = mapping.generatedColumn;
+// path.normalize(path)
+// posix version
+exports.normalize = function(path) {
+  var isAbsolute = exports.isAbsolute(path),
+      trailingSlash = substr(path, -1) === '/';
 
-        if (segment.length > 1) {
-          // Original source.
-          mapping.source = previousSource + segment[1];
-          previousSource += segment[1];
+  // Normalize the path
+  path = normalizeArray(filter(path.split('/'), function(p) {
+    return !!p;
+  }), !isAbsolute).join('/');
 
-          // Original line.
-          mapping.originalLine = previousOriginalLine + segment[2];
-          previousOriginalLine = mapping.originalLine;
-          // Lines are stored 0-based
-          mapping.originalLine += 1;
+  if (!path && !isAbsolute) {
+    path = '.';
+  }
+  if (path && trailingSlash) {
+    path += '/';
+  }
 
-          // Original column.
-          mapping.originalColumn = previousOriginalColumn + segment[3];
-          previousOriginalColumn = mapping.originalColumn;
+  return (isAbsolute ? '/' : '') + path;
+};
 
-          if (segment.length > 4) {
-            // Original name.
-            mapping.name = previousName + segment[4];
-            previousName += segment[4];
-          }
-        }
+// posix version
+exports.isAbsolute = function(path) {
+  return path.charAt(0) === '/';
+};
 
-        generatedMappings.push(mapping);
-        if (typeof mapping.originalLine === 'number') {
-          originalMappings.push(mapping);
-        }
-      }
+// posix version
+exports.join = function() {
+  var paths = Array.prototype.slice.call(arguments, 0);
+  return exports.normalize(filter(paths, function(p, index) {
+    if (typeof p !== 'string') {
+      throw new TypeError('Arguments to path.join must be strings');
     }
+    return p;
+  }).join('/'));
+};
 
-    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
-    this.__generatedMappings = generatedMappings;
-
-    quickSort(originalMappings, util.compareByOriginalPositions);
-    this.__originalMappings = originalMappings;
-  };
 
-/**
- * Find the mapping that best matches the hypothetical "needle" mapping that
- * we are searching for in the given "haystack" of mappings.
- */
-BasicSourceMapConsumer.prototype._findMapping =
-  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
-                                         aColumnName, aComparator, aBias) {
-    // To return the position we are searching for, we must first find the
-    // mapping for the given position and then return the opposite position it
-    // points to. Because the mappings are sorted, we can use binary search to
-    // find the best mapping.
+// path.relative(from, to)
+// posix version
+exports.relative = function(from, to) {
+  from = exports.resolve(from).substr(1);
+  to = exports.resolve(to).substr(1);
 
-    if (aNeedle[aLineName] <= 0) {
-      throw new TypeError('Line must be greater than or equal to 1, got '
-                          + aNeedle[aLineName]);
-    }
-    if (aNeedle[aColumnName] < 0) {
-      throw new TypeError('Column must be greater than or equal to 0, got '
-                          + aNeedle[aColumnName]);
+  function trim(arr) {
+    var start = 0;
+    for (; start < arr.length; start++) {
+      if (arr[start] !== '') break;
     }
 
-    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
-  };
-
-/**
- * Compute the last column for each generated mapping. The last column is
- * inclusive.
- */
-BasicSourceMapConsumer.prototype.computeColumnSpans =
-  function SourceMapConsumer_computeColumnSpans() {
-    for (var index = 0; index < this._generatedMappings.length; ++index) {
-      var mapping = this._generatedMappings[index];
+    var end = arr.length - 1;
+    for (; end >= 0; end--) {
+      if (arr[end] !== '') break;
+    }
 
-      // Mappings do not contain a field for the last generated columnt. We
-      // can come up with an optimistic estimate, however, by assuming that
-      // mappings are contiguous (i.e. given two consecutive mappings, the
-      // first mapping ends where the second one starts).
-      if (index + 1 < this._generatedMappings.length) {
-        var nextMapping = this._generatedMappings[index + 1];
+    if (start > end) return [];
+    return arr.slice(start, end - start + 1);
+  }
 
-        if (mapping.generatedLine === nextMapping.generatedLine) {
-          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
-          continue;
-        }
-      }
+  var fromParts = trim(from.split('/'));
+  var toParts = trim(to.split('/'));
 
-      // The last mapping for each line spans the entire line.
-      mapping.lastGeneratedColumn = Infinity;
+  var length = Math.min(fromParts.length, toParts.length);
+  var samePartsLength = length;
+  for (var i = 0; i < length; i++) {
+    if (fromParts[i] !== toParts[i]) {
+      samePartsLength = i;
+      break;
     }
-  };
+  }
 
-/**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- *   - line: The line number in the generated source.
- *   - column: The column number in the generated source.
- *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- *     closest element that is smaller than or greater than the one we are
- *     searching for, respectively, if the exact element cannot be found.
- *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- *   - source: The original source file, or null.
- *   - line: The line number in the original source, or null.
- *   - column: The column number in the original source, or null.
- *   - name: The original identifier, or null.
- */
-BasicSourceMapConsumer.prototype.originalPositionFor =
-  function SourceMapConsumer_originalPositionFor(aArgs) {
-    var needle = {
-      generatedLine: util.getArg(aArgs, 'line'),
-      generatedColumn: util.getArg(aArgs, 'column')
-    };
+  var outputParts = [];
+  for (var i = samePartsLength; i < fromParts.length; i++) {
+    outputParts.push('..');
+  }
 
-    var index = this._findMapping(
-      needle,
-      this._generatedMappings,
-      "generatedLine",
-      "generatedColumn",
-      util.compareByGeneratedPositionsDeflated,
-      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
-    );
+  outputParts = outputParts.concat(toParts.slice(samePartsLength));
 
-    if (index >= 0) {
-      var mapping = this._generatedMappings[index];
+  return outputParts.join('/');
+};
 
-      if (mapping.generatedLine === needle.generatedLine) {
-        var source = util.getArg(mapping, 'source', null);
-        if (source !== null) {
-          source = this._sources.at(source);
-          if (this.sourceRoot != null) {
-            source = util.join(this.sourceRoot, source);
-          }
-        }
-        var name = util.getArg(mapping, 'name', null);
-        if (name !== null) {
-          name = this._names.at(name);
-        }
-        return {
-          source: source,
-          line: util.getArg(mapping, 'originalLine', null),
-          column: util.getArg(mapping, 'originalColumn', null),
-          name: name
-        };
-      }
-    }
+exports.sep = '/';
+exports.delimiter = ':';
 
-    return {
-      source: null,
-      line: null,
-      column: null,
-      name: null
-    };
-  };
+exports.dirname = function(path) {
+  var result = splitPath(path),
+      root = result[0],
+      dir = result[1];
 
-/**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
-BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
-  function BasicSourceMapConsumer_hasContentsOfAllSources() {
-    if (!this.sourcesContent) {
-      return false;
-    }
-    return this.sourcesContent.length >= this._sources.size() &&
-      !this.sourcesContent.some(function (sc) { return sc == null; });
-  };
+  if (!root && !dir) {
+    // No dirname whatsoever
+    return '.';
+  }
 
-/**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
-BasicSourceMapConsumer.prototype.sourceContentFor =
-  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
-    if (!this.sourcesContent) {
-      return null;
-    }
+  if (dir) {
+    // It has a dirname, strip trailing slash
+    dir = dir.substr(0, dir.length - 1);
+  }
 
-    if (this.sourceRoot != null) {
-      aSource = util.relative(this.sourceRoot, aSource);
-    }
+  return root + dir;
+};
 
-    if (this._sources.has(aSource)) {
-      return this.sourcesContent[this._sources.indexOf(aSource)];
-    }
 
-    var url;
-    if (this.sourceRoot != null
-        && (url = util.urlParse(this.sourceRoot))) {
-      // XXX: file:// URIs and absolute paths lead to unexpected behavior for
-      // many users. We can help them out when they expect file:// URIs to
-      // behave like it would if they were running a local HTTP server. See
-      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
-      var fileUriAbsPath = aSource.replace(/^file:\/\//, "");
-      if (url.scheme == "file"
-          && this._sources.has(fileUriAbsPath)) {
-        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
-      }
+exports.basename = function(path, ext) {
+  var f = splitPath(path)[2];
+  // TODO: make this comparison case-insensitive on windows?
+  if (ext && f.substr(-1 * ext.length) === ext) {
+    f = f.substr(0, f.length - ext.length);
+  }
+  return f;
+};
+
 
-      if ((!url.path || url.path == "/")
-          && this._sources.has("/" + aSource)) {
-        return this.sourcesContent[this._sources.indexOf("/" + aSource)];
-      }
-    }
+exports.extname = function(path) {
+  return splitPath(path)[3];
+};
 
-    // This function is used recursively from
-    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
-    // don't want to throw if we can't find the source - we just want to
-    // return null, so we provide a flag to exit gracefully.
-    if (nullOnMissing) {
-      return null;
-    }
-    else {
-      throw new Error('"' + aSource + '" is not in the SourceMap.');
+function filter (xs, f) {
+    if (xs.filter) return xs.filter(f);
+    var res = [];
+    for (var i = 0; i < xs.length; i++) {
+        if (f(xs[i], i, xs)) res.push(xs[i]);
     }
-  };
+    return res;
+}
 
-/**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- *   - source: The filename of the original source.
- *   - line: The line number in the original source.
- *   - column: The column number in the original source.
- *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- *     closest element that is smaller than or greater than the one we are
- *     searching for, respectively, if the exact element cannot be found.
- *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- *   - line: The line number in the generated source, or null.
- *   - column: The column number in the generated source, or null.
- */
-BasicSourceMapConsumer.prototype.generatedPositionFor =
-  function SourceMapConsumer_generatedPositionFor(aArgs) {
-    var source = util.getArg(aArgs, 'source');
-    if (this.sourceRoot != null) {
-      source = util.relative(this.sourceRoot, source);
-    }
-    if (!this._sources.has(source)) {
-      return {
-        line: null,
-        column: null,
-        lastColumn: null
-      };
+// String.prototype.substr - negative index don't work in IE8
+var substr = 'ab'.substr(-1) === 'b'
+    ? function (str, start, len) { return str.substr(start, len) }
+    : function (str, start, len) {
+        if (start < 0) start = str.length + start;
+        return str.substr(start, len);
     }
-    source = this._sources.indexOf(source);
-
-    var needle = {
-      source: source,
-      originalLine: util.getArg(aArgs, 'line'),
-      originalColumn: util.getArg(aArgs, 'column')
-    };
+;
 
-    var index = this._findMapping(
-      needle,
-      this._originalMappings,
-      "originalLine",
-      "originalColumn",
-      util.compareByOriginalPositions,
-      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
-    );
+}).call(this,require('_process'))
+},{"_process":114}],113:[function(require,module,exports){
+(function (process){
+'use strict';
 
-    if (index >= 0) {
-      var mapping = this._originalMappings[index];
+if (!process.version ||
+    process.version.indexOf('v0.') === 0 ||
+    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
+  module.exports = nextTick;
+} else {
+  module.exports = process.nextTick;
+}
 
-      if (mapping.source === needle.source) {
-        return {
-          line: util.getArg(mapping, 'generatedLine', null),
-          column: util.getArg(mapping, 'generatedColumn', null),
-          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
-        };
-      }
+function nextTick(fn, arg1, arg2, arg3) {
+  if (typeof fn !== 'function') {
+    throw new TypeError('"callback" argument must be a function');
+  }
+  var len = arguments.length;
+  var args, i;
+  switch (len) {
+  case 0:
+  case 1:
+    return process.nextTick(fn);
+  case 2:
+    return process.nextTick(function afterTickOne() {
+      fn.call(null, arg1);
+    });
+  case 3:
+    return process.nextTick(function afterTickTwo() {
+      fn.call(null, arg1, arg2);
+    });
+  case 4:
+    return process.nextTick(function afterTickThree() {
+      fn.call(null, arg1, arg2, arg3);
+    });
+  default:
+    args = new Array(len - 1);
+    i = 0;
+    while (i < args.length) {
+      args[i++] = arguments[i];
     }
+    return process.nextTick(function afterTick() {
+      fn.apply(null, args);
+    });
+  }
+}
 
-    return {
-      line: null,
-      column: null,
-      lastColumn: null
-    };
-  };
+}).call(this,require('_process'))
+},{"_process":114}],114:[function(require,module,exports){
+// shim for using process in browser
+var process = module.exports = {};
 
-exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
+// cached from whatever global is present so that test runners that stub it
+// don't break things.  But we need to wrap it in a try catch in case it is
+// wrapped in strict mode code which doesn't define any globals.  It's inside a
+// function because try/catches deoptimize in certain engines.
 
-/**
- * An IndexedSourceMapConsumer instance represents a parsed source map which
- * we can query for information. It differs from BasicSourceMapConsumer in
- * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
- * input.
- *
- * The only parameter is a raw source map (either as a JSON string, or already
- * parsed to an object). According to the spec for indexed source maps, they
- * have the following attributes:
- *
- *   - version: Which version of the source map spec this map is following.
- *   - file: Optional. The generated file this source map is associated with.
- *   - sections: A list of section definitions.
- *
- * Each value under the "sections" field has two fields:
- *   - offset: The offset into the original specified at which this section
- *       begins to apply, defined as an object with a "line" and "column"
- *       field.
- *   - map: A source map definition. This source map could also be indexed,
- *       but doesn't have to be.
- *
- * Instead of the "map" field, it's also possible to have a "url" field
- * specifying a URL to retrieve a source map from, but that's currently
- * unsupported.
- *
- * Here's an example source map, taken from the source map spec[0], but
- * modified to omit a section which uses the "url" field.
- *
- *  {
- *    version : 3,
- *    file: "app.js",
- *    sections: [{
- *      offset: {line:100, column:10},
- *      map: {
- *        version : 3,
- *        file: "section.js",
- *        sources: ["foo.js", "bar.js"],
- *        names: ["src", "maps", "are", "fun"],
- *        mappings: "AAAA,E;;ABCDE;"
- *      }
- *    }],
- *  }
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
- */
-function IndexedSourceMapConsumer(aSourceMap) {
-  var sourceMap = aSourceMap;
-  if (typeof aSourceMap === 'string') {
-    sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
-  }
+var cachedSetTimeout;
+var cachedClearTimeout;
+
+function defaultSetTimout() {
+    throw new Error('setTimeout has not been defined');
+}
+function defaultClearTimeout () {
+    throw new Error('clearTimeout has not been defined');
+}
+(function () {
+    try {
+        if (typeof setTimeout === 'function') {
+            cachedSetTimeout = setTimeout;
+        } else {
+            cachedSetTimeout = defaultSetTimout;
+        }
+    } catch (e) {
+        cachedSetTimeout = defaultSetTimout;
+    }
+    try {
+        if (typeof clearTimeout === 'function') {
+            cachedClearTimeout = clearTimeout;
+        } else {
+            cachedClearTimeout = defaultClearTimeout;
+        }
+    } catch (e) {
+        cachedClearTimeout = defaultClearTimeout;
+    }
+} ())
+function runTimeout(fun) {
+    if (cachedSetTimeout === setTimeout) {
+        //normal enviroments in sane situations
+        return setTimeout(fun, 0);
+    }
+    // if setTimeout wasn't available but was latter defined
+    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
+        cachedSetTimeout = setTimeout;
+        return setTimeout(fun, 0);
+    }
+    try {
+        // when when somebody has screwed with setTimeout but no I.E. maddness
+        return cachedSetTimeout(fun, 0);
+    } catch(e){
+        try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
+            return cachedSetTimeout.call(null, fun, 0);
+        } catch(e){
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
+            return cachedSetTimeout.call(this, fun, 0);
+        }
+    }
 
-  var version = util.getArg(sourceMap, 'version');
-  var sections = util.getArg(sourceMap, 'sections');
 
-  if (version != this._version) {
-    throw new Error('Unsupported version: ' + version);
-  }
+}
+function runClearTimeout(marker) {
+    if (cachedClearTimeout === clearTimeout) {
+        //normal enviroments in sane situations
+        return clearTimeout(marker);
+    }
+    // if clearTimeout wasn't available but was latter defined
+    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
+        cachedClearTimeout = clearTimeout;
+        return clearTimeout(marker);
+    }
+    try {
+        // when when somebody has screwed with setTimeout but no I.E. maddness
+        return cachedClearTimeout(marker);
+    } catch (e){
+        try {
+            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
+            return cachedClearTimeout.call(null, marker);
+        } catch (e){
+            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
+            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
+            return cachedClearTimeout.call(this, marker);
+        }
+    }
 
-  this._sources = new ArraySet();
-  this._names = new ArraySet();
 
-  var lastOffset = {
-    line: -1,
-    column: 0
-  };
-  this._sections = sections.map(function (s) {
-    if (s.url) {
-      // The url field will require support for asynchronicity.
-      // See https://github.com/mozilla/source-map/issues/16
-      throw new Error('Support for url field in sections not implemented.');
+
+}
+var queue = [];
+var draining = false;
+var currentQueue;
+var queueIndex = -1;
+
+function cleanUpNextTick() {
+    if (!draining || !currentQueue) {
+        return;
     }
-    var offset = util.getArg(s, 'offset');
-    var offsetLine = util.getArg(offset, 'line');
-    var offsetColumn = util.getArg(offset, 'column');
+    draining = false;
+    if (currentQueue.length) {
+        queue = currentQueue.concat(queue);
+    } else {
+        queueIndex = -1;
+    }
+    if (queue.length) {
+        drainQueue();
+    }
+}
 
-    if (offsetLine < lastOffset.line ||
-        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
-      throw new Error('Section offsets must be ordered and non-overlapping.');
+function drainQueue() {
+    if (draining) {
+        return;
     }
-    lastOffset = offset;
+    var timeout = runTimeout(cleanUpNextTick);
+    draining = true;
 
-    return {
-      generatedOffset: {
-        // The offset fields are 0-based, but we use 1-based indices when
-        // encoding/decoding from VLQ.
-        generatedLine: offsetLine + 1,
-        generatedColumn: offsetColumn + 1
-      },
-      consumer: new SourceMapConsumer(util.getArg(s, 'map'))
+    var len = queue.length;
+    while(len) {
+        currentQueue = queue;
+        queue = [];
+        while (++queueIndex < len) {
+            if (currentQueue) {
+                currentQueue[queueIndex].run();
+            }
+        }
+        queueIndex = -1;
+        len = queue.length;
     }
-  });
+    currentQueue = null;
+    draining = false;
+    runClearTimeout(timeout);
 }
 
-IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
-IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
+process.nextTick = function (fun) {
+    var args = new Array(arguments.length - 1);
+    if (arguments.length > 1) {
+        for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i];
+        }
+    }
+    queue.push(new Item(fun, args));
+    if (queue.length === 1 && !draining) {
+        runTimeout(drainQueue);
+    }
+};
 
-/**
- * The version of the source mapping spec that we are consuming.
- */
-IndexedSourceMapConsumer.prototype._version = 3;
+// v8 likes predictible objects
+function Item(fun, array) {
+    this.fun = fun;
+    this.array = array;
+}
+Item.prototype.run = function () {
+    this.fun.apply(null, this.array);
+};
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+process.version = ''; // empty string to avoid regexp issues
+process.versions = {};
 
-/**
- * The list of original sources.
- */
-Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
-  get: function () {
-    var sources = [];
-    for (var i = 0; i < this._sections.length; i++) {
-      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
-        sources.push(this._sections[i].consumer.sources[j]);
-      }
-    }
-    return sources;
-  }
-});
+function noop() {}
 
-/**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- *   - line: The line number in the generated source.
- *   - column: The column number in the generated source.
- *
- * and an object is returned with the following properties:
- *
- *   - source: The original source file, or null.
- *   - line: The line number in the original source, or null.
- *   - column: The column number in the original source, or null.
- *   - name: The original identifier, or null.
- */
-IndexedSourceMapConsumer.prototype.originalPositionFor =
-  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
-    var needle = {
-      generatedLine: util.getArg(aArgs, 'line'),
-      generatedColumn: util.getArg(aArgs, 'column')
-    };
+process.on = noop;
+process.addListener = noop;
+process.once = noop;
+process.off = noop;
+process.removeListener = noop;
+process.removeAllListeners = noop;
+process.emit = noop;
+process.prependListener = noop;
+process.prependOnceListener = noop;
 
-    // Find the section containing the generated position we're trying to map
-    // to an original position.
-    var sectionIndex = binarySearch.search(needle, this._sections,
-      function(needle, section) {
-        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
-        if (cmp) {
-          return cmp;
-        }
+process.listeners = function (name) { return [] }
 
-        return (needle.generatedColumn -
-                section.generatedOffset.generatedColumn);
-      });
-    var section = this._sections[sectionIndex];
+process.binding = function (name) {
+    throw new Error('process.binding is not supported');
+};
 
-    if (!section) {
-      return {
-        source: null,
-        line: null,
-        column: null,
-        name: null
-      };
-    }
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+    throw new Error('process.chdir is not supported');
+};
+process.umask = function() { return 0; };
 
-    return section.consumer.originalPositionFor({
-      line: needle.generatedLine -
-        (section.generatedOffset.generatedLine - 1),
-      column: needle.generatedColumn -
-        (section.generatedOffset.generatedLine === needle.generatedLine
-         ? section.generatedOffset.generatedColumn - 1
-         : 0),
-      bias: aArgs.bias
-    });
-  };
+},{}],115:[function(require,module,exports){
+(function (global){
+/*! https://mths.be/punycode v1.4.1 by @mathias */
+;(function(root) {
+
+       /** Detect free variables */
+       var freeExports = typeof exports == 'object' && exports &&
+               !exports.nodeType && exports;
+       var freeModule = typeof module == 'object' && module &&
+               !module.nodeType && module;
+       var freeGlobal = typeof global == 'object' && global;
+       if (
+               freeGlobal.global === freeGlobal ||
+               freeGlobal.window === freeGlobal ||
+               freeGlobal.self === freeGlobal
+       ) {
+               root = freeGlobal;
+       }
+
+       /**
+        * The `punycode` object.
+        * @name punycode
+        * @type Object
+        */
+       var punycode,
+
+       /** Highest positive signed 32-bit float value */
+       maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
+
+       /** Bootstring parameters */
+       base = 36,
+       tMin = 1,
+       tMax = 26,
+       skew = 38,
+       damp = 700,
+       initialBias = 72,
+       initialN = 128, // 0x80
+       delimiter = '-', // '\x2D'
+
+       /** Regular expressions */
+       regexPunycode = /^xn--/,
+       regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars
+       regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators
 
-/**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
-IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
-  function IndexedSourceMapConsumer_hasContentsOfAllSources() {
-    return this._sections.every(function (s) {
-      return s.consumer.hasContentsOfAllSources();
-    });
-  };
+       /** Error messages */
+       errors = {
+               'overflow': 'Overflow: input needs wider integers to process',
+               'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
+               'invalid-input': 'Invalid input'
+       },
 
-/**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
-IndexedSourceMapConsumer.prototype.sourceContentFor =
-  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
-    for (var i = 0; i < this._sections.length; i++) {
-      var section = this._sections[i];
+       /** Convenience shortcuts */
+       baseMinusTMin = base - tMin,
+       floor = Math.floor,
+       stringFromCharCode = String.fromCharCode,
 
-      var content = section.consumer.sourceContentFor(aSource, true);
-      if (content) {
-        return content;
-      }
-    }
-    if (nullOnMissing) {
-      return null;
-    }
-    else {
-      throw new Error('"' + aSource + '" is not in the SourceMap.');
-    }
-  };
+       /** Temporary variable */
+       key;
 
-/**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- *   - source: The filename of the original source.
- *   - line: The line number in the original source.
- *   - column: The column number in the original source.
- *
- * and an object is returned with the following properties:
- *
- *   - line: The line number in the generated source, or null.
- *   - column: The column number in the generated source, or null.
- */
-IndexedSourceMapConsumer.prototype.generatedPositionFor =
-  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
-    for (var i = 0; i < this._sections.length; i++) {
-      var section = this._sections[i];
+       /*--------------------------------------------------------------------------*/
 
-      // Only consider this section if the requested source is in the list of
-      // sources of the consumer.
-      if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {
-        continue;
-      }
-      var generatedPosition = section.consumer.generatedPositionFor(aArgs);
-      if (generatedPosition) {
-        var ret = {
-          line: generatedPosition.line +
-            (section.generatedOffset.generatedLine - 1),
-          column: generatedPosition.column +
-            (section.generatedOffset.generatedLine === generatedPosition.line
-             ? section.generatedOffset.generatedColumn - 1
-             : 0)
-        };
-        return ret;
-      }
-    }
+       /**
+        * A generic error utility function.
+        * @private
+        * @param {String} type The error type.
+        * @returns {Error} Throws a `RangeError` with the applicable error message.
+        */
+       function error(type) {
+               throw new RangeError(errors[type]);
+       }
 
-    return {
-      line: null,
-      column: null
-    };
-  };
+       /**
+        * A generic `Array#map` utility function.
+        * @private
+        * @param {Array} array The array to iterate over.
+        * @param {Function} callback The function that gets called for every array
+        * item.
+        * @returns {Array} A new array of values returned by the callback function.
+        */
+       function map(array, fn) {
+               var length = array.length;
+               var result = [];
+               while (length--) {
+                       result[length] = fn(array[length]);
+               }
+               return result;
+       }
 
-/**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-IndexedSourceMapConsumer.prototype._parseMappings =
-  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
-    this.__generatedMappings = [];
-    this.__originalMappings = [];
-    for (var i = 0; i < this._sections.length; i++) {
-      var section = this._sections[i];
-      var sectionMappings = section.consumer._generatedMappings;
-      for (var j = 0; j < sectionMappings.length; j++) {
-        var mapping = sectionMappings[j];
+       /**
+        * A simple `Array#map`-like wrapper to work with domain name strings or email
+        * addresses.
+        * @private
+        * @param {String} domain The domain name or email address.
+        * @param {Function} callback The function that gets called for every
+        * character.
+        * @returns {Array} A new string of characters returned by the callback
+        * function.
+        */
+       function mapDomain(string, fn) {
+               var parts = string.split('@');
+               var result = '';
+               if (parts.length > 1) {
+                       // In email addresses, only the domain name should be punycoded. Leave
+                       // the local part (i.e. everything up to `@`) intact.
+                       result = parts[0] + '@';
+                       string = parts[1];
+               }
+               // Avoid `split(regex)` for IE8 compatibility. See #17.
+               string = string.replace(regexSeparators, '\x2E');
+               var labels = string.split('.');
+               var encoded = map(labels, fn).join('.');
+               return result + encoded;
+       }
 
-        var source = section.consumer._sources.at(mapping.source);
-        if (section.consumer.sourceRoot !== null) {
-          source = util.join(section.consumer.sourceRoot, source);
-        }
-        this._sources.add(source);
-        source = this._sources.indexOf(source);
+       /**
+        * Creates an array containing the numeric code points of each Unicode
+        * character in the string. While JavaScript uses UCS-2 internally,
+        * this function will convert a pair of surrogate halves (each of which
+        * UCS-2 exposes as separate characters) into a single code point,
+        * matching UTF-16.
+        * @see `punycode.ucs2.encode`
+        * @see <https://mathiasbynens.be/notes/javascript-encoding>
+        * @memberOf punycode.ucs2
+        * @name decode
+        * @param {String} string The Unicode input string (UCS-2).
+        * @returns {Array} The new array of code points.
+        */
+       function ucs2decode(string) {
+               var output = [],
+                   counter = 0,
+                   length = string.length,
+                   value,
+                   extra;
+               while (counter < length) {
+                       value = string.charCodeAt(counter++);
+                       if (value >= 0xD800 && value <= 0xDBFF && counter < length) {
+                               // high surrogate, and there is a next character
+                               extra = string.charCodeAt(counter++);
+                               if ((extra & 0xFC00) == 0xDC00) { // low surrogate
+                                       output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);
+                               } else {
+                                       // unmatched surrogate; only append this code unit, in case the next
+                                       // code unit is the high surrogate of a surrogate pair
+                                       output.push(value);
+                                       counter--;
+                               }
+                       } else {
+                               output.push(value);
+                       }
+               }
+               return output;
+       }
 
-        var name = section.consumer._names.at(mapping.name);
-        this._names.add(name);
-        name = this._names.indexOf(name);
+       /**
+        * Creates a string based on an array of numeric code points.
+        * @see `punycode.ucs2.decode`
+        * @memberOf punycode.ucs2
+        * @name encode
+        * @param {Array} codePoints The array of numeric code points.
+        * @returns {String} The new Unicode string (UCS-2).
+        */
+       function ucs2encode(array) {
+               return map(array, function(value) {
+                       var output = '';
+                       if (value > 0xFFFF) {
+                               value -= 0x10000;
+                               output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);
+                               value = 0xDC00 | value & 0x3FF;
+                       }
+                       output += stringFromCharCode(value);
+                       return output;
+               }).join('');
+       }
+
+       /**
+        * Converts a basic code point into a digit/integer.
+        * @see `digitToBasic()`
+        * @private
+        * @param {Number} codePoint The basic numeric code point value.
+        * @returns {Number} The numeric value of a basic code point (for use in
+        * representing integers) in the range `0` to `base - 1`, or `base` if
+        * the code point does not represent a value.
+        */
+       function basicToDigit(codePoint) {
+               if (codePoint - 48 < 10) {
+                       return codePoint - 22;
+               }
+               if (codePoint - 65 < 26) {
+                       return codePoint - 65;
+               }
+               if (codePoint - 97 < 26) {
+                       return codePoint - 97;
+               }
+               return base;
+       }
+
+       /**
+        * Converts a digit/integer into a basic code point.
+        * @see `basicToDigit()`
+        * @private
+        * @param {Number} digit The numeric value of a basic code point.
+        * @returns {Number} The basic code point whose value (when used for
+        * representing integers) is `digit`, which needs to be in the range
+        * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
+        * used; else, the lowercase form is used. The behavior is undefined
+        * if `flag` is non-zero and `digit` has no uppercase form.
+        */
+       function digitToBasic(digit, flag) {
+               //  0..25 map to ASCII a..z or A..Z
+               // 26..35 map to ASCII 0..9
+               return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
+       }
 
-        // The mappings coming from the consumer for the section have
-        // generated positions relative to the start of the section, so we
-        // need to offset them to be relative to the start of the concatenated
-        // generated file.
-        var adjustedMapping = {
-          source: source,
-          generatedLine: mapping.generatedLine +
-            (section.generatedOffset.generatedLine - 1),
-          generatedColumn: mapping.generatedColumn +
-            (section.generatedOffset.generatedLine === mapping.generatedLine
-            ? section.generatedOffset.generatedColumn - 1
-            : 0),
-          originalLine: mapping.originalLine,
-          originalColumn: mapping.originalColumn,
-          name: name
-        };
+       /**
+        * Bias adaptation function as per section 3.4 of RFC 3492.
+        * https://tools.ietf.org/html/rfc3492#section-3.4
+        * @private
+        */
+       function adapt(delta, numPoints, firstTime) {
+               var k = 0;
+               delta = firstTime ? floor(delta / damp) : delta >> 1;
+               delta += floor(delta / numPoints);
+               for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {
+                       delta = floor(delta / baseMinusTMin);
+               }
+               return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
+       }
 
-        this.__generatedMappings.push(adjustedMapping);
-        if (typeof adjustedMapping.originalLine === 'number') {
-          this.__originalMappings.push(adjustedMapping);
-        }
-      }
-    }
+       /**
+        * Converts a Punycode string of ASCII-only symbols to a string of Unicode
+        * symbols.
+        * @memberOf punycode
+        * @param {String} input The Punycode string of ASCII-only symbols.
+        * @returns {String} The resulting string of Unicode symbols.
+        */
+       function decode(input) {
+               // Don't use UCS-2
+               var output = [],
+                   inputLength = input.length,
+                   out,
+                   i = 0,
+                   n = initialN,
+                   bias = initialBias,
+                   basic,
+                   j,
+                   index,
+                   oldi,
+                   w,
+                   k,
+                   digit,
+                   t,
+                   /** Cached calculation results */
+                   baseMinusT;
 
-    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
-    quickSort(this.__originalMappings, util.compareByOriginalPositions);
-  };
+               // Handle the basic code points: let `basic` be the number of input code
+               // points before the last delimiter, or `0` if there is none, then copy
+               // the first basic code points to the output.
 
-exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
+               basic = input.lastIndexOf(delimiter);
+               if (basic < 0) {
+                       basic = 0;
+               }
 
-},{"./array-set":142,"./base64-vlq":143,"./binary-search":145,"./quick-sort":147,"./util":151}],149:[function(require,module,exports){
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
+               for (j = 0; j < basic; ++j) {
+                       // if it's not a basic code point
+                       if (input.charCodeAt(j) >= 0x80) {
+                               error('not-basic');
+                       }
+                       output.push(input.charCodeAt(j));
+               }
 
-var base64VLQ = require('./base64-vlq');
-var util = require('./util');
-var ArraySet = require('./array-set').ArraySet;
-var MappingList = require('./mapping-list').MappingList;
+               // Main decoding loop: start just after the last delimiter if any basic code
+               // points were copied; start at the beginning otherwise.
 
-/**
- * An instance of the SourceMapGenerator represents a source map which is
- * being built incrementally. You may pass an object with the following
- * properties:
- *
- *   - file: The filename of the generated source.
- *   - sourceRoot: A root for all relative URLs in this source map.
- */
-function SourceMapGenerator(aArgs) {
-  if (!aArgs) {
-    aArgs = {};
-  }
-  this._file = util.getArg(aArgs, 'file', null);
-  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
-  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
-  this._sources = new ArraySet();
-  this._names = new ArraySet();
-  this._mappings = new MappingList();
-  this._sourcesContents = null;
-}
+               for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {
 
-SourceMapGenerator.prototype._version = 3;
+                       // `index` is the index of the next character to be consumed.
+                       // Decode a generalized variable-length integer into `delta`,
+                       // which gets added to `i`. The overflow checking is easier
+                       // if we increase `i` as we go, then subtract off its starting
+                       // value at the end to obtain `delta`.
+                       for (oldi = i, w = 1, k = base; /* no condition */; k += base) {
 
-/**
- * Creates a new SourceMapGenerator based on a SourceMapConsumer
- *
- * @param aSourceMapConsumer The SourceMap.
- */
-SourceMapGenerator.fromSourceMap =
-  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
-    var sourceRoot = aSourceMapConsumer.sourceRoot;
-    var generator = new SourceMapGenerator({
-      file: aSourceMapConsumer.file,
-      sourceRoot: sourceRoot
-    });
-    aSourceMapConsumer.eachMapping(function (mapping) {
-      var newMapping = {
-        generated: {
-          line: mapping.generatedLine,
-          column: mapping.generatedColumn
-        }
-      };
+                               if (index >= inputLength) {
+                                       error('invalid-input');
+                               }
 
-      if (mapping.source != null) {
-        newMapping.source = mapping.source;
-        if (sourceRoot != null) {
-          newMapping.source = util.relative(sourceRoot, newMapping.source);
-        }
+                               digit = basicToDigit(input.charCodeAt(index++));
 
-        newMapping.original = {
-          line: mapping.originalLine,
-          column: mapping.originalColumn
-        };
+                               if (digit >= base || digit > floor((maxInt - i) / w)) {
+                                       error('overflow');
+                               }
 
-        if (mapping.name != null) {
-          newMapping.name = mapping.name;
-        }
-      }
+                               i += digit * w;
+                               t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
 
-      generator.addMapping(newMapping);
-    });
-    aSourceMapConsumer.sources.forEach(function (sourceFile) {
-      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
-      if (content != null) {
-        generator.setSourceContent(sourceFile, content);
-      }
-    });
-    return generator;
-  };
+                               if (digit < t) {
+                                       break;
+                               }
 
-/**
- * Add a single mapping from original source line and column to the generated
- * source's line and column for this source map being created. The mapping
- * object should have the following properties:
- *
- *   - generated: An object with the generated line and column positions.
- *   - original: An object with the original line and column positions.
- *   - source: The original source file (relative to the sourceRoot).
- *   - name: An optional original token name for this mapping.
- */
-SourceMapGenerator.prototype.addMapping =
-  function SourceMapGenerator_addMapping(aArgs) {
-    var generated = util.getArg(aArgs, 'generated');
-    var original = util.getArg(aArgs, 'original', null);
-    var source = util.getArg(aArgs, 'source', null);
-    var name = util.getArg(aArgs, 'name', null);
+                               baseMinusT = base - t;
+                               if (w > floor(maxInt / baseMinusT)) {
+                                       error('overflow');
+                               }
 
-    if (!this._skipValidation) {
-      this._validateMapping(generated, original, source, name);
-    }
+                               w *= baseMinusT;
 
-    if (source != null) {
-      source = String(source);
-      if (!this._sources.has(source)) {
-        this._sources.add(source);
-      }
-    }
+                       }
 
-    if (name != null) {
-      name = String(name);
-      if (!this._names.has(name)) {
-        this._names.add(name);
-      }
-    }
+                       out = output.length + 1;
+                       bias = adapt(i - oldi, out, oldi == 0);
 
-    this._mappings.add({
-      generatedLine: generated.line,
-      generatedColumn: generated.column,
-      originalLine: original != null && original.line,
-      originalColumn: original != null && original.column,
-      source: source,
-      name: name
-    });
-  };
+                       // `i` was supposed to wrap around from `out` to `0`,
+                       // incrementing `n` each time, so we'll fix that now:
+                       if (floor(i / out) > maxInt - n) {
+                               error('overflow');
+                       }
 
-/**
- * Set the source content for a source file.
- */
-SourceMapGenerator.prototype.setSourceContent =
-  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
-    var source = aSourceFile;
-    if (this._sourceRoot != null) {
-      source = util.relative(this._sourceRoot, source);
-    }
+                       n += floor(i / out);
+                       i %= out;
 
-    if (aSourceContent != null) {
-      // Add the source content to the _sourcesContents map.
-      // Create a new _sourcesContents map if the property is null.
-      if (!this._sourcesContents) {
-        this._sourcesContents = Object.create(null);
-      }
-      this._sourcesContents[util.toSetString(source)] = aSourceContent;
-    } else if (this._sourcesContents) {
-      // Remove the source file from the _sourcesContents map.
-      // If the _sourcesContents map is empty, set the property to null.
-      delete this._sourcesContents[util.toSetString(source)];
-      if (Object.keys(this._sourcesContents).length === 0) {
-        this._sourcesContents = null;
-      }
-    }
-  };
+                       // Insert `n` at position `i` of the output
+                       output.splice(i++, 0, n);
+
+               }
 
-/**
- * Applies the mappings of a sub-source-map for a specific source file to the
- * source map being generated. Each mapping to the supplied source file is
- * rewritten using the supplied source map. Note: The resolution for the
- * resulting mappings is the minimium of this map and the supplied map.
- *
- * @param aSourceMapConsumer The source map to be applied.
- * @param aSourceFile Optional. The filename of the source file.
- *        If omitted, SourceMapConsumer's file property will be used.
- * @param aSourceMapPath Optional. The dirname of the path to the source map
- *        to be applied. If relative, it is relative to the SourceMapConsumer.
- *        This parameter is needed when the two source maps aren't in the same
- *        directory, and the source map to be applied contains relative source
- *        paths. If so, those relative source paths need to be rewritten
- *        relative to the SourceMapGenerator.
- */
-SourceMapGenerator.prototype.applySourceMap =
-  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
-    var sourceFile = aSourceFile;
-    // If aSourceFile is omitted, we will use the file property of the SourceMap
-    if (aSourceFile == null) {
-      if (aSourceMapConsumer.file == null) {
-        throw new Error(
-          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
-          'or the source map\'s "file" property. Both were omitted.'
-        );
-      }
-      sourceFile = aSourceMapConsumer.file;
-    }
-    var sourceRoot = this._sourceRoot;
-    // Make "sourceFile" relative if an absolute Url is passed.
-    if (sourceRoot != null) {
-      sourceFile = util.relative(sourceRoot, sourceFile);
-    }
-    // Applying the SourceMap can add and remove items from the sources and
-    // the names array.
-    var newSources = new ArraySet();
-    var newNames = new ArraySet();
+               return ucs2encode(output);
+       }
 
-    // Find mappings for the "sourceFile"
-    this._mappings.unsortedForEach(function (mapping) {
-      if (mapping.source === sourceFile && mapping.originalLine != null) {
-        // Check if it can be mapped by the source map, then update the mapping.
-        var original = aSourceMapConsumer.originalPositionFor({
-          line: mapping.originalLine,
-          column: mapping.originalColumn
-        });
-        if (original.source != null) {
-          // Copy mapping
-          mapping.source = original.source;
-          if (aSourceMapPath != null) {
-            mapping.source = util.join(aSourceMapPath, mapping.source)
-          }
-          if (sourceRoot != null) {
-            mapping.source = util.relative(sourceRoot, mapping.source);
-          }
-          mapping.originalLine = original.line;
-          mapping.originalColumn = original.column;
-          if (original.name != null) {
-            mapping.name = original.name;
-          }
-        }
-      }
+       /**
+        * Converts a string of Unicode symbols (e.g. a domain name label) to a
+        * Punycode string of ASCII-only symbols.
+        * @memberOf punycode
+        * @param {String} input The string of Unicode symbols.
+        * @returns {String} The resulting Punycode string of ASCII-only symbols.
+        */
+       function encode(input) {
+               var n,
+                   delta,
+                   handledCPCount,
+                   basicLength,
+                   bias,
+                   j,
+                   m,
+                   q,
+                   k,
+                   t,
+                   currentValue,
+                   output = [],
+                   /** `inputLength` will hold the number of code points in `input`. */
+                   inputLength,
+                   /** Cached calculation results */
+                   handledCPCountPlusOne,
+                   baseMinusT,
+                   qMinusT;
 
-      var source = mapping.source;
-      if (source != null && !newSources.has(source)) {
-        newSources.add(source);
-      }
+               // Convert the input in UCS-2 to Unicode
+               input = ucs2decode(input);
 
-      var name = mapping.name;
-      if (name != null && !newNames.has(name)) {
-        newNames.add(name);
-      }
+               // Cache the length
+               inputLength = input.length;
 
-    }, this);
-    this._sources = newSources;
-    this._names = newNames;
+               // Initialize the state
+               n = initialN;
+               delta = 0;
+               bias = initialBias;
 
-    // Copy sourcesContents of applied map.
-    aSourceMapConsumer.sources.forEach(function (sourceFile) {
-      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
-      if (content != null) {
-        if (aSourceMapPath != null) {
-          sourceFile = util.join(aSourceMapPath, sourceFile);
-        }
-        if (sourceRoot != null) {
-          sourceFile = util.relative(sourceRoot, sourceFile);
-        }
-        this.setSourceContent(sourceFile, content);
-      }
-    }, this);
-  };
+               // Handle the basic code points
+               for (j = 0; j < inputLength; ++j) {
+                       currentValue = input[j];
+                       if (currentValue < 0x80) {
+                               output.push(stringFromCharCode(currentValue));
+                       }
+               }
 
-/**
- * A mapping can have one of the three levels of data:
- *
- *   1. Just the generated position.
- *   2. The Generated position, original position, and original source.
- *   3. Generated and original position, original source, as well as a name
- *      token.
- *
- * To maintain consistency, we validate that any new mapping being added falls
- * in to one of these categories.
- */
-SourceMapGenerator.prototype._validateMapping =
-  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
-                                              aName) {
-    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
-        && aGenerated.line > 0 && aGenerated.column >= 0
-        && !aOriginal && !aSource && !aName) {
-      // Case 1.
-      return;
-    }
-    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
-             && aOriginal && 'line' in aOriginal && 'column' in aOriginal
-             && aGenerated.line > 0 && aGenerated.column >= 0
-             && aOriginal.line > 0 && aOriginal.column >= 0
-             && aSource) {
-      // Cases 2 and 3.
-      return;
-    }
-    else {
-      throw new Error('Invalid mapping: ' + JSON.stringify({
-        generated: aGenerated,
-        source: aSource,
-        original: aOriginal,
-        name: aName
-      }));
-    }
-  };
+               handledCPCount = basicLength = output.length;
 
-/**
- * Serialize the accumulated mappings in to the stream of base 64 VLQs
- * specified by the source map format.
- */
-SourceMapGenerator.prototype._serializeMappings =
-  function SourceMapGenerator_serializeMappings() {
-    var previousGeneratedColumn = 0;
-    var previousGeneratedLine = 1;
-    var previousOriginalColumn = 0;
-    var previousOriginalLine = 0;
-    var previousName = 0;
-    var previousSource = 0;
-    var result = '';
-    var next;
-    var mapping;
-    var nameIdx;
-    var sourceIdx;
+               // `handledCPCount` is the number of code points that have been handled;
+               // `basicLength` is the number of basic code points.
 
-    var mappings = this._mappings.toArray();
-    for (var i = 0, len = mappings.length; i < len; i++) {
-      mapping = mappings[i];
-      next = ''
+               // Finish the basic string - if it is not empty - with a delimiter
+               if (basicLength) {
+                       output.push(delimiter);
+               }
 
-      if (mapping.generatedLine !== previousGeneratedLine) {
-        previousGeneratedColumn = 0;
-        while (mapping.generatedLine !== previousGeneratedLine) {
-          next += ';';
-          previousGeneratedLine++;
-        }
-      }
-      else {
-        if (i > 0) {
-          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
-            continue;
-          }
-          next += ',';
-        }
-      }
+               // Main encoding loop:
+               while (handledCPCount < inputLength) {
 
-      next += base64VLQ.encode(mapping.generatedColumn
-                                 - previousGeneratedColumn);
-      previousGeneratedColumn = mapping.generatedColumn;
+                       // All non-basic code points < n have been handled already. Find the next
+                       // larger one:
+                       for (m = maxInt, j = 0; j < inputLength; ++j) {
+                               currentValue = input[j];
+                               if (currentValue >= n && currentValue < m) {
+                                       m = currentValue;
+                               }
+                       }
 
-      if (mapping.source != null) {
-        sourceIdx = this._sources.indexOf(mapping.source);
-        next += base64VLQ.encode(sourceIdx - previousSource);
-        previousSource = sourceIdx;
+                       // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
+                       // but guard against overflow
+                       handledCPCountPlusOne = handledCPCount + 1;
+                       if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
+                               error('overflow');
+                       }
 
-        // lines are stored 0-based in SourceMap spec version 3
-        next += base64VLQ.encode(mapping.originalLine - 1
-                                   - previousOriginalLine);
-        previousOriginalLine = mapping.originalLine - 1;
+                       delta += (m - n) * handledCPCountPlusOne;
+                       n = m;
 
-        next += base64VLQ.encode(mapping.originalColumn
-                                   - previousOriginalColumn);
-        previousOriginalColumn = mapping.originalColumn;
+                       for (j = 0; j < inputLength; ++j) {
+                               currentValue = input[j];
 
-        if (mapping.name != null) {
-          nameIdx = this._names.indexOf(mapping.name);
-          next += base64VLQ.encode(nameIdx - previousName);
-          previousName = nameIdx;
-        }
-      }
+                               if (currentValue < n && ++delta > maxInt) {
+                                       error('overflow');
+                               }
 
-      result += next;
-    }
+                               if (currentValue == n) {
+                                       // Represent delta as a generalized variable-length integer
+                                       for (q = delta, k = base; /* no condition */; k += base) {
+                                               t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);
+                                               if (q < t) {
+                                                       break;
+                                               }
+                                               qMinusT = q - t;
+                                               baseMinusT = base - t;
+                                               output.push(
+                                                       stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))
+                                               );
+                                               q = floor(qMinusT / baseMinusT);
+                                       }
 
-    return result;
-  };
+                                       output.push(stringFromCharCode(digitToBasic(q, 0)));
+                                       bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
+                                       delta = 0;
+                                       ++handledCPCount;
+                               }
+                       }
 
-SourceMapGenerator.prototype._generateSourcesContent =
-  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
-    return aSources.map(function (source) {
-      if (!this._sourcesContents) {
-        return null;
-      }
-      if (aSourceRoot != null) {
-        source = util.relative(aSourceRoot, source);
-      }
-      var key = util.toSetString(source);
-      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
-        ? this._sourcesContents[key]
-        : null;
-    }, this);
-  };
+                       ++delta;
+                       ++n;
 
-/**
- * Externalize the source map.
- */
-SourceMapGenerator.prototype.toJSON =
-  function SourceMapGenerator_toJSON() {
-    var map = {
-      version: this._version,
-      sources: this._sources.toArray(),
-      names: this._names.toArray(),
-      mappings: this._serializeMappings()
-    };
-    if (this._file != null) {
-      map.file = this._file;
-    }
-    if (this._sourceRoot != null) {
-      map.sourceRoot = this._sourceRoot;
-    }
-    if (this._sourcesContents) {
-      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
-    }
+               }
+               return output.join('');
+       }
 
-    return map;
-  };
+       /**
+        * Converts a Punycode string representing a domain name or an email address
+        * to Unicode. Only the Punycoded parts of the input will be converted, i.e.
+        * it doesn't matter if you call it on a string that has already been
+        * converted to Unicode.
+        * @memberOf punycode
+        * @param {String} input The Punycoded domain name or email address to
+        * convert to Unicode.
+        * @returns {String} The Unicode representation of the given Punycode
+        * string.
+        */
+       function toUnicode(input) {
+               return mapDomain(input, function(string) {
+                       return regexPunycode.test(string)
+                               ? decode(string.slice(4).toLowerCase())
+                               : string;
+               });
+       }
 
-/**
- * Render the source map being generated to a string.
- */
-SourceMapGenerator.prototype.toString =
-  function SourceMapGenerator_toString() {
-    return JSON.stringify(this.toJSON());
-  };
+       /**
+        * Converts a Unicode string representing a domain name or an email address to
+        * Punycode. Only the non-ASCII parts of the domain name will be converted,
+        * i.e. it doesn't matter if you call it with a domain that's already in
+        * ASCII.
+        * @memberOf punycode
+        * @param {String} input The domain name or email address to convert, as a
+        * Unicode string.
+        * @returns {String} The Punycode representation of the given domain name or
+        * email address.
+        */
+       function toASCII(input) {
+               return mapDomain(input, function(string) {
+                       return regexNonASCII.test(string)
+                               ? 'xn--' + encode(string)
+                               : string;
+               });
+       }
 
-exports.SourceMapGenerator = SourceMapGenerator;
+       /*--------------------------------------------------------------------------*/
 
-},{"./array-set":142,"./base64-vlq":143,"./mapping-list":146,"./util":151}],150:[function(require,module,exports){
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
+       /** Define the public API */
+       punycode = {
+               /**
+                * A string representing the current Punycode.js version number.
+                * @memberOf punycode
+                * @type String
+                */
+               'version': '1.4.1',
+               /**
+                * An object of methods to convert from JavaScript's internal character
+                * representation (UCS-2) to Unicode code points, and back.
+                * @see <https://mathiasbynens.be/notes/javascript-encoding>
+                * @memberOf punycode
+                * @type Object
+                */
+               'ucs2': {
+                       'decode': ucs2decode,
+                       'encode': ucs2encode
+               },
+               'decode': decode,
+               'encode': encode,
+               'toASCII': toASCII,
+               'toUnicode': toUnicode
+       };
 
-var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
-var util = require('./util');
+       /** Expose `punycode` */
+       // Some AMD build optimizers, like r.js, check for specific condition patterns
+       // like the following:
+       if (
+               typeof define == 'function' &&
+               typeof define.amd == 'object' &&
+               define.amd
+       ) {
+               define('punycode', function() {
+                       return punycode;
+               });
+       } else if (freeExports && freeModule) {
+               if (module.exports == freeExports) {
+                       // in Node.js, io.js, or RingoJS v0.8.0+
+                       freeModule.exports = punycode;
+               } else {
+                       // in Narwhal or RingoJS v0.7.0-
+                       for (key in punycode) {
+                               punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);
+                       }
+               }
+       } else {
+               // in Rhino or a web browser
+               root.punycode = punycode;
+       }
 
-// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
-// operating systems these days (capturing the result).
-var REGEX_NEWLINE = /(\r?\n)/;
+}(this));
 
-// Newline character code for charCodeAt() comparisons
-var NEWLINE_CODE = 10;
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],116:[function(require,module,exports){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-// Private symbol for identifying `SourceNode`s when multiple versions of
-// the source-map library are loaded. This MUST NOT CHANGE across
-// versions!
-var isSourceNode = "$$$isSourceNode$$$";
+'use strict';
 
-/**
- * SourceNodes provide a way to abstract over interpolating/concatenating
- * snippets of generated JavaScript source code while maintaining the line and
- * column information associated with the original source code.
- *
- * @param aLine The original line number.
- * @param aColumn The original column number.
- * @param aSource The original source's filename.
- * @param aChunks Optional. An array of strings which are snippets of
- *        generated JS, or other SourceNodes.
- * @param aName The original identifier.
- */
-function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
-  this.children = [];
-  this.sourceContents = {};
-  this.line = aLine == null ? null : aLine;
-  this.column = aColumn == null ? null : aColumn;
-  this.source = aSource == null ? null : aSource;
-  this.name = aName == null ? null : aName;
-  this[isSourceNode] = true;
-  if (aChunks != null) this.add(aChunks);
+// If obj.hasOwnProperty has been overridden, then calling
+// obj.hasOwnProperty(prop) will break.
+// See: https://github.com/joyent/node/issues/1707
+function hasOwnProperty(obj, prop) {
+  return Object.prototype.hasOwnProperty.call(obj, prop);
 }
 
-/**
- * Creates a SourceNode from generated code and a SourceMapConsumer.
- *
- * @param aGeneratedCode The generated code
- * @param aSourceMapConsumer The SourceMap for the generated code
- * @param aRelativePath Optional. The path that relative sources in the
- *        SourceMapConsumer should be relative to.
- */
-SourceNode.fromStringWithSourceMap =
-  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
-    // The SourceNode we want to fill with the generated code
-    // and the SourceMap
-    var node = new SourceNode();
-
-    // All even indices of this array are one line of the generated code,
-    // while all odd indices are the newlines between two adjacent lines
-    // (since `REGEX_NEWLINE` captures its match).
-    // Processed fragments are removed from this array, by calling `shiftNextLine`.
-    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
-    var shiftNextLine = function() {
-      var lineContents = remainingLines.shift();
-      // The last line of a file might not have a newline.
-      var newLine = remainingLines.shift() || "";
-      return lineContents + newLine;
-    };
+module.exports = function(qs, sep, eq, options) {
+  sep = sep || '&';
+  eq = eq || '=';
+  var obj = {};
 
-    // We need to remember the position of "remainingLines"
-    var lastGeneratedLine = 1, lastGeneratedColumn = 0;
+  if (typeof qs !== 'string' || qs.length === 0) {
+    return obj;
+  }
 
-    // The generate SourceNodes we need a code range.
-    // To extract it current and last mapping is used.
-    // Here we store the last mapping.
-    var lastMapping = null;
+  var regexp = /\+/g;
+  qs = qs.split(sep);
 
-    aSourceMapConsumer.eachMapping(function (mapping) {
-      if (lastMapping !== null) {
-        // We add the code from "lastMapping" to "mapping":
-        // First check if there is a new line in between.
-        if (lastGeneratedLine < mapping.generatedLine) {
-          // Associate first line with "lastMapping"
-          addMappingWithCode(lastMapping, shiftNextLine());
-          lastGeneratedLine++;
-          lastGeneratedColumn = 0;
-          // The remaining code is added without mapping
-        } else {
-          // There is no new line in between.
-          // Associate the code between "lastGeneratedColumn" and
-          // "mapping.generatedColumn" with "lastMapping"
-          var nextLine = remainingLines[0];
-          var code = nextLine.substr(0, mapping.generatedColumn -
-                                        lastGeneratedColumn);
-          remainingLines[0] = nextLine.substr(mapping.generatedColumn -
-                                              lastGeneratedColumn);
-          lastGeneratedColumn = mapping.generatedColumn;
-          addMappingWithCode(lastMapping, code);
-          // No more remaining code, continue
-          lastMapping = mapping;
-          return;
-        }
-      }
-      // We add the generated code until the first mapping
-      // to the SourceNode without any mapping.
-      // Each line is added as separate string.
-      while (lastGeneratedLine < mapping.generatedLine) {
-        node.add(shiftNextLine());
-        lastGeneratedLine++;
-      }
-      if (lastGeneratedColumn < mapping.generatedColumn) {
-        var nextLine = remainingLines[0];
-        node.add(nextLine.substr(0, mapping.generatedColumn));
-        remainingLines[0] = nextLine.substr(mapping.generatedColumn);
-        lastGeneratedColumn = mapping.generatedColumn;
-      }
-      lastMapping = mapping;
-    }, this);
-    // We have processed all mappings.
-    if (remainingLines.length > 0) {
-      if (lastMapping) {
-        // Associate the remaining code in the current line with "lastMapping"
-        addMappingWithCode(lastMapping, shiftNextLine());
-      }
-      // and add the remaining lines without any mapping
-      node.add(remainingLines.join(""));
-    }
+  var maxKeys = 1000;
+  if (options && typeof options.maxKeys === 'number') {
+    maxKeys = options.maxKeys;
+  }
 
-    // Copy sourcesContent into SourceNode
-    aSourceMapConsumer.sources.forEach(function (sourceFile) {
-      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
-      if (content != null) {
-        if (aRelativePath != null) {
-          sourceFile = util.join(aRelativePath, sourceFile);
-        }
-        node.setSourceContent(sourceFile, content);
-      }
-    });
+  var len = qs.length;
+  // maxKeys <= 0 means that we should not limit keys count
+  if (maxKeys > 0 && len > maxKeys) {
+    len = maxKeys;
+  }
 
-    return node;
+  for (var i = 0; i < len; ++i) {
+    var x = qs[i].replace(regexp, '%20'),
+        idx = x.indexOf(eq),
+        kstr, vstr, k, v;
 
-    function addMappingWithCode(mapping, code) {
-      if (mapping === null || mapping.source === undefined) {
-        node.add(code);
-      } else {
-        var source = aRelativePath
-          ? util.join(aRelativePath, mapping.source)
-          : mapping.source;
-        node.add(new SourceNode(mapping.originalLine,
-                                mapping.originalColumn,
-                                source,
-                                code,
-                                mapping.name));
-      }
+    if (idx >= 0) {
+      kstr = x.substr(0, idx);
+      vstr = x.substr(idx + 1);
+    } else {
+      kstr = x;
+      vstr = '';
     }
-  };
 
-/**
- * Add a chunk of generated JS to this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- *        SourceNode, or an array where each member is one of those things.
- */
-SourceNode.prototype.add = function SourceNode_add(aChunk) {
-  if (Array.isArray(aChunk)) {
-    aChunk.forEach(function (chunk) {
-      this.add(chunk);
-    }, this);
-  }
-  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
-    if (aChunk) {
-      this.children.push(aChunk);
+    k = decodeURIComponent(kstr);
+    v = decodeURIComponent(vstr);
+
+    if (!hasOwnProperty(obj, k)) {
+      obj[k] = v;
+    } else if (isArray(obj[k])) {
+      obj[k].push(v);
+    } else {
+      obj[k] = [obj[k], v];
     }
   }
-  else {
-    throw new TypeError(
-      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
-    );
-  }
-  return this;
+
+  return obj;
 };
 
-/**
- * Add a chunk of generated JS to the beginning of this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- *        SourceNode, or an array where each member is one of those things.
- */
-SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
-  if (Array.isArray(aChunk)) {
-    for (var i = aChunk.length-1; i >= 0; i--) {
-      this.prepend(aChunk[i]);
-    }
-  }
-  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
-    this.children.unshift(aChunk);
-  }
-  else {
-    throw new TypeError(
-      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
-    );
-  }
-  return this;
+var isArray = Array.isArray || function (xs) {
+  return Object.prototype.toString.call(xs) === '[object Array]';
 };
 
-/**
- * Walk over the tree of JS snippets in this node and its children. The
- * walking function is called once for each snippet of JS and is passed that
- * snippet and the its original associated source's line/column location.
- *
- * @param aFn The traversal function.
- */
-SourceNode.prototype.walk = function SourceNode_walk(aFn) {
-  var chunk;
-  for (var i = 0, len = this.children.length; i < len; i++) {
-    chunk = this.children[i];
-    if (chunk[isSourceNode]) {
-      chunk.walk(aFn);
-    }
-    else {
-      if (chunk !== '') {
-        aFn(chunk, { source: this.source,
-                     line: this.line,
-                     column: this.column,
-                     name: this.name });
-      }
-    }
+},{}],117:[function(require,module,exports){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+'use strict';
+
+var stringifyPrimitive = function(v) {
+  switch (typeof v) {
+    case 'string':
+      return v;
+
+    case 'boolean':
+      return v ? 'true' : 'false';
+
+    case 'number':
+      return isFinite(v) ? v : '';
+
+    default:
+      return '';
   }
 };
 
-/**
- * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
- * each of `this.children`.
- *
- * @param aSep The separator.
- */
-SourceNode.prototype.join = function SourceNode_join(aSep) {
-  var newChildren;
-  var i;
-  var len = this.children.length;
-  if (len > 0) {
-    newChildren = [];
-    for (i = 0; i < len-1; i++) {
-      newChildren.push(this.children[i]);
-      newChildren.push(aSep);
-    }
-    newChildren.push(this.children[i]);
-    this.children = newChildren;
+module.exports = function(obj, sep, eq, name) {
+  sep = sep || '&';
+  eq = eq || '=';
+  if (obj === null) {
+    obj = undefined;
   }
-  return this;
+
+  if (typeof obj === 'object') {
+    return map(objectKeys(obj), function(k) {
+      var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
+      if (isArray(obj[k])) {
+        return map(obj[k], function(v) {
+          return ks + encodeURIComponent(stringifyPrimitive(v));
+        }).join(sep);
+      } else {
+        return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
+      }
+    }).join(sep);
+
+  }
+
+  if (!name) return '';
+  return encodeURIComponent(stringifyPrimitive(name)) + eq +
+         encodeURIComponent(stringifyPrimitive(obj));
 };
 
-/**
- * Call String.prototype.replace on the very right-most source snippet. Useful
- * for trimming whitespace from the end of a source node, etc.
- *
- * @param aPattern The pattern to replace.
- * @param aReplacement The thing to replace the pattern with.
- */
-SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
-  var lastChild = this.children[this.children.length - 1];
-  if (lastChild[isSourceNode]) {
-    lastChild.replaceRight(aPattern, aReplacement);
-  }
-  else if (typeof lastChild === 'string') {
-    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
+var isArray = Array.isArray || function (xs) {
+  return Object.prototype.toString.call(xs) === '[object Array]';
+};
+
+function map (xs, f) {
+  if (xs.map) return xs.map(f);
+  var res = [];
+  for (var i = 0; i < xs.length; i++) {
+    res.push(f(xs[i], i));
   }
-  else {
-    this.children.push(''.replace(aPattern, aReplacement));
+  return res;
+}
+
+var objectKeys = Object.keys || function (obj) {
+  var res = [];
+  for (var key in obj) {
+    if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
   }
-  return this;
+  return res;
 };
 
-/**
- * Set the source content for a source file. This will be added to the SourceMapGenerator
- * in the sourcesContent field.
- *
- * @param aSourceFile The filename of the source file
- * @param aSourceContent The content of the source file
- */
-SourceNode.prototype.setSourceContent =
-  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
-    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
-  };
+},{}],118:[function(require,module,exports){
+'use strict';
 
-/**
- * Walk over the tree of SourceNodes. The walking function is called for each
- * source file content and is passed the filename and source content.
- *
- * @param aFn The traversal function.
- */
-SourceNode.prototype.walkSourceContents =
-  function SourceNode_walkSourceContents(aFn) {
-    for (var i = 0, len = this.children.length; i < len; i++) {
-      if (this.children[i][isSourceNode]) {
-        this.children[i].walkSourceContents(aFn);
-      }
-    }
+exports.decode = exports.parse = require('./decode');
+exports.encode = exports.stringify = require('./encode');
 
-    var sources = Object.keys(this.sourceContents);
-    for (var i = 0, len = sources.length; i < len; i++) {
-      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
-    }
-  };
+},{"./decode":116,"./encode":117}],119:[function(require,module,exports){
+// a duplex stream is just a stream that is both readable and writable.
+// Since JS doesn't have multiple prototypal inheritance, this class
+// prototypally inherits from Readable, and then parasitically from
+// Writable.
 
-/**
- * Return the string representation of this source node. Walks over the tree
- * and concatenates all the various snippets together to one string.
- */
-SourceNode.prototype.toString = function SourceNode_toString() {
-  var str = "";
-  this.walk(function (chunk) {
-    str += chunk;
-  });
-  return str;
+'use strict';
+
+/*<replacement>*/
+
+var objectKeys = Object.keys || function (obj) {
+  var keys = [];
+  for (var key in obj) {
+    keys.push(key);
+  }return keys;
 };
+/*</replacement>*/
 
-/**
- * Returns the string representation of this source node along with a source
- * map.
- */
-SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
-  var generated = {
-    code: "",
-    line: 1,
-    column: 0
-  };
-  var map = new SourceMapGenerator(aArgs);
-  var sourceMappingActive = false;
-  var lastOriginalSource = null;
-  var lastOriginalLine = null;
-  var lastOriginalColumn = null;
-  var lastOriginalName = null;
-  this.walk(function (chunk, original) {
-    generated.code += chunk;
-    if (original.source !== null
-        && original.line !== null
-        && original.column !== null) {
-      if(lastOriginalSource !== original.source
-         || lastOriginalLine !== original.line
-         || lastOriginalColumn !== original.column
-         || lastOriginalName !== original.name) {
-        map.addMapping({
-          source: original.source,
-          original: {
-            line: original.line,
-            column: original.column
-          },
-          generated: {
-            line: generated.line,
-            column: generated.column
-          },
-          name: original.name
-        });
-      }
-      lastOriginalSource = original.source;
-      lastOriginalLine = original.line;
-      lastOriginalColumn = original.column;
-      lastOriginalName = original.name;
-      sourceMappingActive = true;
-    } else if (sourceMappingActive) {
-      map.addMapping({
-        generated: {
-          line: generated.line,
-          column: generated.column
-        }
-      });
-      lastOriginalSource = null;
-      sourceMappingActive = false;
-    }
-    for (var idx = 0, length = chunk.length; idx < length; idx++) {
-      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
-        generated.line++;
-        generated.column = 0;
-        // Mappings end at eol
-        if (idx + 1 === length) {
-          lastOriginalSource = null;
-          sourceMappingActive = false;
-        } else if (sourceMappingActive) {
-          map.addMapping({
-            source: original.source,
-            original: {
-              line: original.line,
-              column: original.column
-            },
-            generated: {
-              line: generated.line,
-              column: generated.column
-            },
-            name: original.name
-          });
-        }
-      } else {
-        generated.column++;
-      }
-    }
-  });
-  this.walkSourceContents(function (sourceFile, sourceContent) {
-    map.setSourceContent(sourceFile, sourceContent);
-  });
+module.exports = Duplex;
 
-  return { code: generated.code, map: map };
+/*<replacement>*/
+var processNextTick = require('process-nextick-args');
+/*</replacement>*/
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+var Readable = require('./_stream_readable');
+var Writable = require('./_stream_writable');
+
+util.inherits(Duplex, Readable);
+
+var keys = objectKeys(Writable.prototype);
+for (var v = 0; v < keys.length; v++) {
+  var method = keys[v];
+  if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
+}
+
+function Duplex(options) {
+  if (!(this instanceof Duplex)) return new Duplex(options);
+
+  Readable.call(this, options);
+  Writable.call(this, options);
+
+  if (options && options.readable === false) this.readable = false;
+
+  if (options && options.writable === false) this.writable = false;
+
+  this.allowHalfOpen = true;
+  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
+
+  this.once('end', onend);
+}
+
+// the no-half-open enforcer
+function onend() {
+  // if we allow half-open state, or if the writable side ended,
+  // then we're ok.
+  if (this.allowHalfOpen || this._writableState.ended) return;
+
+  // no more data can be written.
+  // But allow more writes to happen in this tick.
+  processNextTick(onEndNT, this);
+}
+
+function onEndNT(self) {
+  self.end();
+}
+
+function forEach(xs, f) {
+  for (var i = 0, l = xs.length; i < l; i++) {
+    f(xs[i], i);
+  }
+}
+},{"./_stream_readable":121,"./_stream_writable":123,"core-util-is":102,"inherits":107,"process-nextick-args":113}],120:[function(require,module,exports){
+// a passthrough stream.
+// basically just the most minimal sort of Transform stream.
+// Every written chunk gets output as-is.
+
+'use strict';
+
+module.exports = PassThrough;
+
+var Transform = require('./_stream_transform');
+
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+util.inherits(PassThrough, Transform);
+
+function PassThrough(options) {
+  if (!(this instanceof PassThrough)) return new PassThrough(options);
+
+  Transform.call(this, options);
+}
+
+PassThrough.prototype._transform = function (chunk, encoding, cb) {
+  cb(null, chunk);
 };
+},{"./_stream_transform":122,"core-util-is":102,"inherits":107}],121:[function(require,module,exports){
+(function (process){
+'use strict';
 
-exports.SourceNode = SourceNode;
+module.exports = Readable;
 
-},{"./source-map-generator":149,"./util":151}],151:[function(require,module,exports){
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
+/*<replacement>*/
+var processNextTick = require('process-nextick-args');
+/*</replacement>*/
 
-/**
- * This is a helper function for getting values from parameter/options
- * objects.
- *
- * @param args The object we are extracting values from
- * @param name The name of the property we are getting.
- * @param defaultValue An optional value to return if the property is missing
- * from the object. If this is not specified and the property is missing, an
- * error will be thrown.
- */
-function getArg(aArgs, aName, aDefaultValue) {
-  if (aName in aArgs) {
-    return aArgs[aName];
-  } else if (arguments.length === 3) {
-    return aDefaultValue;
-  } else {
-    throw new Error('"' + aName + '" is a required argument.');
-  }
-}
-exports.getArg = getArg;
+/*<replacement>*/
+var isArray = require('isarray');
+/*</replacement>*/
 
-var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
-var dataUrlRegexp = /^data:.+\,.+$/;
+/*<replacement>*/
+var Duplex;
+/*</replacement>*/
 
-function urlParse(aUrl) {
-  var match = aUrl.match(urlRegexp);
-  if (!match) {
-    return null;
-  }
-  return {
-    scheme: match[1],
-    auth: match[2],
-    host: match[3],
-    port: match[4],
-    path: match[5]
-  };
-}
-exports.urlParse = urlParse;
+Readable.ReadableState = ReadableState;
 
-function urlGenerate(aParsedUrl) {
-  var url = '';
-  if (aParsedUrl.scheme) {
-    url += aParsedUrl.scheme + ':';
-  }
-  url += '//';
-  if (aParsedUrl.auth) {
-    url += aParsedUrl.auth + '@';
-  }
-  if (aParsedUrl.host) {
-    url += aParsedUrl.host;
-  }
-  if (aParsedUrl.port) {
-    url += ":" + aParsedUrl.port
-  }
-  if (aParsedUrl.path) {
-    url += aParsedUrl.path;
-  }
-  return url;
-}
-exports.urlGenerate = urlGenerate;
+/*<replacement>*/
+var EE = require('events').EventEmitter;
 
-/**
- * Normalizes a path, or the path portion of a URL:
- *
- * - Replaces consecutive slashes with one slash.
- * - Removes unnecessary '.' parts.
- * - Removes unnecessary '<dir>/..' parts.
- *
- * Based on code in the Node.js 'path' core module.
- *
- * @param aPath The path or url to normalize.
- */
-function normalize(aPath) {
-  var path = aPath;
-  var url = urlParse(aPath);
-  if (url) {
-    if (!url.path) {
-      return aPath;
-    }
-    path = url.path;
-  }
-  var isAbsolute = exports.isAbsolute(path);
+var EElistenerCount = function (emitter, type) {
+  return emitter.listeners(type).length;
+};
+/*</replacement>*/
 
-  var parts = path.split(/\/+/);
-  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
-    part = parts[i];
-    if (part === '.') {
-      parts.splice(i, 1);
-    } else if (part === '..') {
-      up++;
-    } else if (up > 0) {
-      if (part === '') {
-        // The first part is blank if the path is absolute. Trying to go
-        // above the root is a no-op. Therefore we can remove all '..' parts
-        // directly after the root.
-        parts.splice(i + 1, up);
-        up = 0;
-      } else {
-        parts.splice(i, 2);
-        up--;
-      }
-    }
-  }
-  path = parts.join('/');
+/*<replacement>*/
+var Stream = require('./internal/streams/stream');
+/*</replacement>*/
 
-  if (path === '') {
-    path = isAbsolute ? '/' : '.';
-  }
+var Buffer = require('buffer').Buffer;
+/*<replacement>*/
+var bufferShim = require('buffer-shims');
+/*</replacement>*/
 
-  if (url) {
-    url.path = path;
-    return urlGenerate(url);
-  }
-  return path;
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
+
+/*<replacement>*/
+var debugUtil = require('util');
+var debug = void 0;
+if (debugUtil && debugUtil.debuglog) {
+  debug = debugUtil.debuglog('stream');
+} else {
+  debug = function () {};
 }
-exports.normalize = normalize;
+/*</replacement>*/
 
-/**
- * Joins two paths/URLs.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be joined with the root.
- *
- * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
- *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
- *   first.
- * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
- *   is updated with the result and aRoot is returned. Otherwise the result
- *   is returned.
- *   - If aPath is absolute, the result is aPath.
- *   - Otherwise the two paths are joined with a slash.
- * - Joining for example 'http://' and 'www.example.com' is also supported.
- */
-function join(aRoot, aPath) {
-  if (aRoot === "") {
-    aRoot = ".";
-  }
-  if (aPath === "") {
-    aPath = ".";
-  }
-  var aPathUrl = urlParse(aPath);
-  var aRootUrl = urlParse(aRoot);
-  if (aRootUrl) {
-    aRoot = aRootUrl.path || '/';
-  }
+var BufferList = require('./internal/streams/BufferList');
+var StringDecoder;
 
-  // `join(foo, '//www.example.org')`
-  if (aPathUrl && !aPathUrl.scheme) {
-    if (aRootUrl) {
-      aPathUrl.scheme = aRootUrl.scheme;
-    }
-    return urlGenerate(aPathUrl);
-  }
+util.inherits(Readable, Stream);
 
-  if (aPathUrl || aPath.match(dataUrlRegexp)) {
-    return aPath;
-  }
+var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
 
-  // `join('http://', 'www.example.com')`
-  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
-    aRootUrl.host = aPath;
-    return urlGenerate(aRootUrl);
+function prependListener(emitter, event, fn) {
+  // Sadly this is not cacheable as some libraries bundle their own
+  // event emitter implementation with them.
+  if (typeof emitter.prependListener === 'function') {
+    return emitter.prependListener(event, fn);
+  } else {
+    // This is a hack to make sure that our error handler is attached before any
+    // userland ones.  NEVER DO THIS. This is here only because this code needs
+    // to continue to work with older versions of Node.js that do not include
+    // the prependListener() method. The goal is to eventually remove this hack.
+    if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
   }
+}
 
-  var joined = aPath.charAt(0) === '/'
-    ? aPath
-    : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
+function ReadableState(options, stream) {
+  Duplex = Duplex || require('./_stream_duplex');
 
-  if (aRootUrl) {
-    aRootUrl.path = joined;
-    return urlGenerate(aRootUrl);
-  }
-  return joined;
-}
-exports.join = join;
+  options = options || {};
 
-exports.isAbsolute = function (aPath) {
-  return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);
-};
+  // object stream flag. Used to make read(n) ignore n and to
+  // make all the buffer merging and length checks go away
+  this.objectMode = !!options.objectMode;
 
-/**
- * Make a path relative to a URL or another path.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be made relative to aRoot.
- */
-function relative(aRoot, aPath) {
-  if (aRoot === "") {
-    aRoot = ".";
-  }
+  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
 
-  aRoot = aRoot.replace(/\/$/, '');
+  // the point at which it stops calling _read() to fill the buffer
+  // Note: 0 is a valid value, means "don't call _read preemptively ever"
+  var hwm = options.highWaterMark;
+  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
+  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
+
+  // cast to ints.
+  this.highWaterMark = ~~this.highWaterMark;
+
+  // A linked list is used to store data chunks instead of an array because the
+  // linked list can remove elements from the beginning faster than
+  // array.shift()
+  this.buffer = new BufferList();
+  this.length = 0;
+  this.pipes = null;
+  this.pipesCount = 0;
+  this.flowing = null;
+  this.ended = false;
+  this.endEmitted = false;
+  this.reading = false;
 
-  // It is possible for the path to be above the root. In this case, simply
-  // checking whether the root is a prefix of the path won't work. Instead, we
-  // need to remove components from the root one by one, until either we find
-  // a prefix that fits, or we run out of components to remove.
-  var level = 0;
-  while (aPath.indexOf(aRoot + '/') !== 0) {
-    var index = aRoot.lastIndexOf("/");
-    if (index < 0) {
-      return aPath;
-    }
+  // a flag to be able to tell if the onwrite cb is called immediately,
+  // or on a later tick.  We set this to true at first, because any
+  // actions that shouldn't happen until "later" should generally also
+  // not happen before the first write call.
+  this.sync = true;
 
-    // If the only part of the root that is left is the scheme (i.e. http://,
-    // file:///, etc.), one or more slashes (/), or simply nothing at all, we
-    // have exhausted all components, so the path is not relative to the root.
-    aRoot = aRoot.slice(0, index);
-    if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
-      return aPath;
-    }
+  // whenever we return null, then we set a flag to say
+  // that we're awaiting a 'readable' event emission.
+  this.needReadable = false;
+  this.emittedReadable = false;
+  this.readableListening = false;
+  this.resumeScheduled = false;
 
-    ++level;
-  }
+  // Crypto is kind of old and crusty.  Historically, its default string
+  // encoding is 'binary' so we have to make this configurable.
+  // Everything else in the universe uses 'utf8', though.
+  this.defaultEncoding = options.defaultEncoding || 'utf8';
 
-  // Make sure we add a "../" for each component we removed from the root.
-  return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
-}
-exports.relative = relative;
+  // when piping, we only care about 'readable' events that happen
+  // after read()ing all the bytes and not getting any pushback.
+  this.ranOut = false;
 
-var supportsNullProto = (function () {
-  var obj = Object.create(null);
-  return !('__proto__' in obj);
-}());
+  // the number of writers that are awaiting a drain event in .pipe()s
+  this.awaitDrain = 0;
 
-function identity (s) {
-  return s;
-}
+  // if true, a maybeReadMore has been scheduled
+  this.readingMore = false;
 
-/**
- * Because behavior goes wacky when you set `__proto__` on objects, we
- * have to prefix all the strings in our set with an arbitrary character.
- *
- * See https://github.com/mozilla/source-map/pull/31 and
- * https://github.com/mozilla/source-map/issues/30
- *
- * @param String aStr
- */
-function toSetString(aStr) {
-  if (isProtoString(aStr)) {
-    return '$' + aStr;
+  this.decoder = null;
+  this.encoding = null;
+  if (options.encoding) {
+    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
+    this.decoder = new StringDecoder(options.encoding);
+    this.encoding = options.encoding;
   }
-
-  return aStr;
 }
-exports.toSetString = supportsNullProto ? identity : toSetString;
 
-function fromSetString(aStr) {
-  if (isProtoString(aStr)) {
-    return aStr.slice(1);
-  }
+function Readable(options) {
+  Duplex = Duplex || require('./_stream_duplex');
 
-  return aStr;
-}
-exports.fromSetString = supportsNullProto ? identity : fromSetString;
+  if (!(this instanceof Readable)) return new Readable(options);
 
-function isProtoString(s) {
-  if (!s) {
-    return false;
-  }
+  this._readableState = new ReadableState(options, this);
 
-  var length = s.length;
+  // legacy
+  this.readable = true;
 
-  if (length < 9 /* "__proto__".length */) {
-    return false;
-  }
+  if (options && typeof options.read === 'function') this._read = options.read;
 
-  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
-      s.charCodeAt(length - 2) !== 95  /* '_' */ ||
-      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
-      s.charCodeAt(length - 4) !== 116 /* 't' */ ||
-      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
-      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
-      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
-      s.charCodeAt(length - 8) !== 95  /* '_' */ ||
-      s.charCodeAt(length - 9) !== 95  /* '_' */) {
-    return false;
-  }
+  Stream.call(this);
+}
 
-  for (var i = length - 10; i >= 0; i--) {
-    if (s.charCodeAt(i) !== 36 /* '$' */) {
-      return false;
+// Manually shove something into the read() buffer.
+// This returns true if the highWaterMark has not been hit yet,
+// similar to how Writable.write() returns true if you should
+// write() some more.
+Readable.prototype.push = function (chunk, encoding) {
+  var state = this._readableState;
+
+  if (!state.objectMode && typeof chunk === 'string') {
+    encoding = encoding || state.defaultEncoding;
+    if (encoding !== state.encoding) {
+      chunk = bufferShim.from(chunk, encoding);
+      encoding = '';
     }
   }
 
-  return true;
-}
+  return readableAddChunk(this, state, chunk, encoding, false);
+};
 
-/**
- * Comparator between two mappings where the original positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same original source/line/column, but different generated
- * line and column the same. Useful when searching for a mapping with a
- * stubbed out mapping.
- */
-function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
-  var cmp = mappingA.source - mappingB.source;
-  if (cmp !== 0) {
-    return cmp;
-  }
+// Unshift should *always* be something directly out of read()
+Readable.prototype.unshift = function (chunk) {
+  var state = this._readableState;
+  return readableAddChunk(this, state, chunk, '', true);
+};
 
-  cmp = mappingA.originalLine - mappingB.originalLine;
-  if (cmp !== 0) {
-    return cmp;
-  }
+Readable.prototype.isPaused = function () {
+  return this._readableState.flowing === false;
+};
 
-  cmp = mappingA.originalColumn - mappingB.originalColumn;
-  if (cmp !== 0 || onlyCompareOriginal) {
-    return cmp;
-  }
+function readableAddChunk(stream, state, chunk, encoding, addToFront) {
+  var er = chunkInvalid(state, chunk);
+  if (er) {
+    stream.emit('error', er);
+  } else if (chunk === null) {
+    state.reading = false;
+    onEofChunk(stream, state);
+  } else if (state.objectMode || chunk && chunk.length > 0) {
+    if (state.ended && !addToFront) {
+      var e = new Error('stream.push() after EOF');
+      stream.emit('error', e);
+    } else if (state.endEmitted && addToFront) {
+      var _e = new Error('stream.unshift() after end event');
+      stream.emit('error', _e);
+    } else {
+      var skipAdd;
+      if (state.decoder && !addToFront && !encoding) {
+        chunk = state.decoder.write(chunk);
+        skipAdd = !state.objectMode && chunk.length === 0;
+      }
 
-  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
-  if (cmp !== 0) {
-    return cmp;
-  }
+      if (!addToFront) state.reading = false;
 
-  cmp = mappingA.generatedLine - mappingB.generatedLine;
-  if (cmp !== 0) {
-    return cmp;
-  }
+      // Don't add to the buffer if we've decoded to an empty string chunk and
+      // we're not in object mode
+      if (!skipAdd) {
+        // if we want the data now, just emit it.
+        if (state.flowing && state.length === 0 && !state.sync) {
+          stream.emit('data', chunk);
+          stream.read(0);
+        } else {
+          // update the buffer info.
+          state.length += state.objectMode ? 1 : chunk.length;
+          if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
 
-  return mappingA.name - mappingB.name;
-}
-exports.compareByOriginalPositions = compareByOriginalPositions;
+          if (state.needReadable) emitReadable(stream);
+        }
+      }
 
-/**
- * Comparator between two mappings with deflated source and name indices where
- * the generated positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same generated line and column, but different
- * source/name/original line and column the same. Useful when searching for a
- * mapping with a stubbed out mapping.
- */
-function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
-  var cmp = mappingA.generatedLine - mappingB.generatedLine;
-  if (cmp !== 0) {
-    return cmp;
+      maybeReadMore(stream, state);
+    }
+  } else if (!addToFront) {
+    state.reading = false;
   }
 
-  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
-  if (cmp !== 0 || onlyCompareGenerated) {
-    return cmp;
-  }
+  return needMoreData(state);
+}
 
-  cmp = mappingA.source - mappingB.source;
-  if (cmp !== 0) {
-    return cmp;
-  }
+// if it's past the high water mark, we can push in some more.
+// Also, if we have no data yet, we can stand some
+// more bytes.  This is to work around cases where hwm=0,
+// such as the repl.  Also, if the push() triggered a
+// readable event, and the user called read(largeNumber) such that
+// needReadable was set, then we ought to push more, so that another
+// 'readable' event will be triggered.
+function needMoreData(state) {
+  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
+}
 
-  cmp = mappingA.originalLine - mappingB.originalLine;
-  if (cmp !== 0) {
-    return cmp;
-  }
+// backwards compatibility.
+Readable.prototype.setEncoding = function (enc) {
+  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
+  this._readableState.decoder = new StringDecoder(enc);
+  this._readableState.encoding = enc;
+  return this;
+};
 
-  cmp = mappingA.originalColumn - mappingB.originalColumn;
-  if (cmp !== 0) {
-    return cmp;
+// Don't raise the hwm > 8MB
+var MAX_HWM = 0x800000;
+function computeNewHighWaterMark(n) {
+  if (n >= MAX_HWM) {
+    n = MAX_HWM;
+  } else {
+    // Get the next highest power of 2 to prevent increasing hwm excessively in
+    // tiny amounts
+    n--;
+    n |= n >>> 1;
+    n |= n >>> 2;
+    n |= n >>> 4;
+    n |= n >>> 8;
+    n |= n >>> 16;
+    n++;
   }
-
-  return mappingA.name - mappingB.name;
+  return n;
 }
-exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
 
-function strcmp(aStr1, aStr2) {
-  if (aStr1 === aStr2) {
-    return 0;
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function howMuchToRead(n, state) {
+  if (n <= 0 || state.length === 0 && state.ended) return 0;
+  if (state.objectMode) return 1;
+  if (n !== n) {
+    // Only flow one buffer at a time
+    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
   }
-
-  if (aStr1 > aStr2) {
-    return 1;
+  // If we're asking for more than the current hwm, then raise the hwm.
+  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
+  if (n <= state.length) return n;
+  // Don't have enough
+  if (!state.ended) {
+    state.needReadable = true;
+    return 0;
   }
-
-  return -1;
+  return state.length;
 }
 
-/**
- * Comparator between two mappings with inflated source and name strings where
- * the generated positions are compared.
- */
-function compareByGeneratedPositionsInflated(mappingA, mappingB) {
-  var cmp = mappingA.generatedLine - mappingB.generatedLine;
-  if (cmp !== 0) {
-    return cmp;
-  }
+// you can override either this method, or the async _read(n) below.
+Readable.prototype.read = function (n) {
+  debug('read', n);
+  n = parseInt(n, 10);
+  var state = this._readableState;
+  var nOrig = n;
 
-  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
-  if (cmp !== 0) {
-    return cmp;
-  }
+  if (n !== 0) state.emittedReadable = false;
 
-  cmp = strcmp(mappingA.source, mappingB.source);
-  if (cmp !== 0) {
-    return cmp;
+  // if we're doing read(0) to trigger a readable event, but we
+  // already have a bunch of data in the buffer, then just trigger
+  // the 'readable' event and move on.
+  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
+    debug('read: emitReadable', state.length, state.ended);
+    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
+    return null;
   }
 
-  cmp = mappingA.originalLine - mappingB.originalLine;
-  if (cmp !== 0) {
-    return cmp;
-  }
+  n = howMuchToRead(n, state);
 
-  cmp = mappingA.originalColumn - mappingB.originalColumn;
-  if (cmp !== 0) {
-    return cmp;
+  // if we've ended, and we're now clear, then finish it up.
+  if (n === 0 && state.ended) {
+    if (state.length === 0) endReadable(this);
+    return null;
   }
 
-  return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
-
-},{}],152:[function(require,module,exports){
-/*
- * Copyright 2009-2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE.txt or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;
-exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;
-exports.SourceNode = require('./lib/source-node').SourceNode;
+  // All the actual chunk generation logic needs to be
+  // *below* the call to _read.  The reason is that in certain
+  // synthetic stream cases, such as passthrough streams, _read
+  // may be a completely synchronous operation which may change
+  // the state of the read buffer, providing enough data when
+  // before there was *not* enough.
+  //
+  // So, the steps are:
+  // 1. Figure out what the state of things will be after we do
+  // a read from the buffer.
+  //
+  // 2. If that resulting state will trigger a _read, then call _read.
+  // Note that this may be asynchronous, or synchronous.  Yes, it is
+  // deeply ugly to write APIs this way, but that still doesn't mean
+  // that the Readable class should behave improperly, as streams are
+  // designed to be sync/async agnostic.
+  // Take note if the _read call is sync or async (ie, if the read call
+  // has returned yet), so that we know whether or not it's safe to emit
+  // 'readable' etc.
+  //
+  // 3. Actually pull the requested chunks out of the buffer and return.
 
-},{"./lib/source-map-consumer":148,"./lib/source-map-generator":149,"./lib/source-node":150}],153:[function(require,module,exports){
-(function (global){
-var ClientRequest = require('./lib/request')
-var extend = require('xtend')
-var statusCodes = require('builtin-status-codes')
-var url = require('url')
+  // if we need a readable event, then we need to do some reading.
+  var doRead = state.needReadable;
+  debug('need readable', doRead);
 
-var http = exports
+  // if we currently have less than the highWaterMark, then also read some
+  if (state.length === 0 || state.length - n < state.highWaterMark) {
+    doRead = true;
+    debug('length less than watermark', doRead);
+  }
 
-http.request = function (opts, cb) {
-       if (typeof opts === 'string')
-               opts = url.parse(opts)
-       else
-               opts = extend(opts)
+  // however, if we've ended, then there's no point, and if we're already
+  // reading, then it's unnecessary.
+  if (state.ended || state.reading) {
+    doRead = false;
+    debug('reading or ended', doRead);
+  } else if (doRead) {
+    debug('do read');
+    state.reading = true;
+    state.sync = true;
+    // if the length is currently zero, then we *need* a readable event.
+    if (state.length === 0) state.needReadable = true;
+    // call internal read method
+    this._read(state.highWaterMark);
+    state.sync = false;
+    // If _read pushed data synchronously, then `reading` will be false,
+    // and we need to re-evaluate how much data we can return to the user.
+    if (!state.reading) n = howMuchToRead(nOrig, state);
+  }
 
-       // Normally, the page is loaded from http or https, so not specifying a protocol
-       // will result in a (valid) protocol-relative url. However, this won't work if
-       // the protocol is something else, like 'file:'
-       var defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''
+  var ret;
+  if (n > 0) ret = fromList(n, state);else ret = null;
 
-       var protocol = opts.protocol || defaultProtocol
-       var host = opts.hostname || opts.host
-       var port = opts.port
-       var path = opts.path || '/'
+  if (ret === null) {
+    state.needReadable = true;
+    n = 0;
+  } else {
+    state.length -= n;
+  }
 
-       // Necessary for IPv6 addresses
-       if (host && host.indexOf(':') !== -1)
-               host = '[' + host + ']'
+  if (state.length === 0) {
+    // If we have nothing in the buffer, then we want to know
+    // as soon as we *do* get something into the buffer.
+    if (!state.ended) state.needReadable = true;
 
-       // This may be a relative url. The browser should always be able to interpret it correctly.
-       opts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path
-       opts.method = (opts.method || 'GET').toUpperCase()
-       opts.headers = opts.headers || {}
+    // If we tried to read() past the EOF, then emit end on the next tick.
+    if (nOrig !== n && state.ended) endReadable(this);
+  }
 
-       // Also valid opts.auth, opts.mode
+  if (ret !== null) this.emit('data', ret);
 
-       var req = new ClientRequest(opts)
-       if (cb)
-               req.on('response', cb)
-       return req
-}
+  return ret;
+};
 
-http.get = function get (opts, cb) {
-       var req = http.request(opts, cb)
-       req.end()
-       return req
+function chunkInvalid(state, chunk) {
+  var er = null;
+  if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
+    er = new TypeError('Invalid non-string/buffer chunk');
+  }
+  return er;
 }
 
-http.Agent = function () {}
-http.Agent.defaultMaxSockets = 4
-
-http.STATUS_CODES = statusCodes
+function onEofChunk(stream, state) {
+  if (state.ended) return;
+  if (state.decoder) {
+    var chunk = state.decoder.end();
+    if (chunk && chunk.length) {
+      state.buffer.push(chunk);
+      state.length += state.objectMode ? 1 : chunk.length;
+    }
+  }
+  state.ended = true;
 
-http.METHODS = [
-       'CHECKOUT',
-       'CONNECT',
-       'COPY',
-       'DELETE',
-       'GET',
-       'HEAD',
-       'LOCK',
-       'M-SEARCH',
-       'MERGE',
-       'MKACTIVITY',
-       'MKCOL',
-       'MOVE',
-       'NOTIFY',
-       'OPTIONS',
-       'PATCH',
-       'POST',
-       'PROPFIND',
-       'PROPPATCH',
-       'PURGE',
-       'PUT',
-       'REPORT',
-       'SEARCH',
-       'SUBSCRIBE',
-       'TRACE',
-       'UNLOCK',
-       'UNSUBSCRIBE'
-]
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./lib/request":155,"builtin-status-codes":6,"url":159,"xtend":166}],154:[function(require,module,exports){
-(function (global){
-exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)
+  // emit 'readable' now to make sure it gets picked up.
+  emitReadable(stream);
+}
 
-exports.blobConstructor = false
-try {
-       new Blob([new ArrayBuffer(1)])
-       exports.blobConstructor = true
-} catch (e) {}
+// Don't emit readable right away in sync mode, because this can trigger
+// another read() call => stack overflow.  This way, it might trigger
+// a nextTick recursion warning, but that's not so bad.
+function emitReadable(stream) {
+  var state = stream._readableState;
+  state.needReadable = false;
+  if (!state.emittedReadable) {
+    debug('emitReadable', state.flowing);
+    state.emittedReadable = true;
+    if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
+  }
+}
 
-// The xhr request to example.com may violate some restrictive CSP configurations,
-// so if we're running in a browser that supports `fetch`, avoid calling getXHR()
-// and assume support for certain features below.
-var xhr
-function getXHR () {
-       // Cache the xhr value
-       if (xhr !== undefined) return xhr
+function emitReadable_(stream) {
+  debug('emit readable');
+  stream.emit('readable');
+  flow(stream);
+}
 
-       if (global.XMLHttpRequest) {
-               xhr = new global.XMLHttpRequest()
-               // If XDomainRequest is available (ie only, where xhr might not work
-               // cross domain), use the page location. Otherwise use example.com
-               // Note: this doesn't actually make an http request.
-               try {
-                       xhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com')
-               } catch(e) {
-                       xhr = null
-               }
-       } else {
-               // Service workers don't have XHR
-               xhr = null
-       }
-       return xhr
+// at this point, the user has presumably seen the 'readable' event,
+// and called read() to consume some data.  that may have triggered
+// in turn another _read(n) call, in which case reading = true if
+// it's in progress.
+// However, if we're not ended, or reading, and the length < hwm,
+// then go ahead and try to read some more preemptively.
+function maybeReadMore(stream, state) {
+  if (!state.readingMore) {
+    state.readingMore = true;
+    processNextTick(maybeReadMore_, stream, state);
+  }
 }
 
-function checkTypeSupport (type) {
-       var xhr = getXHR()
-       if (!xhr) return false
-       try {
-               xhr.responseType = type
-               return xhr.responseType === type
-       } catch (e) {}
-       return false
+function maybeReadMore_(stream, state) {
+  var len = state.length;
+  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
+    debug('maybeReadMore read 0');
+    stream.read(0);
+    if (len === state.length)
+      // didn't get any data, stop spinning.
+      break;else len = state.length;
+  }
+  state.readingMore = false;
 }
 
-// For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'.
-// Safari 7.1 appears to have fixed this bug.
-var haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined'
-var haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice)
+// abstract method.  to be overridden in specific implementation classes.
+// call cb(er, data) where data is <= n in length.
+// for virtual (non-string, non-buffer) streams, "length" is somewhat
+// arbitrary, and perhaps not very meaningful.
+Readable.prototype._read = function (n) {
+  this.emit('error', new Error('_read() is not implemented'));
+};
 
-// If fetch is supported, then arraybuffer will be supported too. Skip calling
-// checkTypeSupport(), since that calls getXHR().
-exports.arraybuffer = exports.fetch || (haveArrayBuffer && checkTypeSupport('arraybuffer'))
+Readable.prototype.pipe = function (dest, pipeOpts) {
+  var src = this;
+  var state = this._readableState;
 
-// These next two tests unavoidably show warnings in Chrome. Since fetch will always
-// be used if it's available, just return false for these to avoid the warnings.
-exports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream')
-exports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer &&
-       checkTypeSupport('moz-chunked-arraybuffer')
+  switch (state.pipesCount) {
+    case 0:
+      state.pipes = dest;
+      break;
+    case 1:
+      state.pipes = [state.pipes, dest];
+      break;
+    default:
+      state.pipes.push(dest);
+      break;
+  }
+  state.pipesCount += 1;
+  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
 
-// If fetch is supported, then overrideMimeType will be supported too. Skip calling
-// getXHR().
-exports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)
+  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
 
-exports.vbArray = isFunction(global.VBArray)
+  var endFn = doEnd ? onend : cleanup;
+  if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
 
-function isFunction (value) {
-       return typeof value === 'function'
-}
+  dest.on('unpipe', onunpipe);
+  function onunpipe(readable) {
+    debug('onunpipe');
+    if (readable === src) {
+      cleanup();
+    }
+  }
 
-xhr = null // Help gc
+  function onend() {
+    debug('onend');
+    dest.end();
+  }
 
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],155:[function(require,module,exports){
-(function (process,global,Buffer){
-var capability = require('./capability')
-var inherits = require('inherits')
-var response = require('./response')
-var stream = require('readable-stream')
-var toArrayBuffer = require('to-arraybuffer')
+  // when the dest drains, it reduces the awaitDrain counter
+  // on the source.  This would be more elegant with a .once()
+  // handler in flow(), but adding and removing repeatedly is
+  // too slow.
+  var ondrain = pipeOnDrain(src);
+  dest.on('drain', ondrain);
 
-var IncomingMessage = response.IncomingMessage
-var rStates = response.readyStates
+  var cleanedUp = false;
+  function cleanup() {
+    debug('cleanup');
+    // cleanup event handlers once the pipe is broken
+    dest.removeListener('close', onclose);
+    dest.removeListener('finish', onfinish);
+    dest.removeListener('drain', ondrain);
+    dest.removeListener('error', onerror);
+    dest.removeListener('unpipe', onunpipe);
+    src.removeListener('end', onend);
+    src.removeListener('end', cleanup);
+    src.removeListener('data', ondata);
 
-function decideMode (preferBinary, useFetch) {
-       if (capability.fetch && useFetch) {
-               return 'fetch'
-       } else if (capability.mozchunkedarraybuffer) {
-               return 'moz-chunked-arraybuffer'
-       } else if (capability.msstream) {
-               return 'ms-stream'
-       } else if (capability.arraybuffer && preferBinary) {
-               return 'arraybuffer'
-       } else if (capability.vbArray && preferBinary) {
-               return 'text:vbarray'
-       } else {
-               return 'text'
-       }
-}
+    cleanedUp = true;
 
-var ClientRequest = module.exports = function (opts) {
-       var self = this
-       stream.Writable.call(self)
+    // if the reader is waiting for a drain event from this
+    // specific writer, then it would cause it to never start
+    // flowing again.
+    // So, if this is awaiting a drain, then we just call it now.
+    // If we don't know, then assume that we are waiting for one.
+    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
+  }
 
-       self._opts = opts
-       self._body = []
-       self._headers = {}
-       if (opts.auth)
-               self.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64'))
-       Object.keys(opts.headers).forEach(function (name) {
-               self.setHeader(name, opts.headers[name])
-       })
+  // If the user pushes more data while we're writing to dest then we'll end up
+  // in ondata again. However, we only want to increase awaitDrain once because
+  // dest will only emit one 'drain' event for the multiple writes.
+  // => Introduce a guard on increasing awaitDrain.
+  var increasedAwaitDrain = false;
+  src.on('data', ondata);
+  function ondata(chunk) {
+    debug('ondata');
+    increasedAwaitDrain = false;
+    var ret = dest.write(chunk);
+    if (false === ret && !increasedAwaitDrain) {
+      // If the user unpiped during `dest.write()`, it is possible
+      // to get stuck in a permanently paused state if that write
+      // also returned false.
+      // => Check whether `dest` is still a piping destination.
+      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
+        debug('false write response, pause', src._readableState.awaitDrain);
+        src._readableState.awaitDrain++;
+        increasedAwaitDrain = true;
+      }
+      src.pause();
+    }
+  }
 
-       var preferBinary
-       var useFetch = true
-       if (opts.mode === 'disable-fetch' || 'timeout' in opts) {
-               // If the use of XHR should be preferred and includes preserving the 'content-type' header.
-               // Force XHR to be used since the Fetch API does not yet support timeouts.
-               useFetch = false
-               preferBinary = true
-       } else if (opts.mode === 'prefer-streaming') {
-               // If streaming is a high priority but binary compatibility and
-               // the accuracy of the 'content-type' header aren't
-               preferBinary = false
-       } else if (opts.mode === 'allow-wrong-content-type') {
-               // If streaming is more important than preserving the 'content-type' header
-               preferBinary = !capability.overrideMimeType
-       } else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {
-               // Use binary if text streaming may corrupt data or the content-type header, or for speed
-               preferBinary = true
-       } else {
-               throw new Error('Invalid value for opts.mode')
-       }
-       self._mode = decideMode(preferBinary, useFetch)
+  // if the dest has an error, then stop piping into it.
+  // however, don't suppress the throwing behavior for this.
+  function onerror(er) {
+    debug('onerror', er);
+    unpipe();
+    dest.removeListener('error', onerror);
+    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
+  }
+
+  // Make sure our error handler is attached before userland ones.
+  prependListener(dest, 'error', onerror);
+
+  // Both close and finish should trigger unpipe, but only once.
+  function onclose() {
+    dest.removeListener('finish', onfinish);
+    unpipe();
+  }
+  dest.once('close', onclose);
+  function onfinish() {
+    debug('onfinish');
+    dest.removeListener('close', onclose);
+    unpipe();
+  }
+  dest.once('finish', onfinish);
 
-       self.on('finish', function () {
-               self._onFinish()
-       })
-}
+  function unpipe() {
+    debug('unpipe');
+    src.unpipe(dest);
+  }
 
-inherits(ClientRequest, stream.Writable)
+  // tell the dest that it's being piped to
+  dest.emit('pipe', src);
 
-ClientRequest.prototype.setHeader = function (name, value) {
-       var self = this
-       var lowerName = name.toLowerCase()
-       // This check is not necessary, but it prevents warnings from browsers about setting unsafe
-       // headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but
-       // http-browserify did it, so I will too.
-       if (unsafeHeaders.indexOf(lowerName) !== -1)
-               return
+  // start the flow if it hasn't been started already.
+  if (!state.flowing) {
+    debug('pipe resume');
+    src.resume();
+  }
 
-       self._headers[lowerName] = {
-               name: name,
-               value: value
-       }
-}
+  return dest;
+};
 
-ClientRequest.prototype.getHeader = function (name) {
-       var self = this
-       return self._headers[name.toLowerCase()].value
+function pipeOnDrain(src) {
+  return function () {
+    var state = src._readableState;
+    debug('pipeOnDrain', state.awaitDrain);
+    if (state.awaitDrain) state.awaitDrain--;
+    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
+      state.flowing = true;
+      flow(src);
+    }
+  };
 }
 
-ClientRequest.prototype.removeHeader = function (name) {
-       var self = this
-       delete self._headers[name.toLowerCase()]
-}
+Readable.prototype.unpipe = function (dest) {
+  var state = this._readableState;
 
-ClientRequest.prototype._onFinish = function () {
-       var self = this
+  // if we're not piping anywhere, then do nothing.
+  if (state.pipesCount === 0) return this;
 
-       if (self._destroyed)
-               return
-       var opts = self._opts
+  // just one destination.  most common case.
+  if (state.pipesCount === 1) {
+    // passed in one, but it's not the right one.
+    if (dest && dest !== state.pipes) return this;
 
-       var headersObj = self._headers
-       var body = null
-       if (opts.method !== 'GET' && opts.method !== 'HEAD') {
-               if (capability.blobConstructor) {
-                       body = new global.Blob(self._body.map(function (buffer) {
-                               return toArrayBuffer(buffer)
-                       }), {
-                               type: (headersObj['content-type'] || {}).value || ''
-                       })
-               } else {
-                       // get utf8 string
-                       body = Buffer.concat(self._body).toString()
-               }
-       }
+    if (!dest) dest = state.pipes;
 
-       // create flattened list of headers
-       var headersList = []
-       Object.keys(headersObj).forEach(function (keyName) {
-               var name = headersObj[keyName].name
-               var value = headersObj[keyName].value
-               if (Array.isArray(value)) {
-                       value.forEach(function (v) {
-                               headersList.push([name, v])
-                       })
-               } else {
-                       headersList.push([name, value])
-               }
-       })
+    // got a match.
+    state.pipes = null;
+    state.pipesCount = 0;
+    state.flowing = false;
+    if (dest) dest.emit('unpipe', this);
+    return this;
+  }
 
-       if (self._mode === 'fetch') {
-               global.fetch(self._opts.url, {
-                       method: self._opts.method,
-                       headers: headersList,
-                       body: body || undefined,
-                       mode: 'cors',
-                       credentials: opts.withCredentials ? 'include' : 'same-origin'
-               }).then(function (response) {
-                       self._fetchResponse = response
-                       self._connect()
-               }, function (reason) {
-                       self.emit('error', reason)
-               })
-       } else {
-               var xhr = self._xhr = new global.XMLHttpRequest()
-               try {
-                       xhr.open(self._opts.method, self._opts.url, true)
-               } catch (err) {
-                       process.nextTick(function () {
-                               self.emit('error', err)
-                       })
-                       return
-               }
+  // slow case. multiple pipe destinations.
 
-               // Can't set responseType on really old browsers
-               if ('responseType' in xhr)
-                       xhr.responseType = self._mode.split(':')[0]
+  if (!dest) {
+    // remove all.
+    var dests = state.pipes;
+    var len = state.pipesCount;
+    state.pipes = null;
+    state.pipesCount = 0;
+    state.flowing = false;
 
-               if ('withCredentials' in xhr)
-                       xhr.withCredentials = !!opts.withCredentials
+    for (var i = 0; i < len; i++) {
+      dests[i].emit('unpipe', this);
+    }return this;
+  }
 
-               if (self._mode === 'text' && 'overrideMimeType' in xhr)
-                       xhr.overrideMimeType('text/plain; charset=x-user-defined')
+  // try to find the right one.
+  var index = indexOf(state.pipes, dest);
+  if (index === -1) return this;
 
-               if ('timeout' in opts) {
-                       xhr.timeout = opts.timeout
-                       xhr.ontimeout = function () {
-                               self.emit('timeout')
-                       }
-               }
+  state.pipes.splice(index, 1);
+  state.pipesCount -= 1;
+  if (state.pipesCount === 1) state.pipes = state.pipes[0];
 
-               headersList.forEach(function (header) {
-                       xhr.setRequestHeader(header[0], header[1])
-               })
+  dest.emit('unpipe', this);
 
-               self._response = null
-               xhr.onreadystatechange = function () {
-                       switch (xhr.readyState) {
-                               case rStates.LOADING:
-                               case rStates.DONE:
-                                       self._onXHRProgress()
-                                       break
-                       }
-               }
-               // Necessary for streaming in Firefox, since xhr.response is ONLY defined
-               // in onprogress, not in onreadystatechange with xhr.readyState = 3
-               if (self._mode === 'moz-chunked-arraybuffer') {
-                       xhr.onprogress = function () {
-                               self._onXHRProgress()
-                       }
-               }
+  return this;
+};
 
-               xhr.onerror = function () {
-                       if (self._destroyed)
-                               return
-                       self.emit('error', new Error('XHR error'))
-               }
+// set up data events if they are asked for
+// Ensure readable listeners eventually get something
+Readable.prototype.on = function (ev, fn) {
+  var res = Stream.prototype.on.call(this, ev, fn);
 
-               try {
-                       xhr.send(body)
-               } catch (err) {
-                       process.nextTick(function () {
-                               self.emit('error', err)
-                       })
-                       return
-               }
-       }
+  if (ev === 'data') {
+    // Start flowing on next tick if stream isn't explicitly paused
+    if (this._readableState.flowing !== false) this.resume();
+  } else if (ev === 'readable') {
+    var state = this._readableState;
+    if (!state.endEmitted && !state.readableListening) {
+      state.readableListening = state.needReadable = true;
+      state.emittedReadable = false;
+      if (!state.reading) {
+        processNextTick(nReadingNextTick, this);
+      } else if (state.length) {
+        emitReadable(this, state);
+      }
+    }
+  }
+
+  return res;
+};
+Readable.prototype.addListener = Readable.prototype.on;
+
+function nReadingNextTick(self) {
+  debug('readable nexttick read 0');
+  self.read(0);
 }
 
-/**
- * Checks if xhr.status is readable and non-zero, indicating no error.
- * Even though the spec says it should be available in readyState 3,
- * accessing it throws an exception in IE8
- */
-function statusValid (xhr) {
-       try {
-               var status = xhr.status
-               return (status !== null && status !== 0)
-       } catch (e) {
-               return false
-       }
+// pause() and resume() are remnants of the legacy readable stream API
+// If the user uses them, then switch into old mode.
+Readable.prototype.resume = function () {
+  var state = this._readableState;
+  if (!state.flowing) {
+    debug('resume');
+    state.flowing = true;
+    resume(this, state);
+  }
+  return this;
+};
+
+function resume(stream, state) {
+  if (!state.resumeScheduled) {
+    state.resumeScheduled = true;
+    processNextTick(resume_, stream, state);
+  }
 }
 
-ClientRequest.prototype._onXHRProgress = function () {
-       var self = this
+function resume_(stream, state) {
+  if (!state.reading) {
+    debug('resume read 0');
+    stream.read(0);
+  }
 
-       if (!statusValid(self._xhr) || self._destroyed)
-               return
+  state.resumeScheduled = false;
+  state.awaitDrain = 0;
+  stream.emit('resume');
+  flow(stream);
+  if (state.flowing && !state.reading) stream.read(0);
+}
 
-       if (!self._response)
-               self._connect()
+Readable.prototype.pause = function () {
+  debug('call pause flowing=%j', this._readableState.flowing);
+  if (false !== this._readableState.flowing) {
+    debug('pause');
+    this._readableState.flowing = false;
+    this.emit('pause');
+  }
+  return this;
+};
 
-       self._response._onXHRProgress()
+function flow(stream) {
+  var state = stream._readableState;
+  debug('flow', state.flowing);
+  while (state.flowing && stream.read() !== null) {}
 }
 
-ClientRequest.prototype._connect = function () {
-       var self = this
+// wrap an old-style stream as the async data source.
+// This is *not* part of the readable stream interface.
+// It is an ugly unfortunate mess of history.
+Readable.prototype.wrap = function (stream) {
+  var state = this._readableState;
+  var paused = false;
 
-       if (self._destroyed)
-               return
+  var self = this;
+  stream.on('end', function () {
+    debug('wrapped end');
+    if (state.decoder && !state.ended) {
+      var chunk = state.decoder.end();
+      if (chunk && chunk.length) self.push(chunk);
+    }
 
-       self._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode)
-       self._response.on('error', function(err) {
-               self.emit('error', err)
-       })
+    self.push(null);
+  });
 
-       self.emit('response', self._response)
-}
+  stream.on('data', function (chunk) {
+    debug('wrapped data');
+    if (state.decoder) chunk = state.decoder.write(chunk);
 
-ClientRequest.prototype._write = function (chunk, encoding, cb) {
-       var self = this
+    // don't skip over falsy values in objectMode
+    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
 
-       self._body.push(chunk)
-       cb()
-}
+    var ret = self.push(chunk);
+    if (!ret) {
+      paused = true;
+      stream.pause();
+    }
+  });
 
-ClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () {
-       var self = this
-       self._destroyed = true
-       if (self._response)
-               self._response._destroyed = true
-       if (self._xhr)
-               self._xhr.abort()
-       // Currently, there isn't a way to truly abort a fetch.
-       // If you like bikeshedding, see https://github.com/whatwg/fetch/issues/27
-}
+  // proxy all the other methods.
+  // important when wrapping filters and duplexes.
+  for (var i in stream) {
+    if (this[i] === undefined && typeof stream[i] === 'function') {
+      this[i] = function (method) {
+        return function () {
+          return stream[method].apply(stream, arguments);
+        };
+      }(i);
+    }
+  }
 
-ClientRequest.prototype.end = function (data, encoding, cb) {
-       var self = this
-       if (typeof data === 'function') {
-               cb = data
-               data = undefined
-       }
+  // proxy certain important events.
+  for (var n = 0; n < kProxyEvents.length; n++) {
+    stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
+  }
 
-       stream.Writable.prototype.end.call(self, data, encoding, cb)
-}
+  // when we try to consume some more bytes, simply unpause the
+  // underlying stream.
+  self._read = function (n) {
+    debug('wrapped _read', n);
+    if (paused) {
+      paused = false;
+      stream.resume();
+    }
+  };
 
-ClientRequest.prototype.flushHeaders = function () {}
-ClientRequest.prototype.setTimeout = function () {}
-ClientRequest.prototype.setNoDelay = function () {}
-ClientRequest.prototype.setSocketKeepAlive = function () {}
+  return self;
+};
 
-// Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method
-var unsafeHeaders = [
-       'accept-charset',
-       'accept-encoding',
-       'access-control-request-headers',
-       'access-control-request-method',
-       'connection',
-       'content-length',
-       'cookie',
-       'cookie2',
-       'date',
-       'dnt',
-       'expect',
-       'host',
-       'keep-alive',
-       'origin',
-       'referer',
-       'te',
-       'trailer',
-       'transfer-encoding',
-       'upgrade',
-       'user-agent',
-       'via'
-]
+// exposed for testing purposes only.
+Readable._fromList = fromList;
 
-}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
-},{"./capability":154,"./response":156,"_process":111,"buffer":5,"inherits":104,"readable-stream":124,"to-arraybuffer":157}],156:[function(require,module,exports){
-(function (process,global,Buffer){
-var capability = require('./capability')
-var inherits = require('inherits')
-var stream = require('readable-stream')
+// Pluck off n bytes from an array of buffers.
+// Length is the combined lengths of all the buffers in the list.
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function fromList(n, state) {
+  // nothing buffered
+  if (state.length === 0) return null;
 
-var rStates = exports.readyStates = {
-       UNSENT: 0,
-       OPENED: 1,
-       HEADERS_RECEIVED: 2,
-       LOADING: 3,
-       DONE: 4
-}
+  var ret;
+  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
+    // read it all, truncate the list
+    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
+    state.buffer.clear();
+  } else {
+    // read part of list
+    ret = fromListPartial(n, state.buffer, state.decoder);
+  }
 
-var IncomingMessage = exports.IncomingMessage = function (xhr, response, mode) {
-       var self = this
-       stream.Readable.call(self)
+  return ret;
+}
 
-       self._mode = mode
-       self.headers = {}
-       self.rawHeaders = []
-       self.trailers = {}
-       self.rawTrailers = []
+// Extracts only enough buffered data to satisfy the amount requested.
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function fromListPartial(n, list, hasStrings) {
+  var ret;
+  if (n < list.head.data.length) {
+    // slice is the same for buffers and strings
+    ret = list.head.data.slice(0, n);
+    list.head.data = list.head.data.slice(n);
+  } else if (n === list.head.data.length) {
+    // first chunk is a perfect match
+    ret = list.shift();
+  } else {
+    // result spans more than one buffer
+    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
+  }
+  return ret;
+}
 
-       // Fake the 'close' event, but only once 'end' fires
-       self.on('end', function () {
-               // The nextTick is necessary to prevent the 'request' module from causing an infinite loop
-               process.nextTick(function () {
-                       self.emit('close')
-               })
-       })
+// Copies a specified amount of characters from the list of buffered data
+// chunks.
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function copyFromBufferString(n, list) {
+  var p = list.head;
+  var c = 1;
+  var ret = p.data;
+  n -= ret.length;
+  while (p = p.next) {
+    var str = p.data;
+    var nb = n > str.length ? str.length : n;
+    if (nb === str.length) ret += str;else ret += str.slice(0, n);
+    n -= nb;
+    if (n === 0) {
+      if (nb === str.length) {
+        ++c;
+        if (p.next) list.head = p.next;else list.head = list.tail = null;
+      } else {
+        list.head = p;
+        p.data = str.slice(nb);
+      }
+      break;
+    }
+    ++c;
+  }
+  list.length -= c;
+  return ret;
+}
 
-       if (mode === 'fetch') {
-               self._fetchResponse = response
+// Copies a specified amount of bytes from the list of buffered data chunks.
+// This function is designed to be inlinable, so please take care when making
+// changes to the function body.
+function copyFromBuffer(n, list) {
+  var ret = bufferShim.allocUnsafe(n);
+  var p = list.head;
+  var c = 1;
+  p.data.copy(ret);
+  n -= p.data.length;
+  while (p = p.next) {
+    var buf = p.data;
+    var nb = n > buf.length ? buf.length : n;
+    buf.copy(ret, ret.length - n, 0, nb);
+    n -= nb;
+    if (n === 0) {
+      if (nb === buf.length) {
+        ++c;
+        if (p.next) list.head = p.next;else list.head = list.tail = null;
+      } else {
+        list.head = p;
+        p.data = buf.slice(nb);
+      }
+      break;
+    }
+    ++c;
+  }
+  list.length -= c;
+  return ret;
+}
 
-               self.url = response.url
-               self.statusCode = response.status
-               self.statusMessage = response.statusText
-               
-               response.headers.forEach(function(header, key){
-                       self.headers[key.toLowerCase()] = header
-                       self.rawHeaders.push(key, header)
-               })
+function endReadable(stream) {
+  var state = stream._readableState;
 
+  // If we get here before consuming all the bytes, then that is a
+  // bug in node.  Should never happen.
+  if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
 
-               // TODO: this doesn't respect backpressure. Once WritableStream is available, this can be fixed
-               var reader = response.body.getReader()
-               function read () {
-                       reader.read().then(function (result) {
-                               if (self._destroyed)
-                                       return
-                               if (result.done) {
-                                       self.push(null)
-                                       return
-                               }
-                               self.push(new Buffer(result.value))
-                               read()
-                       }).catch(function(err) {
-                               self.emit('error', err)
-                       })
-               }
-               read()
+  if (!state.endEmitted) {
+    state.ended = true;
+    processNextTick(endReadableNT, state, stream);
+  }
+}
 
-       } else {
-               self._xhr = xhr
-               self._pos = 0
+function endReadableNT(state, stream) {
+  // Check that we didn't get one last unshift.
+  if (!state.endEmitted && state.length === 0) {
+    state.endEmitted = true;
+    stream.readable = false;
+    stream.emit('end');
+  }
+}
 
-               self.url = xhr.responseURL
-               self.statusCode = xhr.status
-               self.statusMessage = xhr.statusText
-               var headers = xhr.getAllResponseHeaders().split(/\r?\n/)
-               headers.forEach(function (header) {
-                       var matches = header.match(/^([^:]+):\s*(.*)/)
-                       if (matches) {
-                               var key = matches[1].toLowerCase()
-                               if (key === 'set-cookie') {
-                                       if (self.headers[key] === undefined) {
-                                               self.headers[key] = []
-                                       }
-                                       self.headers[key].push(matches[2])
-                               } else if (self.headers[key] !== undefined) {
-                                       self.headers[key] += ', ' + matches[2]
-                               } else {
-                                       self.headers[key] = matches[2]
-                               }
-                               self.rawHeaders.push(matches[1], matches[2])
-                       }
-               })
+function forEach(xs, f) {
+  for (var i = 0, l = xs.length; i < l; i++) {
+    f(xs[i], i);
+  }
+}
 
-               self._charset = 'x-user-defined'
-               if (!capability.overrideMimeType) {
-                       var mimeType = self.rawHeaders['mime-type']
-                       if (mimeType) {
-                               var charsetMatch = mimeType.match(/;\s*charset=([^;])(;|$)/)
-                               if (charsetMatch) {
-                                       self._charset = charsetMatch[1].toLowerCase()
-                               }
-                       }
-                       if (!self._charset)
-                               self._charset = 'utf-8' // best guess
-               }
-       }
+function indexOf(xs, x) {
+  for (var i = 0, l = xs.length; i < l; i++) {
+    if (xs[i] === x) return i;
+  }
+  return -1;
 }
+}).call(this,require('_process'))
+},{"./_stream_duplex":119,"./internal/streams/BufferList":124,"./internal/streams/stream":125,"_process":114,"buffer":5,"buffer-shims":4,"core-util-is":102,"events":103,"inherits":107,"isarray":109,"process-nextick-args":113,"string_decoder/":126,"util":2}],122:[function(require,module,exports){
+// a transform stream is a readable/writable stream where you do
+// something with the data.  Sometimes it's called a "filter",
+// but that's not a great name for it, since that implies a thing where
+// some bits pass through, and others are simply ignored.  (That would
+// be a valid example of a transform, of course.)
+//
+// While the output is causally related to the input, it's not a
+// necessarily symmetric or synchronous transformation.  For example,
+// a zlib stream might take multiple plain-text writes(), and then
+// emit a single compressed chunk some time in the future.
+//
+// Here's how this works:
+//
+// The Transform stream has all the aspects of the readable and writable
+// stream classes.  When you write(chunk), that calls _write(chunk,cb)
+// internally, and returns false if there's a lot of pending writes
+// buffered up.  When you call read(), that calls _read(n) until
+// there's enough pending readable data buffered up.
+//
+// In a transform stream, the written data is placed in a buffer.  When
+// _read(n) is called, it transforms the queued up data, calling the
+// buffered _write cb's as it consumes chunks.  If consuming a single
+// written chunk would result in multiple output chunks, then the first
+// outputted bit calls the readcb, and subsequent chunks just go into
+// the read buffer, and will cause it to emit 'readable' if necessary.
+//
+// This way, back-pressure is actually determined by the reading side,
+// since _read has to be called to start processing a new chunk.  However,
+// a pathological inflate type of transform can cause excessive buffering
+// here.  For example, imagine a stream where every byte of input is
+// interpreted as an integer from 0-255, and then results in that many
+// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
+// 1kb of data being output.  In this case, you could write a very small
+// amount of input, and end up with a very large amount of output.  In
+// such a pathological inflating mechanism, there'd be no way to tell
+// the system to stop doing the transform.  A single 4MB write could
+// cause the system to run out of memory.
+//
+// However, even in such a pathological case, only a single written chunk
+// would be consumed, and then the rest would wait (un-transformed) until
+// the results of the previous transformed chunk were consumed.
 
-inherits(IncomingMessage, stream.Readable)
+'use strict';
 
-IncomingMessage.prototype._read = function () {}
+module.exports = Transform;
 
-IncomingMessage.prototype._onXHRProgress = function () {
-       var self = this
+var Duplex = require('./_stream_duplex');
 
-       var xhr = self._xhr
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
 
-       var response = null
-       switch (self._mode) {
-               case 'text:vbarray': // For IE9
-                       if (xhr.readyState !== rStates.DONE)
-                               break
-                       try {
-                               // This fails in IE8
-                               response = new global.VBArray(xhr.responseBody).toArray()
-                       } catch (e) {}
-                       if (response !== null) {
-                               self.push(new Buffer(response))
-                               break
-                       }
-                       // Falls through in IE8 
-               case 'text':
-                       try { // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4
-                               response = xhr.responseText
-                       } catch (e) {
-                               self._mode = 'text:vbarray'
-                               break
-                       }
-                       if (response.length > self._pos) {
-                               var newData = response.substr(self._pos)
-                               if (self._charset === 'x-user-defined') {
-                                       var buffer = new Buffer(newData.length)
-                                       for (var i = 0; i < newData.length; i++)
-                                               buffer[i] = newData.charCodeAt(i) & 0xff
+util.inherits(Transform, Duplex);
 
-                                       self.push(buffer)
-                               } else {
-                                       self.push(newData, self._charset)
-                               }
-                               self._pos = response.length
-                       }
-                       break
-               case 'arraybuffer':
-                       if (xhr.readyState !== rStates.DONE || !xhr.response)
-                               break
-                       response = xhr.response
-                       self.push(new Buffer(new Uint8Array(response)))
-                       break
-               case 'moz-chunked-arraybuffer': // take whole
-                       response = xhr.response
-                       if (xhr.readyState !== rStates.LOADING || !response)
-                               break
-                       self.push(new Buffer(new Uint8Array(response)))
-                       break
-               case 'ms-stream':
-                       response = xhr.response
-                       if (xhr.readyState !== rStates.LOADING)
-                               break
-                       var reader = new global.MSStreamReader()
-                       reader.onprogress = function () {
-                               if (reader.result.byteLength > self._pos) {
-                                       self.push(new Buffer(new Uint8Array(reader.result.slice(self._pos))))
-                                       self._pos = reader.result.byteLength
-                               }
-                       }
-                       reader.onload = function () {
-                               self.push(null)
-                       }
-                       // reader.onerror = ??? // TODO: this
-                       reader.readAsArrayBuffer(response)
-                       break
-       }
+function TransformState(stream) {
+  this.afterTransform = function (er, data) {
+    return afterTransform(stream, er, data);
+  };
 
-       // The ms-stream case handles end separately in reader.onload()
-       if (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {
-               self.push(null)
-       }
+  this.needTransform = false;
+  this.transforming = false;
+  this.writecb = null;
+  this.writechunk = null;
+  this.writeencoding = null;
 }
 
-}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
-},{"./capability":154,"_process":111,"buffer":5,"inherits":104,"readable-stream":124}],157:[function(require,module,exports){
-var Buffer = require('buffer').Buffer
+function afterTransform(stream, er, data) {
+  var ts = stream._transformState;
+  ts.transforming = false;
 
-module.exports = function (buf) {
-       // If the buffer is backed by a Uint8Array, a faster version will work
-       if (buf instanceof Uint8Array) {
-               // If the buffer isn't a subarray, return the underlying ArrayBuffer
-               if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
-                       return buf.buffer
-               } else if (typeof buf.buffer.slice === 'function') {
-                       // Otherwise we need to get a proper copy
-                       return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)
-               }
-       }
+  var cb = ts.writecb;
 
-       if (Buffer.isBuffer(buf)) {
-               // This is the slow version that will work with any Buffer
-               // implementation (even in old browsers)
-               var arrayCopy = new Uint8Array(buf.length)
-               var len = buf.length
-               for (var i = 0; i < len; i++) {
-                       arrayCopy[i] = buf[i]
-               }
-               return arrayCopy.buffer
-       } else {
-               throw new Error('Argument must be a Buffer')
-       }
-}
+  if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
 
-},{"buffer":5}],158:[function(require,module,exports){
-(function (Buffer){
-var sys = require("util");
-var MOZ_SourceMap = require("source-map");
-var UglifyJS = exports;
-/***********************************************************************
+  ts.writechunk = null;
+  ts.writecb = null;
 
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
+  if (data !== null && data !== undefined) stream.push(data);
 
-  -------------------------------- (C) ---------------------------------
+  cb(er);
 
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
+  var rs = stream._readableState;
+  rs.reading = false;
+  if (rs.needReadable || rs.length < rs.highWaterMark) {
+    stream._read(rs.highWaterMark);
+  }
+}
 
-  Distributed under the BSD license:
+function Transform(options) {
+  if (!(this instanceof Transform)) return new Transform(options);
 
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
+  Duplex.call(this, options);
 
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
+  this._transformState = new TransformState(this);
 
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
+  var stream = this;
 
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
+  // start out asking for a readable event once data is transformed.
+  this._readableState.needReadable = true;
 
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
+  // we have implemented the _read method, and done the other things
+  // that Readable wants before the first _read call, so unset the
+  // sync guard flag.
+  this._readableState.sync = false;
 
- ***********************************************************************/
+  if (options) {
+    if (typeof options.transform === 'function') this._transform = options.transform;
 
-"use strict";
+    if (typeof options.flush === 'function') this._flush = options.flush;
+  }
 
-function array_to_hash(a) {
-    var ret = Object.create(null);
-    for (var i = 0; i < a.length; ++i)
-        ret[a[i]] = true;
-    return ret;
-};
+  // When the writable side finishes, then flush out anything remaining.
+  this.once('prefinish', function () {
+    if (typeof this._flush === 'function') this._flush(function (er, data) {
+      done(stream, er, data);
+    });else done(stream);
+  });
+}
 
-function slice(a, start) {
-    return Array.prototype.slice.call(a, start || 0);
+Transform.prototype.push = function (chunk, encoding) {
+  this._transformState.needTransform = false;
+  return Duplex.prototype.push.call(this, chunk, encoding);
 };
 
-function characters(str) {
-    return str.split("");
+// This is the part where you do stuff!
+// override this function in implementation classes.
+// 'chunk' is an input chunk.
+//
+// Call `push(newChunk)` to pass along transformed output
+// to the readable side.  You may call 'push' zero or more times.
+//
+// Call `cb(err)` when you are done with this chunk.  If you pass
+// an error, then that'll put the hurt on the whole operation.  If you
+// never call cb(), then you'll never get another chunk.
+Transform.prototype._transform = function (chunk, encoding, cb) {
+  throw new Error('_transform() is not implemented');
 };
 
-function member(name, array) {
-    return array.indexOf(name) >= 0;
+Transform.prototype._write = function (chunk, encoding, cb) {
+  var ts = this._transformState;
+  ts.writecb = cb;
+  ts.writechunk = chunk;
+  ts.writeencoding = encoding;
+  if (!ts.transforming) {
+    var rs = this._readableState;
+    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
+  }
 };
 
-function find_if(func, array) {
-    for (var i = 0, n = array.length; i < n; ++i) {
-        if (func(array[i]))
-            return array[i];
-    }
-};
+// Doesn't matter what the args are here.
+// _transform does all the work.
+// That we got here means that the readable side wants more data.
+Transform.prototype._read = function (n) {
+  var ts = this._transformState;
 
-function repeat_string(str, i) {
-    if (i <= 0) return "";
-    if (i == 1) return str;
-    var d = repeat_string(str, i >> 1);
-    d += d;
-    if (i & 1) d += str;
-    return d;
+  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
+    ts.transforming = true;
+    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+  } else {
+    // mark that we need a transform, so that any data that comes in
+    // will get processed, now that we've asked for it.
+    ts.needTransform = true;
+  }
 };
 
-function configure_error_stack(fn) {
-    Object.defineProperty(fn.prototype, "stack", {
-        get: function() {
-            var err = new Error(this.message);
-            err.name = this.name;
-            try {
-                throw err;
-            } catch(e) {
-                return e.stack;
-            }
-        }
-    });
-}
+function done(stream, er, data) {
+  if (er) return stream.emit('error', er);
 
-function DefaultsError(msg, defs) {
-    this.message = msg;
-    this.defs = defs;
-};
-DefaultsError.prototype = Object.create(Error.prototype);
-DefaultsError.prototype.constructor = DefaultsError;
-DefaultsError.prototype.name = "DefaultsError";
-configure_error_stack(DefaultsError);
+  if (data !== null && data !== undefined) stream.push(data);
 
-DefaultsError.croak = function(msg, defs) {
-    throw new DefaultsError(msg, defs);
-};
+  // if there's nothing in the write buffer, then that means
+  // that nothing more will ever be provided
+  var ws = stream._writableState;
+  var ts = stream._transformState;
 
-function defaults(args, defs, croak) {
-    if (args === true)
-        args = {};
-    var ret = args || {};
-    if (croak) for (var i in ret) if (HOP(ret, i) && !HOP(defs, i))
-        DefaultsError.croak("`" + i + "` is not a supported option", defs);
-    for (var i in defs) if (HOP(defs, i)) {
-        ret[i] = (args && HOP(args, i)) ? args[i] : defs[i];
-    }
-    return ret;
-};
+  if (ws.length) throw new Error('Calling transform done when ws.length != 0');
 
-function merge(obj, ext) {
-    var count = 0;
-    for (var i in ext) if (HOP(ext, i)) {
-        obj[i] = ext[i];
-        count++;
-    }
-    return count;
-};
+  if (ts.transforming) throw new Error('Calling transform done when still transforming');
 
-function noop() {}
-function return_false() { return false; }
-function return_true() { return true; }
-function return_this() { return this; }
-function return_null() { return null; }
-
-var MAP = (function(){
-    function MAP(a, f, backwards) {
-        var ret = [], top = [], i;
-        function doit() {
-            var val = f(a[i], i);
-            var is_last = val instanceof Last;
-            if (is_last) val = val.v;
-            if (val instanceof AtTop) {
-                val = val.v;
-                if (val instanceof Splice) {
-                    top.push.apply(top, backwards ? val.v.slice().reverse() : val.v);
-                } else {
-                    top.push(val);
-                }
-            }
-            else if (val !== skip) {
-                if (val instanceof Splice) {
-                    ret.push.apply(ret, backwards ? val.v.slice().reverse() : val.v);
-                } else {
-                    ret.push(val);
-                }
-            }
-            return is_last;
-        };
-        if (a instanceof Array) {
-            if (backwards) {
-                for (i = a.length; --i >= 0;) if (doit()) break;
-                ret.reverse();
-                top.reverse();
-            } else {
-                for (i = 0; i < a.length; ++i) if (doit()) break;
-            }
-        }
-        else {
-            for (i in a) if (HOP(a, i)) if (doit()) break;
-        }
-        return top.concat(ret);
-    };
-    MAP.at_top = function(val) { return new AtTop(val) };
-    MAP.splice = function(val) { return new Splice(val) };
-    MAP.last = function(val) { return new Last(val) };
-    var skip = MAP.skip = {};
-    function AtTop(val) { this.v = val };
-    function Splice(val) { this.v = val };
-    function Last(val) { this.v = val };
-    return MAP;
-})();
+  return stream.push(null);
+}
+},{"./_stream_duplex":119,"core-util-is":102,"inherits":107}],123:[function(require,module,exports){
+(function (process){
+// A bit simpler than readable streams.
+// Implement an async ._write(chunk, encoding, cb), and it'll handle all
+// the drain event emission and buffering.
 
-function push_uniq(array, el) {
-    if (array.indexOf(el) < 0)
-        array.push(el);
-};
+'use strict';
 
-function string_template(text, props) {
-    return text.replace(/\{(.+?)\}/g, function(str, p){
-        return props && props[p];
-    });
-};
+module.exports = Writable;
 
-function remove(array, el) {
-    for (var i = array.length; --i >= 0;) {
-        if (array[i] === el) array.splice(i, 1);
-    }
-};
+/*<replacement>*/
+var processNextTick = require('process-nextick-args');
+/*</replacement>*/
 
-function mergeSort(array, cmp) {
-    if (array.length < 2) return array.slice();
-    function merge(a, b) {
-        var r = [], ai = 0, bi = 0, i = 0;
-        while (ai < a.length && bi < b.length) {
-            cmp(a[ai], b[bi]) <= 0
-                ? r[i++] = a[ai++]
-                : r[i++] = b[bi++];
-        }
-        if (ai < a.length) r.push.apply(r, a.slice(ai));
-        if (bi < b.length) r.push.apply(r, b.slice(bi));
-        return r;
-    };
-    function _ms(a) {
-        if (a.length <= 1)
-            return a;
-        var m = Math.floor(a.length / 2), left = a.slice(0, m), right = a.slice(m);
-        left = _ms(left);
-        right = _ms(right);
-        return merge(left, right);
-    };
-    return _ms(array);
-};
+/*<replacement>*/
+var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
+/*</replacement>*/
 
-function set_difference(a, b) {
-    return a.filter(function(el){
-        return b.indexOf(el) < 0;
-    });
-};
+/*<replacement>*/
+var Duplex;
+/*</replacement>*/
 
-function set_intersection(a, b) {
-    return a.filter(function(el){
-        return b.indexOf(el) >= 0;
-    });
-};
+Writable.WritableState = WritableState;
 
-// this function is taken from Acorn [1], written by Marijn Haverbeke
-// [1] https://github.com/marijnh/acorn
-function makePredicate(words) {
-    if (!(words instanceof Array)) words = words.split(" ");
-    var f = "", cats = [];
-    out: for (var i = 0; i < words.length; ++i) {
-        for (var j = 0; j < cats.length; ++j)
-            if (cats[j][0].length == words[i].length) {
-                cats[j].push(words[i]);
-                continue out;
-            }
-        cats.push([words[i]]);
-    }
-    function quote(word) {
-        return JSON.stringify(word).replace(/[\u2028\u2029]/g, function(s) {
-            switch (s) {
-                case "\u2028": return "\\u2028";
-                case "\u2029": return "\\u2029";
-            }
-            return s;
-        });
-    }
-    function compareTo(arr) {
-        if (arr.length == 1) return f += "return str === " + quote(arr[0]) + ";";
-        f += "switch(str){";
-        for (var i = 0; i < arr.length; ++i) f += "case " + quote(arr[i]) + ":";
-        f += "return true}return false;";
-    }
-    // When there are more than three length categories, an outer
-    // switch first dispatches on the lengths, to save on comparisons.
-    if (cats.length > 3) {
-        cats.sort(function(a, b) {return b.length - a.length;});
-        f += "switch(str.length){";
-        for (var i = 0; i < cats.length; ++i) {
-            var cat = cats[i];
-            f += "case " + cat[0].length + ":";
-            compareTo(cat);
-        }
-        f += "}";
-        // Otherwise, simply generate a flat `switch` statement.
-    } else {
-        compareTo(words);
-    }
-    return new Function("str", f);
-};
+/*<replacement>*/
+var util = require('core-util-is');
+util.inherits = require('inherits');
+/*</replacement>*/
 
-function all(array, predicate) {
-    for (var i = array.length; --i >= 0;)
-        if (!predicate(array[i]))
-            return false;
-    return true;
+/*<replacement>*/
+var internalUtil = {
+  deprecate: require('util-deprecate')
 };
+/*</replacement>*/
 
-function Dictionary() {
-    this._values = Object.create(null);
-    this._size = 0;
-};
-Dictionary.prototype = {
-    set: function(key, val) {
-        if (!this.has(key)) ++this._size;
-        this._values["$" + key] = val;
-        return this;
-    },
-    add: function(key, val) {
-        if (this.has(key)) {
-            this.get(key).push(val);
-        } else {
-            this.set(key, [ val ]);
-        }
-        return this;
-    },
-    get: function(key) { return this._values["$" + key] },
-    del: function(key) {
-        if (this.has(key)) {
-            --this._size;
-            delete this._values["$" + key];
-        }
-        return this;
-    },
-    has: function(key) { return ("$" + key) in this._values },
-    each: function(f) {
-        for (var i in this._values)
-            f(this._values[i], i.substr(1));
-    },
-    size: function() {
-        return this._size;
-    },
-    map: function(f) {
-        var ret = [];
-        for (var i in this._values)
-            ret.push(f(this._values[i], i.substr(1)));
-        return ret;
-    },
-    toObject: function() { return this._values }
-};
-Dictionary.fromObject = function(obj) {
-    var dict = new Dictionary();
-    dict._size = merge(dict._values, obj);
-    return dict;
-};
+/*<replacement>*/
+var Stream = require('./internal/streams/stream');
+/*</replacement>*/
 
-function HOP(obj, prop) {
-    return Object.prototype.hasOwnProperty.call(obj, prop);
-}
-
-// return true if the node at the top of the stack (that means the
-// innermost node in the current output) is lexically the first in
-// a statement.
-function first_in_statement(stack) {
-    var node = stack.parent(-1);
-    for (var i = 0, p; p = stack.parent(i); i++) {
-        if (p instanceof AST_Statement && p.body === node)
-            return true;
-        if ((p instanceof AST_Seq           && p.car === node        ) ||
-            (p instanceof AST_Call          && p.expression === node && !(p instanceof AST_New) ) ||
-            (p instanceof AST_Dot           && p.expression === node ) ||
-            (p instanceof AST_Sub           && p.expression === node ) ||
-            (p instanceof AST_Conditional   && p.condition === node  ) ||
-            (p instanceof AST_Binary        && p.left === node       ) ||
-            (p instanceof AST_UnaryPostfix  && p.expression === node ))
-        {
-            node = p;
-        } else {
-            return false;
-        }
-    }
+var Buffer = require('buffer').Buffer;
+/*<replacement>*/
+var bufferShim = require('buffer-shims');
+/*</replacement>*/
+
+util.inherits(Writable, Stream);
+
+function nop() {}
+
+function WriteReq(chunk, encoding, cb) {
+  this.chunk = chunk;
+  this.encoding = encoding;
+  this.callback = cb;
+  this.next = null;
 }
 
-/***********************************************************************
+function WritableState(options, stream) {
+  Duplex = Duplex || require('./_stream_duplex');
+
+  options = options || {};
+
+  // object stream flag to indicate whether or not this stream
+  // contains buffers or objects.
+  this.objectMode = !!options.objectMode;
+
+  if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+  // the point at which write() starts returning false
+  // Note: 0 is a valid value, means that we always return false if
+  // the entire buffer is not flushed immediately on write()
+  var hwm = options.highWaterMark;
+  var defaultHwm = this.objectMode ? 16 : 16 * 1024;
+  this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
+
+  // cast to ints.
+  this.highWaterMark = ~~this.highWaterMark;
+
+  // drain event flag.
+  this.needDrain = false;
+  // at the start of calling end()
+  this.ending = false;
+  // when end() has been called, and returned
+  this.ended = false;
+  // when 'finish' is emitted
+  this.finished = false;
+
+  // should we decode strings into buffers before passing to _write?
+  // this is here so that some node-core streams can optimize string
+  // handling at a lower level.
+  var noDecode = options.decodeStrings === false;
+  this.decodeStrings = !noDecode;
+
+  // Crypto is kind of old and crusty.  Historically, its default string
+  // encoding is 'binary' so we have to make this configurable.
+  // Everything else in the universe uses 'utf8', though.
+  this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+  // not an actual buffer we keep track of, but a measurement
+  // of how much we're waiting to get pushed to some underlying
+  // socket or file.
+  this.length = 0;
+
+  // a flag to see when we're in the middle of a write.
+  this.writing = false;
+
+  // when true all writes will be buffered until .uncork() call
+  this.corked = 0;
+
+  // a flag to be able to tell if the onwrite cb is called immediately,
+  // or on a later tick.  We set this to true at first, because any
+  // actions that shouldn't happen until "later" should generally also
+  // not happen before the first write call.
+  this.sync = true;
+
+  // a flag to know if we're processing previously buffered items, which
+  // may call the _write() callback in the same tick, so that we don't
+  // end up in an overlapped onwrite situation.
+  this.bufferProcessing = false;
+
+  // the callback that's passed to _write(chunk,cb)
+  this.onwrite = function (er) {
+    onwrite(stream, er);
+  };
 
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
+  // the callback that the user supplies to write(chunk,encoding,cb)
+  this.writecb = null;
 
-  -------------------------------- (C) ---------------------------------
+  // the amount that is being written when _write is called.
+  this.writelen = 0;
 
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
+  this.bufferedRequest = null;
+  this.lastBufferedRequest = null;
 
-  Distributed under the BSD license:
+  // number of pending user-supplied write callbacks
+  // this must be 0 before 'finish' can be emitted
+  this.pendingcb = 0;
 
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
+  // emit prefinish if the only thing we're waiting for is _write cbs
+  // This is relevant for synchronous Transform streams
+  this.prefinished = false;
 
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
+  // True if the error was already emitted and should not be thrown again
+  this.errorEmitted = false;
 
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
+  // count buffered requests
+  this.bufferedRequestCount = 0;
 
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
+  // allocate the first CorkedRequest, there is always
+  // one allocated and free to use, and we maintain at most two
+  this.corkedRequestsFree = new CorkedRequest(this);
+}
 
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
+WritableState.prototype.getBuffer = function getBuffer() {
+  var current = this.bufferedRequest;
+  var out = [];
+  while (current) {
+    out.push(current);
+    current = current.next;
+  }
+  return out;
+};
 
- ***********************************************************************/
+(function () {
+  try {
+    Object.defineProperty(WritableState.prototype, 'buffer', {
+      get: internalUtil.deprecate(function () {
+        return this.getBuffer();
+      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
+    });
+  } catch (_) {}
+})();
 
-"use strict";
+// Test _writableState for inheritance to account for Duplex streams,
+// whose prototype chain only points to Readable.
+var realHasInstance;
+if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
+  realHasInstance = Function.prototype[Symbol.hasInstance];
+  Object.defineProperty(Writable, Symbol.hasInstance, {
+    value: function (object) {
+      if (realHasInstance.call(this, object)) return true;
 
-function DEFNODE(type, props, methods, base) {
-    if (arguments.length < 4) base = AST_Node;
-    if (!props) props = [];
-    else props = props.split(/\s+/);
-    var self_props = props;
-    if (base && base.PROPS)
-        props = props.concat(base.PROPS);
-    var code = "return function AST_" + type + "(props){ if (props) { ";
-    for (var i = props.length; --i >= 0;) {
-        code += "this." + props[i] + " = props." + props[i] + ";";
-    }
-    var proto = base && new base;
-    if (proto && proto.initialize || (methods && methods.initialize))
-        code += "this.initialize();";
-    code += "}}";
-    var ctor = new Function(code)();
-    if (proto) {
-        ctor.prototype = proto;
-        ctor.BASE = base;
-    }
-    if (base) base.SUBCLASSES.push(ctor);
-    ctor.prototype.CTOR = ctor;
-    ctor.PROPS = props || null;
-    ctor.SELF_PROPS = self_props;
-    ctor.SUBCLASSES = [];
-    if (type) {
-        ctor.prototype.TYPE = ctor.TYPE = type;
-    }
-    if (methods) for (i in methods) if (HOP(methods, i)) {
-        if (/^\$/.test(i)) {
-            ctor[i.substr(1)] = methods[i];
-        } else {
-            ctor.prototype[i] = methods[i];
-        }
-    }
-    ctor.DEFMETHOD = function(name, method) {
-        this.prototype[name] = method;
-    };
-    if (typeof exports !== "undefined") {
-        exports["AST_" + type] = ctor;
+      return object && object._writableState instanceof WritableState;
     }
-    return ctor;
-};
+  });
+} else {
+  realHasInstance = function (object) {
+    return object instanceof this;
+  };
+}
 
-var AST_Token = DEFNODE("Token", "type value line col pos endline endcol endpos nlb comments_before file raw", {
-}, null);
+function Writable(options) {
+  Duplex = Duplex || require('./_stream_duplex');
 
-var AST_Node = DEFNODE("Node", "start end", {
-    _clone: function(deep) {
-        if (deep) {
-            var self = this.clone();
-            return self.transform(new TreeTransformer(function(node) {
-                if (node !== self) {
-                    return node.clone(true);
-                }
-            }));
-        }
-        return new this.CTOR(this);
-    },
-    clone: function(deep) {
-        return this._clone(deep);
-    },
-    $documentation: "Base class of all AST nodes",
-    $propdoc: {
-        start: "[AST_Token] The first token of this node",
-        end: "[AST_Token] The last token of this node"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this);
-    },
-    walk: function(visitor) {
-        return this._walk(visitor); // not sure the indirection will be any help
-    }
-}, null);
+  // Writable ctor is applied to Duplexes, too.
+  // `realHasInstance` is necessary because using plain `instanceof`
+  // would return false, as no `_writableState` property is attached.
 
-AST_Node.warn_function = null;
-AST_Node.warn = function(txt, props) {
-    if (AST_Node.warn_function)
-        AST_Node.warn_function(string_template(txt, props));
-};
+  // Trying to use the custom `instanceof` for Writable here will also break the
+  // Node.js LazyTransform implementation, which has a non-trivial getter for
+  // `_writableState` that would lead to infinite recursion.
+  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
+    return new Writable(options);
+  }
 
-/* -----[ statements ]----- */
+  this._writableState = new WritableState(options, this);
 
-var AST_Statement = DEFNODE("Statement", null, {
-    $documentation: "Base class of all statements",
-});
+  // legacy.
+  this.writable = true;
 
-var AST_Debugger = DEFNODE("Debugger", null, {
-    $documentation: "Represents a debugger statement",
-}, AST_Statement);
+  if (options) {
+    if (typeof options.write === 'function') this._write = options.write;
 
-var AST_Directive = DEFNODE("Directive", "value scope quote", {
-    $documentation: "Represents a directive, like \"use strict\";",
-    $propdoc: {
-        value: "[string] The value of this directive as a plain string (it's not an AST_String!)",
-        scope: "[AST_Scope/S] The scope that this directive affects",
-        quote: "[string] the original quote character"
-    },
-}, AST_Statement);
+    if (typeof options.writev === 'function') this._writev = options.writev;
+  }
 
-var AST_SimpleStatement = DEFNODE("SimpleStatement", "body", {
-    $documentation: "A statement consisting of an expression, i.e. a = 1 + 2",
-    $propdoc: {
-        body: "[AST_Node] an expression node (should not be instanceof AST_Statement)"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.body._walk(visitor);
-        });
-    }
-}, AST_Statement);
+  Stream.call(this);
+}
 
-function walk_body(node, visitor) {
-    var body = node.body;
-    if (body instanceof AST_Statement) {
-        body._walk(visitor);
-    }
-    else for (var i = 0, len = body.length; i < len; i++) {
-        body[i]._walk(visitor);
-    }
+// Otherwise people can pipe Writable streams, which is just wrong.
+Writable.prototype.pipe = function () {
+  this.emit('error', new Error('Cannot pipe, not readable'));
 };
 
-var AST_Block = DEFNODE("Block", "body", {
-    $documentation: "A body of statements (usually bracketed)",
-    $propdoc: {
-        body: "[AST_Statement*] an array of statements"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            walk_body(this, visitor);
-        });
-    }
-}, AST_Statement);
+function writeAfterEnd(stream, cb) {
+  var er = new Error('write after end');
+  // TODO: defer error events consistently everywhere, not just the cb
+  stream.emit('error', er);
+  processNextTick(cb, er);
+}
 
-var AST_BlockStatement = DEFNODE("BlockStatement", null, {
-    $documentation: "A block statement",
-}, AST_Block);
+// Checks that a user-supplied chunk is valid, especially for the particular
+// mode the stream is in. Currently this means that `null` is never accepted
+// and undefined/non-string values are only allowed in object mode.
+function validChunk(stream, state, chunk, cb) {
+  var valid = true;
+  var er = false;
 
-var AST_EmptyStatement = DEFNODE("EmptyStatement", null, {
-    $documentation: "The empty statement (empty block or simply a semicolon)",
-    _walk: function(visitor) {
-        return visitor._visit(this);
-    }
-}, AST_Statement);
+  if (chunk === null) {
+    er = new TypeError('May not write null values to stream');
+  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
+    er = new TypeError('Invalid non-string/buffer chunk');
+  }
+  if (er) {
+    stream.emit('error', er);
+    processNextTick(cb, er);
+    valid = false;
+  }
+  return valid;
+}
 
-var AST_StatementWithBody = DEFNODE("StatementWithBody", "body", {
-    $documentation: "Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`",
-    $propdoc: {
-        body: "[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.body._walk(visitor);
-        });
-    }
-}, AST_Statement);
+Writable.prototype.write = function (chunk, encoding, cb) {
+  var state = this._writableState;
+  var ret = false;
+  var isBuf = Buffer.isBuffer(chunk);
 
-var AST_LabeledStatement = DEFNODE("LabeledStatement", "label", {
-    $documentation: "Statement with a label",
-    $propdoc: {
-        label: "[AST_Label] a label definition"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.label._walk(visitor);
-            this.body._walk(visitor);
-        });
-    },
-    clone: function(deep) {
-        var node = this._clone(deep);
-        if (deep) {
-            var refs = node.label.references;
-            var label = this.label;
-            node.walk(new TreeWalker(function(node) {
-                if (node instanceof AST_LoopControl
-                    && node.label && node.label.thedef === label) {
-                    refs.push(node);
-                }
-            }));
-        }
-        return node;
-    }
-}, AST_StatementWithBody);
+  if (typeof encoding === 'function') {
+    cb = encoding;
+    encoding = null;
+  }
 
-var AST_IterationStatement = DEFNODE("IterationStatement", null, {
-    $documentation: "Internal class.  All loops inherit from it."
-}, AST_StatementWithBody);
+  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
 
-var AST_DWLoop = DEFNODE("DWLoop", "condition", {
-    $documentation: "Base class for do/while statements",
-    $propdoc: {
-        condition: "[AST_Node] the loop condition.  Should not be instanceof AST_Statement"
-    }
-}, AST_IterationStatement);
+  if (typeof cb !== 'function') cb = nop;
 
-var AST_Do = DEFNODE("Do", null, {
-    $documentation: "A `do` statement",
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.body._walk(visitor);
-            this.condition._walk(visitor);
-        });
-    }
-}, AST_DWLoop);
+  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
+    state.pendingcb++;
+    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
+  }
 
-var AST_While = DEFNODE("While", null, {
-    $documentation: "A `while` statement",
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.condition._walk(visitor);
-            this.body._walk(visitor);
-        });
-    }
-}, AST_DWLoop);
+  return ret;
+};
 
-var AST_For = DEFNODE("For", "init condition step", {
-    $documentation: "A `for` statement",
-    $propdoc: {
-        init: "[AST_Node?] the `for` initialization code, or null if empty",
-        condition: "[AST_Node?] the `for` termination clause, or null if empty",
-        step: "[AST_Node?] the `for` update clause, or null if empty"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            if (this.init) this.init._walk(visitor);
-            if (this.condition) this.condition._walk(visitor);
-            if (this.step) this.step._walk(visitor);
-            this.body._walk(visitor);
-        });
-    }
-}, AST_IterationStatement);
+Writable.prototype.cork = function () {
+  var state = this._writableState;
 
-var AST_ForIn = DEFNODE("ForIn", "init name object", {
-    $documentation: "A `for ... in` statement",
-    $propdoc: {
-        init: "[AST_Node] the `for/in` initialization code",
-        name: "[AST_SymbolRef?] the loop variable, only if `init` is AST_Var",
-        object: "[AST_Node] the object that we're looping through"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.init._walk(visitor);
-            this.object._walk(visitor);
-            this.body._walk(visitor);
-        });
-    }
-}, AST_IterationStatement);
+  state.corked++;
+};
 
-var AST_With = DEFNODE("With", "expression", {
-    $documentation: "A `with` statement",
-    $propdoc: {
-        expression: "[AST_Node] the `with` expression"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.expression._walk(visitor);
-            this.body._walk(visitor);
-        });
-    }
-}, AST_StatementWithBody);
-
-/* -----[ scope and functions ]----- */
-
-var AST_Scope = DEFNODE("Scope", "directives variables functions uses_with uses_eval parent_scope enclosed cname", {
-    $documentation: "Base class for all statements introducing a lexical scope",
-    $propdoc: {
-        directives: "[string*/S] an array of directives declared in this scope",
-        variables: "[Object/S] a map of name -> SymbolDef for all variables/functions defined in this scope",
-        functions: "[Object/S] like `variables`, but only lists function declarations",
-        uses_with: "[boolean/S] tells whether this scope uses the `with` statement",
-        uses_eval: "[boolean/S] tells whether this scope contains a direct call to the global `eval`",
-        parent_scope: "[AST_Scope?/S] link to the parent scope",
-        enclosed: "[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes",
-        cname: "[integer/S] current index for mangling variables (used internally by the mangler)",
-    },
-}, AST_Block);
+Writable.prototype.uncork = function () {
+  var state = this._writableState;
 
-var AST_Toplevel = DEFNODE("Toplevel", "globals", {
-    $documentation: "The toplevel scope",
-    $propdoc: {
-        globals: "[Object/S] a map of name -> SymbolDef for all undeclared names",
-    },
-    wrap_enclose: function(arg_parameter_pairs) {
-        var self = this;
-        var args = [];
-        var parameters = [];
+  if (state.corked) {
+    state.corked--;
 
-        arg_parameter_pairs.forEach(function(pair) {
-            var splitAt = pair.lastIndexOf(":");
+    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
+  }
+};
 
-            args.push(pair.substr(0, splitAt));
-            parameters.push(pair.substr(splitAt + 1));
-        });
+Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
+  // node::ParseEncoding() requires lower case.
+  if (typeof encoding === 'string') encoding = encoding.toLowerCase();
+  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
+  this._writableState.defaultEncoding = encoding;
+  return this;
+};
 
-        var wrapped_tl = "(function(" + parameters.join(",") + "){ '$ORIG'; })(" + args.join(",") + ")";
-        wrapped_tl = parse(wrapped_tl);
-        wrapped_tl = wrapped_tl.transform(new TreeTransformer(function before(node){
-            if (node instanceof AST_Directive && node.value == "$ORIG") {
-                return MAP.splice(self.body);
-            }
-        }));
-        return wrapped_tl;
-    },
-    wrap_commonjs: function(name, export_all) {
-        var self = this;
-        var to_export = [];
-        if (export_all) {
-            self.figure_out_scope();
-            self.walk(new TreeWalker(function(node){
-                if (node instanceof AST_SymbolDeclaration && node.definition().global) {
-                    if (!find_if(function(n){ return n.name == node.name }, to_export))
-                        to_export.push(node);
-                }
-            }));
-        }
-        var wrapped_tl = "(function(exports, global){ '$ORIG'; '$EXPORTS'; global['" + name + "'] = exports; }({}, (function(){return this}())))";
-        wrapped_tl = parse(wrapped_tl);
-        wrapped_tl = wrapped_tl.transform(new TreeTransformer(function before(node){
-            if (node instanceof AST_Directive) {
-                switch (node.value) {
-                  case "$ORIG":
-                    return MAP.splice(self.body);
-                  case "$EXPORTS":
-                    var body = [];
-                    to_export.forEach(function(sym){
-                        body.push(new AST_SimpleStatement({
-                            body: new AST_Assign({
-                                left: new AST_Sub({
-                                    expression: new AST_SymbolRef({ name: "exports" }),
-                                    property: new AST_String({ value: sym.name }),
-                                }),
-                                operator: "=",
-                                right: new AST_SymbolRef(sym),
-                            }),
-                        }));
-                    });
-                    return MAP.splice(body);
-                }
-            }
-        }));
-        return wrapped_tl;
-    }
-}, AST_Scope);
+function decodeChunk(state, chunk, encoding) {
+  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
+    chunk = bufferShim.from(chunk, encoding);
+  }
+  return chunk;
+}
 
-var AST_Lambda = DEFNODE("Lambda", "name argnames uses_arguments", {
-    $documentation: "Base class for functions",
-    $propdoc: {
-        name: "[AST_SymbolDeclaration?] the name of this function",
-        argnames: "[AST_SymbolFunarg*] array of function arguments",
-        uses_arguments: "[boolean/S] tells whether this function accesses the arguments array"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            if (this.name) this.name._walk(visitor);
-            var argnames = this.argnames;
-            for (var i = 0, len = argnames.length; i < len; i++) {
-                argnames[i]._walk(visitor);
-            }
-            walk_body(this, visitor);
-        });
+// if we're already writing something, then just put this
+// in the queue, and wait our turn.  Otherwise, call _write
+// If we return false, then we need a drain event, so set that flag.
+function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
+  if (!isBuf) {
+    chunk = decodeChunk(state, chunk, encoding);
+    if (Buffer.isBuffer(chunk)) encoding = 'buffer';
+  }
+  var len = state.objectMode ? 1 : chunk.length;
+
+  state.length += len;
+
+  var ret = state.length < state.highWaterMark;
+  // we must ensure that previous needDrain will not be reset to false.
+  if (!ret) state.needDrain = true;
+
+  if (state.writing || state.corked) {
+    var last = state.lastBufferedRequest;
+    state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
+    if (last) {
+      last.next = state.lastBufferedRequest;
+    } else {
+      state.bufferedRequest = state.lastBufferedRequest;
     }
-}, AST_Scope);
+    state.bufferedRequestCount += 1;
+  } else {
+    doWrite(stream, state, false, len, chunk, encoding, cb);
+  }
 
-var AST_Accessor = DEFNODE("Accessor", null, {
-    $documentation: "A setter/getter function.  The `name` property is always null."
-}, AST_Lambda);
+  return ret;
+}
 
-var AST_Function = DEFNODE("Function", null, {
-    $documentation: "A function expression"
-}, AST_Lambda);
+function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+  state.writelen = len;
+  state.writecb = cb;
+  state.writing = true;
+  state.sync = true;
+  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
+  state.sync = false;
+}
 
-var AST_Defun = DEFNODE("Defun", null, {
-    $documentation: "A function definition"
-}, AST_Lambda);
+function onwriteError(stream, state, sync, er, cb) {
+  --state.pendingcb;
+  if (sync) processNextTick(cb, er);else cb(er);
 
-/* -----[ JUMPS ]----- */
+  stream._writableState.errorEmitted = true;
+  stream.emit('error', er);
+}
 
-var AST_Jump = DEFNODE("Jump", null, {
-    $documentation: "Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)"
-}, AST_Statement);
+function onwriteStateUpdate(state) {
+  state.writing = false;
+  state.writecb = null;
+  state.length -= state.writelen;
+  state.writelen = 0;
+}
 
-var AST_Exit = DEFNODE("Exit", "value", {
-    $documentation: "Base class for “exits” (`return` and `throw`)",
-    $propdoc: {
-        value: "[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, this.value && function(){
-            this.value._walk(visitor);
-        });
-    }
-}, AST_Jump);
+function onwrite(stream, er) {
+  var state = stream._writableState;
+  var sync = state.sync;
+  var cb = state.writecb;
 
-var AST_Return = DEFNODE("Return", null, {
-    $documentation: "A `return` statement"
-}, AST_Exit);
+  onwriteStateUpdate(state);
 
-var AST_Throw = DEFNODE("Throw", null, {
-    $documentation: "A `throw` statement"
-}, AST_Exit);
+  if (er) onwriteError(stream, state, sync, er, cb);else {
+    // Check if we're actually ready to finish, but don't emit yet
+    var finished = needFinish(state);
 
-var AST_LoopControl = DEFNODE("LoopControl", "label", {
-    $documentation: "Base class for loop control statements (`break` and `continue`)",
-    $propdoc: {
-        label: "[AST_LabelRef?] the label, or null if none",
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, this.label && function(){
-            this.label._walk(visitor);
-        });
+    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
+      clearBuffer(stream, state);
     }
-}, AST_Jump);
-
-var AST_Break = DEFNODE("Break", null, {
-    $documentation: "A `break` statement"
-}, AST_LoopControl);
-
-var AST_Continue = DEFNODE("Continue", null, {
-    $documentation: "A `continue` statement"
-}, AST_LoopControl);
-
-/* -----[ IF ]----- */
 
-var AST_If = DEFNODE("If", "condition alternative", {
-    $documentation: "A `if` statement",
-    $propdoc: {
-        condition: "[AST_Node] the `if` condition",
-        alternative: "[AST_Statement?] the `else` part, or null if not present"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.condition._walk(visitor);
-            this.body._walk(visitor);
-            if (this.alternative) this.alternative._walk(visitor);
-        });
+    if (sync) {
+      /*<replacement>*/
+      asyncWrite(afterWrite, stream, state, finished, cb);
+      /*</replacement>*/
+    } else {
+      afterWrite(stream, state, finished, cb);
     }
-}, AST_StatementWithBody);
+  }
+}
 
-/* -----[ SWITCH ]----- */
+function afterWrite(stream, state, finished, cb) {
+  if (!finished) onwriteDrain(stream, state);
+  state.pendingcb--;
+  cb();
+  finishMaybe(stream, state);
+}
 
-var AST_Switch = DEFNODE("Switch", "expression", {
-    $documentation: "A `switch` statement",
-    $propdoc: {
-        expression: "[AST_Node] the `switch` “discriminant”"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.expression._walk(visitor);
-            walk_body(this, visitor);
-        });
-    }
-}, AST_Block);
+// Must force callback to be called on nextTick, so that we don't
+// emit 'drain' before the write() consumer gets the 'false' return
+// value, and has a chance to attach a 'drain' listener.
+function onwriteDrain(stream, state) {
+  if (state.length === 0 && state.needDrain) {
+    state.needDrain = false;
+    stream.emit('drain');
+  }
+}
 
-var AST_SwitchBranch = DEFNODE("SwitchBranch", null, {
-    $documentation: "Base class for `switch` branches",
-}, AST_Block);
+// if there's something in the buffer waiting, then process it
+function clearBuffer(stream, state) {
+  state.bufferProcessing = true;
+  var entry = state.bufferedRequest;
 
-var AST_Default = DEFNODE("Default", null, {
-    $documentation: "A `default` switch branch",
-}, AST_SwitchBranch);
+  if (stream._writev && entry && entry.next) {
+    // Fast case, write everything using _writev()
+    var l = state.bufferedRequestCount;
+    var buffer = new Array(l);
+    var holder = state.corkedRequestsFree;
+    holder.entry = entry;
 
-var AST_Case = DEFNODE("Case", "expression", {
-    $documentation: "A `case` switch branch",
-    $propdoc: {
-        expression: "[AST_Node] the `case` expression"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.expression._walk(visitor);
-            walk_body(this, visitor);
-        });
+    var count = 0;
+    while (entry) {
+      buffer[count] = entry;
+      entry = entry.next;
+      count += 1;
     }
-}, AST_SwitchBranch);
 
-/* -----[ EXCEPTIONS ]----- */
+    doWrite(stream, state, true, state.length, buffer, '', holder.finish);
 
-var AST_Try = DEFNODE("Try", "bcatch bfinally", {
-    $documentation: "A `try` statement",
-    $propdoc: {
-        bcatch: "[AST_Catch?] the catch block, or null if not present",
-        bfinally: "[AST_Finally?] the finally block, or null if not present"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            walk_body(this, visitor);
-            if (this.bcatch) this.bcatch._walk(visitor);
-            if (this.bfinally) this.bfinally._walk(visitor);
-        });
+    // doWrite is almost always async, defer these to save a bit of time
+    // as the hot path ends with doWrite
+    state.pendingcb++;
+    state.lastBufferedRequest = null;
+    if (holder.next) {
+      state.corkedRequestsFree = holder.next;
+      holder.next = null;
+    } else {
+      state.corkedRequestsFree = new CorkedRequest(state);
     }
-}, AST_Block);
+  } else {
+    // Slow case, write chunks one-by-one
+    while (entry) {
+      var chunk = entry.chunk;
+      var encoding = entry.encoding;
+      var cb = entry.callback;
+      var len = state.objectMode ? 1 : chunk.length;
 
-var AST_Catch = DEFNODE("Catch", "argname", {
-    $documentation: "A `catch` node; only makes sense as part of a `try` statement",
-    $propdoc: {
-        argname: "[AST_SymbolCatch] symbol for the exception"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.argname._walk(visitor);
-            walk_body(this, visitor);
-        });
+      doWrite(stream, state, false, len, chunk, encoding, cb);
+      entry = entry.next;
+      // if we didn't call the onwrite immediately, then
+      // it means that we need to wait until it does.
+      // also, that means that the chunk and cb are currently
+      // being processed, so move the buffer counter past them.
+      if (state.writing) {
+        break;
+      }
     }
-}, AST_Block);
-
-var AST_Finally = DEFNODE("Finally", null, {
-    $documentation: "A `finally` node; only makes sense as part of a `try` statement"
-}, AST_Block);
 
-/* -----[ VAR/CONST ]----- */
-
-var AST_Definitions = DEFNODE("Definitions", "definitions", {
-    $documentation: "Base class for `var` or `const` nodes (variable declarations/initializations)",
-    $propdoc: {
-        definitions: "[AST_VarDef*] array of variable definitions"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            var definitions = this.definitions;
-            for (var i = 0, len = definitions.length; i < len; i++) {
-                definitions[i]._walk(visitor);
-            }
-        });
-    }
-}, AST_Statement);
+    if (entry === null) state.lastBufferedRequest = null;
+  }
 
-var AST_Var = DEFNODE("Var", null, {
-    $documentation: "A `var` statement"
-}, AST_Definitions);
+  state.bufferedRequestCount = 0;
+  state.bufferedRequest = entry;
+  state.bufferProcessing = false;
+}
 
-var AST_Const = DEFNODE("Const", null, {
-    $documentation: "A `const` statement"
-}, AST_Definitions);
+Writable.prototype._write = function (chunk, encoding, cb) {
+  cb(new Error('_write() is not implemented'));
+};
 
-var AST_VarDef = DEFNODE("VarDef", "name value", {
-    $documentation: "A variable declaration; only appears in a AST_Definitions node",
-    $propdoc: {
-        name: "[AST_SymbolVar|AST_SymbolConst] name of the variable",
-        value: "[AST_Node?] initializer, or null of there's no initializer"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.name._walk(visitor);
-            if (this.value) this.value._walk(visitor);
-        });
-    }
-});
+Writable.prototype._writev = null;
 
-/* -----[ OTHER ]----- */
+Writable.prototype.end = function (chunk, encoding, cb) {
+  var state = this._writableState;
 
-var AST_Call = DEFNODE("Call", "expression args", {
-    $documentation: "A function call expression",
-    $propdoc: {
-        expression: "[AST_Node] expression to invoke as function",
-        args: "[AST_Node*] array of arguments"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.expression._walk(visitor);
-            var args = this.args;
-            for (var i = 0, len = args.length; i < len; i++) {
-                args[i]._walk(visitor);
-            }
-        });
-    }
-});
+  if (typeof chunk === 'function') {
+    cb = chunk;
+    chunk = null;
+    encoding = null;
+  } else if (typeof encoding === 'function') {
+    cb = encoding;
+    encoding = null;
+  }
 
-var AST_New = DEFNODE("New", null, {
-    $documentation: "An object instantiation.  Derives from a function call since it has exactly the same properties"
-}, AST_Call);
+  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
 
-var AST_Seq = DEFNODE("Seq", "car cdr", {
-    $documentation: "A sequence expression (two comma-separated expressions)",
-    $propdoc: {
-        car: "[AST_Node] first element in sequence",
-        cdr: "[AST_Node] second element in sequence"
-    },
-    $cons: function(x, y) {
-        var seq = new AST_Seq(x);
-        seq.car = x;
-        seq.cdr = y;
-        return seq;
-    },
-    $from_array: function(array) {
-        if (array.length == 0) return null;
-        if (array.length == 1) return array[0].clone();
-        var list = null;
-        for (var i = array.length; --i >= 0;) {
-            list = AST_Seq.cons(array[i], list);
-        }
-        var p = list;
-        while (p) {
-            if (p.cdr && !p.cdr.cdr) {
-                p.cdr = p.cdr.car;
-                break;
-            }
-            p = p.cdr;
-        }
-        return list;
-    },
-    to_array: function() {
-        var p = this, a = [];
-        while (p) {
-            a.push(p.car);
-            if (p.cdr && !(p.cdr instanceof AST_Seq)) {
-                a.push(p.cdr);
-                break;
-            }
-            p = p.cdr;
-        }
-        return a;
-    },
-    add: function(node) {
-        var p = this;
-        while (p) {
-            if (!(p.cdr instanceof AST_Seq)) {
-                var cell = AST_Seq.cons(p.cdr, node);
-                return p.cdr = cell;
-            }
-            p = p.cdr;
-        }
-    },
-    len: function() {
-        if (this.cdr instanceof AST_Seq) {
-            return this.cdr.len() + 1;
-        } else {
-            return 2;
-        }
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.car._walk(visitor);
-            if (this.cdr) this.cdr._walk(visitor);
-        });
-    }
-});
+  // .end() fully uncorks
+  if (state.corked) {
+    state.corked = 1;
+    this.uncork();
+  }
 
-var AST_PropAccess = DEFNODE("PropAccess", "expression property", {
-    $documentation: "Base class for property access expressions, i.e. `a.foo` or `a[\"foo\"]`",
-    $propdoc: {
-        expression: "[AST_Node] the “container” expression",
-        property: "[AST_Node|string] the property to access.  For AST_Dot this is always a plain string, while for AST_Sub it's an arbitrary AST_Node"
-    }
-});
+  // ignore unnecessary end() calls.
+  if (!state.ending && !state.finished) endWritable(this, state, cb);
+};
 
-var AST_Dot = DEFNODE("Dot", null, {
-    $documentation: "A dotted property access expression",
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.expression._walk(visitor);
-        });
-    }
-}, AST_PropAccess);
+function needFinish(state) {
+  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
+}
 
-var AST_Sub = DEFNODE("Sub", null, {
-    $documentation: "Index-style property access, i.e. `a[\"foo\"]`",
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.expression._walk(visitor);
-            this.property._walk(visitor);
-        });
-    }
-}, AST_PropAccess);
+function prefinish(stream, state) {
+  if (!state.prefinished) {
+    state.prefinished = true;
+    stream.emit('prefinish');
+  }
+}
 
-var AST_Unary = DEFNODE("Unary", "operator expression", {
-    $documentation: "Base class for unary expressions",
-    $propdoc: {
-        operator: "[string] the operator",
-        expression: "[AST_Node] expression that this unary operator applies to"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.expression._walk(visitor);
-        });
+function finishMaybe(stream, state) {
+  var need = needFinish(state);
+  if (need) {
+    if (state.pendingcb === 0) {
+      prefinish(stream, state);
+      state.finished = true;
+      stream.emit('finish');
+    } else {
+      prefinish(stream, state);
     }
-});
+  }
+  return need;
+}
 
-var AST_UnaryPrefix = DEFNODE("UnaryPrefix", null, {
-    $documentation: "Unary prefix expression, i.e. `typeof i` or `++i`"
-}, AST_Unary);
+function endWritable(stream, state, cb) {
+  state.ending = true;
+  finishMaybe(stream, state);
+  if (cb) {
+    if (state.finished) processNextTick(cb);else stream.once('finish', cb);
+  }
+  state.ended = true;
+  stream.writable = false;
+}
 
-var AST_UnaryPostfix = DEFNODE("UnaryPostfix", null, {
-    $documentation: "Unary postfix expression, i.e. `i++`"
-}, AST_Unary);
+// It seems a linked list but it is not
+// there will be only 2 of these for each stream
+function CorkedRequest(state) {
+  var _this = this;
 
-var AST_Binary = DEFNODE("Binary", "left operator right", {
-    $documentation: "Binary expression, i.e. `a + b`",
-    $propdoc: {
-        left: "[AST_Node] left-hand side expression",
-        operator: "[string] the operator",
-        right: "[AST_Node] right-hand side expression"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.left._walk(visitor);
-            this.right._walk(visitor);
-        });
+  this.next = null;
+  this.entry = null;
+  this.finish = function (err) {
+    var entry = _this.entry;
+    _this.entry = null;
+    while (entry) {
+      var cb = entry.callback;
+      state.pendingcb--;
+      cb(err);
+      entry = entry.next;
     }
-});
-
-var AST_Conditional = DEFNODE("Conditional", "condition consequent alternative", {
-    $documentation: "Conditional expression using the ternary operator, i.e. `a ? b : c`",
-    $propdoc: {
-        condition: "[AST_Node]",
-        consequent: "[AST_Node]",
-        alternative: "[AST_Node]"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.condition._walk(visitor);
-            this.consequent._walk(visitor);
-            this.alternative._walk(visitor);
-        });
+    if (state.corkedRequestsFree) {
+      state.corkedRequestsFree.next = _this;
+    } else {
+      state.corkedRequestsFree = _this;
     }
-});
+  };
+}
+}).call(this,require('_process'))
+},{"./_stream_duplex":119,"./internal/streams/stream":125,"_process":114,"buffer":5,"buffer-shims":4,"core-util-is":102,"inherits":107,"process-nextick-args":113,"util-deprecate":163}],124:[function(require,module,exports){
+'use strict';
 
-var AST_Assign = DEFNODE("Assign", null, {
-    $documentation: "An assignment expression — `a = b + 5`",
-}, AST_Binary);
+var Buffer = require('buffer').Buffer;
+/*<replacement>*/
+var bufferShim = require('buffer-shims');
+/*</replacement>*/
 
-/* -----[ LITERALS ]----- */
+module.exports = BufferList;
 
-var AST_Array = DEFNODE("Array", "elements", {
-    $documentation: "An array literal",
-    $propdoc: {
-        elements: "[AST_Node*] array of elements"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            var elements = this.elements;
-            for (var i = 0, len = elements.length; i < len; i++) {
-                elements[i]._walk(visitor);
-            }
-        });
-    }
-});
+function BufferList() {
+  this.head = null;
+  this.tail = null;
+  this.length = 0;
+}
 
-var AST_Object = DEFNODE("Object", "properties", {
-    $documentation: "An object literal",
-    $propdoc: {
-        properties: "[AST_ObjectProperty*] array of properties"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            var properties = this.properties;
-            for (var i = 0, len = properties.length; i < len; i++) {
-                properties[i]._walk(visitor);
-            }
-        });
-    }
-});
+BufferList.prototype.push = function (v) {
+  var entry = { data: v, next: null };
+  if (this.length > 0) this.tail.next = entry;else this.head = entry;
+  this.tail = entry;
+  ++this.length;
+};
+
+BufferList.prototype.unshift = function (v) {
+  var entry = { data: v, next: this.head };
+  if (this.length === 0) this.tail = entry;
+  this.head = entry;
+  ++this.length;
+};
+
+BufferList.prototype.shift = function () {
+  if (this.length === 0) return;
+  var ret = this.head.data;
+  if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
+  --this.length;
+  return ret;
+};
 
-var AST_ObjectProperty = DEFNODE("ObjectProperty", "key value", {
-    $documentation: "Base class for literal object properties",
-    $propdoc: {
-        key: "[string] the property name converted to a string for ObjectKeyVal.  For setters and getters this is an arbitrary AST_Node.",
-        value: "[AST_Node] property value.  For setters and getters this is an AST_Function."
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function(){
-            this.value._walk(visitor);
-        });
-    }
-});
+BufferList.prototype.clear = function () {
+  this.head = this.tail = null;
+  this.length = 0;
+};
 
-var AST_ObjectKeyVal = DEFNODE("ObjectKeyVal", "quote", {
-    $documentation: "A key: value object property",
-    $propdoc: {
-        quote: "[string] the original quote character"
-    }
-}, AST_ObjectProperty);
+BufferList.prototype.join = function (s) {
+  if (this.length === 0) return '';
+  var p = this.head;
+  var ret = '' + p.data;
+  while (p = p.next) {
+    ret += s + p.data;
+  }return ret;
+};
+
+BufferList.prototype.concat = function (n) {
+  if (this.length === 0) return bufferShim.alloc(0);
+  if (this.length === 1) return this.head.data;
+  var ret = bufferShim.allocUnsafe(n >>> 0);
+  var p = this.head;
+  var i = 0;
+  while (p) {
+    p.data.copy(ret, i);
+    i += p.data.length;
+    p = p.next;
+  }
+  return ret;
+};
+},{"buffer":5,"buffer-shims":4}],125:[function(require,module,exports){
+module.exports = require('events').EventEmitter;
 
-var AST_ObjectSetter = DEFNODE("ObjectSetter", null, {
-    $documentation: "An object setter property",
-}, AST_ObjectProperty);
+},{"events":103}],126:[function(require,module,exports){
+'use strict';
 
-var AST_ObjectGetter = DEFNODE("ObjectGetter", null, {
-    $documentation: "An object getter property",
-}, AST_ObjectProperty);
+var Buffer = require('buffer').Buffer;
+var bufferShim = require('buffer-shims');
 
-var AST_Symbol = DEFNODE("Symbol", "scope name thedef", {
-    $propdoc: {
-        name: "[string] name of this symbol",
-        scope: "[AST_Scope/S] the current scope (not necessarily the definition scope)",
-        thedef: "[SymbolDef/S] the definition of this symbol"
-    },
-    $documentation: "Base class for all symbols",
-});
+var isEncoding = Buffer.isEncoding || function (encoding) {
+  encoding = '' + encoding;
+  switch (encoding && encoding.toLowerCase()) {
+    case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':
+      return true;
+    default:
+      return false;
+  }
+};
 
-var AST_SymbolAccessor = DEFNODE("SymbolAccessor", null, {
-    $documentation: "The name of a property accessor (setter/getter function)"
-}, AST_Symbol);
+function _normalizeEncoding(enc) {
+  if (!enc) return 'utf8';
+  var retried;
+  while (true) {
+    switch (enc) {
+      case 'utf8':
+      case 'utf-8':
+        return 'utf8';
+      case 'ucs2':
+      case 'ucs-2':
+      case 'utf16le':
+      case 'utf-16le':
+        return 'utf16le';
+      case 'latin1':
+      case 'binary':
+        return 'latin1';
+      case 'base64':
+      case 'ascii':
+      case 'hex':
+        return enc;
+      default:
+        if (retried) return; // undefined
+        enc = ('' + enc).toLowerCase();
+        retried = true;
+    }
+  }
+};
 
-var AST_SymbolDeclaration = DEFNODE("SymbolDeclaration", "init", {
-    $documentation: "A declaration symbol (symbol in var/const, function name or argument, symbol in catch)",
-}, AST_Symbol);
+// Do not cache `Buffer.isEncoding` when checking encoding names as some
+// modules monkey-patch it to support additional encodings
+function normalizeEncoding(enc) {
+  var nenc = _normalizeEncoding(enc);
+  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
+  return nenc || enc;
+}
 
-var AST_SymbolVar = DEFNODE("SymbolVar", null, {
-    $documentation: "Symbol defining a variable",
-}, AST_SymbolDeclaration);
+// StringDecoder provides an interface for efficiently splitting a series of
+// buffers into a series of JS strings without breaking apart multi-byte
+// characters.
+exports.StringDecoder = StringDecoder;
+function StringDecoder(encoding) {
+  this.encoding = normalizeEncoding(encoding);
+  var nb;
+  switch (this.encoding) {
+    case 'utf16le':
+      this.text = utf16Text;
+      this.end = utf16End;
+      nb = 4;
+      break;
+    case 'utf8':
+      this.fillLast = utf8FillLast;
+      nb = 4;
+      break;
+    case 'base64':
+      this.text = base64Text;
+      this.end = base64End;
+      nb = 3;
+      break;
+    default:
+      this.write = simpleWrite;
+      this.end = simpleEnd;
+      return;
+  }
+  this.lastNeed = 0;
+  this.lastTotal = 0;
+  this.lastChar = bufferShim.allocUnsafe(nb);
+}
 
-var AST_SymbolConst = DEFNODE("SymbolConst", null, {
-    $documentation: "A constant declaration"
-}, AST_SymbolDeclaration);
+StringDecoder.prototype.write = function (buf) {
+  if (buf.length === 0) return '';
+  var r;
+  var i;
+  if (this.lastNeed) {
+    r = this.fillLast(buf);
+    if (r === undefined) return '';
+    i = this.lastNeed;
+    this.lastNeed = 0;
+  } else {
+    i = 0;
+  }
+  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
+  return r || '';
+};
 
-var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, {
-    $documentation: "Symbol naming a function argument",
-}, AST_SymbolVar);
+StringDecoder.prototype.end = utf8End;
 
-var AST_SymbolDefun = DEFNODE("SymbolDefun", null, {
-    $documentation: "Symbol defining a function",
-}, AST_SymbolDeclaration);
+// Returns only complete characters in a Buffer
+StringDecoder.prototype.text = utf8Text;
 
-var AST_SymbolLambda = DEFNODE("SymbolLambda", null, {
-    $documentation: "Symbol naming a function expression",
-}, AST_SymbolDeclaration);
+// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
+StringDecoder.prototype.fillLast = function (buf) {
+  if (this.lastNeed <= buf.length) {
+    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
+    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+  }
+  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
+  this.lastNeed -= buf.length;
+};
 
-var AST_SymbolCatch = DEFNODE("SymbolCatch", null, {
-    $documentation: "Symbol naming the exception in catch",
-}, AST_SymbolDeclaration);
+// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
+// continuation byte.
+function utf8CheckByte(byte) {
+  if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
+  return -1;
+}
 
-var AST_Label = DEFNODE("Label", "references", {
-    $documentation: "Symbol naming a label (declaration)",
-    $propdoc: {
-        references: "[AST_LoopControl*] a list of nodes referring to this label"
-    },
-    initialize: function() {
-        this.references = [];
-        this.thedef = this;
+// Checks at most 3 bytes at the end of a Buffer in order to detect an
+// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
+// needed to complete the UTF-8 character (if applicable) are returned.
+function utf8CheckIncomplete(self, buf, i) {
+  var j = buf.length - 1;
+  if (j < i) return 0;
+  var nb = utf8CheckByte(buf[j]);
+  if (nb >= 0) {
+    if (nb > 0) self.lastNeed = nb - 1;
+    return nb;
+  }
+  if (--j < i) return 0;
+  nb = utf8CheckByte(buf[j]);
+  if (nb >= 0) {
+    if (nb > 0) self.lastNeed = nb - 2;
+    return nb;
+  }
+  if (--j < i) return 0;
+  nb = utf8CheckByte(buf[j]);
+  if (nb >= 0) {
+    if (nb > 0) {
+      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
     }
-}, AST_Symbol);
+    return nb;
+  }
+  return 0;
+}
 
-var AST_SymbolRef = DEFNODE("SymbolRef", null, {
-    $documentation: "Reference to some symbol (not definition/declaration)",
-}, AST_Symbol);
+// Validates as many continuation bytes for a multi-byte UTF-8 character as
+// needed or are available. If we see a non-continuation byte where we expect
+// one, we "replace" the validated continuation bytes we've seen so far with
+// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
+// behavior. The continuation byte check is included three times in the case
+// where all of the continuation bytes for a character exist in the same buffer.
+// It is also done this way as a slight performance increase instead of using a
+// loop.
+function utf8CheckExtraBytes(self, buf, p) {
+  if ((buf[0] & 0xC0) !== 0x80) {
+    self.lastNeed = 0;
+    return '\ufffd'.repeat(p);
+  }
+  if (self.lastNeed > 1 && buf.length > 1) {
+    if ((buf[1] & 0xC0) !== 0x80) {
+      self.lastNeed = 1;
+      return '\ufffd'.repeat(p + 1);
+    }
+    if (self.lastNeed > 2 && buf.length > 2) {
+      if ((buf[2] & 0xC0) !== 0x80) {
+        self.lastNeed = 2;
+        return '\ufffd'.repeat(p + 2);
+      }
+    }
+  }
+}
 
-var AST_LabelRef = DEFNODE("LabelRef", null, {
-    $documentation: "Reference to a label symbol",
-}, AST_Symbol);
+// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
+function utf8FillLast(buf) {
+  var p = this.lastTotal - this.lastNeed;
+  var r = utf8CheckExtraBytes(this, buf, p);
+  if (r !== undefined) return r;
+  if (this.lastNeed <= buf.length) {
+    buf.copy(this.lastChar, p, 0, this.lastNeed);
+    return this.lastChar.toString(this.encoding, 0, this.lastTotal);
+  }
+  buf.copy(this.lastChar, p, 0, buf.length);
+  this.lastNeed -= buf.length;
+}
 
-var AST_This = DEFNODE("This", null, {
-    $documentation: "The `this` symbol",
-}, AST_Symbol);
+// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
+// partial character, the character's bytes are buffered until the required
+// number of bytes are available.
+function utf8Text(buf, i) {
+  var total = utf8CheckIncomplete(this, buf, i);
+  if (!this.lastNeed) return buf.toString('utf8', i);
+  this.lastTotal = total;
+  var end = buf.length - (total - this.lastNeed);
+  buf.copy(this.lastChar, 0, end);
+  return buf.toString('utf8', i, end);
+}
 
-var AST_Constant = DEFNODE("Constant", null, {
-    $documentation: "Base class for all constants",
-    getValue: function() {
-        return this.value;
-    }
-});
+// For UTF-8, a replacement character for each buffered byte of a (partial)
+// character needs to be added to the output.
+function utf8End(buf) {
+  var r = buf && buf.length ? this.write(buf) : '';
+  if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
+  return r;
+}
 
-var AST_String = DEFNODE("String", "value quote", {
-    $documentation: "A string literal",
-    $propdoc: {
-        value: "[string] the contents of this string",
-        quote: "[string] the original quote character"
-    }
-}, AST_Constant);
-
-var AST_Number = DEFNODE("Number", "value literal", {
-    $documentation: "A number literal",
-    $propdoc: {
-        value: "[number] the numeric value",
-        literal: "[string] numeric value as string (optional)"
-    }
-}, AST_Constant);
-
-var AST_RegExp = DEFNODE("RegExp", "value", {
-    $documentation: "A regexp literal",
-    $propdoc: {
-        value: "[RegExp] the actual regexp"
-    }
-}, AST_Constant);
-
-var AST_Atom = DEFNODE("Atom", null, {
-    $documentation: "Base class for atoms",
-}, AST_Constant);
-
-var AST_Null = DEFNODE("Null", null, {
-    $documentation: "The `null` atom",
-    value: null
-}, AST_Atom);
-
-var AST_NaN = DEFNODE("NaN", null, {
-    $documentation: "The impossible value",
-    value: 0/0
-}, AST_Atom);
-
-var AST_Undefined = DEFNODE("Undefined", null, {
-    $documentation: "The `undefined` value",
-    value: (function(){}())
-}, AST_Atom);
-
-var AST_Hole = DEFNODE("Hole", null, {
-    $documentation: "A hole in an array",
-    value: (function(){}())
-}, AST_Atom);
-
-var AST_Infinity = DEFNODE("Infinity", null, {
-    $documentation: "The `Infinity` value",
-    value: 1/0
-}, AST_Atom);
-
-var AST_Boolean = DEFNODE("Boolean", null, {
-    $documentation: "Base class for booleans",
-}, AST_Atom);
-
-var AST_False = DEFNODE("False", null, {
-    $documentation: "The `false` atom",
-    value: false
-}, AST_Boolean);
-
-var AST_True = DEFNODE("True", null, {
-    $documentation: "The `true` atom",
-    value: true
-}, AST_Boolean);
-
-/* -----[ TreeWalker ]----- */
-
-function TreeWalker(callback) {
-    this.visit = callback;
-    this.stack = [];
-    this.directives = Object.create(null);
-};
-TreeWalker.prototype = {
-    _visit: function(node, descend) {
-        this.push(node);
-        var ret = this.visit(node, descend ? function(){
-            descend.call(node);
-        } : noop);
-        if (!ret && descend) {
-            descend.call(node);
-        }
-        this.pop(node);
-        return ret;
-    },
-    parent: function(n) {
-        return this.stack[this.stack.length - 2 - (n || 0)];
-    },
-    push: function (node) {
-        if (node instanceof AST_Lambda) {
-            this.directives = Object.create(this.directives);
-        } else if (node instanceof AST_Directive && !this.directives[node.value]) {
-            this.directives[node.value] = node;
-        }
-        this.stack.push(node);
-    },
-    pop: function(node) {
-        this.stack.pop();
-        if (node instanceof AST_Lambda) {
-            this.directives = Object.getPrototypeOf(this.directives);
-        }
-    },
-    self: function() {
-        return this.stack[this.stack.length - 1];
-    },
-    find_parent: function(type) {
-        var stack = this.stack;
-        for (var i = stack.length; --i >= 0;) {
-            var x = stack[i];
-            if (x instanceof type) return x;
-        }
-    },
-    has_directive: function(type) {
-        var dir = this.directives[type];
-        if (dir) return dir;
-        var node = this.stack[this.stack.length - 1];
-        if (node instanceof AST_Scope) {
-            for (var i = 0; i < node.body.length; ++i) {
-                var st = node.body[i];
-                if (!(st instanceof AST_Directive)) break;
-                if (st.value == type) return st;
-            }
-        }
-    },
-    in_boolean_context: function() {
-        var stack = this.stack;
-        var i = stack.length, self = stack[--i];
-        while (i > 0) {
-            var p = stack[--i];
-            if ((p instanceof AST_If           && p.condition === self) ||
-                (p instanceof AST_Conditional  && p.condition === self) ||
-                (p instanceof AST_DWLoop       && p.condition === self) ||
-                (p instanceof AST_For          && p.condition === self) ||
-                (p instanceof AST_UnaryPrefix  && p.operator == "!" && p.expression === self))
-            {
-                return true;
-            }
-            if (!(p instanceof AST_Binary && (p.operator == "&&" || p.operator == "||")))
-                return false;
-            self = p;
-        }
-    },
-    loopcontrol_target: function(node) {
-        var stack = this.stack;
-        if (node.label) for (var i = stack.length; --i >= 0;) {
-            var x = stack[i];
-            if (x instanceof AST_LabeledStatement && x.label.name == node.label.name)
-                return x.body;
-        } else for (var i = stack.length; --i >= 0;) {
-            var x = stack[i];
-            if (x instanceof AST_IterationStatement
-                || node instanceof AST_Break && x instanceof AST_Switch)
-                return x;
-        }
+// UTF-16LE typically needs two bytes per character, but even if we have an even
+// number of bytes available, we need to check if we end on a leading/high
+// surrogate. In that case, we need to wait for the next two bytes in order to
+// decode the last character properly.
+function utf16Text(buf, i) {
+  if ((buf.length - i) % 2 === 0) {
+    var r = buf.toString('utf16le', i);
+    if (r) {
+      var c = r.charCodeAt(r.length - 1);
+      if (c >= 0xD800 && c <= 0xDBFF) {
+        this.lastNeed = 2;
+        this.lastTotal = 4;
+        this.lastChar[0] = buf[buf.length - 2];
+        this.lastChar[1] = buf[buf.length - 1];
+        return r.slice(0, -1);
+      }
     }
-};
+    return r;
+  }
+  this.lastNeed = 1;
+  this.lastTotal = 2;
+  this.lastChar[0] = buf[buf.length - 1];
+  return buf.toString('utf16le', i, buf.length - 1);
+}
 
-/***********************************************************************
+// For UTF-16LE we do not explicitly append special replacement characters if we
+// end on a partial character, we simply let v8 handle that.
+function utf16End(buf) {
+  var r = buf && buf.length ? this.write(buf) : '';
+  if (this.lastNeed) {
+    var end = this.lastTotal - this.lastNeed;
+    return r + this.lastChar.toString('utf16le', 0, end);
+  }
+  return r;
+}
 
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
+function base64Text(buf, i) {
+  var n = (buf.length - i) % 3;
+  if (n === 0) return buf.toString('base64', i);
+  this.lastNeed = 3 - n;
+  this.lastTotal = 3;
+  if (n === 1) {
+    this.lastChar[0] = buf[buf.length - 1];
+  } else {
+    this.lastChar[0] = buf[buf.length - 2];
+    this.lastChar[1] = buf[buf.length - 1];
+  }
+  return buf.toString('base64', i, buf.length - n);
+}
 
-  -------------------------------- (C) ---------------------------------
+function base64End(buf) {
+  var r = buf && buf.length ? this.write(buf) : '';
+  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
+  return r;
+}
 
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
+// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
+function simpleWrite(buf) {
+  return buf.toString(this.encoding);
+}
 
-  Distributed under the BSD license:
+function simpleEnd(buf) {
+  return buf && buf.length ? this.write(buf) : '';
+}
+},{"buffer":5,"buffer-shims":4}],127:[function(require,module,exports){
+exports = module.exports = require('./lib/_stream_readable.js');
+exports.Stream = exports;
+exports.Readable = exports;
+exports.Writable = require('./lib/_stream_writable.js');
+exports.Duplex = require('./lib/_stream_duplex.js');
+exports.Transform = require('./lib/_stream_transform.js');
+exports.PassThrough = require('./lib/_stream_passthrough.js');
 
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-    Parser based on parse-js (http://marijn.haverbeke.nl/parse-js/).
+},{"./lib/_stream_duplex.js":119,"./lib/_stream_passthrough.js":120,"./lib/_stream_readable.js":121,"./lib/_stream_transform.js":122,"./lib/_stream_writable.js":123}],128:[function(require,module,exports){
+"use strict";
 
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
+module.exports =
+{
+       // Output
+       ABSOLUTE:      "absolute",
+       PATH_RELATIVE: "pathRelative",
+       ROOT_RELATIVE: "rootRelative",
+       SHORTEST:      "shortest"
+};
 
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
+},{}],129:[function(require,module,exports){
+"use strict";
 
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
+var constants = require("./constants");
 
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
 
- ***********************************************************************/
 
-"use strict";
+function formatAuth(urlObj, options)
+{
+       if (urlObj.auth && !options.removeAuth && (urlObj.extra.relation.maximumHost || options.output===constants.ABSOLUTE))
+       {
+               return urlObj.auth + "@";
+       }
+       
+       return "";
+}
 
-var KEYWORDS = 'break case catch const continue debugger default delete do else finally for function if in instanceof new return switch throw try typeof var void while with';
-var KEYWORDS_ATOM = 'false null true';
-var RESERVED_WORDS = 'abstract boolean byte char class double enum export extends final float goto implements import int interface let long native package private protected public short static super synchronized this throws transient volatile yield'
-    + " " + KEYWORDS_ATOM + " " + KEYWORDS;
-var KEYWORDS_BEFORE_EXPRESSION = 'return new delete throw else case';
-
-KEYWORDS = makePredicate(KEYWORDS);
-RESERVED_WORDS = makePredicate(RESERVED_WORDS);
-KEYWORDS_BEFORE_EXPRESSION = makePredicate(KEYWORDS_BEFORE_EXPRESSION);
-KEYWORDS_ATOM = makePredicate(KEYWORDS_ATOM);
-
-var OPERATOR_CHARS = makePredicate(characters("+-*&%=<>!?|~^"));
-
-var RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;
-var RE_OCT_NUMBER = /^0[0-7]+$/;
-
-var OPERATORS = makePredicate([
-    "in",
-    "instanceof",
-    "typeof",
-    "new",
-    "void",
-    "delete",
-    "++",
-    "--",
-    "+",
-    "-",
-    "!",
-    "~",
-    "&",
-    "|",
-    "^",
-    "*",
-    "/",
-    "%",
-    ">>",
-    "<<",
-    ">>>",
-    "<",
-    ">",
-    "<=",
-    ">=",
-    "==",
-    "===",
-    "!=",
-    "!==",
-    "?",
-    "=",
-    "+=",
-    "-=",
-    "/=",
-    "*=",
-    "%=",
-    ">>=",
-    "<<=",
-    ">>>=",
-    "|=",
-    "^=",
-    "&=",
-    "&&",
-    "||"
-]);
 
-var WHITESPACE_CHARS = makePredicate(characters(" \u00a0\n\r\t\f\u000b\u200b\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000\uFEFF"));
 
-var NEWLINE_CHARS = makePredicate(characters("\n\r\u2028\u2029"));
+function formatHash(urlObj, options)
+{
+       return urlObj.hash ? urlObj.hash : "";
+}
 
-var PUNC_BEFORE_EXPRESSION = makePredicate(characters("[{(,.;:"));
 
-var PUNC_CHARS = makePredicate(characters("[]{}(),;:"));
 
-var REGEXP_MODIFIERS = makePredicate(characters("gmsiy"));
+function formatHost(urlObj, options)
+{
+       if (urlObj.host.full && (urlObj.extra.relation.maximumAuth || options.output===constants.ABSOLUTE))
+       {
+               return urlObj.host.full;
+       }
+       
+       return "";
+}
 
-/* -----[ Tokenizer ]----- */
 
-// regexps adapted from http://xregexp.com/plugins/#unicode
-var UNICODE = {
-    letter: new RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),
-    digit: new RegExp("[\\u0030-\\u0039\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]"),
-    non_spacing_mark: new RegExp("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]"),
-    space_combining_mark: new RegExp("[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]"),
-    connector_punctuation: new RegExp("[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]")
-};
 
-function is_letter(code) {
-    return (code >= 97 && code <= 122)
-        || (code >= 65 && code <= 90)
-        || (code >= 0xaa && UNICODE.letter.test(String.fromCharCode(code)));
-};
+function formatPath(urlObj, options)
+{
+       var str = "";
+       
+       var absolutePath = urlObj.path.absolute.string;
+       var relativePath = urlObj.path.relative.string;
+       var resource = showResource(urlObj, options);
+       
+       if (urlObj.extra.relation.maximumHost || options.output===constants.ABSOLUTE || options.output===constants.ROOT_RELATIVE)
+       {
+               str = absolutePath;
+       }
+       else if (relativePath.length<=absolutePath.length && options.output===constants.SHORTEST || options.output===constants.PATH_RELATIVE)
+       {
+               str = relativePath;
+               
+               if (str === "")
+               {
+                       var query = showQuery(urlObj,options) && !!getQuery(urlObj,options);
+                       
+                       if (urlObj.extra.relation.maximumPath && !resource)
+                       {
+                               str = "./";
+                       }
+                       else if (urlObj.extra.relation.overridesQuery && !resource && !query)
+                       {
+                               str = "./";
+                       }
+               }
+       }
+       else
+       {
+               str = absolutePath;
+       }
+       
+       if ( str==="/" && !resource && options.removeRootTrailingSlash && (!urlObj.extra.relation.minimumPort || options.output===constants.ABSOLUTE) )
+       {
+               str = "";
+       }
+       
+       return str;
+}
 
-function is_digit(code) {
-    return code >= 48 && code <= 57;
-};
 
-function is_alphanumeric_char(code) {
-    return is_digit(code) || is_letter(code);
-};
 
-function is_unicode_digit(code) {
-    return UNICODE.digit.test(String.fromCharCode(code));
+function formatPort(urlObj, options)
+{
+       if (urlObj.port && !urlObj.extra.portIsDefault && urlObj.extra.relation.maximumHost)
+       {
+               return ":" + urlObj.port;
+       }
+       
+       return "";
 }
 
-function is_unicode_combining_mark(ch) {
-    return UNICODE.non_spacing_mark.test(ch) || UNICODE.space_combining_mark.test(ch);
-};
 
-function is_unicode_connector_punctuation(ch) {
-    return UNICODE.connector_punctuation.test(ch);
-};
 
-function is_identifier(name) {
-    return !RESERVED_WORDS(name) && /^[a-z_$][a-z0-9_$]*$/i.test(name);
-};
+function formatQuery(urlObj, options)
+{
+       return showQuery(urlObj,options) ? getQuery(urlObj, options) : "";
+}
 
-function is_identifier_start(code) {
-    return code == 36 || code == 95 || is_letter(code);
-};
 
-function is_identifier_char(ch) {
-    var code = ch.charCodeAt(0);
-    return is_identifier_start(code)
-        || is_digit(code)
-        || code == 8204 // \u200c: zero-width non-joiner <ZWNJ>
-        || code == 8205 // \u200d: zero-width joiner <ZWJ> (in my ECMA-262 PDF, this is also 200c)
-        || is_unicode_combining_mark(ch)
-        || is_unicode_connector_punctuation(ch)
-        || is_unicode_digit(code)
-    ;
-};
 
-function is_identifier_string(str){
-    return /^[a-z_$][a-z0-9_$]*$/i.test(str);
-};
+function formatResource(urlObj, options)
+{
+       return showResource(urlObj,options) ? urlObj.resource : "";
+}
 
-function parse_js_number(num) {
-    if (RE_HEX_NUMBER.test(num)) {
-        return parseInt(num.substr(2), 16);
-    } else if (RE_OCT_NUMBER.test(num)) {
-        return parseInt(num.substr(1), 8);
-    } else {
-        var val = parseFloat(num);
-        if (val == num) return val;
-    }
-};
 
-function JS_Parse_Error(message, filename, line, col, pos) {
-    this.message = message;
-    this.filename = filename;
-    this.line = line;
-    this.col = col;
-    this.pos = pos;
-};
-JS_Parse_Error.prototype = Object.create(Error.prototype);
-JS_Parse_Error.prototype.constructor = JS_Parse_Error;
-JS_Parse_Error.prototype.name = "SyntaxError";
-configure_error_stack(JS_Parse_Error);
 
-function js_error(message, filename, line, col, pos) {
-    throw new JS_Parse_Error(message, filename, line, col, pos);
-};
+function formatScheme(urlObj, options)
+{
+       var str = "";
+       
+       if (urlObj.extra.relation.maximumHost || options.output===constants.ABSOLUTE)
+       {
+               if (!urlObj.extra.relation.minimumScheme || !options.schemeRelative || options.output===constants.ABSOLUTE)
+               {
+                       str += urlObj.scheme + "://";
+               }
+               else
+               {
+                       str += "//";
+               }
+       }
+       
+       return str;
+}
 
-function is_token(token, type, val) {
-    return token.type == type && (val == null || token.value == val);
-};
 
-var EX_EOF = {};
-
-function tokenizer($TEXT, filename, html5_comments, shebang) {
-
-    var S = {
-        text            : $TEXT,
-        filename        : filename,
-        pos             : 0,
-        tokpos          : 0,
-        line            : 1,
-        tokline         : 0,
-        col             : 0,
-        tokcol          : 0,
-        newline_before  : false,
-        regex_allowed   : false,
-        comments_before : [],
-        directives      : {},
-        directive_stack : []
-    };
 
-    function peek() { return S.text.charAt(S.pos); };
-
-    function next(signal_eof, in_string) {
-        var ch = S.text.charAt(S.pos++);
-        if (signal_eof && !ch)
-            throw EX_EOF;
-        if (NEWLINE_CHARS(ch)) {
-            S.newline_before = S.newline_before || !in_string;
-            ++S.line;
-            S.col = 0;
-            if (!in_string && ch == "\r" && peek() == "\n") {
-                // treat a \r\n sequence as a single \n
-                ++S.pos;
-                ch = "\n";
-            }
-        } else {
-            ++S.col;
-        }
-        return ch;
-    };
+function formatUrl(urlObj, options)
+{
+       var url = "";
+       
+       url += formatScheme(urlObj, options);
+       url += formatAuth(urlObj, options);
+       url += formatHost(urlObj, options);
+       url += formatPort(urlObj, options);
+       url += formatPath(urlObj, options);
+       url += formatResource(urlObj, options);
+       url += formatQuery(urlObj, options);
+       url += formatHash(urlObj, options);
+       
+       return url;
+}
 
-    function forward(i) {
-        while (i-- > 0) next();
-    };
 
-    function looking_at(str) {
-        return S.text.substr(S.pos, str.length) == str;
-    };
 
-    function find_eol() {
-        var text = S.text;
-        for (var i = S.pos, n = S.text.length; i < n; ++i) {
-            var ch = text[i];
-            if (NEWLINE_CHARS(ch))
-                return i;
-        }
-        return -1;
-    };
+function getQuery(urlObj, options)
+{
+       var stripQuery = options.removeEmptyQueries && urlObj.extra.relation.minimumPort;
+       
+       return urlObj.query.string[ stripQuery ? "stripped" : "full" ];
+}
 
-    function find(what, signal_eof) {
-        var pos = S.text.indexOf(what, S.pos);
-        if (signal_eof && pos == -1) throw EX_EOF;
-        return pos;
-    };
 
-    function start_token() {
-        S.tokline = S.line;
-        S.tokcol = S.col;
-        S.tokpos = S.pos;
-    };
 
-    var prev_was_dot = false;
-    function token(type, value, is_comment) {
-        S.regex_allowed = ((type == "operator" && !UNARY_POSTFIX(value)) ||
-                           (type == "keyword" && KEYWORDS_BEFORE_EXPRESSION(value)) ||
-                           (type == "punc" && PUNC_BEFORE_EXPRESSION(value)));
-        prev_was_dot = (type == "punc" && value == ".");
-        var ret = {
-            type    : type,
-            value   : value,
-            line    : S.tokline,
-            col     : S.tokcol,
-            pos     : S.tokpos,
-            endline : S.line,
-            endcol  : S.col,
-            endpos  : S.pos,
-            nlb     : S.newline_before,
-            file    : filename
-        };
-        if (/^(?:num|string|regexp)$/i.test(type)) {
-            ret.raw = $TEXT.substring(ret.pos, ret.endpos);
-        }
-        if (!is_comment) {
-            ret.comments_before = S.comments_before;
-            S.comments_before = [];
-            // make note of any newlines in the comments that came before
-            for (var i = 0, len = ret.comments_before.length; i < len; i++) {
-                ret.nlb = ret.nlb || ret.comments_before[i].nlb;
-            }
-        }
-        S.newline_before = false;
-        return new AST_Token(ret);
-    };
+function showQuery(urlObj, options)
+{
+       return !urlObj.extra.relation.minimumQuery || options.output===constants.ABSOLUTE || options.output===constants.ROOT_RELATIVE;
+}
 
-    function skip_whitespace() {
-        while (WHITESPACE_CHARS(peek()))
-            next();
-    };
 
-    function read_while(pred) {
-        var ret = "", ch, i = 0;
-        while ((ch = peek()) && pred(ch, i++))
-            ret += next();
-        return ret;
-    };
 
-    function parse_error(err) {
-        js_error(err, filename, S.tokline, S.tokcol, S.tokpos);
-    };
+function showResource(urlObj, options)
+{
+       var removeIndex = options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex;
+       var removeMatchingResource = urlObj.extra.relation.minimumResource && options.output!==constants.ABSOLUTE && options.output!==constants.ROOT_RELATIVE;
+       
+       return !!urlObj.resource && !removeMatchingResource && !removeIndex;
+}
 
-    function read_num(prefix) {
-        var has_e = false, after_e = false, has_x = false, has_dot = prefix == ".";
-        var num = read_while(function(ch, i){
-            var code = ch.charCodeAt(0);
-            switch (code) {
-              case 120: case 88: // xX
-                return has_x ? false : (has_x = true);
-              case 101: case 69: // eE
-                return has_x ? true : has_e ? false : (has_e = after_e = true);
-              case 45: // -
-                return after_e || (i == 0 && !prefix);
-              case 43: // +
-                return after_e;
-              case (after_e = false, 46): // .
-                return (!has_dot && !has_x && !has_e) ? (has_dot = true) : false;
-            }
-            return is_alphanumeric_char(code);
-        });
-        if (prefix) num = prefix + num;
-        if (RE_OCT_NUMBER.test(num) && next_token.has_directive("use strict")) {
-            parse_error("Legacy octal literals are not allowed in strict mode");
-        }
-        var valid = parse_js_number(num);
-        if (!isNaN(valid)) {
-            return token("num", valid);
-        } else {
-            parse_error("Invalid syntax: " + num);
-        }
-    };
 
-    function read_escaped_char(in_string) {
-        var ch = next(true, in_string);
-        switch (ch.charCodeAt(0)) {
-          case 110 : return "\n";
-          case 114 : return "\r";
-          case 116 : return "\t";
-          case 98  : return "\b";
-          case 118 : return "\u000b"; // \v
-          case 102 : return "\f";
-          case 120 : return String.fromCharCode(hex_bytes(2)); // \x
-          case 117 : return String.fromCharCode(hex_bytes(4)); // \u
-          case 10  : return ""; // newline
-          case 13  :            // \r
-            if (peek() == "\n") { // DOS newline
-                next(true, in_string);
-                return "";
-            }
-        }
-        if (ch >= "0" && ch <= "7")
-            return read_octal_escape_sequence(ch);
-        return ch;
-    };
 
-    function read_octal_escape_sequence(ch) {
-        // Read
-        var p = peek();
-        if (p >= "0" && p <= "7") {
-            ch += next(true);
-            if (ch[0] <= "3" && (p = peek()) >= "0" && p <= "7")
-                ch += next(true);
-        }
+module.exports = formatUrl;
 
-        // Parse
-        if (ch === "0") return "\0";
-        if (ch.length > 0 && next_token.has_directive("use strict"))
-            parse_error("Legacy octal escape sequences are not allowed in strict mode");
-        return String.fromCharCode(parseInt(ch, 8));
-    }
+},{"./constants":128}],130:[function(require,module,exports){
+"use strict";
+
+var constants  = require("./constants");
+var formatUrl  = require("./format");
+var getOptions = require("./options");
+var objUtils   = require("./util/object");
+var parseUrl   = require("./parse");
+var relateUrl  = require("./relate");
 
-    function hex_bytes(n) {
-        var num = 0;
-        for (; n > 0; --n) {
-            var digit = parseInt(next(true), 16);
-            if (isNaN(digit))
-                parse_error("Invalid hex-character pattern in string");
-            num = (num << 4) | digit;
-        }
-        return num;
-    };
 
-    var read_string = with_eof_error("Unterminated string constant", function(quote_char){
-        var quote = next(), ret = "";
-        for (;;) {
-            var ch = next(true, true);
-            if (ch == "\\") ch = read_escaped_char(true);
-            else if (NEWLINE_CHARS(ch)) parse_error("Unterminated string constant");
-            else if (ch == quote) break;
-            ret += ch;
-        }
-        var tok = token("string", ret);
-        tok.quote = quote_char;
-        return tok;
-    });
 
-    function skip_line_comment(type) {
-        var regex_allowed = S.regex_allowed;
-        var i = find_eol(), ret;
-        if (i == -1) {
-            ret = S.text.substr(S.pos);
-            S.pos = S.text.length;
-        } else {
-            ret = S.text.substring(S.pos, i);
-            S.pos = i;
-        }
-        S.col = S.tokcol + (S.pos - S.tokpos);
-        S.comments_before.push(token(type, ret, true));
-        S.regex_allowed = regex_allowed;
-        return next_token;
-    };
+function RelateUrl(from, options)
+{
+       this.options = getOptions(options,
+       {
+               defaultPorts: {ftp:21, http:80, https:443},
+               directoryIndexes: ["index.html"],
+               ignore_www: false,
+               output: RelateUrl.SHORTEST,
+               rejectedSchemes: ["data","javascript","mailto"],
+               removeAuth: false,
+               removeDirectoryIndexes: true,
+               removeEmptyQueries: false,
+               removeRootTrailingSlash: true,
+               schemeRelative: true,
+               site: undefined,
+               slashesDenoteHost: true
+       });
+       
+       this.from = parseUrl.from(from, this.options, null);
+}
 
-    var skip_multiline_comment = with_eof_error("Unterminated multiline comment", function(){
-        var regex_allowed = S.regex_allowed;
-        var i = find("*/", true);
-        var text = S.text.substring(S.pos, i).replace(/\r\n|\r|\u2028|\u2029/g, '\n');
-        // update stream position
-        forward(text.length /* doesn't count \r\n as 2 char while S.pos - i does */ + 2);
-        S.comments_before.push(token("comment2", text, true));
-        S.regex_allowed = regex_allowed;
-        return next_token;
-    });
 
-    function read_name() {
-        var backslash = false, name = "", ch, escaped = false, hex;
-        while ((ch = peek()) != null) {
-            if (!backslash) {
-                if (ch == "\\") escaped = backslash = true, next();
-                else if (is_identifier_char(ch)) name += next();
-                else break;
-            }
-            else {
-                if (ch != "u") parse_error("Expecting UnicodeEscapeSequence -- uXXXX");
-                ch = read_escaped_char();
-                if (!is_identifier_char(ch)) parse_error("Unicode char: " + ch.charCodeAt(0) + " is not valid in identifier");
-                name += ch;
-                backslash = false;
-            }
-        }
-        if (KEYWORDS(name) && escaped) {
-            hex = name.charCodeAt(0).toString(16).toUpperCase();
-            name = "\\u" + "0000".substr(hex.length) + hex + name.slice(1);
-        }
-        return name;
-    };
 
-    var read_regexp = with_eof_error("Unterminated regular expression", function(regexp){
-        var prev_backslash = false, ch, in_class = false;
-        while ((ch = next(true))) if (NEWLINE_CHARS(ch)) {
-            parse_error("Unexpected line terminator");
-        } else if (prev_backslash) {
-            regexp += "\\" + ch;
-            prev_backslash = false;
-        } else if (ch == "[") {
-            in_class = true;
-            regexp += ch;
-        } else if (ch == "]" && in_class) {
-            in_class = false;
-            regexp += ch;
-        } else if (ch == "/" && !in_class) {
-            break;
-        } else if (ch == "\\") {
-            prev_backslash = true;
-        } else {
-            regexp += ch;
-        }
-        var mods = read_name();
-        try {
-          return token("regexp", new RegExp(regexp, mods));
-        } catch(e) {
-          parse_error(e.message);
-        }
-    });
+/*
+       Usage: instance=new RelateUrl(); instance.relate();
+*/
+RelateUrl.prototype.relate = function(from, to, options)
+{
+       // relate(to,options)
+       if ( objUtils.isPlainObject(to) )
+       {
+               options = to;
+               to = from;
+               from = null;
+       }
+       // relate(to)
+       else if (!to)
+       {
+               to = from;
+               from = null;
+       }
+       
+       options = getOptions(options, this.options);
+       from = from || options.site;
+       from = parseUrl.from(from, options, this.from);
+       
+       if (!from || !from.href)
+       {
+               throw new Error("from value not defined.");
+       }
+       else if (from.extra.hrefInfo.minimumPathOnly)
+       {
+               throw new Error("from value supplied is not absolute: "+from.href);
+       }
+       
+       to = parseUrl.to(to, options);
+       
+       if (to.valid===false) return to.href;
+       
+       to = relateUrl(from, to, options);
+       to = formatUrl(to, options);
+       
+       return to;
+}
 
-    function read_operator(prefix) {
-        function grow(op) {
-            if (!peek()) return op;
-            var bigger = op + peek();
-            if (OPERATORS(bigger)) {
-                next();
-                return grow(bigger);
-            } else {
-                return op;
-            }
-        };
-        return token("operator", grow(prefix || next()));
-    };
 
-    function handle_slash() {
-        next();
-        switch (peek()) {
-          case "/":
-            next();
-            return skip_line_comment("comment1");
-          case "*":
-            next();
-            return skip_multiline_comment();
-        }
-        return S.regex_allowed ? read_regexp("") : read_operator("/");
-    };
 
-    function handle_dot() {
-        next();
-        return is_digit(peek().charCodeAt(0))
-            ? read_num(".")
-            : token("punc", ".");
-    };
+/*
+       Usage: RelateUrl.relate();
+*/
+RelateUrl.relate = function(from, to, options)
+{
+       return new RelateUrl().relate(from, to, options);
+}
 
-    function read_word() {
-        var word = read_name();
-        if (prev_was_dot) return token("name", word);
-        return KEYWORDS_ATOM(word) ? token("atom", word)
-            : !KEYWORDS(word) ? token("name", word)
-            : OPERATORS(word) ? token("operator", word)
-            : token("keyword", word);
-    };
 
-    function with_eof_error(eof_error, cont) {
-        return function(x) {
-            try {
-                return cont(x);
-            } catch(ex) {
-                if (ex === EX_EOF) parse_error(eof_error);
-                else throw ex;
-            }
-        };
-    };
 
-    function next_token(force_regexp) {
-        if (force_regexp != null)
-            return read_regexp(force_regexp);
-        if (shebang && S.pos == 0 && looking_at("#!")) {
-            start_token();
-            forward(2);
-            skip_line_comment("comment5");
-        }
-        for (;;) {
-            skip_whitespace();
-            start_token();
-            if (html5_comments) {
-                if (looking_at("<!--")) {
-                    forward(4);
-                    skip_line_comment("comment3");
-                    continue;
-                }
-                if (looking_at("-->") && S.newline_before) {
-                    forward(3);
-                    skip_line_comment("comment4");
-                    continue;
-                }
-            }
-            var ch = peek();
-            if (!ch) return token("eof");
-            var code = ch.charCodeAt(0);
-            switch (code) {
-              case 34: case 39: return read_string(ch);
-              case 46: return handle_dot();
-              case 47: {
-                  var tok = handle_slash();
-                  if (tok === next_token) continue;
-                  return tok;
-              }
-            }
-            if (is_digit(code)) return read_num();
-            if (PUNC_CHARS(ch)) return token("punc", next());
-            if (OPERATOR_CHARS(ch)) return read_operator();
-            if (code == 92 || is_identifier_start(code)) return read_word();
-            break;
-        }
-        parse_error("Unexpected character '" + ch + "'");
-    };
+// Make constants accessible from API
+objUtils.shallowMerge(RelateUrl, constants);
 
-    next_token.context = function(nc) {
-        if (nc) S = nc;
-        return S;
-    };
 
-    next_token.add_directive = function(directive) {
-        S.directive_stack[S.directive_stack.length - 1].push(directive);
 
-        if (S.directives[directive] === undefined) {
-            S.directives[directive] = 1;
-        } else {
-            S.directives[directive]++;
-        }
-    }
+module.exports = RelateUrl;
 
-    next_token.push_directives_stack = function() {
-        S.directive_stack.push([]);
-    }
+},{"./constants":128,"./format":129,"./options":131,"./parse":134,"./relate":141,"./util/object":143}],131:[function(require,module,exports){
+"use strict";
 
-    next_token.pop_directives_stack = function() {
-        var directives = S.directive_stack[S.directive_stack.length - 1];
+var objUtils = require("./util/object");
 
-        for (var i = 0; i < directives.length; i++) {
-            S.directives[directives[i]]--;
-        }
 
-        S.directive_stack.pop();
-    }
 
-    next_token.has_directive = function(directive) {
-        return S.directives[directive] !== undefined &&
-            S.directives[directive] > 0;
-    }
+function getOptions(options, defaults)
+{
+       if ( objUtils.isPlainObject(options) )
+       {
+               var newOptions = {};
+               
+               for (var i in defaults)
+               {
+                       if ( defaults.hasOwnProperty(i) )
+                       {
+                               if (options[i] !== undefined)
+                               {
+                                       newOptions[i] = mergeOption(options[i], defaults[i]);
+                               }
+                               else
+                               {
+                                       newOptions[i] = defaults[i];
+                               }
+                       }
+               }
+               
+               return newOptions;
+       }
+       else
+       {
+               return defaults;
+       }
+}
 
-    return next_token;
 
-};
 
-/* -----[ Parser (constants) ]----- */
-
-var UNARY_PREFIX = makePredicate([
-    "typeof",
-    "void",
-    "delete",
-    "--",
-    "++",
-    "!",
-    "~",
-    "-",
-    "+"
-]);
+function mergeOption(newValues, defaultValues)
+{
+       if (defaultValues instanceof Object && newValues instanceof Object)
+       {
+               if (defaultValues instanceof Array && newValues instanceof Array)
+               {
+                       return defaultValues.concat(newValues);
+               }
+               else
+               {
+                       return objUtils.shallowMerge(newValues, defaultValues);
+               }
+       }
+       
+       return newValues;
+}
 
-var UNARY_POSTFIX = makePredicate([ "--", "++" ]);
 
-var ASSIGNMENT = makePredicate([ "=", "+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=" ]);
 
-var PRECEDENCE = (function(a, ret){
-    for (var i = 0; i < a.length; ++i) {
-        var b = a[i];
-        for (var j = 0; j < b.length; ++j) {
-            ret[b[j]] = i + 1;
-        }
-    }
-    return ret;
-})(
-    [
-        ["||"],
-        ["&&"],
-        ["|"],
-        ["^"],
-        ["&"],
-        ["==", "===", "!=", "!=="],
-        ["<", ">", "<=", ">=", "in", "instanceof"],
-        [">>", "<<", ">>>"],
-        ["+", "-"],
-        ["*", "/", "%"]
-    ],
-    {}
-);
+module.exports = getOptions;
 
-var STATEMENTS_WITH_LABELS = array_to_hash([ "fo" + "r", "do", "while", "switch" ]);
+},{"./util/object":143}],132:[function(require,module,exports){
+"use strict";
 
-var ATOMIC_START_TOKEN = array_to_hash([ "atom", "num", "string", "regexp", "name" ]);
+function parseHost(urlObj, options)
+{
+       // TWEAK :: condition only for speed optimization
+       if (options.ignore_www)
+       {
+               var host = urlObj.host.full;
+               
+               if (host)
+               {
+                       var stripped = host;
+                       
+                       if (host.indexOf("www.") === 0)
+                       {
+                               stripped = host.substr(4);
+                       }
+                       
+                       urlObj.host.stripped = stripped;
+               }
+       }
+}
 
-/* -----[ Parser ]----- */
 
-function parse($TEXT, options) {
 
-    options = defaults(options, {
-        bare_returns   : false,
-        cli            : false,
-        expression     : false,
-        filename       : null,
-        html5_comments : true,
-        shebang        : true,
-        strict         : false,
-        toplevel       : null,
-    });
+module.exports = parseHost;
 
-    var S = {
-        input         : (typeof $TEXT == "string"
-                         ? tokenizer($TEXT, options.filename,
-                                     options.html5_comments, options.shebang)
-                         : $TEXT),
-        token         : null,
-        prev          : null,
-        peeked        : null,
-        in_function   : 0,
-        in_directives : true,
-        in_loop       : 0,
-        labels        : []
-    };
+},{}],133:[function(require,module,exports){
+"use strict";
 
-    S.token = next();
+function hrefInfo(urlObj)
+{
+       var minimumPathOnly     = (!urlObj.scheme && !urlObj.auth && !urlObj.host.full && !urlObj.port);
+       var minimumResourceOnly = (minimumPathOnly && !urlObj.path.absolute.string);
+       var minimumQueryOnly    = (minimumResourceOnly && !urlObj.resource);
+       var minimumHashOnly     = (minimumQueryOnly && !urlObj.query.string.full.length);
+       var empty               = (minimumHashOnly && !urlObj.hash);
+       
+       urlObj.extra.hrefInfo.minimumPathOnly     = minimumPathOnly;
+       urlObj.extra.hrefInfo.minimumResourceOnly = minimumResourceOnly;
+       urlObj.extra.hrefInfo.minimumQueryOnly    = minimumQueryOnly;
+       urlObj.extra.hrefInfo.minimumHashOnly     = minimumHashOnly;
+       urlObj.extra.hrefInfo.empty = empty;
+}
 
-    function is(type, value) {
-        return is_token(S.token, type, value);
-    };
 
-    function peek() { return S.peeked || (S.peeked = S.input()); };
 
-    function next() {
-        S.prev = S.token;
-        if (S.peeked) {
-            S.token = S.peeked;
-            S.peeked = null;
-        } else {
-            S.token = S.input();
-        }
-        S.in_directives = S.in_directives && (
-            S.token.type == "string" || is("punc", ";")
-        );
-        return S.token;
-    };
+module.exports = hrefInfo;
 
-    function prev() {
-        return S.prev;
-    };
+},{}],134:[function(require,module,exports){
+"use strict";
 
-    function croak(msg, line, col, pos) {
-        var ctx = S.input.context();
-        js_error(msg,
-                 ctx.filename,
-                 line != null ? line : ctx.tokline,
-                 col != null ? col : ctx.tokcol,
-                 pos != null ? pos : ctx.tokpos);
-    };
+var hrefInfo   = require("./hrefInfo");
+var parseHost  = require("./host");
+var parsePath  = require("./path");
+var parsePort  = require("./port");
+var parseQuery = require("./query");
+var parseUrlString = require("./urlstring");
+var pathUtils      = require("../util/path");
 
-    function token_error(token, msg) {
-        croak(msg, token.line, token.col);
-    };
 
-    function unexpected(token) {
-        if (token == null)
-            token = S.token;
-        token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")");
-    };
 
-    function expect_token(type, val) {
-        if (is(type, val)) {
-            return next();
-        }
-        token_error(S.token, "Unexpected token " + S.token.type + " " + S.token.value + "" + ", expected " + type + " " + val + "");
-    };
+function parseFromUrl(url, options, fallback)
+{
+       if (url)
+       {
+               var urlObj = parseUrl(url, options);
+               
+               // Because the following occurs in the relate stage for "to" URLs,
+               // such had to be mostly duplicated here
+               
+               var pathArray = pathUtils.resolveDotSegments(urlObj.path.absolute.array);
+               
+               urlObj.path.absolute.array  = pathArray;
+               urlObj.path.absolute.string = "/" + pathUtils.join(pathArray);
+               
+               return urlObj;
+       }
+       else
+       {
+               return fallback;
+       }
+}
 
-    function expect(punc) { return expect_token("punc", punc); };
 
-    function can_insert_semicolon() {
-        return !options.strict && (
-            S.token.nlb || is("eof") || is("punc", "}")
-        );
-    };
 
-    function semicolon(optional) {
-        if (is("punc", ";")) next();
-        else if (!optional && !can_insert_semicolon()) unexpected();
-    };
+function parseUrl(url, options)
+{
+       var urlObj = parseUrlString(url, options);
+       
+       if (urlObj.valid===false) return urlObj;
+       
+       parseHost(urlObj, options);
+       parsePort(urlObj, options);
+       parsePath(urlObj, options);
+       parseQuery(urlObj, options);
+       hrefInfo(urlObj);
+       
+       return urlObj;
+}
 
-    function parenthesised() {
-        expect("(");
-        var exp = expression(true);
-        expect(")");
-        return exp;
-    };
 
-    function embed_tokens(parser) {
-        return function() {
-            var start = S.token;
-            var expr = parser();
-            var end = prev();
-            expr.start = start;
-            expr.end = end;
-            return expr;
-        };
-    };
 
-    function handle_regexp() {
-        if (is("operator", "/") || is("operator", "/=")) {
-            S.peeked = null;
-            S.token = S.input(S.token.value.substr(1)); // force regexp
-        }
-    };
+module.exports =
+{
+       from: parseFromUrl,
+       to:   parseUrl
+};
 
-    var statement = embed_tokens(function() {
-        var tmp;
-        handle_regexp();
-        switch (S.token.type) {
-          case "string":
-            var dir = false;
-            if (S.in_directives === true) {
-                if ((is_token(peek(), "punc", ";") || peek().nlb) && S.token.raw.indexOf("\\") === -1) {
-                    S.input.add_directive(S.token.value);
-                } else {
-                    S.in_directives = false;
-                }
-            }
-            var dir = S.in_directives, stat = simple_statement();
-            if (dir) {
-                return new AST_Directive({
-                    start : stat.body.start,
-                    end   : stat.body.end,
-                    quote : stat.body.quote,
-                    value : stat.body.value,
-                });
-            }
-            return stat;
-          case "num":
-          case "regexp":
-          case "operator":
-          case "atom":
-            return simple_statement();
-
-          case "name":
-            return is_token(peek(), "punc", ":")
-                ? labeled_statement()
-                : simple_statement();
-
-          case "punc":
-            switch (S.token.value) {
-              case "{":
-                return new AST_BlockStatement({
-                    start : S.token,
-                    body  : block_(),
-                    end   : prev()
-                });
-              case "[":
-              case "(":
-                return simple_statement();
-              case ";":
-                S.in_directives = false;
-                next();
-                return new AST_EmptyStatement();
-              default:
-                unexpected();
-            }
+},{"../util/path":144,"./host":132,"./hrefInfo":133,"./path":135,"./port":136,"./query":137,"./urlstring":138}],135:[function(require,module,exports){
+"use strict";
 
-          case "keyword":
-            switch (tmp = S.token.value, next(), tmp) {
-              case "break":
-                return break_cont(AST_Break);
+function isDirectoryIndex(resource, options)
+{
+       var verdict = false;
+       
+       options.directoryIndexes.every( function(index)
+       {
+               if (index === resource)
+               {
+                       verdict = true;
+                       return false;
+               }
+               
+               return true;
+       });
+       
+       return verdict;
+}
 
-              case "continue":
-                return break_cont(AST_Continue);
 
-              case "debugger":
-                semicolon();
-                return new AST_Debugger();
 
-              case "do":
-                return new AST_Do({
-                    body      : in_loop(statement),
-                    condition : (expect_token("keyword", "while"), tmp = parenthesised(), semicolon(true), tmp)
-                });
+function parsePath(urlObj, options)
+{
+       var path = urlObj.path.absolute.string;
+       
+       if (path)
+       {
+               var lastSlash = path.lastIndexOf("/");
+               
+               if (lastSlash > -1)
+               {
+                       if (++lastSlash < path.length)
+                       {
+                               var resource = path.substr(lastSlash);
+                               
+                               if (resource!=="." && resource!=="..")
+                               {
+                                       urlObj.resource = resource;
+                                       path = path.substr(0, lastSlash);
+                               }
+                               else
+                               {
+                                       path += "/";
+                               }
+                       }
+                       
+                       urlObj.path.absolute.string = path;
+                       urlObj.path.absolute.array = splitPath(path);
+               }
+               else if (path==="." || path==="..")
+               {
+                       // "..?var", "..#anchor", etc ... not "..index.html"
+                       path += "/";
+                       
+                       urlObj.path.absolute.string = path;
+                       urlObj.path.absolute.array = splitPath(path);
+               }
+               else
+               {
+                       // Resource-only
+                       urlObj.resource = path;
+                       urlObj.path.absolute.string = null;
+               }
+               
+               urlObj.extra.resourceIsIndex = isDirectoryIndex(urlObj.resource, options);
+       }
+       // Else: query/hash-only or empty
+}
 
-              case "while":
-                return new AST_While({
-                    condition : parenthesised(),
-                    body      : in_loop(statement)
-                });
 
-              case "fo" + "r":
-                return for_();
 
-              case "function":
-                return function_(AST_Defun);
+function splitPath(path)
+{
+       // TWEAK :: condition only for speed optimization
+       if (path !== "/")
+       {
+               var cleaned = [];
+               
+               path.split("/").forEach( function(dir)
+               {
+                       // Cleanup -- splitting "/dir/" becomes ["","dir",""]
+                       if (dir !== "")
+                       {
+                               cleaned.push(dir);
+                       }
+               });
+               
+               return cleaned;
+       }
+       else
+       {
+               // Faster to skip the above block and just create an array
+               return [];
+       }
+}
 
-              case "if":
-                return if_();
 
-              case "return":
-                if (S.in_function == 0 && !options.bare_returns)
-                    croak("'return' outside of function");
-                return new AST_Return({
-                    value: ( is("punc", ";")
-                             ? (next(), null)
-                             : can_insert_semicolon()
-                             ? null
-                             : (tmp = expression(true), semicolon(), tmp) )
-                });
 
-              case "switch":
-                return new AST_Switch({
-                    expression : parenthesised(),
-                    body       : in_loop(switch_body_)
-                });
+module.exports = parsePath;
 
-              case "throw":
-                if (S.token.nlb)
-                    croak("Illegal newline after 'throw'");
-                return new AST_Throw({
-                    value: (tmp = expression(true), semicolon(), tmp)
-                });
+},{}],136:[function(require,module,exports){
+"use strict";
 
-              case "try":
-                return try_();
+function parsePort(urlObj, options)
+{
+       var defaultPort = -1;
+       
+       for (var i in options.defaultPorts)
+       {
+               if ( i===urlObj.scheme && options.defaultPorts.hasOwnProperty(i) )
+               {
+                       defaultPort = options.defaultPorts[i];
+                       break;
+               }
+       }
+       
+       if (defaultPort > -1)
+       {
+               // Force same type as urlObj.port
+               defaultPort = defaultPort.toString();
+               
+               if (urlObj.port === null)
+               {
+                       urlObj.port = defaultPort;
+               }
+               
+               urlObj.extra.portIsDefault = (urlObj.port === defaultPort);
+       }
+}
 
-              case "var":
-                return tmp = var_(), semicolon(), tmp;
 
-              case "const":
-                return tmp = const_(), semicolon(), tmp;
 
-              case "with":
-                if (S.input.has_directive("use strict")) {
-                    croak("Strict mode may not include a with statement");
-                }
-                return new AST_With({
-                    expression : parenthesised(),
-                    body       : statement()
-                });
-            }
-        }
-        unexpected();
-    });
+module.exports = parsePort;
 
-    function labeled_statement() {
-        var label = as_symbol(AST_Label);
-        if (find_if(function(l){ return l.name == label.name }, S.labels)) {
-            // ECMA-262, 12.12: An ECMAScript program is considered
-            // syntactically incorrect if it contains a
-            // LabelledStatement that is enclosed by a
-            // LabelledStatement with the same Identifier as label.
-            croak("Label " + label.name + " defined twice");
-        }
-        expect(":");
-        S.labels.push(label);
-        var stat = statement();
-        S.labels.pop();
-        if (!(stat instanceof AST_IterationStatement)) {
-            // check for `continue` that refers to this label.
-            // those should be reported as syntax errors.
-            // https://github.com/mishoo/UglifyJS2/issues/287
-            label.references.forEach(function(ref){
-                if (ref instanceof AST_Continue) {
-                    ref = ref.label.start;
-                    croak("Continue label `" + label.name + "` refers to non-IterationStatement.",
-                          ref.line, ref.col, ref.pos);
-                }
-            });
-        }
-        return new AST_LabeledStatement({ body: stat, label: label });
-    };
+},{}],137:[function(require,module,exports){
+"use strict";
+var hasOwnProperty = Object.prototype.hasOwnProperty;
 
-    function simple_statement(tmp) {
-        return new AST_SimpleStatement({ body: (tmp = expression(true), semicolon(), tmp) });
-    };
 
-    function break_cont(type) {
-        var label = null, ldef;
-        if (!can_insert_semicolon()) {
-            label = as_symbol(AST_LabelRef, true);
-        }
-        if (label != null) {
-            ldef = find_if(function(l){ return l.name == label.name }, S.labels);
-            if (!ldef)
-                croak("Undefined label " + label.name);
-            label.thedef = ldef;
-        }
-        else if (S.in_loop == 0)
-            croak(type.TYPE + " not inside a loop or switch");
-        semicolon();
-        var stat = new type({ label: label });
-        if (ldef) ldef.references.push(stat);
-        return stat;
-    };
 
-    function for_() {
-        expect("(");
-        var init = null;
-        if (!is("punc", ";")) {
-            init = is("keyword", "var")
-                ? (next(), var_(true))
-                : expression(true, true);
-            if (is("operator", "in")) {
-                if (init instanceof AST_Var && init.definitions.length > 1)
-                    croak("Only one variable declaration allowed in for..in loop");
-                next();
-                return for_in(init);
-            }
-        }
-        return regular_for(init);
-    };
+function parseQuery(urlObj, options)
+{
+       urlObj.query.string.full = stringify(urlObj.query.object, false);
+       
+       // TWEAK :: condition only for speed optimization
+       if (options.removeEmptyQueries)
+       {
+               urlObj.query.string.stripped = stringify(urlObj.query.object, true);
+       }
+}
 
-    function regular_for(init) {
-        expect(";");
-        var test = is("punc", ";") ? null : expression(true);
-        expect(";");
-        var step = is("punc", ")") ? null : expression(true);
-        expect(")");
-        return new AST_For({
-            init      : init,
-            condition : test,
-            step      : step,
-            body      : in_loop(statement)
-        });
-    };
 
-    function for_in(init) {
-        var lhs = init instanceof AST_Var ? init.definitions[0].name : null;
-        var obj = expression(true);
-        expect(")");
-        return new AST_ForIn({
-            init   : init,
-            name   : lhs,
-            object : obj,
-            body   : in_loop(statement)
-        });
-    };
 
-    var function_ = function(ctor) {
-        var in_statement = ctor === AST_Defun;
-        var name = is("name") ? as_symbol(in_statement ? AST_SymbolDefun : AST_SymbolLambda) : null;
-        if (in_statement && !name)
-            unexpected();
-        expect("(");
-        return new ctor({
-            name: name,
-            argnames: (function(first, a){
-                while (!is("punc", ")")) {
-                    if (first) first = false; else expect(",");
-                    a.push(as_symbol(AST_SymbolFunarg));
-                }
-                next();
-                return a;
-            })(true, []),
-            body: (function(loop, labels){
-                ++S.in_function;
-                S.in_directives = true;
-                S.input.push_directives_stack();
-                S.in_loop = 0;
-                S.labels = [];
-                var a = block_();
-                S.input.pop_directives_stack();
-                --S.in_function;
-                S.in_loop = loop;
-                S.labels = labels;
-                return a;
-            })(S.in_loop, S.labels)
-        });
-    };
+function stringify(queryObj, removeEmptyQueries)
+{
+       var count = 0;
+       var str = "";
+       
+       for (var i in queryObj)
+       {
+               if ( i!=="" && hasOwnProperty.call(queryObj, i)===true )
+               {
+                       var value = queryObj[i];
+                       
+                       if (value !== "" || !removeEmptyQueries)
+                       {
+                               str += (++count===1) ? "?" : "&";
+                               
+                               i = encodeURIComponent(i);
+                               
+                               if (value !== "")
+                               {
+                                       str += i +"="+ encodeURIComponent(value).replace(/%20/g,"+");
+                               }
+                               else
+                               {
+                                       str += i;
+                               }
+                       }
+               }
+       }
+       
+       return str;
+}
 
-    function if_() {
-        var cond = parenthesised(), body = statement(), belse = null;
-        if (is("keyword", "else")) {
-            next();
-            belse = statement();
-        }
-        return new AST_If({
-            condition   : cond,
-            body        : body,
-            alternative : belse
-        });
-    };
 
-    function block_() {
-        expect("{");
-        var a = [];
-        while (!is("punc", "}")) {
-            if (is("eof")) unexpected();
-            a.push(statement());
-        }
-        next();
-        return a;
-    };
 
-    function switch_body_() {
-        expect("{");
-        var a = [], cur = null, branch = null, tmp;
-        while (!is("punc", "}")) {
-            if (is("eof")) unexpected();
-            if (is("keyword", "case")) {
-                if (branch) branch.end = prev();
-                cur = [];
-                branch = new AST_Case({
-                    start      : (tmp = S.token, next(), tmp),
-                    expression : expression(true),
-                    body       : cur
-                });
-                a.push(branch);
-                expect(":");
-            }
-            else if (is("keyword", "default")) {
-                if (branch) branch.end = prev();
-                cur = [];
-                branch = new AST_Default({
-                    start : (tmp = S.token, next(), expect(":"), tmp),
-                    body  : cur
-                });
-                a.push(branch);
-            }
-            else {
-                if (!cur) unexpected();
-                cur.push(statement());
-            }
-        }
-        if (branch) branch.end = prev();
-        next();
-        return a;
-    };
+module.exports = parseQuery;
 
-    function try_() {
-        var body = block_(), bcatch = null, bfinally = null;
-        if (is("keyword", "catch")) {
-            var start = S.token;
-            next();
-            expect("(");
-            var name = as_symbol(AST_SymbolCatch);
-            expect(")");
-            bcatch = new AST_Catch({
-                start   : start,
-                argname : name,
-                body    : block_(),
-                end     : prev()
-            });
-        }
-        if (is("keyword", "finally")) {
-            var start = S.token;
-            next();
-            bfinally = new AST_Finally({
-                start : start,
-                body  : block_(),
-                end   : prev()
-            });
-        }
-        if (!bcatch && !bfinally)
-            croak("Missing catch/finally blocks");
-        return new AST_Try({
-            body     : body,
-            bcatch   : bcatch,
-            bfinally : bfinally
-        });
-    };
+},{}],138:[function(require,module,exports){
+"use strict";
 
-    function vardefs(no_in, in_const) {
-        var a = [];
-        for (;;) {
-            a.push(new AST_VarDef({
-                start : S.token,
-                name  : as_symbol(in_const ? AST_SymbolConst : AST_SymbolVar),
-                value : is("operator", "=") ? (next(), expression(false, no_in)) : null,
-                end   : prev()
-            }));
-            if (!is("punc", ","))
-                break;
-            next();
-        }
-        return a;
-    };
+var _parseUrl = require("url").parse;
 
-    var var_ = function(no_in) {
-        return new AST_Var({
-            start       : prev(),
-            definitions : vardefs(no_in, false),
-            end         : prev()
-        });
-    };
 
-    var const_ = function() {
-        return new AST_Const({
-            start       : prev(),
-            definitions : vardefs(false, true),
-            end         : prev()
-        });
-    };
 
-    var new_ = function(allow_calls) {
-        var start = S.token;
-        expect_token("operator", "new");
-        var newexp = expr_atom(false), args;
-        if (is("punc", "(")) {
-            next();
-            args = expr_list(")");
-        } else {
-            args = [];
-        }
-        return subscripts(new AST_New({
-            start      : start,
-            expression : newexp,
-            args       : args,
-            end        : prev()
-        }), allow_calls);
-    };
+/*
+       Customize the URL object that Node generates
+       because:
+       
+       * necessary data for later
+       * urlObj.host is useless
+       * urlObj.hostname is too long
+       * urlObj.path is useless
+       * urlObj.pathname is too long
+       * urlObj.protocol is inaccurate; should be called "scheme"
+       * urlObj.search is mostly useless
+*/
+function clean(urlObj)
+{
+       var scheme = urlObj.protocol;
+       
+       if (scheme)
+       {
+               // Remove ":" suffix
+               if (scheme.indexOf(":") === scheme.length-1)
+               {
+                       scheme = scheme.substr(0, scheme.length-1);
+               }
+       }
+       
+       urlObj.host =
+       {
+               // TODO :: unescape(encodeURIComponent(s)) ? ... http://ecmanaut.blogspot.ca/2006/07/encoding-decoding-utf8-in-javascript.html
+               full: urlObj.hostname,
+               stripped: null
+       };
+       
+       urlObj.path =
+       {
+               absolute:
+               {
+                       array: null,
+                       string: urlObj.pathname
+               },
+               relative:
+               {
+                       array: null,
+                       string: null
+               }
+       };
+       
+       urlObj.query =
+       {
+               object: urlObj.query,
+               string:
+               {
+                       full: null,
+                       stripped: null
+               }
+       };
+       
+       urlObj.extra =
+       {
+               hrefInfo:
+               {
+                       minimumPathOnly: null,
+                       minimumResourceOnly: null,
+                       minimumQueryOnly: null,
+                       minimumHashOnly: null,
+                       empty: null,
+                       
+                       separatorOnlyQuery: urlObj.search==="?"
+               },
+               portIsDefault: null,
+               relation:
+               {
+                       maximumScheme: null,
+                       maximumAuth: null,
+                       maximumHost: null,
+                       maximumPort: null,
+                       maximumPath: null,
+                       maximumResource: null,
+                       maximumQuery: null,
+                       maximumHash: null,
+                       
+                       minimumScheme: null,
+                       minimumAuth: null,
+                       minimumHost: null,
+                       minimumPort: null,
+                       minimumPath: null,
+                       minimumResource: null,
+                       minimumQuery: null,
+                       minimumHash: null,
+                       
+                       overridesQuery: null
+               },
+               resourceIsIndex: null,
+               slashes: urlObj.slashes
+       };
+       
+       urlObj.resource = null;
+       urlObj.scheme = scheme;
+       delete urlObj.hostname;
+       delete urlObj.pathname;
+       delete urlObj.protocol;
+       delete urlObj.search;
+       delete urlObj.slashes;
+       
+       return urlObj;
+}
+
 
-    function as_atom_node() {
-        var tok = S.token, ret;
-        switch (tok.type) {
-          case "name":
-          case "keyword":
-            ret = _make_symbol(AST_SymbolRef);
-            break;
-          case "num":
-            ret = new AST_Number({ start: tok, end: tok, value: tok.value });
-            break;
-          case "string":
-            ret = new AST_String({
-                start : tok,
-                end   : tok,
-                value : tok.value,
-                quote : tok.quote
-            });
-            break;
-          case "regexp":
-            ret = new AST_RegExp({ start: tok, end: tok, value: tok.value });
-            break;
-          case "atom":
-            switch (tok.value) {
-              case "false":
-                ret = new AST_False({ start: tok, end: tok });
-                break;
-              case "true":
-                ret = new AST_True({ start: tok, end: tok });
-                break;
-              case "null":
-                ret = new AST_Null({ start: tok, end: tok });
-                break;
-            }
-            break;
-          case "operator":
-            if (!is_identifier_string(tok.value)) {
-                croak("Invalid getter/setter name: " + tok.value,
-                    tok.line, tok.col, tok.pos);
-            }
-            ret = _make_symbol(AST_SymbolRef);
-            break;
-        }
-        next();
-        return ret;
-    };
 
-    var expr_atom = function(allow_calls) {
-        if (is("operator", "new")) {
-            return new_(allow_calls);
-        }
-        var start = S.token;
-        if (is("punc")) {
-            switch (start.value) {
-              case "(":
-                next();
-                var ex = expression(true);
-                ex.start = start;
-                ex.end = S.token;
-                expect(")");
-                return subscripts(ex, allow_calls);
-              case "[":
-                return subscripts(array_(), allow_calls);
-              case "{":
-                return subscripts(object_(), allow_calls);
-            }
-            unexpected();
-        }
-        if (is("keyword", "function")) {
-            next();
-            var func = function_(AST_Function);
-            func.start = start;
-            func.end = prev();
-            return subscripts(func, allow_calls);
-        }
-        if (ATOMIC_START_TOKEN[S.token.type]) {
-            return subscripts(as_atom_node(), allow_calls);
-        }
-        unexpected();
-    };
+function validScheme(url, options)
+{
+       var valid = true;
+       
+       options.rejectedSchemes.every( function(rejectedScheme)
+       {
+               valid = !(url.indexOf(rejectedScheme+":") === 0);
+               
+               // Break loop
+               return valid;
+       });
+       
+       return valid;
+}
 
-    function expr_list(closing, allow_trailing_comma, allow_empty) {
-        var first = true, a = [];
-        while (!is("punc", closing)) {
-            if (first) first = false; else expect(",");
-            if (allow_trailing_comma && is("punc", closing)) break;
-            if (is("punc", ",") && allow_empty) {
-                a.push(new AST_Hole({ start: S.token, end: S.token }));
-            } else {
-                a.push(expression(false));
-            }
-        }
-        next();
-        return a;
-    };
 
-    var array_ = embed_tokens(function() {
-        expect("[");
-        return new AST_Array({
-            elements: expr_list("]", !options.strict, true)
-        });
-    });
 
-    var create_accessor = embed_tokens(function() {
-        return function_(AST_Accessor);
-    });
+function parseUrlString(url, options)
+{
+       if ( validScheme(url,options) )
+       {
+               return clean( _parseUrl(url, true, options.slashesDenoteHost) );
+       }
+       else
+       {
+               return {href:url, valid:false};
+       }
+}
 
-    var object_ = embed_tokens(function() {
-        expect("{");
-        var first = true, a = [];
-        while (!is("punc", "}")) {
-            if (first) first = false; else expect(",");
-            if (!options.strict && is("punc", "}"))
-                // allow trailing comma
-                break;
-            var start = S.token;
-            var type = start.type;
-            var name = as_property_name();
-            if (type == "name" && !is("punc", ":")) {
-                if (name == "get") {
-                    a.push(new AST_ObjectGetter({
-                        start : start,
-                        key   : as_atom_node(),
-                        value : create_accessor(),
-                        end   : prev()
-                    }));
-                    continue;
-                }
-                if (name == "set") {
-                    a.push(new AST_ObjectSetter({
-                        start : start,
-                        key   : as_atom_node(),
-                        value : create_accessor(),
-                        end   : prev()
-                    }));
-                    continue;
-                }
-            }
-            expect(":");
-            a.push(new AST_ObjectKeyVal({
-                start : start,
-                quote : start.quote,
-                key   : name,
-                value : expression(false),
-                end   : prev()
-            }));
-        }
-        next();
-        return new AST_Object({ properties: a });
-    });
 
-    function as_property_name() {
-        var tmp = S.token;
-        next();
-        switch (tmp.type) {
-          case "num":
-          case "string":
-          case "name":
-          case "operator":
-          case "keyword":
-          case "atom":
-            return tmp.value;
-          default:
-            unexpected();
-        }
-    };
 
-    function as_name() {
-        var tmp = S.token;
-        next();
-        switch (tmp.type) {
-          case "name":
-          case "operator":
-          case "keyword":
-          case "atom":
-            return tmp.value;
-          default:
-            unexpected();
-        }
-    };
+module.exports = parseUrlString;
 
-    function _make_symbol(type) {
-        var name = S.token.value;
-        return new (name == "this" ? AST_This : type)({
-            name  : String(name),
-            start : S.token,
-            end   : S.token
-        });
-    };
+},{"url":161}],139:[function(require,module,exports){
+"use strict";
 
-    function as_symbol(type, noerror) {
-        if (!is("name")) {
-            if (!noerror) croak("Name expected");
-            return null;
-        }
-        var sym = _make_symbol(type);
-        next();
-        return sym;
-    };
+var findRelation = require("./findRelation");
+var objUtils     = require("../util/object");
+var pathUtils    = require("../util/path");
 
-    var subscripts = function(expr, allow_calls) {
-        var start = expr.start;
-        if (is("punc", ".")) {
-            next();
-            return subscripts(new AST_Dot({
-                start      : start,
-                expression : expr,
-                property   : as_name(),
-                end        : prev()
-            }), allow_calls);
-        }
-        if (is("punc", "[")) {
-            next();
-            var prop = expression(true);
-            expect("]");
-            return subscripts(new AST_Sub({
-                start      : start,
-                expression : expr,
-                property   : prop,
-                end        : prev()
-            }), allow_calls);
-        }
-        if (allow_calls && is("punc", "(")) {
-            next();
-            return subscripts(new AST_Call({
-                start      : start,
-                expression : expr,
-                args       : expr_list(")"),
-                end        : prev()
-            }), true);
-        }
-        return expr;
-    };
 
-    var maybe_unary = function(allow_calls) {
-        var start = S.token;
-        if (is("operator") && UNARY_PREFIX(start.value)) {
-            next();
-            handle_regexp();
-            var ex = make_unary(AST_UnaryPrefix, start.value, maybe_unary(allow_calls));
-            ex.start = start;
-            ex.end = prev();
-            return ex;
-        }
-        var val = expr_atom(allow_calls);
-        while (is("operator") && UNARY_POSTFIX(S.token.value) && !S.token.nlb) {
-            val = make_unary(AST_UnaryPostfix, S.token.value, val);
-            val.start = start;
-            val.end = S.token;
-            next();
-        }
-        return val;
-    };
 
-    function make_unary(ctor, op, expr) {
-        if ((op == "++" || op == "--") && !is_assignable(expr))
-            croak("Invalid use of " + op + " operator", null, ctor === AST_UnaryPrefix ? expr.start.col - 1 : null);
-        return new ctor({ operator: op, expression: expr });
-    };
+function absolutize(urlObj, siteUrlObj, options)
+{
+       findRelation.upToPath(urlObj, siteUrlObj, options);
+       
+       // Fill in relative URLs
+       if (urlObj.extra.relation.minimumScheme) urlObj.scheme = siteUrlObj.scheme;
+       if (urlObj.extra.relation.minimumAuth)   urlObj.auth   = siteUrlObj.auth;
+       if (urlObj.extra.relation.minimumHost)   urlObj.host   = objUtils.clone(siteUrlObj.host);
+       if (urlObj.extra.relation.minimumPort)   copyPort(urlObj, siteUrlObj);
+       if (urlObj.extra.relation.minimumScheme) copyPath(urlObj, siteUrlObj);
+       
+       // Check remaining relativeness now that path has been copied and/or resolved
+       findRelation.pathOn(urlObj, siteUrlObj, options);
+       
+       // Fill in relative URLs
+       if (urlObj.extra.relation.minimumResource) copyResource(urlObj, siteUrlObj);
+       if (urlObj.extra.relation.minimumQuery)    urlObj.query = objUtils.clone(siteUrlObj.query);
+       if (urlObj.extra.relation.minimumHash)     urlObj.hash  = siteUrlObj.hash;
+}
 
-    var expr_op = function(left, min_prec, no_in) {
-        var op = is("operator") ? S.token.value : null;
-        if (op == "in" && no_in) op = null;
-        var prec = op != null ? PRECEDENCE[op] : null;
-        if (prec != null && prec > min_prec) {
-            next();
-            var right = expr_op(maybe_unary(true), prec, no_in);
-            return expr_op(new AST_Binary({
-                start    : left.start,
-                left     : left,
-                operator : op,
-                right    : right,
-                end      : right.end
-            }), min_prec, no_in);
-        }
-        return left;
-    };
 
-    function expr_ops(no_in) {
-        return expr_op(maybe_unary(true), 0, no_in);
-    };
 
-    var maybe_conditional = function(no_in) {
-        var start = S.token;
-        var expr = expr_ops(no_in);
-        if (is("operator", "?")) {
-            next();
-            var yes = expression(false);
-            expect(":");
-            return new AST_Conditional({
-                start       : start,
-                condition   : expr,
-                consequent  : yes,
-                alternative : expression(false, no_in),
-                end         : prev()
-            });
-        }
-        return expr;
-    };
+/*
+       Get an absolute path that's relative to site url.
+*/
+function copyPath(urlObj, siteUrlObj)
+{
+       if (urlObj.extra.relation.maximumHost || !urlObj.extra.hrefInfo.minimumResourceOnly)
+       {
+               var pathArray = urlObj.path.absolute.array;
+               var pathString = "/";
+               
+               // If not erroneous URL
+               if (pathArray)
+               {
+                       // If is relative path
+                       if (urlObj.extra.hrefInfo.minimumPathOnly && urlObj.path.absolute.string.indexOf("/")!==0)
+                       {
+                               // Append path to site path
+                               pathArray = siteUrlObj.path.absolute.array.concat(pathArray);
+                       }
+                       
+                       pathArray   = pathUtils.resolveDotSegments(pathArray);
+                       pathString += pathUtils.join(pathArray);
+               }
+               else
+               {
+                       pathArray = [];
+               }
+               
+               urlObj.path.absolute.array  = pathArray;
+               urlObj.path.absolute.string = pathString;
+       }
+       else
+       {
+               // Resource-, query- or hash-only or empty
+               urlObj.path = objUtils.clone(siteUrlObj.path);
+       }
+}
 
-    function is_assignable(expr) {
-        if (options.cli) return true;
-        return expr instanceof AST_PropAccess || expr instanceof AST_SymbolRef;
-    };
 
-    var maybe_assign = function(no_in) {
-        var start = S.token;
-        var left = maybe_conditional(no_in), val = S.token.value;
-        if (is("operator") && ASSIGNMENT(val)) {
-            if (is_assignable(left)) {
-                next();
-                return new AST_Assign({
-                    start    : start,
-                    left     : left,
-                    operator : val,
-                    right    : maybe_assign(no_in),
-                    end      : prev()
-                });
-            }
-            croak("Invalid assignment");
-        }
-        return left;
-    };
 
-    var expression = function(commas, no_in) {
-        var start = S.token;
-        var expr = maybe_assign(no_in);
-        if (commas && is("punc", ",")) {
-            next();
-            return new AST_Seq({
-                start  : start,
-                car    : expr,
-                cdr    : expression(true, no_in),
-                end    : peek()
-            });
-        }
-        return expr;
-    };
+function copyPort(urlObj, siteUrlObj)
+{
+       urlObj.port = siteUrlObj.port;
+       
+       urlObj.extra.portIsDefault = siteUrlObj.extra.portIsDefault;
+}
 
-    function in_loop(cont) {
-        ++S.in_loop;
-        var ret = cont();
-        --S.in_loop;
-        return ret;
-    };
 
-    if (options.expression) {
-        return expression(true);
-    }
-
-    return (function(){
-        var start = S.token;
-        var body = [];
-        S.input.push_directives_stack();
-        while (!is("eof"))
-            body.push(statement());
-        S.input.pop_directives_stack();
-        var end = prev();
-        var toplevel = options.toplevel;
-        if (toplevel) {
-            toplevel.body = toplevel.body.concat(body);
-            toplevel.end = end;
-        } else {
-            toplevel = new AST_Toplevel({ start: start, body: body, end: end });
-        }
-        return toplevel;
-    })();
 
-};
+function copyResource(urlObj, siteUrlObj)
+{
+       urlObj.resource = siteUrlObj.resource;
+       
+       urlObj.extra.resourceIsIndex = siteUrlObj.extra.resourceIsIndex;
+}
 
-/***********************************************************************
 
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
 
-  -------------------------------- (C) ---------------------------------
+module.exports = absolutize;
 
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
+},{"../util/object":143,"../util/path":144,"./findRelation":140}],140:[function(require,module,exports){
+"use strict";
 
-  Distributed under the BSD license:
+function findRelation_upToPath(urlObj, siteUrlObj, options)
+{
+       // Path- or root-relative URL
+       var pathOnly = urlObj.extra.hrefInfo.minimumPathOnly;
+       
+       // Matching scheme, scheme-relative or path-only
+       var minimumScheme = (urlObj.scheme===siteUrlObj.scheme || !urlObj.scheme);
+       
+       // Matching auth, ignoring auth or path-only
+       var minimumAuth = minimumScheme && (urlObj.auth===siteUrlObj.auth || options.removeAuth || pathOnly);
+       
+       // Matching host or path-only
+       var www = options.ignore_www ? "stripped" : "full";
+       var minimumHost = minimumAuth && (urlObj.host[www]===siteUrlObj.host[www] || pathOnly);
+       
+       // Matching port or path-only
+       var minimumPort = minimumHost && (urlObj.port===siteUrlObj.port || pathOnly);
+       
+       urlObj.extra.relation.minimumScheme = minimumScheme;
+       urlObj.extra.relation.minimumAuth   = minimumAuth;
+       urlObj.extra.relation.minimumHost   = minimumHost;
+       urlObj.extra.relation.minimumPort   = minimumPort;
+       
+       urlObj.extra.relation.maximumScheme = !minimumScheme || minimumScheme && !minimumAuth;
+       urlObj.extra.relation.maximumAuth   = !minimumScheme || minimumScheme && !minimumHost;
+       urlObj.extra.relation.maximumHost   = !minimumScheme || minimumScheme && !minimumPort;
+}
 
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
 
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
 
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
+function findRelation_pathOn(urlObj, siteUrlObj, options)
+{
+       var queryOnly = urlObj.extra.hrefInfo.minimumQueryOnly;
+       var hashOnly  = urlObj.extra.hrefInfo.minimumHashOnly;
+       var empty     = urlObj.extra.hrefInfo.empty;    // not required, but self-documenting
+       
+       // From upToPath()
+       var minimumPort   = urlObj.extra.relation.minimumPort;
+       var minimumScheme = urlObj.extra.relation.minimumScheme;
+       
+       // Matching port and path
+       var minimumPath = minimumPort && urlObj.path.absolute.string===siteUrlObj.path.absolute.string;
+       
+       // Matching resource or query/hash-only or empty
+       var matchingResource = (urlObj.resource===siteUrlObj.resource || !urlObj.resource && siteUrlObj.extra.resourceIsIndex) || (options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex && !siteUrlObj.resource);
+       var minimumResource = minimumPath && (matchingResource || queryOnly || hashOnly || empty);
+       
+       // Matching query or hash-only/empty
+       var query = options.removeEmptyQueries ? "stripped" : "full";
+       var urlQuery = urlObj.query.string[query];
+       var siteUrlQuery = siteUrlObj.query.string[query];
+       var minimumQuery = (minimumResource && !!urlQuery && urlQuery===siteUrlQuery) || ((hashOnly || empty) && !urlObj.extra.hrefInfo.separatorOnlyQuery);
+       
+       var minimumHash = minimumQuery && urlObj.hash===siteUrlObj.hash;
+       
+       urlObj.extra.relation.minimumPath     = minimumPath;
+       urlObj.extra.relation.minimumResource = minimumResource;
+       urlObj.extra.relation.minimumQuery    = minimumQuery;
+       urlObj.extra.relation.minimumHash     = minimumHash;
+       
+       urlObj.extra.relation.maximumPort     = !minimumScheme || minimumScheme && !minimumPath;
+       urlObj.extra.relation.maximumPath     = !minimumScheme || minimumScheme && !minimumResource;
+       urlObj.extra.relation.maximumResource = !minimumScheme || minimumScheme && !minimumQuery;
+       urlObj.extra.relation.maximumQuery    = !minimumScheme || minimumScheme && !minimumHash;
+       urlObj.extra.relation.maximumHash     = !minimumScheme || minimumScheme && !minimumHash;        // there's nothing after hash, so it's the same as maximumQuery
+       
+       // Matching path and/or resource with existing but non-matching site query
+       urlObj.extra.relation.overridesQuery  = minimumPath && urlObj.extra.relation.maximumResource && !minimumQuery && !!siteUrlQuery;
+}
 
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
 
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
 
- ***********************************************************************/
+module.exports =
+{
+       pathOn:   findRelation_pathOn,
+       upToPath: findRelation_upToPath
+};
 
+},{}],141:[function(require,module,exports){
 "use strict";
 
-// Tree transformer helpers.
-
-function TreeTransformer(before, after) {
-    TreeWalker.call(this);
-    this.before = before;
-    this.after = after;
-}
-TreeTransformer.prototype = new TreeWalker;
-
-(function(undefined){
-
-    function _(node, descend) {
-        node.DEFMETHOD("transform", function(tw, in_list){
-            var x, y;
-            tw.push(this);
-            if (tw.before) x = tw.before(this, descend, in_list);
-            if (x === undefined) {
-                if (!tw.after) {
-                    x = this;
-                    descend(x, tw);
-                } else {
-                    tw.stack[tw.stack.length - 1] = x = this;
-                    descend(x, tw);
-                    y = tw.after(x, in_list);
-                    if (y !== undefined) x = y;
-                }
-            }
-            tw.pop(this);
-            return x;
-        });
-    };
+var absolutize = require("./absolutize");
+var relativize = require("./relativize");
 
-    function do_list(list, tw) {
-        return MAP(list, function(node){
-            return node.transform(tw, true);
-        });
-    };
 
-    _(AST_Node, noop);
 
-    _(AST_LabeledStatement, function(self, tw){
-        self.label = self.label.transform(tw);
-        self.body = self.body.transform(tw);
-    });
+function relateUrl(siteUrlObj, urlObj, options)
+{
+       absolutize(urlObj, siteUrlObj, options);
+       relativize(urlObj, siteUrlObj, options);
+       
+       return urlObj;
+}
 
-    _(AST_SimpleStatement, function(self, tw){
-        self.body = self.body.transform(tw);
-    });
 
-    _(AST_Block, function(self, tw){
-        self.body = do_list(self.body, tw);
-    });
 
-    _(AST_DWLoop, function(self, tw){
-        self.condition = self.condition.transform(tw);
-        self.body = self.body.transform(tw);
-    });
+module.exports = relateUrl;
 
-    _(AST_For, function(self, tw){
-        if (self.init) self.init = self.init.transform(tw);
-        if (self.condition) self.condition = self.condition.transform(tw);
-        if (self.step) self.step = self.step.transform(tw);
-        self.body = self.body.transform(tw);
-    });
+},{"./absolutize":139,"./relativize":142}],142:[function(require,module,exports){
+"use strict";
 
-    _(AST_ForIn, function(self, tw){
-        self.init = self.init.transform(tw);
-        self.object = self.object.transform(tw);
-        self.body = self.body.transform(tw);
-    });
+var pathUtils = require("../util/path");
 
-    _(AST_With, function(self, tw){
-        self.expression = self.expression.transform(tw);
-        self.body = self.body.transform(tw);
-    });
 
-    _(AST_Exit, function(self, tw){
-        if (self.value) self.value = self.value.transform(tw);
-    });
 
-    _(AST_LoopControl, function(self, tw){
-        if (self.label) self.label = self.label.transform(tw);
-    });
+/*
+       Get a path relative to the site path.
+*/
+function relatePath(absolutePath, siteAbsolutePath)
+{
+       var relativePath = [];
+       
+       // At this point, it's related to the host/port
+       var related = true;
+       var parentIndex = -1;
+       
+       // Find parents
+       siteAbsolutePath.forEach( function(siteAbsoluteDir, i)
+       {
+               if (related)
+               {
+                       if (absolutePath[i] !== siteAbsoluteDir)
+                       {
+                               related = false;
+                       }
+                       else
+                       {
+                               parentIndex = i;
+                       }
+               }
+               
+               if (!related)
+               {
+                       // Up one level
+                       relativePath.push("..");
+               }
+       });
+       
+       // Form path
+       absolutePath.forEach( function(dir, i)
+       {
+               if (i > parentIndex)
+               {
+                       relativePath.push(dir);
+               }
+       });
+       
+       return relativePath;
+}
 
-    _(AST_If, function(self, tw){
-        self.condition = self.condition.transform(tw);
-        self.body = self.body.transform(tw);
-        if (self.alternative) self.alternative = self.alternative.transform(tw);
-    });
 
-    _(AST_Switch, function(self, tw){
-        self.expression = self.expression.transform(tw);
-        self.body = do_list(self.body, tw);
-    });
 
-    _(AST_Case, function(self, tw){
-        self.expression = self.expression.transform(tw);
-        self.body = do_list(self.body, tw);
-    });
+function relativize(urlObj, siteUrlObj, options)
+{
+       if (urlObj.extra.relation.minimumScheme)
+       {
+               var pathArray = relatePath(urlObj.path.absolute.array, siteUrlObj.path.absolute.array);
+               
+               urlObj.path.relative.array  = pathArray;
+               urlObj.path.relative.string = pathUtils.join(pathArray);
+       }
+}
 
-    _(AST_Try, function(self, tw){
-        self.body = do_list(self.body, tw);
-        if (self.bcatch) self.bcatch = self.bcatch.transform(tw);
-        if (self.bfinally) self.bfinally = self.bfinally.transform(tw);
-    });
 
-    _(AST_Catch, function(self, tw){
-        self.argname = self.argname.transform(tw);
-        self.body = do_list(self.body, tw);
-    });
 
-    _(AST_Definitions, function(self, tw){
-        self.definitions = do_list(self.definitions, tw);
-    });
+module.exports = relativize;
 
-    _(AST_VarDef, function(self, tw){
-        self.name = self.name.transform(tw);
-        if (self.value) self.value = self.value.transform(tw);
-    });
+},{"../util/path":144}],143:[function(require,module,exports){
+"use strict";
 
-    _(AST_Lambda, function(self, tw){
-        if (self.name) self.name = self.name.transform(tw);
-        self.argnames = do_list(self.argnames, tw);
-        self.body = do_list(self.body, tw);
-    });
+/*
+       Deep-clone an object.
+*/
+function clone(obj)
+{
+       if (obj instanceof Object)
+       {
+               var clonedObj = (obj instanceof Array) ? [] : {};
+               
+               for (var i in obj)
+               {
+                       if ( obj.hasOwnProperty(i) )
+                       {
+                               clonedObj[i] = clone( obj[i] );
+                       }
+               }
+               
+               return clonedObj;
+       }
+       
+       return obj;
+}
 
-    _(AST_Call, function(self, tw){
-        self.expression = self.expression.transform(tw);
-        self.args = do_list(self.args, tw);
-    });
 
-    _(AST_Seq, function(self, tw){
-        self.car = self.car.transform(tw);
-        self.cdr = self.cdr.transform(tw);
-    });
 
-    _(AST_Dot, function(self, tw){
-        self.expression = self.expression.transform(tw);
-    });
+/*
+       https://github.com/jonschlinkert/is-plain-object
+*/
+function isPlainObject(obj)
+{
+       return !!obj && typeof obj==="object" && obj.constructor===Object;
+}
 
-    _(AST_Sub, function(self, tw){
-        self.expression = self.expression.transform(tw);
-        self.property = self.property.transform(tw);
-    });
 
-    _(AST_Unary, function(self, tw){
-        self.expression = self.expression.transform(tw);
-    });
 
-    _(AST_Binary, function(self, tw){
-        self.left = self.left.transform(tw);
-        self.right = self.right.transform(tw);
-    });
+/*
+       Shallow-merge two objects.
+*/
+function shallowMerge(target, source)
+{
+       if (target instanceof Object && source instanceof Object)
+       {
+               for (var i in source)
+               {
+                       if ( source.hasOwnProperty(i) )
+                       {
+                               target[i] = source[i];
+                       }
+               }
+       }
+       
+       return target;
+}
 
-    _(AST_Conditional, function(self, tw){
-        self.condition = self.condition.transform(tw);
-        self.consequent = self.consequent.transform(tw);
-        self.alternative = self.alternative.transform(tw);
-    });
 
-    _(AST_Array, function(self, tw){
-        self.elements = do_list(self.elements, tw);
-    });
 
-    _(AST_Object, function(self, tw){
-        self.properties = do_list(self.properties, tw);
-    });
+module.exports =
+{
+       clone: clone,
+       isPlainObject: isPlainObject,
+       shallowMerge: shallowMerge
+};
 
-    _(AST_ObjectProperty, function(self, tw){
-        self.value = self.value.transform(tw);
-    });
+},{}],144:[function(require,module,exports){
+"use strict";
 
-})();
+function joinPath(pathArray)
+{
+       if (pathArray.length > 0)
+       {
+               return pathArray.join("/") + "/";
+       }
+       else
+       {
+               return "";
+       }
+}
 
-/***********************************************************************
 
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
 
-  -------------------------------- (C) ---------------------------------
+function resolveDotSegments(pathArray)
+{
+       var pathAbsolute = [];
+       
+       pathArray.forEach( function(dir)
+       {
+               if (dir !== "..")
+               {
+                       if (dir !== ".")
+                       {
+                               pathAbsolute.push(dir);
+                       }
+               }
+               else
+               {
+                       // Remove parent
+                       if (pathAbsolute.length > 0)
+                       {
+                               pathAbsolute.splice(pathAbsolute.length-1, 1);
+                       }
+               }
+       });
+       
+       return pathAbsolute;
+}
 
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
 
-  Distributed under the BSD license:
 
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
+module.exports =
+{
+       join: joinPath,
+       resolveDotSegments: resolveDotSegments
+};
 
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
+},{}],145:[function(require,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
 
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
+var util = require('./util');
+var has = Object.prototype.hasOwnProperty;
 
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
+/**
+ * A data structure which is a combination of an array and a set. Adding a new
+ * member is O(1), testing for membership is O(1), and finding the index of an
+ * element is O(1). Removing elements from the set is not supported. Only
+ * strings are supported for membership.
+ */
+function ArraySet() {
+  this._array = [];
+  this._set = Object.create(null);
+}
 
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
+/**
+ * Static method for creating ArraySet instances from an existing array.
+ */
+ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
+  var set = new ArraySet();
+  for (var i = 0, len = aArray.length; i < len; i++) {
+    set.add(aArray[i], aAllowDuplicates);
+  }
+  return set;
+};
 
- ***********************************************************************/
+/**
+ * Return how many unique items are in this ArraySet. If duplicates have been
+ * added, than those do not count towards the size.
+ *
+ * @returns Number
+ */
+ArraySet.prototype.size = function ArraySet_size() {
+  return Object.getOwnPropertyNames(this._set).length;
+};
 
-"use strict";
+/**
+ * Add the given string to this set.
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
+  var sStr = util.toSetString(aStr);
+  var isDuplicate = has.call(this._set, sStr);
+  var idx = this._array.length;
+  if (!isDuplicate || aAllowDuplicates) {
+    this._array.push(aStr);
+  }
+  if (!isDuplicate) {
+    this._set[sStr] = idx;
+  }
+};
 
-function SymbolDef(scope, index, orig) {
-    this.name = orig.name;
-    this.orig = [ orig ];
-    this.scope = scope;
-    this.references = [];
-    this.global = false;
-    this.mangled_name = null;
-    this.undeclared = false;
-    this.index = index;
-    this.id = SymbolDef.next_id++;
+/**
+ * Is the given string a member of this set?
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.has = function ArraySet_has(aStr) {
+  var sStr = util.toSetString(aStr);
+  return has.call(this._set, sStr);
 };
 
-SymbolDef.next_id = 1;
+/**
+ * What is the index of the given string in the array?
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
+  var sStr = util.toSetString(aStr);
+  if (has.call(this._set, sStr)) {
+    return this._set[sStr];
+  }
+  throw new Error('"' + aStr + '" is not in the set.');
+};
 
-SymbolDef.prototype = {
-    unmangleable: function(options) {
-        if (!options) options = {};
+/**
+ * What is the element at the given index?
+ *
+ * @param Number aIdx
+ */
+ArraySet.prototype.at = function ArraySet_at(aIdx) {
+  if (aIdx >= 0 && aIdx < this._array.length) {
+    return this._array[aIdx];
+  }
+  throw new Error('No element indexed by ' + aIdx);
+};
 
-        return (this.global && !options.toplevel)
-            || this.undeclared
-            || (!options.eval && (this.scope.uses_eval || this.scope.uses_with))
-            || (options.keep_fnames
-                && (this.orig[0] instanceof AST_SymbolLambda
-                    || this.orig[0] instanceof AST_SymbolDefun));
-    },
-    mangle: function(options) {
-        var cache = options.cache && options.cache.props;
-        if (this.global && cache && cache.has(this.name)) {
-            this.mangled_name = cache.get(this.name);
-        }
-        else if (!this.mangled_name && !this.unmangleable(options)) {
-            var s = this.scope;
-            var sym = this.orig[0];
-            if (!options.screw_ie8 && sym instanceof AST_SymbolLambda)
-                s = s.parent_scope;
-            var def;
-            if (this.defun && (def = this.defun.variables.get(this.name))) {
-                this.mangled_name = def.mangled_name || def.name;
-            } else
-                this.mangled_name = s.next_mangled(options, this);
-            if (this.global && cache) {
-                cache.set(this.name, this.mangled_name);
-            }
-        }
-    }
+/**
+ * Returns the array representation of this set (which has the proper indices
+ * indicated by indexOf). Note that this is a copy of the internal array used
+ * for storing the members so that no one can mess with internal state.
+ */
+ArraySet.prototype.toArray = function ArraySet_toArray() {
+  return this._array.slice();
 };
 
-AST_Toplevel.DEFMETHOD("figure_out_scope", function(options){
-    options = defaults(options, {
-        cache: null,
-        screw_ie8: true,
-    });
+exports.ArraySet = ArraySet;
 
-    // pass 1: setup scope chaining and handle definitions
-    var self = this;
-    var scope = self.parent_scope = null;
-    var labels = new Dictionary();
-    var defun = null;
-    var tw = new TreeWalker(function(node, descend){
-        if (node instanceof AST_Catch) {
-            var save_scope = scope;
-            scope = new AST_Scope(node);
-            scope.init_scope_vars(save_scope);
-            descend();
-            scope = save_scope;
-            return true;
-        }
-        if (node instanceof AST_Scope) {
-            node.init_scope_vars(scope);
-            var save_scope = scope;
-            var save_defun = defun;
-            var save_labels = labels;
-            defun = scope = node;
-            labels = new Dictionary();
-            descend();
-            scope = save_scope;
-            defun = save_defun;
-            labels = save_labels;
-            return true;        // don't descend again in TreeWalker
-        }
-        if (node instanceof AST_LabeledStatement) {
-            var l = node.label;
-            if (labels.has(l.name)) {
-                throw new Error(string_template("Label {name} defined twice", l));
-            }
-            labels.set(l.name, l);
-            descend();
-            labels.del(l.name);
-            return true;        // no descend again
-        }
-        if (node instanceof AST_With) {
-            for (var s = scope; s; s = s.parent_scope)
-                s.uses_with = true;
-            return;
-        }
-        if (node instanceof AST_Symbol) {
-            node.scope = scope;
-        }
-        if (node instanceof AST_Label) {
-            node.thedef = node;
-            node.references = [];
-        }
-        if (node instanceof AST_SymbolLambda) {
-            defun.def_function(node);
-        }
-        else if (node instanceof AST_SymbolDefun) {
-            // Careful here, the scope where this should be defined is
-            // the parent scope.  The reason is that we enter a new
-            // scope when we encounter the AST_Defun node (which is
-            // instanceof AST_Scope) but we get to the symbol a bit
-            // later.
-            (node.scope = defun.parent_scope).def_function(node);
-        }
-        else if (node instanceof AST_SymbolVar
-            || node instanceof AST_SymbolConst) {
-            defun.def_variable(node);
-            if (defun !== scope) {
-                node.mark_enclosed(options);
-                var def = scope.find_variable(node);
-                if (node.thedef !== def) {
-                    node.thedef = def;
-                    node.reference(options);
-                }
-            }
-        }
-        else if (node instanceof AST_SymbolCatch) {
-            scope.def_variable(node).defun = defun;
-        }
-        else if (node instanceof AST_LabelRef) {
-            var sym = labels.get(node.name);
-            if (!sym) throw new Error(string_template("Undefined label {name} [{line},{col}]", {
-                name: node.name,
-                line: node.start.line,
-                col: node.start.col
-            }));
-            node.thedef = sym;
-        }
-    });
-    self.walk(tw);
-
-    // pass 2: find back references and eval
-    var func = null;
-    var globals = self.globals = new Dictionary();
-    var tw = new TreeWalker(function(node, descend){
-        if (node instanceof AST_Lambda) {
-            var prev_func = func;
-            func = node;
-            descend();
-            func = prev_func;
-            return true;
-        }
-        if (node instanceof AST_LoopControl && node.label) {
-            node.label.thedef.references.push(node);
-            return true;
-        }
-        if (node instanceof AST_SymbolRef) {
-            var name = node.name;
-            if (name == "eval" && tw.parent() instanceof AST_Call) {
-                for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) {
-                    s.uses_eval = true;
-                }
-            }
-            var sym = node.scope.find_variable(name);
-            if (node.scope instanceof AST_Lambda && name == "arguments") {
-                node.scope.uses_arguments = true;
-            }
-            if (!sym) {
-                sym = self.def_global(node);
-            }
-            node.thedef = sym;
-            node.reference(options);
-            return true;
-        }
-    });
-    self.walk(tw);
-
-    // pass 3: fix up any scoping issue with IE8
-    if (!options.screw_ie8) {
-        self.walk(new TreeWalker(function(node, descend) {
-            if (node instanceof AST_SymbolCatch) {
-                var name = node.name;
-                var refs = node.thedef.references;
-                var scope = node.thedef.defun;
-                var def = scope.find_variable(name) || self.globals.get(name) || scope.def_variable(node);
-                refs.forEach(function(ref) {
-                    ref.thedef = def;
-                    ref.reference(options);
-                });
-                node.thedef = def;
-                return true;
-            }
-        }));
-    }
+},{"./util":154}],146:[function(require,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ *
+ * Based on the Base 64 VLQ implementation in Closure Compiler:
+ * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
+ *
+ * Copyright 2011 The Closure Compiler Authors. All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above
+ *    copyright notice, this list of conditions and the following
+ *    disclaimer in the documentation and/or other materials provided
+ *    with the distribution.
+ *  * Neither the name of Google Inc. nor the names of its
+ *    contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
 
-    if (options.cache) {
-        this.cname = options.cache.cname;
-    }
-});
+var base64 = require('./base64');
 
-AST_Toplevel.DEFMETHOD("def_global", function(node){
-    var globals = this.globals, name = node.name;
-    if (globals.has(name)) {
-        return globals.get(name);
-    } else {
-        var g = new SymbolDef(this, globals.size(), node);
-        g.undeclared = true;
-        g.global = true;
-        globals.set(name, g);
-        return g;
-    }
-});
+// A single base 64 digit can contain 6 bits of data. For the base 64 variable
+// length quantities we use in the source map spec, the first bit is the sign,
+// the next four bits are the actual value, and the 6th bit is the
+// continuation bit. The continuation bit tells us whether there are more
+// digits in this value following this digit.
+//
+//   Continuation
+//   |    Sign
+//   |    |
+//   V    V
+//   101011
 
-AST_Scope.DEFMETHOD("init_scope_vars", function(parent_scope){
-    this.variables = new Dictionary();  // map name to AST_SymbolVar (variables defined in this scope; includes functions)
-    this.functions = new Dictionary();  // map name to AST_SymbolDefun (functions defined in this scope)
-    this.uses_with = false;             // will be set to true if this or some nested scope uses the `with` statement
-    this.uses_eval = false;             // will be set to true if this or nested scope uses the global `eval`
-    this.parent_scope = parent_scope;   // the parent scope
-    this.enclosed = [];                 // a list of variables from this or outer scope(s) that are referenced from this or inner scopes
-    this.cname = -1;                    // the current index for mangling functions/variables
-});
+var VLQ_BASE_SHIFT = 5;
 
-AST_Lambda.DEFMETHOD("init_scope_vars", function(){
-    AST_Scope.prototype.init_scope_vars.apply(this, arguments);
-    this.uses_arguments = false;
-    this.def_variable(new AST_SymbolVar({
-        name: "arguments",
-        start: this.start,
-        end: this.end
-    }));
-});
+// binary: 100000
+var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
 
-AST_Symbol.DEFMETHOD("mark_enclosed", function(options) {
-    var def = this.definition();
-    var s = this.scope;
-    while (s) {
-        push_uniq(s.enclosed, def);
-        if (options.keep_fnames) {
-            s.functions.each(function(d) {
-                push_uniq(def.scope.enclosed, d);
-            });
-        }
-        if (s === def.scope) break;
-        s = s.parent_scope;
-    }
-});
+// binary: 011111
+var VLQ_BASE_MASK = VLQ_BASE - 1;
 
-AST_Symbol.DEFMETHOD("reference", function(options) {
-    this.definition().references.push(this);
-    this.mark_enclosed(options);
-});
+// binary: 100000
+var VLQ_CONTINUATION_BIT = VLQ_BASE;
 
-AST_Scope.DEFMETHOD("find_variable", function(name){
-    if (name instanceof AST_Symbol) name = name.name;
-    return this.variables.get(name)
-        || (this.parent_scope && this.parent_scope.find_variable(name));
-});
+/**
+ * Converts from a two-complement value to a value where the sign bit is
+ * placed in the least significant bit.  For example, as decimals:
+ *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
+ *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
+ */
+function toVLQSigned(aValue) {
+  return aValue < 0
+    ? ((-aValue) << 1) + 1
+    : (aValue << 1) + 0;
+}
 
-AST_Scope.DEFMETHOD("def_function", function(symbol){
-    this.functions.set(symbol.name, this.def_variable(symbol));
-});
+/**
+ * Converts to a two-complement value from a value where the sign bit is
+ * placed in the least significant bit.  For example, as decimals:
+ *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
+ *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
+ */
+function fromVLQSigned(aValue) {
+  var isNegative = (aValue & 1) === 1;
+  var shifted = aValue >> 1;
+  return isNegative
+    ? -shifted
+    : shifted;
+}
 
-AST_Scope.DEFMETHOD("def_variable", function(symbol){
-    var def;
-    if (!this.variables.has(symbol.name)) {
-        def = new SymbolDef(this, this.variables.size(), symbol);
-        this.variables.set(symbol.name, def);
-        def.global = !this.parent_scope;
-    } else {
-        def = this.variables.get(symbol.name);
-        def.orig.push(symbol);
-    }
-    return symbol.thedef = def;
-});
+/**
+ * Returns the base 64 VLQ encoded value.
+ */
+exports.encode = function base64VLQ_encode(aValue) {
+  var encoded = "";
+  var digit;
 
-AST_Scope.DEFMETHOD("next_mangled", function(options){
-    var ext = this.enclosed;
-    out: while (true) {
-        var m = base54(++this.cname);
-        if (!is_identifier(m)) continue; // skip over "do"
-
-        // https://github.com/mishoo/UglifyJS2/issues/242 -- do not
-        // shadow a name excepted from mangling.
-        if (options.except.indexOf(m) >= 0) continue;
-
-        // we must ensure that the mangled name does not shadow a name
-        // from some parent scope that is referenced in this or in
-        // inner scopes.
-        for (var i = ext.length; --i >= 0;) {
-            var sym = ext[i];
-            var name = sym.mangled_name || (sym.unmangleable(options) && sym.name);
-            if (m == name) continue out;
-        }
-        return m;
+  var vlq = toVLQSigned(aValue);
+
+  do {
+    digit = vlq & VLQ_BASE_MASK;
+    vlq >>>= VLQ_BASE_SHIFT;
+    if (vlq > 0) {
+      // There are still more digits in this value, so we must make sure the
+      // continuation bit is marked.
+      digit |= VLQ_CONTINUATION_BIT;
     }
-});
+    encoded += base64.encode(digit);
+  } while (vlq > 0);
 
-AST_Function.DEFMETHOD("next_mangled", function(options, def){
-    // #179, #326
-    // in Safari strict mode, something like (function x(x){...}) is a syntax error;
-    // a function expression's argument cannot shadow the function expression's name
+  return encoded;
+};
 
-    var tricky_def = def.orig[0] instanceof AST_SymbolFunarg && this.name && this.name.definition();
+/**
+ * Decodes the next base 64 VLQ value from the given string and returns the
+ * value and the rest of the string via the out parameter.
+ */
+exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
+  var strLen = aStr.length;
+  var result = 0;
+  var shift = 0;
+  var continuation, digit;
 
-    // the function's mangled_name is null when keep_fnames is true
-    var tricky_name = tricky_def ? tricky_def.mangled_name || tricky_def.name : null;
+  do {
+    if (aIndex >= strLen) {
+      throw new Error("Expected more digits in base 64 VLQ value.");
+    }
 
-    while (true) {
-        var name = AST_Lambda.prototype.next_mangled.call(this, options, def);
-        if (!tricky_name || tricky_name != name)
-            return name;
+    digit = base64.decode(aStr.charCodeAt(aIndex++));
+    if (digit === -1) {
+      throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
     }
-});
 
-AST_Symbol.DEFMETHOD("unmangleable", function(options){
-    return this.definition().unmangleable(options);
-});
+    continuation = !!(digit & VLQ_CONTINUATION_BIT);
+    digit &= VLQ_BASE_MASK;
+    result = result + (digit << shift);
+    shift += VLQ_BASE_SHIFT;
+  } while (continuation);
 
-// property accessors are not mangleable
-AST_SymbolAccessor.DEFMETHOD("unmangleable", function(){
-    return true;
-});
+  aOutParam.value = fromVLQSigned(result);
+  aOutParam.rest = aIndex;
+};
 
-// labels are always mangleable
-AST_Label.DEFMETHOD("unmangleable", function(){
-    return false;
-});
+},{"./base64":147}],147:[function(require,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
 
-AST_Symbol.DEFMETHOD("unreferenced", function(){
-    return this.definition().references.length == 0
-        && !(this.scope.uses_eval || this.scope.uses_with);
-});
+var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
 
-AST_Symbol.DEFMETHOD("undeclared", function(){
-    return this.definition().undeclared;
-});
+/**
+ * Encode an integer in the range of 0 to 63 to a single base 64 digit.
+ */
+exports.encode = function (number) {
+  if (0 <= number && number < intToCharMap.length) {
+    return intToCharMap[number];
+  }
+  throw new TypeError("Must be between 0 and 63: " + number);
+};
 
-AST_LabelRef.DEFMETHOD("undeclared", function(){
-    return false;
-});
+/**
+ * Decode a single base 64 character code digit to an integer. Returns -1 on
+ * failure.
+ */
+exports.decode = function (charCode) {
+  var bigA = 65;     // 'A'
+  var bigZ = 90;     // 'Z'
 
-AST_Label.DEFMETHOD("undeclared", function(){
-    return false;
-});
+  var littleA = 97;  // 'a'
+  var littleZ = 122; // 'z'
 
-AST_Symbol.DEFMETHOD("definition", function(){
-    return this.thedef;
-});
+  var zero = 48;     // '0'
+  var nine = 57;     // '9'
 
-AST_Symbol.DEFMETHOD("global", function(){
-    return this.definition().global;
-});
+  var plus = 43;     // '+'
+  var slash = 47;    // '/'
 
-AST_Toplevel.DEFMETHOD("_default_mangler_options", function(options){
-    return defaults(options, {
-        eval        : false,
-        except      : [],
-        keep_fnames : false,
-        screw_ie8   : true,
-        sort        : false, // Ignored. Flag retained for backwards compatibility.
-        toplevel    : false,
-    });
-});
+  var littleOffset = 26;
+  var numberOffset = 52;
 
-AST_Toplevel.DEFMETHOD("mangle_names", function(options){
-    options = this._default_mangler_options(options);
+  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+  if (bigA <= charCode && charCode <= bigZ) {
+    return (charCode - bigA);
+  }
 
-    // Never mangle arguments
-    options.except.push('arguments');
+  // 26 - 51: abcdefghijklmnopqrstuvwxyz
+  if (littleA <= charCode && charCode <= littleZ) {
+    return (charCode - littleA + littleOffset);
+  }
 
-    // We only need to mangle declaration nodes.  Special logic wired
-    // into the code generator will display the mangled name if it's
-    // present (and for AST_SymbolRef-s it'll use the mangled name of
-    // the AST_SymbolDeclaration that it points to).
-    var lname = -1;
-    var to_mangle = [];
+  // 52 - 61: 0123456789
+  if (zero <= charCode && charCode <= nine) {
+    return (charCode - zero + numberOffset);
+  }
 
-    if (options.cache) {
-        this.globals.each(function(symbol){
-            if (options.except.indexOf(symbol.name) < 0) {
-                to_mangle.push(symbol);
-            }
-        });
-    }
+  // 62: +
+  if (charCode == plus) {
+    return 62;
+  }
 
-    var tw = new TreeWalker(function(node, descend){
-        if (node instanceof AST_LabeledStatement) {
-            // lname is incremented when we get to the AST_Label
-            var save_nesting = lname;
-            descend();
-            lname = save_nesting;
-            return true;        // don't descend again in TreeWalker
-        }
-        if (node instanceof AST_Scope) {
-            var p = tw.parent(), a = [];
-            node.variables.each(function(symbol){
-                if (options.except.indexOf(symbol.name) < 0) {
-                    a.push(symbol);
-                }
-            });
-            to_mangle.push.apply(to_mangle, a);
-            return;
-        }
-        if (node instanceof AST_Label) {
-            var name;
-            do name = base54(++lname); while (!is_identifier(name));
-            node.mangled_name = name;
-            return true;
-        }
-        if (options.screw_ie8 && node instanceof AST_SymbolCatch) {
-            to_mangle.push(node.definition());
-            return;
-        }
-    });
-    this.walk(tw);
-    to_mangle.forEach(function(def){ def.mangle(options) });
+  // 63: /
+  if (charCode == slash) {
+    return 63;
+  }
 
-    if (options.cache) {
-        options.cache.cname = this.cname;
-    }
-});
+  // Invalid base64 digit.
+  return -1;
+};
 
-AST_Toplevel.DEFMETHOD("compute_char_frequency", function(options){
-    options = this._default_mangler_options(options);
-    var tw = new TreeWalker(function(node){
-        if (node instanceof AST_Constant)
-            base54.consider(node.print_to_string());
-        else if (node instanceof AST_Return)
-            base54.consider("return");
-        else if (node instanceof AST_Throw)
-            base54.consider("throw");
-        else if (node instanceof AST_Continue)
-            base54.consider("continue");
-        else if (node instanceof AST_Break)
-            base54.consider("break");
-        else if (node instanceof AST_Debugger)
-            base54.consider("debugger");
-        else if (node instanceof AST_Directive)
-            base54.consider(node.value);
-        else if (node instanceof AST_While)
-            base54.consider("while");
-        else if (node instanceof AST_Do)
-            base54.consider("do while");
-        else if (node instanceof AST_If) {
-            base54.consider("if");
-            if (node.alternative) base54.consider("else");
-        }
-        else if (node instanceof AST_Var)
-            base54.consider("var");
-        else if (node instanceof AST_Const)
-            base54.consider("const");
-        else if (node instanceof AST_Lambda)
-            base54.consider("function");
-        else if (node instanceof AST_For)
-            base54.consider("fo" + "r");
-        else if (node instanceof AST_ForIn)
-            base54.consider("for in");
-        else if (node instanceof AST_Switch)
-            base54.consider("switch");
-        else if (node instanceof AST_Case)
-            base54.consider("case");
-        else if (node instanceof AST_Default)
-            base54.consider("default");
-        else if (node instanceof AST_With)
-            base54.consider("with");
-        else if (node instanceof AST_ObjectSetter)
-            base54.consider("set" + node.key);
-        else if (node instanceof AST_ObjectGetter)
-            base54.consider("get" + node.key);
-        else if (node instanceof AST_ObjectKeyVal)
-            base54.consider(node.key);
-        else if (node instanceof AST_New)
-            base54.consider("new");
-        else if (node instanceof AST_This)
-            base54.consider("this");
-        else if (node instanceof AST_Try)
-            base54.consider("try");
-        else if (node instanceof AST_Catch)
-            base54.consider("catch");
-        else if (node instanceof AST_Finally)
-            base54.consider("finally");
-        else if (node instanceof AST_Symbol && node.unmangleable(options))
-            base54.consider(node.name);
-        else if (node instanceof AST_Unary || node instanceof AST_Binary)
-            base54.consider(node.operator);
-        else if (node instanceof AST_Dot)
-            base54.consider(node.property);
-    });
-    this.walk(tw);
-    base54.sort();
-});
+},{}],148:[function(require,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
 
-var base54 = (function() {
-    var string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789";
-    var chars, frequency;
-    function reset() {
-        frequency = Object.create(null);
-        chars = string.split("").map(function(ch){ return ch.charCodeAt(0) });
-        chars.forEach(function(ch){ frequency[ch] = 0 });
-    }
-    base54.consider = function(str){
-        for (var i = str.length; --i >= 0;) {
-            var code = str.charCodeAt(i);
-            if (code in frequency) ++frequency[code];
-        }
-    };
-    base54.sort = function() {
-        chars = mergeSort(chars, function(a, b){
-            if (is_digit(a) && !is_digit(b)) return 1;
-            if (is_digit(b) && !is_digit(a)) return -1;
-            return frequency[b] - frequency[a];
-        });
-    };
-    base54.reset = reset;
-    reset();
-    base54.get = function(){ return chars };
-    base54.freq = function(){ return frequency };
-    function base54(num) {
-        var ret = "", base = 54;
-        num++;
-        do {
-            num--;
-            ret += String.fromCharCode(chars[num % base]);
-            num = Math.floor(num / base);
-            base = 64;
-        } while (num > 0);
-        return ret;
-    };
-    return base54;
-})();
+exports.GREATEST_LOWER_BOUND = 1;
+exports.LEAST_UPPER_BOUND = 2;
 
-AST_Toplevel.DEFMETHOD("scope_warnings", function(options){
-    options = defaults(options, {
-        assign_to_global : true,
-        eval             : true,
-        func_arguments   : true,
-        nested_defuns    : true,
-        undeclared       : false, // this makes a lot of noise
-        unreferenced     : true,
-    });
-    var tw = new TreeWalker(function(node){
-        if (options.undeclared
-            && node instanceof AST_SymbolRef
-            && node.undeclared())
-        {
-            // XXX: this also warns about JS standard names,
-            // i.e. Object, Array, parseInt etc.  Should add a list of
-            // exceptions.
-            AST_Node.warn("Undeclared symbol: {name} [{file}:{line},{col}]", {
-                name: node.name,
-                file: node.start.file,
-                line: node.start.line,
-                col: node.start.col
-            });
-        }
-        if (options.assign_to_global)
-        {
-            var sym = null;
-            if (node instanceof AST_Assign && node.left instanceof AST_SymbolRef)
-                sym = node.left;
-            else if (node instanceof AST_ForIn && node.init instanceof AST_SymbolRef)
-                sym = node.init;
-            if (sym
-                && (sym.undeclared()
-                    || (sym.global() && sym.scope !== sym.definition().scope))) {
-                AST_Node.warn("{msg}: {name} [{file}:{line},{col}]", {
-                    msg: sym.undeclared() ? "Accidental global?" : "Assignment to global",
-                    name: sym.name,
-                    file: sym.start.file,
-                    line: sym.start.line,
-                    col: sym.start.col
-                });
-            }
-        }
-        if (options.eval
-            && node instanceof AST_SymbolRef
-            && node.undeclared()
-            && node.name == "eval") {
-            AST_Node.warn("Eval is used [{file}:{line},{col}]", node.start);
-        }
-        if (options.unreferenced
-            && (node instanceof AST_SymbolDeclaration || node instanceof AST_Label)
-            && !(node instanceof AST_SymbolCatch)
-            && node.unreferenced()) {
-            AST_Node.warn("{type} {name} is declared but not referenced [{file}:{line},{col}]", {
-                type: node instanceof AST_Label ? "Label" : "Symbol",
-                name: node.name,
-                file: node.start.file,
-                line: node.start.line,
-                col: node.start.col
-            });
-        }
-        if (options.func_arguments
-            && node instanceof AST_Lambda
-            && node.uses_arguments) {
-            AST_Node.warn("arguments used in function {name} [{file}:{line},{col}]", {
-                name: node.name ? node.name.name : "anonymous",
-                file: node.start.file,
-                line: node.start.line,
-                col: node.start.col
-            });
-        }
-        if (options.nested_defuns
-            && node instanceof AST_Defun
-            && !(tw.parent() instanceof AST_Scope)) {
-            AST_Node.warn("Function {name} declared in nested statement \"{type}\" [{file}:{line},{col}]", {
-                name: node.name.name,
-                type: tw.parent().TYPE,
-                file: node.start.file,
-                line: node.start.line,
-                col: node.start.col
-            });
-        }
-    });
-    this.walk(tw);
-});
+/**
+ * Recursive implementation of binary search.
+ *
+ * @param aLow Indices here and lower do not contain the needle.
+ * @param aHigh Indices here and higher do not contain the needle.
+ * @param aNeedle The element being searched for.
+ * @param aHaystack The non-empty array being searched.
+ * @param aCompare Function which takes two elements and returns -1, 0, or 1.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ *     closest element that is smaller than or greater than the one we are
+ *     searching for, respectively, if the exact element cannot be found.
+ */
+function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
+  // This function terminates when one of the following is true:
+  //
+  //   1. We find the exact element we are looking for.
+  //
+  //   2. We did not find the exact element, but we can return the index of
+  //      the next-closest element.
+  //
+  //   3. We did not find the exact element, and there is no next-closest
+  //      element than the one we are searching for, so we return -1.
+  var mid = Math.floor((aHigh - aLow) / 2) + aLow;
+  var cmp = aCompare(aNeedle, aHaystack[mid], true);
+  if (cmp === 0) {
+    // Found the element we are looking for.
+    return mid;
+  }
+  else if (cmp > 0) {
+    // Our needle is greater than aHaystack[mid].
+    if (aHigh - mid > 1) {
+      // The element is in the upper half.
+      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
+    }
 
-/***********************************************************************
+    // The exact needle element was not found in this haystack. Determine if
+    // we are in termination case (3) or (2) and return the appropriate thing.
+    if (aBias == exports.LEAST_UPPER_BOUND) {
+      return aHigh < aHaystack.length ? aHigh : -1;
+    } else {
+      return mid;
+    }
+  }
+  else {
+    // Our needle is less than aHaystack[mid].
+    if (mid - aLow > 1) {
+      // The element is in the lower half.
+      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
+    }
 
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
+    // we are in termination case (3) or (2) and return the appropriate thing.
+    if (aBias == exports.LEAST_UPPER_BOUND) {
+      return mid;
+    } else {
+      return aLow < 0 ? -1 : aLow;
+    }
+  }
+}
 
-  -------------------------------- (C) ---------------------------------
+/**
+ * This is an implementation of binary search which will always try and return
+ * the index of the closest element if there is no exact hit. This is because
+ * mappings between original and generated line/col pairs are single points,
+ * and there is an implicit region between each of them, so a miss just means
+ * that you aren't on the very start of a region.
+ *
+ * @param aNeedle The element you are looking for.
+ * @param aHaystack The array that is being searched.
+ * @param aCompare A function which takes the needle and an element in the
+ *     array and returns -1, 0, or 1 depending on whether the needle is less
+ *     than, equal to, or greater than the element, respectively.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ *     closest element that is smaller than or greater than the one we are
+ *     searching for, respectively, if the exact element cannot be found.
+ *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
+ */
+exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
+  if (aHaystack.length === 0) {
+    return -1;
+  }
 
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
+  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
+                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);
+  if (index < 0) {
+    return -1;
+  }
 
-  Distributed under the BSD license:
+  // We have found either the exact element, or the next-closest element than
+  // the one we are searching for. However, there may be more than one such
+  // element. Make sure we always return the smallest of these.
+  while (index - 1 >= 0) {
+    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
+      break;
+    }
+    --index;
+  }
 
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
+  return index;
+};
 
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
+},{}],149:[function(require,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2014 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
 
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
+var util = require('./util');
 
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
+/**
+ * Determine whether mappingB is after mappingA with respect to generated
+ * position.
+ */
+function generatedPositionAfter(mappingA, mappingB) {
+  // Optimized for most common case
+  var lineA = mappingA.generatedLine;
+  var lineB = mappingB.generatedLine;
+  var columnA = mappingA.generatedColumn;
+  var columnB = mappingB.generatedColumn;
+  return lineB > lineA || lineB == lineA && columnB >= columnA ||
+         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
+}
 
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
+/**
+ * A data structure to provide a sorted view of accumulated mappings in a
+ * performance conscious manner. It trades a neglibable overhead in general
+ * case for a large speedup in case of mappings being added in order.
+ */
+function MappingList() {
+  this._array = [];
+  this._sorted = true;
+  // Serves as infimum
+  this._last = {generatedLine: -1, generatedColumn: 0};
+}
 
- ***********************************************************************/
+/**
+ * Iterate through internal items. This method takes the same arguments that
+ * `Array.prototype.forEach` takes.
+ *
+ * NOTE: The order of the mappings is NOT guaranteed.
+ */
+MappingList.prototype.unsortedForEach =
+  function MappingList_forEach(aCallback, aThisArg) {
+    this._array.forEach(aCallback, aThisArg);
+  };
 
-"use strict";
+/**
+ * Add the given source mapping.
+ *
+ * @param Object aMapping
+ */
+MappingList.prototype.add = function MappingList_add(aMapping) {
+  if (generatedPositionAfter(this._last, aMapping)) {
+    this._last = aMapping;
+    this._array.push(aMapping);
+  } else {
+    this._sorted = false;
+    this._array.push(aMapping);
+  }
+};
 
-var EXPECT_DIRECTIVE = /^$|[;{][\s\n]*$/;
-
-function is_some_comments(comment) {
-    // multiline comment
-    return comment.type == "comment2" && /@preserve|@license|@cc_on/i.test(comment.value);
-}
-
-function OutputStream(options) {
-
-    options = defaults(options, {
-        ascii_only       : false,
-        beautify         : false,
-        bracketize       : false,
-        comments         : false,
-        indent_level     : 4,
-        indent_start     : 0,
-        inline_script    : true,
-        keep_quoted_props: false,
-        max_line_len     : false,
-        preamble         : null,
-        preserve_line    : false,
-        quote_keys       : false,
-        quote_style      : 0,
-        screw_ie8        : true,
-        semicolons       : true,
-        shebang          : true,
-        source_map       : null,
-        space_colon      : true,
-        unescape_regexps : false,
-        width            : 80,
-        wrap_iife        : false,
-    }, true);
-
-    // Convert comment option to RegExp if neccessary and set up comments filter
-    var comment_filter = return_false; // Default case, throw all comments away
-    if (options.comments) {
-        var comments = options.comments;
-        if (typeof options.comments === "string" && /^\/.*\/[a-zA-Z]*$/.test(options.comments)) {
-            var regex_pos = options.comments.lastIndexOf("/");
-            comments = new RegExp(
-                options.comments.substr(1, regex_pos - 1),
-                options.comments.substr(regex_pos + 1)
-            );
-        }
-        if (comments instanceof RegExp) {
-            comment_filter = function(comment) {
-                return comment.type != "comment5" && comments.test(comment.value);
-            };
-        }
-        else if (typeof comments === "function") {
-            comment_filter = function(comment) {
-                return comment.type != "comment5" && comments(this, comment);
-            };
-        }
-        else if (comments === "some") {
-            comment_filter = is_some_comments;
-        } else { // NOTE includes "all" option
-            comment_filter = return_true;
-        }
-    }
+/**
+ * Returns the flat, sorted array of mappings. The mappings are sorted by
+ * generated position.
+ *
+ * WARNING: This method returns internal data without copying, for
+ * performance. The return value must NOT be mutated, and should be treated as
+ * an immutable borrow. If you want to take ownership, you must make your own
+ * copy.
+ */
+MappingList.prototype.toArray = function MappingList_toArray() {
+  if (!this._sorted) {
+    this._array.sort(util.compareByGeneratedPositionsInflated);
+    this._sorted = true;
+  }
+  return this._array;
+};
 
-    var indentation = 0;
-    var current_col = 0;
-    var current_line = 1;
-    var current_pos = 0;
-    var OUTPUT = "";
+exports.MappingList = MappingList;
 
-    function to_ascii(str, identifier) {
-        return str.replace(/[\u0000-\u001f\u007f-\uffff]/g, function(ch) {
-            var code = ch.charCodeAt(0).toString(16);
-            if (code.length <= 2 && !identifier) {
-                while (code.length < 2) code = "0" + code;
-                return "\\x" + code;
-            } else {
-                while (code.length < 4) code = "0" + code;
-                return "\\u" + code;
-            }
-        });
-    };
+},{"./util":154}],150:[function(require,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
 
-    function make_string(str, quote) {
-        var dq = 0, sq = 0;
-        str = str.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g,
-          function(s, i){
-            switch (s) {
-              case '"': ++dq; return '"';
-              case "'": ++sq; return "'";
-              case "\\": return "\\\\";
-              case "\n": return "\\n";
-              case "\r": return "\\r";
-              case "\t": return "\\t";
-              case "\b": return "\\b";
-              case "\f": return "\\f";
-              case "\x0B": return options.screw_ie8 ? "\\v" : "\\x0B";
-              case "\u2028": return "\\u2028";
-              case "\u2029": return "\\u2029";
-              case "\ufeff": return "\\ufeff";
-              case "\0":
-                  return /[0-7]/.test(str.charAt(i+1)) ? "\\x00" : "\\0";
-            }
-            return s;
-        });
-        function quote_single() {
-            return "'" + str.replace(/\x27/g, "\\'") + "'";
-        }
-        function quote_double() {
-            return '"' + str.replace(/\x22/g, '\\"') + '"';
-        }
-        if (options.ascii_only) str = to_ascii(str);
-        switch (options.quote_style) {
-          case 1:
-            return quote_single();
-          case 2:
-            return quote_double();
-          case 3:
-            return quote == "'" ? quote_single() : quote_double();
-          default:
-            return dq > sq ? quote_single() : quote_double();
-        }
-    };
+// It turns out that some (most?) JavaScript engines don't self-host
+// `Array.prototype.sort`. This makes sense because C++ will likely remain
+// faster than JS when doing raw CPU-intensive sorting. However, when using a
+// custom comparator function, calling back and forth between the VM's C++ and
+// JIT'd JS is rather slow *and* loses JIT type information, resulting in
+// worse generated code for the comparator function than would be optimal. In
+// fact, when sorting with a comparator, these costs outweigh the benefits of
+// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
+// a ~3500ms mean speed-up in `bench/bench.html`.
 
-    function encode_string(str, quote) {
-        var ret = make_string(str, quote);
-        if (options.inline_script) {
-            ret = ret.replace(/<\x2fscript([>\/\t\n\f\r ])/gi, "<\\/script$1");
-            ret = ret.replace(/\x3c!--/g, "\\x3c!--");
-            ret = ret.replace(/--\x3e/g, "--\\x3e");
-        }
-        return ret;
-    };
+/**
+ * Swap the elements indexed by `x` and `y` in the array `ary`.
+ *
+ * @param {Array} ary
+ *        The array.
+ * @param {Number} x
+ *        The index of the first item.
+ * @param {Number} y
+ *        The index of the second item.
+ */
+function swap(ary, x, y) {
+  var temp = ary[x];
+  ary[x] = ary[y];
+  ary[y] = temp;
+}
 
-    function make_name(name) {
-        name = name.toString();
-        if (options.ascii_only)
-            name = to_ascii(name, true);
-        return name;
-    };
+/**
+ * Returns a random integer within the range `low .. high` inclusive.
+ *
+ * @param {Number} low
+ *        The lower bound on the range.
+ * @param {Number} high
+ *        The upper bound on the range.
+ */
+function randomIntInRange(low, high) {
+  return Math.round(low + (Math.random() * (high - low)));
+}
 
-    function make_indent(back) {
-        return repeat_string(" ", options.indent_start + indentation - back * options.indent_level);
-    };
+/**
+ * The Quick Sort algorithm.
+ *
+ * @param {Array} ary
+ *        An array to sort.
+ * @param {function} comparator
+ *        Function to use to compare two items.
+ * @param {Number} p
+ *        Start index of the array
+ * @param {Number} r
+ *        End index of the array
+ */
+function doQuickSort(ary, comparator, p, r) {
+  // If our lower bound is less than our upper bound, we (1) partition the
+  // array into two pieces and (2) recurse on each half. If it is not, this is
+  // the empty array and our base case.
 
-    /* -----[ beautification/minification ]----- */
+  if (p < r) {
+    // (1) Partitioning.
+    //
+    // The partitioning chooses a pivot between `p` and `r` and moves all
+    // elements that are less than or equal to the pivot to the before it, and
+    // all the elements that are greater than it after it. The effect is that
+    // once partition is done, the pivot is in the exact place it will be when
+    // the array is put in sorted order, and it will not need to be moved
+    // again. This runs in O(n) time.
 
-    var might_need_space = false;
-    var might_need_semicolon = false;
-    var might_add_newline = 0;
-    var last = null;
+    // Always choose a random pivot so that an input array which is reverse
+    // sorted does not cause O(n^2) running time.
+    var pivotIndex = randomIntInRange(p, r);
+    var i = p - 1;
 
-    function last_char() {
-        return last.charAt(last.length - 1);
-    };
+    swap(ary, pivotIndex, r);
+    var pivot = ary[r];
 
-    var ensure_line_len = options.max_line_len ? function() {
-        if (current_col > options.max_line_len) {
-            if (might_add_newline) {
-                var left = OUTPUT.slice(0, might_add_newline);
-                var right = OUTPUT.slice(might_add_newline);
-                OUTPUT = left + "\n" + right;
-                current_line++;
-                current_pos++;
-                current_col = right.length;
-            }
-            if (current_col > options.max_line_len) {
-                AST_Node.warn("Output exceeds {max_line_len} characters", options);
-            }
-        }
-        might_add_newline = 0;
-    } : noop;
-
-    var requireSemicolonChars = makePredicate("( [ + * / - , .");
-
-    function print(str) {
-        str = String(str);
-        var ch = str.charAt(0);
-        if (might_need_semicolon) {
-            might_need_semicolon = false;
-
-            if ((!ch || ";}".indexOf(ch) < 0) && !/[;]$/.test(last)) {
-                if (options.semicolons || requireSemicolonChars(ch)) {
-                    OUTPUT += ";";
-                    current_col++;
-                    current_pos++;
-                } else {
-                    ensure_line_len();
-                    OUTPUT += "\n";
-                    current_pos++;
-                    current_line++;
-                    current_col = 0;
-
-                    if (/^\s+$/.test(str)) {
-                        // reset the semicolon flag, since we didn't print one
-                        // now and might still have to later
-                        might_need_semicolon = true;
-                    }
-                }
+    // Immediately after `j` is incremented in this loop, the following hold
+    // true:
+    //
+    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
+    //
+    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
+    for (var j = p; j < r; j++) {
+      if (comparator(ary[j], pivot) <= 0) {
+        i += 1;
+        swap(ary, i, j);
+      }
+    }
 
-                if (!options.beautify)
-                    might_need_space = false;
-            }
-        }
+    swap(ary, i + 1, j);
+    var q = i + 1;
 
-        if (!options.beautify && options.preserve_line && stack[stack.length - 1]) {
-            var target_line = stack[stack.length - 1].start.line;
-            while (current_line < target_line) {
-                ensure_line_len();
-                OUTPUT += "\n";
-                current_pos++;
-                current_line++;
-                current_col = 0;
-                might_need_space = false;
-            }
-        }
+    // (2) Recurse on each half.
 
-        if (might_need_space) {
-            var prev = last_char();
-            if ((is_identifier_char(prev)
-                    && (is_identifier_char(ch) || ch == "\\"))
-                || (ch == "/" && ch == prev)
-                || ((ch == "+" || ch == "-") && ch == last))
-            {
-                OUTPUT += " ";
-                current_col++;
-                current_pos++;
-            }
-            might_need_space = false;
-        }
-        OUTPUT += str;
-        current_pos += str.length;
-        var a = str.split(/\r?\n/), n = a.length - 1;
-        current_line += n;
-        current_col += a[0].length;
-        if (n > 0) {
-            ensure_line_len();
-            current_col = a[n].length;
-        }
-        last = str;
-    };
+    doQuickSort(ary, comparator, p, q - 1);
+    doQuickSort(ary, comparator, q + 1, r);
+  }
+}
 
-    var space = options.beautify ? function() {
-        print(" ");
-    } : function() {
-        might_need_space = true;
-    };
+/**
+ * Sort the given array in-place with the given comparator function.
+ *
+ * @param {Array} ary
+ *        An array to sort.
+ * @param {function} comparator
+ *        Function to use to compare two items.
+ */
+exports.quickSort = function (ary, comparator) {
+  doQuickSort(ary, comparator, 0, ary.length - 1);
+};
 
-    var indent = options.beautify ? function(half) {
-        if (options.beautify) {
-            print(make_indent(half ? 0.5 : 0));
-        }
-    } : noop;
-
-    var with_indent = options.beautify ? function(col, cont) {
-        if (col === true) col = next_indent();
-        var save_indentation = indentation;
-        indentation = col;
-        var ret = cont();
-        indentation = save_indentation;
-        return ret;
-    } : function(col, cont) { return cont() };
-
-    var newline = options.beautify ? function() {
-        print("\n");
-    } : options.max_line_len ? function() {
-        ensure_line_len();
-        might_add_newline = OUTPUT.length;
-    } : noop;
-
-    var semicolon = options.beautify ? function() {
-        print(";");
-    } : function() {
-        might_need_semicolon = true;
-    };
+},{}],151:[function(require,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
 
-    function force_semicolon() {
-        might_need_semicolon = false;
-        print(";");
-    };
+var util = require('./util');
+var binarySearch = require('./binary-search');
+var ArraySet = require('./array-set').ArraySet;
+var base64VLQ = require('./base64-vlq');
+var quickSort = require('./quick-sort').quickSort;
 
-    function next_indent() {
-        return indentation + options.indent_level;
-    };
+function SourceMapConsumer(aSourceMap) {
+  var sourceMap = aSourceMap;
+  if (typeof aSourceMap === 'string') {
+    sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+  }
 
-    function with_block(cont) {
-        var ret;
-        print("{");
-        newline();
-        with_indent(next_indent(), function(){
-            ret = cont();
-        });
-        indent();
-        print("}");
-        return ret;
-    };
+  return sourceMap.sections != null
+    ? new IndexedSourceMapConsumer(sourceMap)
+    : new BasicSourceMapConsumer(sourceMap);
+}
 
-    function with_parens(cont) {
-        print("(");
-        //XXX: still nice to have that for argument lists
-        //var ret = with_indent(current_col, cont);
-        var ret = cont();
-        print(")");
-        return ret;
-    };
+SourceMapConsumer.fromSourceMap = function(aSourceMap) {
+  return BasicSourceMapConsumer.fromSourceMap(aSourceMap);
+}
 
-    function with_square(cont) {
-        print("[");
-        //var ret = with_indent(current_col, cont);
-        var ret = cont();
-        print("]");
-        return ret;
-    };
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+SourceMapConsumer.prototype._version = 3;
 
-    function comma() {
-        print(",");
-        space();
-    };
+// `__generatedMappings` and `__originalMappings` are arrays that hold the
+// parsed mapping coordinates from the source map's "mappings" attribute. They
+// are lazily instantiated, accessed via the `_generatedMappings` and
+// `_originalMappings` getters respectively, and we only parse the mappings
+// and create these arrays once queried for a source location. We jump through
+// these hoops because there can be many thousands of mappings, and parsing
+// them is expensive, so we only want to do it if we must.
+//
+// Each object in the arrays is of the form:
+//
+//     {
+//       generatedLine: The line number in the generated code,
+//       generatedColumn: The column number in the generated code,
+//       source: The path to the original source file that generated this
+//               chunk of code,
+//       originalLine: The line number in the original source that
+//                     corresponds to this chunk of generated code,
+//       originalColumn: The column number in the original source that
+//                       corresponds to this chunk of generated code,
+//       name: The name of the original symbol which generated this chunk of
+//             code.
+//     }
+//
+// All properties except for `generatedLine` and `generatedColumn` can be
+// `null`.
+//
+// `_generatedMappings` is ordered by the generated positions.
+//
+// `_originalMappings` is ordered by the original positions.
 
-    function colon() {
-        print(":");
-        if (options.space_colon) space();
-    };
+SourceMapConsumer.prototype.__generatedMappings = null;
+Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
+  get: function () {
+    if (!this.__generatedMappings) {
+      this._parseMappings(this._mappings, this.sourceRoot);
+    }
 
-    var add_mapping = options.source_map ? function(token, name) {
-        try {
-            if (token) options.source_map.add(
-                token.file || "?",
-                current_line, current_col,
-                token.line, token.col,
-                (!name && token.type == "name") ? token.value : name
-            );
-        } catch(ex) {
-            AST_Node.warn("Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]", {
-                file: token.file,
-                line: token.line,
-                col: token.col,
-                cline: current_line,
-                ccol: current_col,
-                name: name || ""
-            })
-        }
-    } : noop;
+    return this.__generatedMappings;
+  }
+});
 
-    function get() {
-        if (might_add_newline) {
-            ensure_line_len();
-        }
-        return OUTPUT;
-    };
+SourceMapConsumer.prototype.__originalMappings = null;
+Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
+  get: function () {
+    if (!this.__originalMappings) {
+      this._parseMappings(this._mappings, this.sourceRoot);
+    }
 
-    var stack = [];
-    return {
-        get             : get,
-        toString        : get,
-        indent          : indent,
-        indentation     : function() { return indentation },
-        current_width   : function() { return current_col - indentation },
-        should_break    : function() { return options.width && this.current_width() >= options.width },
-        newline         : newline,
-        print           : print,
-        space           : space,
-        comma           : comma,
-        colon           : colon,
-        last            : function() { return last },
-        semicolon       : semicolon,
-        force_semicolon : force_semicolon,
-        to_ascii        : to_ascii,
-        print_name      : function(name) { print(make_name(name)) },
-        print_string    : function(str, quote, escape_directive) {
-            var encoded = encode_string(str, quote);
-            if (escape_directive === true && encoded.indexOf("\\") === -1) {
-                // Insert semicolons to break directive prologue
-                if (!EXPECT_DIRECTIVE.test(OUTPUT)) {
-                    force_semicolon();
-                }
-                force_semicolon();
-            }
-            print(encoded);
-        },
-        encode_string   : encode_string,
-        next_indent     : next_indent,
-        with_indent     : with_indent,
-        with_block      : with_block,
-        with_parens     : with_parens,
-        with_square     : with_square,
-        add_mapping     : add_mapping,
-        option          : function(opt) { return options[opt] },
-        comment_filter  : comment_filter,
-        line            : function() { return current_line },
-        col             : function() { return current_col },
-        pos             : function() { return current_pos },
-        push_node       : function(node) { stack.push(node) },
-        pop_node        : function() { return stack.pop() },
-        parent          : function(n) {
-            return stack[stack.length - 2 - (n || 0)];
-        }
-    };
+    return this.__originalMappings;
+  }
+});
 
-};
+SourceMapConsumer.prototype._charIsMappingSeparator =
+  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
+    var c = aStr.charAt(index);
+    return c === ";" || c === ",";
+  };
 
-/* -----[ code generators ]----- */
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+SourceMapConsumer.prototype._parseMappings =
+  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+    throw new Error("Subclasses must implement _parseMappings");
+  };
 
-(function(){
+SourceMapConsumer.GENERATED_ORDER = 1;
+SourceMapConsumer.ORIGINAL_ORDER = 2;
 
-    /* -----[ utils ]----- */
+SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
+SourceMapConsumer.LEAST_UPPER_BOUND = 2;
 
-    function DEFPRINT(nodetype, generator) {
-        nodetype.DEFMETHOD("_codegen", generator);
-    };
+/**
+ * Iterate over each mapping between an original source/line/column and a
+ * generated line/column in this source map.
+ *
+ * @param Function aCallback
+ *        The function that is called with each mapping.
+ * @param Object aContext
+ *        Optional. If specified, this object will be the value of `this` every
+ *        time that `aCallback` is called.
+ * @param aOrder
+ *        Either `SourceMapConsumer.GENERATED_ORDER` or
+ *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
+ *        iterate over the mappings sorted by the generated file's line/column
+ *        order or the original's source/line/column order, respectively. Defaults to
+ *        `SourceMapConsumer.GENERATED_ORDER`.
+ */
+SourceMapConsumer.prototype.eachMapping =
+  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
+    var context = aContext || null;
+    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
 
-    var use_asm = false;
-    var in_directive = false;
+    var mappings;
+    switch (order) {
+    case SourceMapConsumer.GENERATED_ORDER:
+      mappings = this._generatedMappings;
+      break;
+    case SourceMapConsumer.ORIGINAL_ORDER:
+      mappings = this._originalMappings;
+      break;
+    default:
+      throw new Error("Unknown order of iteration.");
+    }
 
-    AST_Node.DEFMETHOD("print", function(stream, force_parens){
-        var self = this, generator = self._codegen, prev_use_asm = use_asm;
-        if (self instanceof AST_Directive && self.value == "use asm" && stream.parent() instanceof AST_Scope) {
-            use_asm = true;
-        }
-        function doit() {
-            self.add_comments(stream);
-            self.add_source_map(stream);
-            generator(self, stream);
-        }
-        stream.push_node(self);
-        if (force_parens || self.needs_parens(stream)) {
-            stream.with_parens(doit);
-        } else {
-            doit();
-        }
-        stream.pop_node();
-        if (self instanceof AST_Scope) {
-            use_asm = prev_use_asm;
-        }
-    });
+    var sourceRoot = this.sourceRoot;
+    mappings.map(function (mapping) {
+      var source = mapping.source === null ? null : this._sources.at(mapping.source);
+      if (source != null && sourceRoot != null) {
+        source = util.join(sourceRoot, source);
+      }
+      return {
+        source: source,
+        generatedLine: mapping.generatedLine,
+        generatedColumn: mapping.generatedColumn,
+        originalLine: mapping.originalLine,
+        originalColumn: mapping.originalColumn,
+        name: mapping.name === null ? null : this._names.at(mapping.name)
+      };
+    }, this).forEach(aCallback, context);
+  };
 
-    AST_Node.DEFMETHOD("print_to_string", function(options){
-        var s = OutputStream(options);
-        if (!options) s._readonly = true;
-        this.print(s);
-        return s.get();
-    });
+/**
+ * Returns all generated line and column information for the original source,
+ * line, and column provided. If no column is provided, returns all mappings
+ * corresponding to a either the line we are searching for or the next
+ * closest line that has any mappings. Otherwise, returns all mappings
+ * corresponding to the given line and either the column we are searching for
+ * or the next closest column that has any offsets.
+ *
+ * The only argument is an object with the following properties:
+ *
+ *   - source: The filename of the original source.
+ *   - line: The line number in the original source.
+ *   - column: Optional. the column number in the original source.
+ *
+ * and an array of objects is returned, each with the following properties:
+ *
+ *   - line: The line number in the generated source, or null.
+ *   - column: The column number in the generated source, or null.
+ */
+SourceMapConsumer.prototype.allGeneratedPositionsFor =
+  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
+    var line = util.getArg(aArgs, 'line');
 
-    /* -----[ comments ]----- */
-
-    AST_Node.DEFMETHOD("add_comments", function(output){
-        if (output._readonly) return;
-        var self = this;
-        var start = self.start;
-        if (start && !start._comments_dumped) {
-            start._comments_dumped = true;
-            var comments = start.comments_before || [];
-
-            // XXX: ugly fix for https://github.com/mishoo/UglifyJS2/issues/112
-            //               and https://github.com/mishoo/UglifyJS2/issues/372
-            if (self instanceof AST_Exit && self.value) {
-                self.value.walk(new TreeWalker(function(node){
-                    if (node.start && node.start.comments_before) {
-                        comments = comments.concat(node.start.comments_before);
-                        node.start.comments_before = [];
-                    }
-                    if (node instanceof AST_Function ||
-                        node instanceof AST_Array ||
-                        node instanceof AST_Object)
-                    {
-                        return true; // don't go inside.
-                    }
-                }));
-            }
+    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
+    // returns the index of the closest mapping less than the needle. By
+    // setting needle.originalColumn to 0, we thus find the last mapping for
+    // the given line, provided such a mapping exists.
+    var needle = {
+      source: util.getArg(aArgs, 'source'),
+      originalLine: line,
+      originalColumn: util.getArg(aArgs, 'column', 0)
+    };
 
-            if (output.pos() == 0) {
-                if (comments.length > 0 && output.option("shebang") && comments[0].type == "comment5") {
-                    output.print("#!" + comments.shift().value + "\n");
-                    output.indent();
-                }
-                var preamble = output.option("preamble");
-                if (preamble) {
-                    output.print(preamble.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g, "\n"));
-                }
-            }
+    if (this.sourceRoot != null) {
+      needle.source = util.relative(this.sourceRoot, needle.source);
+    }
+    if (!this._sources.has(needle.source)) {
+      return [];
+    }
+    needle.source = this._sources.indexOf(needle.source);
 
-            comments = comments.filter(output.comment_filter, self);
+    var mappings = [];
 
-            // Keep single line comments after nlb, after nlb
-            if (!output.option("beautify") && comments.length > 0 &&
-                /comment[134]/.test(comments[0].type) &&
-                output.col() !== 0 && comments[0].nlb)
-            {
-                output.print("\n");
-            }
+    var index = this._findMapping(needle,
+                                  this._originalMappings,
+                                  "originalLine",
+                                  "originalColumn",
+                                  util.compareByOriginalPositions,
+                                  binarySearch.LEAST_UPPER_BOUND);
+    if (index >= 0) {
+      var mapping = this._originalMappings[index];
 
-            comments.forEach(function(c){
-                if (/comment[134]/.test(c.type)) {
-                    output.print("//" + c.value + "\n");
-                    output.indent();
-                }
-                else if (c.type == "comment2") {
-                    output.print("/*" + c.value + "*/");
-                    if (start.nlb) {
-                        output.print("\n");
-                        output.indent();
-                    } else {
-                        output.space();
-                    }
-                }
-            });
-        }
-    });
+      if (aArgs.column === undefined) {
+        var originalLine = mapping.originalLine;
 
-    /* -----[ PARENTHESES ]----- */
+        // Iterate until either we run out of mappings, or we run into
+        // a mapping for a different line than the one we found. Since
+        // mappings are sorted, this is guaranteed to find all mappings for
+        // the line we found.
+        while (mapping && mapping.originalLine === originalLine) {
+          mappings.push({
+            line: util.getArg(mapping, 'generatedLine', null),
+            column: util.getArg(mapping, 'generatedColumn', null),
+            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+          });
 
-    function PARENS(nodetype, func) {
-        if (Array.isArray(nodetype)) {
-            nodetype.forEach(function(nodetype){
-                PARENS(nodetype, func);
-            });
-        } else {
-            nodetype.DEFMETHOD("needs_parens", func);
+          mapping = this._originalMappings[++index];
         }
-    };
-
-    PARENS(AST_Node, function(){
-        return false;
-    });
+      } else {
+        var originalColumn = mapping.originalColumn;
 
-    // a function expression needs parens around it when it's provably
-    // the first token to appear in a statement.
-    PARENS(AST_Function, function(output){
-        if (first_in_statement(output)) {
-            return true;
-        }
+        // Iterate until either we run out of mappings, or we run into
+        // a mapping for a different line than the one we were searching for.
+        // Since mappings are sorted, this is guaranteed to find all mappings for
+        // the line we are searching for.
+        while (mapping &&
+               mapping.originalLine === line &&
+               mapping.originalColumn == originalColumn) {
+          mappings.push({
+            line: util.getArg(mapping, 'generatedLine', null),
+            column: util.getArg(mapping, 'generatedColumn', null),
+            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+          });
 
-        if (output.option('wrap_iife')) {
-            var p = output.parent();
-            return p instanceof AST_Call && p.expression === this;
+          mapping = this._originalMappings[++index];
         }
+      }
+    }
 
-        return false;
-    });
-
-    // same goes for an object literal, because otherwise it would be
-    // interpreted as a block of code.
-    PARENS(AST_Object, function(output){
-        return first_in_statement(output);
-    });
-
-    PARENS(AST_Unary, function(output){
-        var p = output.parent();
-        return p instanceof AST_PropAccess && p.expression === this
-            || p instanceof AST_Call && p.expression === this;
-    });
-
-    PARENS(AST_Seq, function(output){
-        var p = output.parent();
-        return p instanceof AST_Call             // (foo, bar)() or foo(1, (2, 3), 4)
-            || p instanceof AST_Unary            // !(foo, bar, baz)
-            || p instanceof AST_Binary           // 1 + (2, 3) + 4 ==> 8
-            || p instanceof AST_VarDef           // var a = (1, 2), b = a + a; ==> b == 4
-            || p instanceof AST_PropAccess       // (1, {foo:2}).foo or (1, {foo:2})["foo"] ==> 2
-            || p instanceof AST_Array            // [ 1, (2, 3), 4 ] ==> [ 1, 3, 4 ]
-            || p instanceof AST_ObjectProperty   // { foo: (1, 2) }.foo ==> 2
-            || p instanceof AST_Conditional      /* (false, true) ? (a = 10, b = 20) : (c = 30)
-                                                  * ==> 20 (side effect, set a := 10 and b := 20) */
-        ;
-    });
+    return mappings;
+  };
 
-    PARENS(AST_Binary, function(output){
-        var p = output.parent();
-        // (foo && bar)()
-        if (p instanceof AST_Call && p.expression === this)
-            return true;
-        // typeof (foo && bar)
-        if (p instanceof AST_Unary)
-            return true;
-        // (foo && bar)["prop"], (foo && bar).prop
-        if (p instanceof AST_PropAccess && p.expression === this)
-            return true;
-        // this deals with precedence: 3 * (2 + 1)
-        if (p instanceof AST_Binary) {
-            var po = p.operator, pp = PRECEDENCE[po];
-            var so = this.operator, sp = PRECEDENCE[so];
-            if (pp > sp
-                || (pp == sp
-                    && this === p.right)) {
-                return true;
-            }
-        }
-    });
+exports.SourceMapConsumer = SourceMapConsumer;
 
-    PARENS(AST_PropAccess, function(output){
-        var p = output.parent();
-        if (p instanceof AST_New && p.expression === this) {
-            // i.e. new (foo.bar().baz)
-            //
-            // if there's one call into this subtree, then we need
-            // parens around it too, otherwise the call will be
-            // interpreted as passing the arguments to the upper New
-            // expression.
-            try {
-                this.walk(new TreeWalker(function(node){
-                    if (node instanceof AST_Call) throw p;
-                }));
-            } catch(ex) {
-                if (ex !== p) throw ex;
-                return true;
-            }
-        }
-    });
+/**
+ * A BasicSourceMapConsumer instance represents a parsed source map which we can
+ * query for information about the original file positions by giving it a file
+ * position in the generated source.
+ *
+ * The only parameter is the raw source map (either as a JSON string, or
+ * already parsed to an object). According to the spec, source maps have the
+ * following attributes:
+ *
+ *   - version: Which version of the source map spec this map is following.
+ *   - sources: An array of URLs to the original source files.
+ *   - names: An array of identifiers which can be referrenced by individual mappings.
+ *   - sourceRoot: Optional. The URL root from which all sources are relative.
+ *   - sourcesContent: Optional. An array of contents of the original source files.
+ *   - mappings: A string of base64 VLQs which contain the actual mappings.
+ *   - file: Optional. The generated file this source map is associated with.
+ *
+ * Here is an example source map, taken from the source map spec[0]:
+ *
+ *     {
+ *       version : 3,
+ *       file: "out.js",
+ *       sourceRoot : "",
+ *       sources: ["foo.js", "bar.js"],
+ *       names: ["src", "maps", "are", "fun"],
+ *       mappings: "AA,AB;;ABCDE;"
+ *     }
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
+ */
+function BasicSourceMapConsumer(aSourceMap) {
+  var sourceMap = aSourceMap;
+  if (typeof aSourceMap === 'string') {
+    sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+  }
 
-    PARENS(AST_Call, function(output){
-        var p = output.parent(), p1;
-        if (p instanceof AST_New && p.expression === this)
-            return true;
-
-        // workaround for Safari bug.
-        // https://bugs.webkit.org/show_bug.cgi?id=123506
-        return this.expression instanceof AST_Function
-            && p instanceof AST_PropAccess
-            && p.expression === this
-            && (p1 = output.parent(1)) instanceof AST_Assign
-            && p1.left === p;
-    });
+  var version = util.getArg(sourceMap, 'version');
+  var sources = util.getArg(sourceMap, 'sources');
+  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
+  // requires the array) to play nice here.
+  var names = util.getArg(sourceMap, 'names', []);
+  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
+  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
+  var mappings = util.getArg(sourceMap, 'mappings');
+  var file = util.getArg(sourceMap, 'file', null);
 
-    PARENS(AST_New, function(output){
-        var p = output.parent();
-        if (!need_constructor_parens(this, output)
-            && (p instanceof AST_PropAccess // (new Date).getTime(), (new Date)["getTime"]()
-                || p instanceof AST_Call && p.expression === this)) // (new foo)(bar)
-            return true;
-    });
+  // Once again, Sass deviates from the spec and supplies the version as a
+  // string rather than a number, so we use loose equality checking here.
+  if (version != this._version) {
+    throw new Error('Unsupported version: ' + version);
+  }
 
-    PARENS(AST_Number, function(output){
-        var p = output.parent();
-        if (p instanceof AST_PropAccess && p.expression === this) {
-            var value = this.getValue();
-            if (value < 0 || /^0/.test(make_num(value))) {
-                return true;
-            }
-        }
+  sources = sources
+    .map(String)
+    // Some source maps produce relative source paths like "./foo.js" instead of
+    // "foo.js".  Normalize these first so that future comparisons will succeed.
+    // See bugzil.la/1090768.
+    .map(util.normalize)
+    // Always ensure that absolute sources are internally stored relative to
+    // the source root, if the source root is absolute. Not doing this would
+    // be particularly problematic when the source root is a prefix of the
+    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
+    .map(function (source) {
+      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
+        ? util.relative(sourceRoot, source)
+        : source;
     });
 
-    PARENS([ AST_Assign, AST_Conditional ], function (output){
-        var p = output.parent();
-        // !(a = false) → true
-        if (p instanceof AST_Unary)
-            return true;
-        // 1 + (a = 2) + 3 → 6, side effect setting a = 2
-        if (p instanceof AST_Binary && !(p instanceof AST_Assign))
-            return true;
-        // (a = func)() —or— new (a = Object)()
-        if (p instanceof AST_Call && p.expression === this)
-            return true;
-        // (a = foo) ? bar : baz
-        if (p instanceof AST_Conditional && p.condition === this)
-            return true;
-        // (a = foo)["prop"] —or— (a = foo).prop
-        if (p instanceof AST_PropAccess && p.expression === this)
-            return true;
-    });
+  // Pass `true` below to allow duplicate names and sources. While source maps
+  // are intended to be compressed and deduplicated, the TypeScript compiler
+  // sometimes generates source maps with duplicates in them. See Github issue
+  // #72 and bugzil.la/889492.
+  this._names = ArraySet.fromArray(names.map(String), true);
+  this._sources = ArraySet.fromArray(sources, true);
 
-    /* -----[ PRINTERS ]----- */
+  this.sourceRoot = sourceRoot;
+  this.sourcesContent = sourcesContent;
+  this._mappings = mappings;
+  this.file = file;
+}
 
-    DEFPRINT(AST_Directive, function(self, output){
-        output.print_string(self.value, self.quote);
-        output.semicolon();
-    });
-    DEFPRINT(AST_Debugger, function(self, output){
-        output.print("debugger");
-        output.semicolon();
-    });
+BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
 
-    /* -----[ statements ]----- */
-
-    function display_body(body, is_toplevel, output, allow_directives) {
-        var last = body.length - 1;
-        in_directive = allow_directives;
-        body.forEach(function(stmt, i){
-            if (in_directive === true && !(stmt instanceof AST_Directive ||
-                stmt instanceof AST_EmptyStatement ||
-                (stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String)
-            )) {
-                in_directive = false;
-            }
-            if (!(stmt instanceof AST_EmptyStatement)) {
-                output.indent();
-                stmt.print(output);
-                if (!(i == last && is_toplevel)) {
-                    output.newline();
-                    if (is_toplevel) output.newline();
-                }
-            }
-            if (in_directive === true &&
-                stmt instanceof AST_SimpleStatement &&
-                stmt.body instanceof AST_String
-            ) {
-                in_directive = false;
-            }
-        });
-        in_directive = false;
-    };
+/**
+ * Create a BasicSourceMapConsumer from a SourceMapGenerator.
+ *
+ * @param SourceMapGenerator aSourceMap
+ *        The source map that will be consumed.
+ * @returns BasicSourceMapConsumer
+ */
+BasicSourceMapConsumer.fromSourceMap =
+  function SourceMapConsumer_fromSourceMap(aSourceMap) {
+    var smc = Object.create(BasicSourceMapConsumer.prototype);
 
-    AST_StatementWithBody.DEFMETHOD("_do_print_body", function(output){
-        force_statement(this.body, output);
-    });
+    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
+    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
+    smc.sourceRoot = aSourceMap._sourceRoot;
+    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
+                                                            smc.sourceRoot);
+    smc.file = aSourceMap._file;
 
-    DEFPRINT(AST_Statement, function(self, output){
-        self.body.print(output);
-        output.semicolon();
-    });
-    DEFPRINT(AST_Toplevel, function(self, output){
-        display_body(self.body, true, output, true);
-        output.print("");
-    });
-    DEFPRINT(AST_LabeledStatement, function(self, output){
-        self.label.print(output);
-        output.colon();
-        self.body.print(output);
-    });
-    DEFPRINT(AST_SimpleStatement, function(self, output){
-        self.body.print(output);
-        output.semicolon();
-    });
-    function print_bracketed(body, output, allow_directives) {
-        if (body.length > 0) output.with_block(function(){
-            display_body(body, false, output, allow_directives);
-        });
-        else output.print("{}");
-    };
-    DEFPRINT(AST_BlockStatement, function(self, output){
-        print_bracketed(self.body, output);
-    });
-    DEFPRINT(AST_EmptyStatement, function(self, output){
-        output.semicolon();
-    });
-    DEFPRINT(AST_Do, function(self, output){
-        output.print("do");
-        output.space();
-        make_block(self.body, output);
-        output.space();
-        output.print("while");
-        output.space();
-        output.with_parens(function(){
-            self.condition.print(output);
-        });
-        output.semicolon();
-    });
-    DEFPRINT(AST_While, function(self, output){
-        output.print("while");
-        output.space();
-        output.with_parens(function(){
-            self.condition.print(output);
-        });
-        output.space();
-        self._do_print_body(output);
-    });
-    DEFPRINT(AST_For, function(self, output){
-        output.print("fo" + "r");
-        output.space();
-        output.with_parens(function(){
-            if (self.init) {
-                if (self.init instanceof AST_Definitions) {
-                    self.init.print(output);
-                } else {
-                    parenthesize_for_noin(self.init, output, true);
-                }
-                output.print(";");
-                output.space();
-            } else {
-                output.print(";");
-            }
-            if (self.condition) {
-                self.condition.print(output);
-                output.print(";");
-                output.space();
-            } else {
-                output.print(";");
-            }
-            if (self.step) {
-                self.step.print(output);
-            }
-        });
-        output.space();
-        self._do_print_body(output);
-    });
-    DEFPRINT(AST_ForIn, function(self, output){
-        output.print("fo" + "r");
-        output.space();
-        output.with_parens(function(){
-            self.init.print(output);
-            output.space();
-            output.print("in");
-            output.space();
-            self.object.print(output);
-        });
-        output.space();
-        self._do_print_body(output);
-    });
-    DEFPRINT(AST_With, function(self, output){
-        output.print("with");
-        output.space();
-        output.with_parens(function(){
-            self.expression.print(output);
-        });
-        output.space();
-        self._do_print_body(output);
-    });
+    // Because we are modifying the entries (by converting string sources and
+    // names to indices into the sources and names ArraySets), we have to make
+    // a copy of the entry or else bad things happen. Shared mutable state
+    // strikes again! See github issue #191.
 
-    /* -----[ functions ]----- */
-    AST_Lambda.DEFMETHOD("_do_print", function(output, nokeyword){
-        var self = this;
-        if (!nokeyword) {
-            output.print("function");
-        }
-        if (self.name) {
-            output.space();
-            self.name.print(output);
-        }
-        output.with_parens(function(){
-            self.argnames.forEach(function(arg, i){
-                if (i) output.comma();
-                arg.print(output);
-            });
-        });
-        output.space();
-        print_bracketed(self.body, output, true);
-    });
-    DEFPRINT(AST_Lambda, function(self, output){
-        self._do_print(output);
-    });
+    var generatedMappings = aSourceMap._mappings.toArray().slice();
+    var destGeneratedMappings = smc.__generatedMappings = [];
+    var destOriginalMappings = smc.__originalMappings = [];
 
-    /* -----[ exits ]----- */
-    AST_Exit.DEFMETHOD("_do_print", function(output, kind){
-        output.print(kind);
-        if (this.value) {
-            output.space();
-            this.value.print(output);
-        }
-        output.semicolon();
-    });
-    DEFPRINT(AST_Return, function(self, output){
-        self._do_print(output, "return");
-    });
-    DEFPRINT(AST_Throw, function(self, output){
-        self._do_print(output, "throw");
-    });
+    for (var i = 0, length = generatedMappings.length; i < length; i++) {
+      var srcMapping = generatedMappings[i];
+      var destMapping = new Mapping;
+      destMapping.generatedLine = srcMapping.generatedLine;
+      destMapping.generatedColumn = srcMapping.generatedColumn;
 
-    /* -----[ loop control ]----- */
-    AST_LoopControl.DEFMETHOD("_do_print", function(output, kind){
-        output.print(kind);
-        if (this.label) {
-            output.space();
-            this.label.print(output);
-        }
-        output.semicolon();
-    });
-    DEFPRINT(AST_Break, function(self, output){
-        self._do_print(output, "break");
-    });
-    DEFPRINT(AST_Continue, function(self, output){
-        self._do_print(output, "continue");
-    });
+      if (srcMapping.source) {
+        destMapping.source = sources.indexOf(srcMapping.source);
+        destMapping.originalLine = srcMapping.originalLine;
+        destMapping.originalColumn = srcMapping.originalColumn;
 
-    /* -----[ if ]----- */
-    function make_then(self, output) {
-        var b = self.body;
-        if (output.option("bracketize")
-            || !output.option("screw_ie8") && b instanceof AST_Do)
-            return make_block(b, output);
-        // The squeezer replaces "block"-s that contain only a single
-        // statement with the statement itself; technically, the AST
-        // is correct, but this can create problems when we output an
-        // IF having an ELSE clause where the THEN clause ends in an
-        // IF *without* an ELSE block (then the outer ELSE would refer
-        // to the inner IF).  This function checks for this case and
-        // adds the block brackets if needed.
-        if (!b) return output.force_semicolon();
-        while (true) {
-            if (b instanceof AST_If) {
-                if (!b.alternative) {
-                    make_block(self.body, output);
-                    return;
-                }
-                b = b.alternative;
-            }
-            else if (b instanceof AST_StatementWithBody) {
-                b = b.body;
-            }
-            else break;
-        }
-        force_statement(self.body, output);
-    };
-    DEFPRINT(AST_If, function(self, output){
-        output.print("if");
-        output.space();
-        output.with_parens(function(){
-            self.condition.print(output);
-        });
-        output.space();
-        if (self.alternative) {
-            make_then(self, output);
-            output.space();
-            output.print("else");
-            output.space();
-            if (self.alternative instanceof AST_If)
-                self.alternative.print(output);
-            else
-                force_statement(self.alternative, output);
-        } else {
-            self._do_print_body(output);
+        if (srcMapping.name) {
+          destMapping.name = names.indexOf(srcMapping.name);
         }
-    });
 
-    /* -----[ switch ]----- */
-    DEFPRINT(AST_Switch, function(self, output){
-        output.print("switch");
-        output.space();
-        output.with_parens(function(){
-            self.expression.print(output);
-        });
-        output.space();
-        var last = self.body.length - 1;
-        if (last < 0) output.print("{}");
-        else output.with_block(function(){
-            self.body.forEach(function(branch, i){
-                output.indent(true);
-                branch.print(output);
-                if (i < last && branch.body.length > 0)
-                    output.newline();
-            });
-        });
-    });
-    AST_SwitchBranch.DEFMETHOD("_do_print_body", function(output){
-        output.newline();
-        this.body.forEach(function(stmt){
-            output.indent();
-            stmt.print(output);
-            output.newline();
-        });
-    });
-    DEFPRINT(AST_Default, function(self, output){
-        output.print("default:");
-        self._do_print_body(output);
-    });
-    DEFPRINT(AST_Case, function(self, output){
-        output.print("case");
-        output.space();
-        self.expression.print(output);
-        output.print(":");
-        self._do_print_body(output);
-    });
+        destOriginalMappings.push(destMapping);
+      }
 
-    /* -----[ exceptions ]----- */
-    DEFPRINT(AST_Try, function(self, output){
-        output.print("try");
-        output.space();
-        print_bracketed(self.body, output);
-        if (self.bcatch) {
-            output.space();
-            self.bcatch.print(output);
-        }
-        if (self.bfinally) {
-            output.space();
-            self.bfinally.print(output);
-        }
-    });
-    DEFPRINT(AST_Catch, function(self, output){
-        output.print("catch");
-        output.space();
-        output.with_parens(function(){
-            self.argname.print(output);
-        });
-        output.space();
-        print_bracketed(self.body, output);
-    });
-    DEFPRINT(AST_Finally, function(self, output){
-        output.print("finally");
-        output.space();
-        print_bracketed(self.body, output);
-    });
+      destGeneratedMappings.push(destMapping);
+    }
 
-    /* -----[ var/const ]----- */
-    AST_Definitions.DEFMETHOD("_do_print", function(output, kind){
-        output.print(kind);
-        output.space();
-        this.definitions.forEach(function(def, i){
-            if (i) output.comma();
-            def.print(output);
-        });
-        var p = output.parent();
-        var in_for = p instanceof AST_For || p instanceof AST_ForIn;
-        var avoid_semicolon = in_for && p.init === this;
-        if (!avoid_semicolon)
-            output.semicolon();
-    });
-    DEFPRINT(AST_Var, function(self, output){
-        self._do_print(output, "var");
-    });
-    DEFPRINT(AST_Const, function(self, output){
-        self._do_print(output, "const");
-    });
+    quickSort(smc.__originalMappings, util.compareByOriginalPositions);
 
-    function parenthesize_for_noin(node, output, noin) {
-        if (!noin) node.print(output);
-        else try {
-            // need to take some precautions here:
-            //    https://github.com/mishoo/UglifyJS2/issues/60
-            node.walk(new TreeWalker(function(node){
-                if (node instanceof AST_Binary && node.operator == "in")
-                    throw output;
-            }));
-            node.print(output);
-        } catch(ex) {
-            if (ex !== output) throw ex;
-            node.print(output, true);
-        }
-    };
+    return smc;
+  };
 
-    DEFPRINT(AST_VarDef, function(self, output){
-        self.name.print(output);
-        if (self.value) {
-            output.space();
-            output.print("=");
-            output.space();
-            var p = output.parent(1);
-            var noin = p instanceof AST_For || p instanceof AST_ForIn;
-            parenthesize_for_noin(self.value, output, noin);
-        }
-    });
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+BasicSourceMapConsumer.prototype._version = 3;
 
-    /* -----[ other expressions ]----- */
-    DEFPRINT(AST_Call, function(self, output){
-        self.expression.print(output);
-        if (self instanceof AST_New && !need_constructor_parens(self, output))
-            return;
-        output.with_parens(function(){
-            self.args.forEach(function(expr, i){
-                if (i) output.comma();
-                expr.print(output);
-            });
-        });
-    });
-    DEFPRINT(AST_New, function(self, output){
-        output.print("new");
-        output.space();
-        AST_Call.prototype._codegen(self, output);
-    });
+/**
+ * The list of original sources.
+ */
+Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
+  get: function () {
+    return this._sources.toArray().map(function (s) {
+      return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;
+    }, this);
+  }
+});
 
-    AST_Seq.DEFMETHOD("_do_print", function(output){
-        this.car.print(output);
-        if (this.cdr) {
-            output.comma();
-            if (output.should_break()) {
-                output.newline();
-                output.indent();
-            }
-            this.cdr.print(output);
-        }
-    });
-    DEFPRINT(AST_Seq, function(self, output){
-        self._do_print(output);
-        // var p = output.parent();
-        // if (p instanceof AST_Statement) {
-        //     output.with_indent(output.next_indent(), function(){
-        //         self._do_print(output);
-        //     });
-        // } else {
-        //     self._do_print(output);
-        // }
-    });
-    DEFPRINT(AST_Dot, function(self, output){
-        var expr = self.expression;
-        expr.print(output);
-        if (expr instanceof AST_Number && expr.getValue() >= 0) {
-            if (!/[xa-f.)]/i.test(output.last())) {
-                output.print(".");
-            }
-        }
-        output.print(".");
-        // the name after dot would be mapped about here.
-        output.add_mapping(self.end);
-        output.print_name(self.property);
-    });
-    DEFPRINT(AST_Sub, function(self, output){
-        self.expression.print(output);
-        output.print("[");
-        self.property.print(output);
-        output.print("]");
-    });
-    DEFPRINT(AST_UnaryPrefix, function(self, output){
-        var op = self.operator;
-        output.print(op);
-        if (/^[a-z]/i.test(op)
-            || (/[+-]$/.test(op)
-                && self.expression instanceof AST_UnaryPrefix
-                && /^[+-]/.test(self.expression.operator))) {
-            output.space();
-        }
-        self.expression.print(output);
-    });
-    DEFPRINT(AST_UnaryPostfix, function(self, output){
-        self.expression.print(output);
-        output.print(self.operator);
-    });
-    DEFPRINT(AST_Binary, function(self, output){
-        var op = self.operator;
-        self.left.print(output);
-        if (op[0] == ">" /* ">>" ">>>" ">" ">=" */
-            && self.left instanceof AST_UnaryPostfix
-            && self.left.operator == "--") {
-            // space is mandatory to avoid outputting -->
-            output.print(" ");
-        } else {
-            // the space is optional depending on "beautify"
-            output.space();
-        }
-        output.print(op);
-        if ((op == "<" || op == "<<")
-            && self.right instanceof AST_UnaryPrefix
-            && self.right.operator == "!"
-            && self.right.expression instanceof AST_UnaryPrefix
-            && self.right.expression.operator == "--") {
-            // space is mandatory to avoid outputting <!--
-            output.print(" ");
-        } else {
-            // the space is optional depending on "beautify"
-            output.space();
-        }
-        self.right.print(output);
-    });
-    DEFPRINT(AST_Conditional, function(self, output){
-        self.condition.print(output);
-        output.space();
-        output.print("?");
-        output.space();
-        self.consequent.print(output);
-        output.space();
-        output.colon();
-        self.alternative.print(output);
-    });
+/**
+ * Provide the JIT with a nice shape / hidden class.
+ */
+function Mapping() {
+  this.generatedLine = 0;
+  this.generatedColumn = 0;
+  this.source = null;
+  this.originalLine = null;
+  this.originalColumn = null;
+  this.name = null;
+}
 
-    /* -----[ literals ]----- */
-    DEFPRINT(AST_Array, function(self, output){
-        output.with_square(function(){
-            var a = self.elements, len = a.length;
-            if (len > 0) output.space();
-            a.forEach(function(exp, i){
-                if (i) output.comma();
-                exp.print(output);
-                // If the final element is a hole, we need to make sure it
-                // doesn't look like a trailing comma, by inserting an actual
-                // trailing comma.
-                if (i === len - 1 && exp instanceof AST_Hole)
-                  output.comma();
-            });
-            if (len > 0) output.space();
-        });
-    });
-    DEFPRINT(AST_Object, function(self, output){
-        if (self.properties.length > 0) output.with_block(function(){
-            self.properties.forEach(function(prop, i){
-                if (i) {
-                    output.print(",");
-                    output.newline();
-                }
-                output.indent();
-                prop.print(output);
-            });
-            output.newline();
-        });
-        else output.print("{}");
-    });
-    DEFPRINT(AST_ObjectKeyVal, function(self, output){
-        var key = self.key;
-        var quote = self.quote;
-        if (output.option("quote_keys")) {
-            output.print_string(key + "");
-        } else if ((typeof key == "number"
-                    || !output.option("beautify")
-                    && +key + "" == key)
-                   && parseFloat(key) >= 0) {
-            output.print(make_num(key));
-        } else if (RESERVED_WORDS(key) ? output.option("screw_ie8") : is_identifier_string(key)) {
-            if (quote && output.option("keep_quoted_props")) {
-                output.print_string(key, quote);
-            } else {
-                output.print_name(key);
-            }
-        } else {
-            output.print_string(key, quote);
-        }
-        output.colon();
-        self.value.print(output);
-    });
-    DEFPRINT(AST_ObjectSetter, function(self, output){
-        output.print("set");
-        output.space();
-        self.key.print(output);
-        self.value._do_print(output, true);
-    });
-    DEFPRINT(AST_ObjectGetter, function(self, output){
-        output.print("get");
-        output.space();
-        self.key.print(output);
-        self.value._do_print(output, true);
-    });
-    DEFPRINT(AST_Symbol, function(self, output){
-        var def = self.definition();
-        output.print_name(def ? def.mangled_name || def.name : self.name);
-    });
-    DEFPRINT(AST_Hole, noop);
-    DEFPRINT(AST_This, function(self, output){
-        output.print("this");
-    });
-    DEFPRINT(AST_Constant, function(self, output){
-        output.print(self.getValue());
-    });
-    DEFPRINT(AST_String, function(self, output){
-        output.print_string(self.getValue(), self.quote, in_directive);
-    });
-    DEFPRINT(AST_Number, function(self, output){
-        if (use_asm && self.start && self.start.raw != null) {
-            output.print(self.start.raw);
-        } else {
-            output.print(make_num(self.getValue()));
-        }
-    });
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+BasicSourceMapConsumer.prototype._parseMappings =
+  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+    var generatedLine = 1;
+    var previousGeneratedColumn = 0;
+    var previousOriginalLine = 0;
+    var previousOriginalColumn = 0;
+    var previousSource = 0;
+    var previousName = 0;
+    var length = aStr.length;
+    var index = 0;
+    var cachedSegments = {};
+    var temp = {};
+    var originalMappings = [];
+    var generatedMappings = [];
+    var mapping, str, segment, end, value;
 
-    function regexp_safe_literal(code) {
-        return [
-            0x5c   , // \
-            0x2f   , // /
-            0x2e   , // .
-            0x2b   , // +
-            0x2a   , // *
-            0x3f   , // ?
-            0x28   , // (
-            0x29   , // )
-            0x5b   , // [
-            0x5d   , // ]
-            0x7b   , // {
-            0x7d   , // }
-            0x24   , // $
-            0x5e   , // ^
-            0x3a   , // :
-            0x7c   , // |
-            0x21   , // !
-            0x0a   , // \n
-            0x0d   , // \r
-            0x00   , // \0
-            0xfeff , // Unicode BOM
-            0x2028 , // unicode "line separator"
-            0x2029 , // unicode "paragraph separator"
-        ].indexOf(code) < 0;
-    };
+    while (index < length) {
+      if (aStr.charAt(index) === ';') {
+        generatedLine++;
+        index++;
+        previousGeneratedColumn = 0;
+      }
+      else if (aStr.charAt(index) === ',') {
+        index++;
+      }
+      else {
+        mapping = new Mapping();
+        mapping.generatedLine = generatedLine;
 
-    DEFPRINT(AST_RegExp, function(self, output){
-        var str = self.getValue().toString();
-        if (output.option("ascii_only")) {
-            str = output.to_ascii(str);
-        } else if (output.option("unescape_regexps")) {
-            str = str.split("\\\\").map(function(str){
-                return str.replace(/\\u[0-9a-fA-F]{4}|\\x[0-9a-fA-F]{2}/g, function(s){
-                    var code = parseInt(s.substr(2), 16);
-                    return regexp_safe_literal(code) ? String.fromCharCode(code) : s;
-                });
-            }).join("\\\\");
+        // Because each offset is encoded relative to the previous one,
+        // many segments often have the same encoding. We can exploit this
+        // fact by caching the parsed variable length fields of each segment,
+        // allowing us to avoid a second parse if we encounter the same
+        // segment again.
+        for (end = index; end < length; end++) {
+          if (this._charIsMappingSeparator(aStr, end)) {
+            break;
+          }
         }
-        output.print(str);
-        var p = output.parent();
-        if (p instanceof AST_Binary && /^in/.test(p.operator) && p.left === self)
-            output.print(" ");
-    });
+        str = aStr.slice(index, end);
 
-    function force_statement(stat, output) {
-        if (output.option("bracketize")) {
-            make_block(stat, output);
+        segment = cachedSegments[str];
+        if (segment) {
+          index += str.length;
         } else {
-            if (!stat || stat instanceof AST_EmptyStatement)
-                output.force_semicolon();
-            else
-                stat.print(output);
-        }
-    };
-
-    // self should be AST_New.  decide if we want to show parens or not.
-    function need_constructor_parens(self, output) {
-        // Always print parentheses with arguments
-        if (self.args.length > 0) return true;
+          segment = [];
+          while (index < end) {
+            base64VLQ.decode(aStr, index, temp);
+            value = temp.value;
+            index = temp.rest;
+            segment.push(value);
+          }
 
-        return output.option("beautify");
-    };
+          if (segment.length === 2) {
+            throw new Error('Found a source, but no line and column');
+          }
 
-    function best_of(a) {
-        var best = a[0], len = best.length;
-        for (var i = 1; i < a.length; ++i) {
-            if (a[i].length < len) {
-                best = a[i];
-                len = best.length;
-            }
-        }
-        return best;
-    };
+          if (segment.length === 3) {
+            throw new Error('Found a source and line, but no column');
+          }
 
-    function make_num(num) {
-        var str = num.toString(10), a = [ str.replace(/^0\./, ".").replace('e+', 'e') ], m;
-        if (Math.floor(num) === num) {
-            if (num >= 0) {
-                a.push("0x" + num.toString(16).toLowerCase(), // probably pointless
-                       "0" + num.toString(8)); // same.
-            } else {
-                a.push("-0x" + (-num).toString(16).toLowerCase(), // probably pointless
-                       "-0" + (-num).toString(8)); // same.
-            }
-            if ((m = /^(.*?)(0+)$/.exec(num))) {
-                a.push(m[1] + "e" + m[2].length);
-            }
-        } else if ((m = /^0?\.(0+)(.*)$/.exec(num))) {
-            a.push(m[2] + "e-" + (m[1].length + m[2].length),
-                   str.substr(str.indexOf(".")));
+          cachedSegments[str] = segment;
         }
-        return best_of(a);
-    };
-
-    function make_block(stmt, output) {
-        if (!stmt || stmt instanceof AST_EmptyStatement)
-            output.print("{}");
-        else if (stmt instanceof AST_BlockStatement)
-            stmt.print(output);
-        else output.with_block(function(){
-            output.indent();
-            stmt.print(output);
-            output.newline();
-        });
-    };
 
-    /* -----[ source map generators ]----- */
-
-    function DEFMAP(nodetype, generator) {
-        nodetype.DEFMETHOD("add_source_map", function(stream){
-            generator(this, stream);
-        });
-    };
+        // Generated column.
+        mapping.generatedColumn = previousGeneratedColumn + segment[0];
+        previousGeneratedColumn = mapping.generatedColumn;
 
-    // We could easily add info for ALL nodes, but it seems to me that
-    // would be quite wasteful, hence this noop in the base class.
-    DEFMAP(AST_Node, noop);
+        if (segment.length > 1) {
+          // Original source.
+          mapping.source = previousSource + segment[1];
+          previousSource += segment[1];
 
-    function basic_sourcemap_gen(self, output) {
-        output.add_mapping(self.start);
-    };
+          // Original line.
+          mapping.originalLine = previousOriginalLine + segment[2];
+          previousOriginalLine = mapping.originalLine;
+          // Lines are stored 0-based
+          mapping.originalLine += 1;
 
-    // XXX: I'm not exactly sure if we need it for all of these nodes,
-    // or if we should add even more.
-
-    DEFMAP(AST_Directive, basic_sourcemap_gen);
-    DEFMAP(AST_Debugger, basic_sourcemap_gen);
-    DEFMAP(AST_Symbol, basic_sourcemap_gen);
-    DEFMAP(AST_Jump, basic_sourcemap_gen);
-    DEFMAP(AST_StatementWithBody, basic_sourcemap_gen);
-    DEFMAP(AST_LabeledStatement, noop); // since the label symbol will mark it
-    DEFMAP(AST_Lambda, basic_sourcemap_gen);
-    DEFMAP(AST_Switch, basic_sourcemap_gen);
-    DEFMAP(AST_SwitchBranch, basic_sourcemap_gen);
-    DEFMAP(AST_BlockStatement, basic_sourcemap_gen);
-    DEFMAP(AST_Toplevel, noop);
-    DEFMAP(AST_New, basic_sourcemap_gen);
-    DEFMAP(AST_Try, basic_sourcemap_gen);
-    DEFMAP(AST_Catch, basic_sourcemap_gen);
-    DEFMAP(AST_Finally, basic_sourcemap_gen);
-    DEFMAP(AST_Definitions, basic_sourcemap_gen);
-    DEFMAP(AST_Constant, basic_sourcemap_gen);
-    DEFMAP(AST_ObjectSetter, function(self, output){
-        output.add_mapping(self.start, self.key.name);
-    });
-    DEFMAP(AST_ObjectGetter, function(self, output){
-        output.add_mapping(self.start, self.key.name);
-    });
-    DEFMAP(AST_ObjectProperty, function(self, output){
-        output.add_mapping(self.start, self.key);
-    });
+          // Original column.
+          mapping.originalColumn = previousOriginalColumn + segment[3];
+          previousOriginalColumn = mapping.originalColumn;
 
-})();
+          if (segment.length > 4) {
+            // Original name.
+            mapping.name = previousName + segment[4];
+            previousName += segment[4];
+          }
+        }
 
-/***********************************************************************
+        generatedMappings.push(mapping);
+        if (typeof mapping.originalLine === 'number') {
+          originalMappings.push(mapping);
+        }
+      }
+    }
 
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
+    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
+    this.__generatedMappings = generatedMappings;
 
-  -------------------------------- (C) ---------------------------------
+    quickSort(originalMappings, util.compareByOriginalPositions);
+    this.__originalMappings = originalMappings;
+  };
 
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
+/**
+ * Find the mapping that best matches the hypothetical "needle" mapping that
+ * we are searching for in the given "haystack" of mappings.
+ */
+BasicSourceMapConsumer.prototype._findMapping =
+  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
+                                         aColumnName, aComparator, aBias) {
+    // To return the position we are searching for, we must first find the
+    // mapping for the given position and then return the opposite position it
+    // points to. Because the mappings are sorted, we can use binary search to
+    // find the best mapping.
 
-  Distributed under the BSD license:
+    if (aNeedle[aLineName] <= 0) {
+      throw new TypeError('Line must be greater than or equal to 1, got '
+                          + aNeedle[aLineName]);
+    }
+    if (aNeedle[aColumnName] < 0) {
+      throw new TypeError('Column must be greater than or equal to 0, got '
+                          + aNeedle[aColumnName]);
+    }
 
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
+    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
+  };
 
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
+/**
+ * Compute the last column for each generated mapping. The last column is
+ * inclusive.
+ */
+BasicSourceMapConsumer.prototype.computeColumnSpans =
+  function SourceMapConsumer_computeColumnSpans() {
+    for (var index = 0; index < this._generatedMappings.length; ++index) {
+      var mapping = this._generatedMappings[index];
 
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
+      // Mappings do not contain a field for the last generated columnt. We
+      // can come up with an optimistic estimate, however, by assuming that
+      // mappings are contiguous (i.e. given two consecutive mappings, the
+      // first mapping ends where the second one starts).
+      if (index + 1 < this._generatedMappings.length) {
+        var nextMapping = this._generatedMappings[index + 1];
 
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
+        if (mapping.generatedLine === nextMapping.generatedLine) {
+          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
+          continue;
+        }
+      }
 
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
+      // The last mapping for each line spans the entire line.
+      mapping.lastGeneratedColumn = Infinity;
+    }
+  };
 
- ***********************************************************************/
+/**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ *   - line: The line number in the generated source.
+ *   - column: The column number in the generated source.
+ *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ *     closest element that is smaller than or greater than the one we are
+ *     searching for, respectively, if the exact element cannot be found.
+ *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ *   - source: The original source file, or null.
+ *   - line: The line number in the original source, or null.
+ *   - column: The column number in the original source, or null.
+ *   - name: The original identifier, or null.
+ */
+BasicSourceMapConsumer.prototype.originalPositionFor =
+  function SourceMapConsumer_originalPositionFor(aArgs) {
+    var needle = {
+      generatedLine: util.getArg(aArgs, 'line'),
+      generatedColumn: util.getArg(aArgs, 'column')
+    };
 
-"use strict";
+    var index = this._findMapping(
+      needle,
+      this._generatedMappings,
+      "generatedLine",
+      "generatedColumn",
+      util.compareByGeneratedPositionsDeflated,
+      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+    );
 
-function Compressor(options, false_by_default) {
-    if (!(this instanceof Compressor))
-        return new Compressor(options, false_by_default);
-    TreeTransformer.call(this, this.before, this.after);
-    this.options = defaults(options, {
-        angular       : false,
-        booleans      : !false_by_default,
-        cascade       : !false_by_default,
-        collapse_vars : !false_by_default,
-        comparisons   : !false_by_default,
-        conditionals  : !false_by_default,
-        dead_code     : !false_by_default,
-        drop_console  : false,
-        drop_debugger : !false_by_default,
-        evaluate      : !false_by_default,
-        expression    : false,
-        global_defs   : {},
-        hoist_funs    : !false_by_default,
-        hoist_vars    : false,
-        if_return     : !false_by_default,
-        join_vars     : !false_by_default,
-        keep_fargs    : true,
-        keep_fnames   : false,
-        keep_infinity : false,
-        loops         : !false_by_default,
-        negate_iife   : !false_by_default,
-        passes        : 1,
-        properties    : !false_by_default,
-        pure_getters  : !false_by_default && "strict",
-        pure_funcs    : null,
-        reduce_vars   : !false_by_default,
-        screw_ie8     : true,
-        sequences     : !false_by_default,
-        side_effects  : !false_by_default,
-        switches      : !false_by_default,
-        top_retain    : null,
-        toplevel      : !!(options && options["top_retain"]),
-        unsafe        : false,
-        unsafe_comps  : false,
-        unsafe_math   : false,
-        unsafe_proto  : false,
-        unused        : !false_by_default,
-        warnings      : true,
-    }, true);
-    var pure_funcs = this.options["pure_funcs"];
-    if (typeof pure_funcs == "function") {
-        this.pure_funcs = pure_funcs;
-    } else {
-        this.pure_funcs = pure_funcs ? function(node) {
-            return pure_funcs.indexOf(node.expression.print_to_string()) < 0;
-        } : return_true;
-    }
-    var top_retain = this.options["top_retain"];
-    if (top_retain instanceof RegExp) {
-        this.top_retain = function(def) {
-            return top_retain.test(def.name);
-        };
-    } else if (typeof top_retain == "function") {
-        this.top_retain = top_retain;
-    } else if (top_retain) {
-        if (typeof top_retain == "string") {
-            top_retain = top_retain.split(/,/);
-        }
-        this.top_retain = function(def) {
-            return top_retain.indexOf(def.name) >= 0;
-        };
-    }
-    var sequences = this.options["sequences"];
-    this.sequences_limit = sequences == 1 ? 200 : sequences | 0;
-    this.warnings_produced = {};
-};
+    if (index >= 0) {
+      var mapping = this._generatedMappings[index];
 
-Compressor.prototype = new TreeTransformer;
-merge(Compressor.prototype, {
-    option: function(key) { return this.options[key] },
-    compress: function(node) {
-        if (this.option("expression")) {
-            node = node.process_expression(true);
-        }
-        var passes = +this.options.passes || 1;
-        for (var pass = 0; pass < passes && pass < 3; ++pass) {
-            if (pass > 0 || this.option("reduce_vars"))
-                node.reset_opt_flags(this, true);
-            node = node.transform(this);
-        }
-        if (this.option("expression")) {
-            node = node.process_expression(false);
-        }
-        return node;
-    },
-    info: function() {
-        if (this.options.warnings == "verbose") {
-            AST_Node.warn.apply(AST_Node, arguments);
-        }
-    },
-    warn: function(text, props) {
-        if (this.options.warnings) {
-            // only emit unique warnings
-            var message = string_template(text, props);
-            if (!(message in this.warnings_produced)) {
-                this.warnings_produced[message] = true;
-                AST_Node.warn.apply(AST_Node, arguments);
-            }
-        }
-    },
-    clear_warnings: function() {
-        this.warnings_produced = {};
-    },
-    before: function(node, descend, in_list) {
-        if (node._squeezed) return node;
-        var was_scope = false;
-        if (node instanceof AST_Scope) {
-            node = node.hoist_declarations(this);
-            was_scope = true;
+      if (mapping.generatedLine === needle.generatedLine) {
+        var source = util.getArg(mapping, 'source', null);
+        if (source !== null) {
+          source = this._sources.at(source);
+          if (this.sourceRoot != null) {
+            source = util.join(this.sourceRoot, source);
+          }
         }
-        // Before https://github.com/mishoo/UglifyJS2/pull/1602 AST_Node.optimize()
-        // would call AST_Node.transform() if a different instance of AST_Node is
-        // produced after OPT().
-        // This corrupts TreeWalker.stack, which cause AST look-ups to malfunction.
-        // Migrate and defer all children's AST_Node.transform() to below, which
-        // will now happen after this parent AST_Node has been properly substituted
-        // thus gives a consistent AST snapshot.
-        descend(node, this);
-        // Existing code relies on how AST_Node.optimize() worked, and omitting the
-        // following replacement call would result in degraded efficiency of both
-        // output and performance.
-        descend(node, this);
-        var opt = node.optimize(this);
-        if (was_scope && opt instanceof AST_Scope) {
-            opt.drop_unused(this);
-            descend(opt, this);
+        var name = util.getArg(mapping, 'name', null);
+        if (name !== null) {
+          name = this._names.at(name);
         }
-        if (opt === node) opt._squeezed = true;
-        return opt;
+        return {
+          source: source,
+          line: util.getArg(mapping, 'originalLine', null),
+          column: util.getArg(mapping, 'originalColumn', null),
+          name: name
+        };
+      }
     }
-});
-
-(function(){
 
-    function OPT(node, optimizer) {
-        node.DEFMETHOD("optimize", function(compressor){
-            var self = this;
-            if (self._optimized) return self;
-            if (compressor.has_directive("use asm")) return self;
-            var opt = optimizer(self, compressor);
-            opt._optimized = true;
-            return opt;
-        });
+    return {
+      source: null,
+      line: null,
+      column: null,
+      name: null
     };
+  };
 
-    OPT(AST_Node, function(self, compressor){
-        return self;
-    });
-
-    AST_Node.DEFMETHOD("equivalent_to", function(node){
-        return this.TYPE == node.TYPE && this.print_to_string() == node.print_to_string();
-    });
-
-    AST_Node.DEFMETHOD("process_expression", function(insert, compressor) {
-        var self = this;
-        var tt = new TreeTransformer(function(node) {
-            if (insert && node instanceof AST_SimpleStatement) {
-                return make_node(AST_Return, node, {
-                    value: node.body
-                });
-            }
-            if (!insert && node instanceof AST_Return) {
-                if (compressor) {
-                    var value = node.value && node.value.drop_side_effect_free(compressor, true);
-                    return value ? make_node(AST_SimpleStatement, node, {
-                        body: value
-                    }) : make_node(AST_EmptyStatement, node);
-                }
-                return make_node(AST_SimpleStatement, node, {
-                    body: node.value || make_node(AST_UnaryPrefix, node, {
-                        operator: "void",
-                        expression: make_node(AST_Number, node, {
-                            value: 0
-                        })
-                    })
-                });
-            }
-            if (node instanceof AST_Lambda && node !== self) {
-                return node;
-            }
-            if (node instanceof AST_Block) {
-                var index = node.body.length - 1;
-                if (index >= 0) {
-                    node.body[index] = node.body[index].transform(tt);
-                }
-            }
-            if (node instanceof AST_If) {
-                node.body = node.body.transform(tt);
-                if (node.alternative) {
-                    node.alternative = node.alternative.transform(tt);
-                }
-            }
-            if (node instanceof AST_With) {
-                node.body = node.body.transform(tt);
-            }
-            return node;
-        });
-        return self.transform(tt);
-    });
-
-    AST_Node.DEFMETHOD("reset_opt_flags", function(compressor, rescan){
-        var reduce_vars = rescan && compressor.option("reduce_vars");
-        var toplevel = compressor.option("toplevel");
-        var safe_ids = Object.create(null);
-        var suppressor = new TreeWalker(function(node) {
-            if (node instanceof AST_Symbol) {
-                var d = node.definition();
-                if (node instanceof AST_SymbolRef) d.references.push(node);
-                d.fixed = false;
-            }
-        });
-        var tw = new TreeWalker(function(node, descend){
-            node._squeezed = false;
-            node._optimized = false;
-            if (reduce_vars) {
-                if (node instanceof AST_Toplevel) node.globals.each(reset_def);
-                if (node instanceof AST_Scope) node.variables.each(reset_def);
-                if (node instanceof AST_SymbolRef) {
-                    var d = node.definition();
-                    d.references.push(node);
-                    if (d.fixed === undefined || !is_safe(d)
-                        || is_modified(node, 0, node.fixed_value() instanceof AST_Lambda)) {
-                        d.fixed = false;
-                    }
-                }
-                if (node instanceof AST_SymbolCatch) {
-                    node.definition().fixed = false;
-                }
-                if (node instanceof AST_VarDef) {
-                    var d = node.name.definition();
-                    if (d.fixed == null) {
-                        if (node.value) {
-                            d.fixed = function() {
-                                return node.value;
-                            };
-                            mark(d, false);
-                            descend();
-                        } else {
-                            d.fixed = null;
-                        }
-                        mark(d, true);
-                        return true;
-                    } else if (node.value) {
-                        d.fixed = false;
-                    }
-                }
-                if (node instanceof AST_Defun) {
-                    var d = node.name.definition();
-                    if (!toplevel && d.global || is_safe(d)) {
-                        d.fixed = false;
-                    } else {
-                        d.fixed = node;
-                        mark(d, true);
-                    }
-                    var save_ids = safe_ids;
-                    safe_ids = Object.create(null);
-                    descend();
-                    safe_ids = save_ids;
-                    return true;
-                }
-                var iife;
-                if (node instanceof AST_Function
-                    && !node.name
-                    && (iife = tw.parent()) instanceof AST_Call
-                    && iife.expression === node) {
-                    // Virtually turn IIFE parameters into variable definitions:
-                    //   (function(a,b) {...})(c,d) => (function() {var a=c,b=d; ...})()
-                    // So existing transformation rules can work on them.
-                    node.argnames.forEach(function(arg, i) {
-                        var d = arg.definition();
-                        d.fixed = function() {
-                            return iife.args[i] || make_node(AST_Undefined, iife);
-                        };
-                        mark(d, true);
-                    });
-                }
-                if (node instanceof AST_If || node instanceof AST_DWLoop) {
-                    node.condition.walk(tw);
-                    push();
-                    node.body.walk(tw);
-                    pop();
-                    if (node.alternative) {
-                        push();
-                        node.alternative.walk(tw);
-                        pop();
-                    }
-                    return true;
-                }
-                if (node instanceof AST_LabeledStatement) {
-                    push();
-                    node.body.walk(tw);
-                    pop();
-                    return true;
-                }
-                if (node instanceof AST_For) {
-                    if (node.init) node.init.walk(tw);
-                    push();
-                    if (node.condition) node.condition.walk(tw);
-                    node.body.walk(tw);
-                    if (node.step) node.step.walk(tw);
-                    pop();
-                    return true;
-                }
-                if (node instanceof AST_ForIn) {
-                    node.init.walk(suppressor);
-                    node.object.walk(tw);
-                    push();
-                    node.body.walk(tw);
-                    pop();
-                    return true;
-                }
-                if (node instanceof AST_Catch || node instanceof AST_SwitchBranch) {
-                    push();
-                    descend();
-                    pop();
-                    return true;
-                }
-            }
-        });
-        this.walk(tw);
-
-        function mark(def, safe) {
-            safe_ids[def.id] = safe;
-        }
+/**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
+  function BasicSourceMapConsumer_hasContentsOfAllSources() {
+    if (!this.sourcesContent) {
+      return false;
+    }
+    return this.sourcesContent.length >= this._sources.size() &&
+      !this.sourcesContent.some(function (sc) { return sc == null; });
+  };
 
-        function is_safe(def) {
-            if (safe_ids[def.id]) {
-                if (def.fixed == null) {
-                    var orig = def.orig[0];
-                    if (orig instanceof AST_SymbolFunarg || orig.name == "arguments") return false;
-                    def.fixed = make_node(AST_Undefined, orig);
-                }
-                return true;
-            }
-        }
+/**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+BasicSourceMapConsumer.prototype.sourceContentFor =
+  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+    if (!this.sourcesContent) {
+      return null;
+    }
 
-        function push() {
-            safe_ids = Object.create(safe_ids);
-        }
+    if (this.sourceRoot != null) {
+      aSource = util.relative(this.sourceRoot, aSource);
+    }
 
-        function pop() {
-            safe_ids = Object.getPrototypeOf(safe_ids);
-        }
+    if (this._sources.has(aSource)) {
+      return this.sourcesContent[this._sources.indexOf(aSource)];
+    }
 
-        function reset_def(def) {
-            if (toplevel || !def.global || def.orig[0] instanceof AST_SymbolConst) {
-                def.fixed = undefined;
-            } else {
-                def.fixed = false;
-            }
-            def.references = [];
-            def.should_replace = undefined;
-        }
+    var url;
+    if (this.sourceRoot != null
+        && (url = util.urlParse(this.sourceRoot))) {
+      // XXX: file:// URIs and absolute paths lead to unexpected behavior for
+      // many users. We can help them out when they expect file:// URIs to
+      // behave like it would if they were running a local HTTP server. See
+      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
+      var fileUriAbsPath = aSource.replace(/^file:\/\//, "");
+      if (url.scheme == "file"
+          && this._sources.has(fileUriAbsPath)) {
+        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
+      }
 
-        function is_modified(node, level, func) {
-            var parent = tw.parent(level);
-            if (is_lhs(node, parent)
-                || !func && parent instanceof AST_Call && parent.expression === node) {
-                return true;
-            } else if (parent instanceof AST_PropAccess && parent.expression === node) {
-                return !func && is_modified(parent, level + 1);
-            }
-        }
-    });
+      if ((!url.path || url.path == "/")
+          && this._sources.has("/" + aSource)) {
+        return this.sourcesContent[this._sources.indexOf("/" + aSource)];
+      }
+    }
 
-    AST_SymbolRef.DEFMETHOD("fixed_value", function() {
-        var fixed = this.definition().fixed;
-        if (!fixed || fixed instanceof AST_Node) return fixed;
-        return fixed();
-    });
+    // This function is used recursively from
+    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
+    // don't want to throw if we can't find the source - we just want to
+    // return null, so we provide a flag to exit gracefully.
+    if (nullOnMissing) {
+      return null;
+    }
+    else {
+      throw new Error('"' + aSource + '" is not in the SourceMap.');
+    }
+  };
 
-    function find_variable(compressor, name) {
-        var scope, i = 0;
-        while (scope = compressor.parent(i++)) {
-            if (scope instanceof AST_Scope) break;
-            if (scope instanceof AST_Catch) {
-                scope = scope.argname.definition().scope;
-                break;
-            }
-        }
-        return scope.find_variable(name);
+/**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ *   - source: The filename of the original source.
+ *   - line: The line number in the original source.
+ *   - column: The column number in the original source.
+ *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ *     closest element that is smaller than or greater than the one we are
+ *     searching for, respectively, if the exact element cannot be found.
+ *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ *   - line: The line number in the generated source, or null.
+ *   - column: The column number in the generated source, or null.
+ */
+BasicSourceMapConsumer.prototype.generatedPositionFor =
+  function SourceMapConsumer_generatedPositionFor(aArgs) {
+    var source = util.getArg(aArgs, 'source');
+    if (this.sourceRoot != null) {
+      source = util.relative(this.sourceRoot, source);
+    }
+    if (!this._sources.has(source)) {
+      return {
+        line: null,
+        column: null,
+        lastColumn: null
+      };
     }
+    source = this._sources.indexOf(source);
 
-    function make_node(ctor, orig, props) {
-        if (!props) props = {};
-        if (orig) {
-            if (!props.start) props.start = orig.start;
-            if (!props.end) props.end = orig.end;
-        }
-        return new ctor(props);
+    var needle = {
+      source: source,
+      originalLine: util.getArg(aArgs, 'line'),
+      originalColumn: util.getArg(aArgs, 'column')
     };
 
-    function make_node_from_constant(val, orig) {
-        switch (typeof val) {
-          case "string":
-            return make_node(AST_String, orig, {
-                value: val
-            });
-          case "number":
-            if (isNaN(val)) return make_node(AST_NaN, orig);
-            if (isFinite(val)) {
-                return 1 / val < 0 ? make_node(AST_UnaryPrefix, orig, {
-                    operator: "-",
-                    expression: make_node(AST_Number, orig, { value: -val })
-                }) : make_node(AST_Number, orig, { value: val });
-            }
-            return val < 0 ? make_node(AST_UnaryPrefix, orig, {
-                operator: "-",
-                expression: make_node(AST_Infinity, orig)
-            }) : make_node(AST_Infinity, orig);
-          case "boolean":
-            return make_node(val ? AST_True : AST_False, orig);
-          case "undefined":
-            return make_node(AST_Undefined, orig);
-          default:
-            if (val === null) {
-                return make_node(AST_Null, orig, { value: null });
-            }
-            if (val instanceof RegExp) {
-                return make_node(AST_RegExp, orig, { value: val });
-            }
-            throw new Error(string_template("Can't handle constant of type: {type}", {
-                type: typeof val
-            }));
-        }
-    };
+    var index = this._findMapping(
+      needle,
+      this._originalMappings,
+      "originalLine",
+      "originalColumn",
+      util.compareByOriginalPositions,
+      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+    );
 
-    // we shouldn't compress (1,func)(something) to
-    // func(something) because that changes the meaning of
-    // the func (becomes lexical instead of global).
-    function maintain_this_binding(parent, orig, val) {
-        if (parent instanceof AST_UnaryPrefix && parent.operator == "delete"
-            || parent instanceof AST_Call && parent.expression === orig
-                && (val instanceof AST_PropAccess || val instanceof AST_SymbolRef && val.name == "eval")) {
-            return make_node(AST_Seq, orig, {
-                car: make_node(AST_Number, orig, {
-                    value: 0
-                }),
-                cdr: val
-            });
-        }
-        return val;
+    if (index >= 0) {
+      var mapping = this._originalMappings[index];
+
+      if (mapping.source === needle.source) {
+        return {
+          line: util.getArg(mapping, 'generatedLine', null),
+          column: util.getArg(mapping, 'generatedColumn', null),
+          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+        };
+      }
     }
 
-    function as_statement_array(thing) {
-        if (thing === null) return [];
-        if (thing instanceof AST_BlockStatement) return thing.body;
-        if (thing instanceof AST_EmptyStatement) return [];
-        if (thing instanceof AST_Statement) return [ thing ];
-        throw new Error("Can't convert thing to statement array");
+    return {
+      line: null,
+      column: null,
+      lastColumn: null
     };
+  };
 
-    function is_empty(thing) {
-        if (thing === null) return true;
-        if (thing instanceof AST_EmptyStatement) return true;
-        if (thing instanceof AST_BlockStatement) return thing.body.length == 0;
-        return false;
-    };
+exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
 
-    function loop_body(x) {
-        if (x instanceof AST_Switch) return x;
-        if (x instanceof AST_For || x instanceof AST_ForIn || x instanceof AST_DWLoop) {
-            return (x.body instanceof AST_BlockStatement ? x.body : x);
-        }
-        return x;
-    };
+/**
+ * An IndexedSourceMapConsumer instance represents a parsed source map which
+ * we can query for information. It differs from BasicSourceMapConsumer in
+ * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
+ * input.
+ *
+ * The only parameter is a raw source map (either as a JSON string, or already
+ * parsed to an object). According to the spec for indexed source maps, they
+ * have the following attributes:
+ *
+ *   - version: Which version of the source map spec this map is following.
+ *   - file: Optional. The generated file this source map is associated with.
+ *   - sections: A list of section definitions.
+ *
+ * Each value under the "sections" field has two fields:
+ *   - offset: The offset into the original specified at which this section
+ *       begins to apply, defined as an object with a "line" and "column"
+ *       field.
+ *   - map: A source map definition. This source map could also be indexed,
+ *       but doesn't have to be.
+ *
+ * Instead of the "map" field, it's also possible to have a "url" field
+ * specifying a URL to retrieve a source map from, but that's currently
+ * unsupported.
+ *
+ * Here's an example source map, taken from the source map spec[0], but
+ * modified to omit a section which uses the "url" field.
+ *
+ *  {
+ *    version : 3,
+ *    file: "app.js",
+ *    sections: [{
+ *      offset: {line:100, column:10},
+ *      map: {
+ *        version : 3,
+ *        file: "section.js",
+ *        sources: ["foo.js", "bar.js"],
+ *        names: ["src", "maps", "are", "fun"],
+ *        mappings: "AAAA,E;;ABCDE;"
+ *      }
+ *    }],
+ *  }
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
+ */
+function IndexedSourceMapConsumer(aSourceMap) {
+  var sourceMap = aSourceMap;
+  if (typeof aSourceMap === 'string') {
+    sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, ''));
+  }
 
-    function is_iife_call(node) {
-        if (node instanceof AST_Call && !(node instanceof AST_New)) {
-            return node.expression instanceof AST_Function || is_iife_call(node.expression);
-        }
-        return false;
-    }
+  var version = util.getArg(sourceMap, 'version');
+  var sections = util.getArg(sourceMap, 'sections');
 
-    function tighten_body(statements, compressor) {
-        var CHANGED, max_iter = 10;
-        do {
-            CHANGED = false;
-            if (compressor.option("angular")) {
-                statements = process_for_angular(statements);
-            }
-            statements = eliminate_spurious_blocks(statements);
-            if (compressor.option("dead_code")) {
-                statements = eliminate_dead_code(statements, compressor);
-            }
-            if (compressor.option("if_return")) {
-                statements = handle_if_return(statements, compressor);
-            }
-            if (compressor.sequences_limit > 0) {
-                statements = sequencesize(statements, compressor);
-            }
-            if (compressor.option("join_vars")) {
-                statements = join_consecutive_vars(statements, compressor);
-            }
-            if (compressor.option("collapse_vars")) {
-                statements = collapse_single_use_vars(statements, compressor);
-            }
-        } while (CHANGED && max_iter-- > 0);
-
-        return statements;
-
-        function collapse_single_use_vars(statements, compressor) {
-            // Iterate statements backwards looking for a statement with a var/const
-            // declaration immediately preceding it. Grab the rightmost var definition
-            // and if it has exactly one reference then attempt to replace its reference
-            // in the statement with the var value and then erase the var definition.
-
-            var self = compressor.self();
-            var var_defs_removed = false;
-            var toplevel = compressor.option("toplevel");
-            for (var stat_index = statements.length; --stat_index >= 0;) {
-                var stat = statements[stat_index];
-                if (stat instanceof AST_Definitions) continue;
-
-                // Process child blocks of statement if present.
-                [stat, stat.body, stat.alternative, stat.bcatch, stat.bfinally].forEach(function(node) {
-                    node && node.body && collapse_single_use_vars(node.body, compressor);
-                });
+  if (version != this._version) {
+    throw new Error('Unsupported version: ' + version);
+  }
 
-                // The variable definition must precede a statement.
-                if (stat_index <= 0) break;
-                var prev_stat_index = stat_index - 1;
-                var prev_stat = statements[prev_stat_index];
-                if (!(prev_stat instanceof AST_Definitions)) continue;
-                var var_defs = prev_stat.definitions;
-                if (var_defs == null) continue;
-
-                var var_names_seen = {};
-                var side_effects_encountered = false;
-                var lvalues_encountered = false;
-                var lvalues = {};
-
-                // Scan variable definitions from right to left.
-                for (var var_defs_index = var_defs.length; --var_defs_index >= 0;) {
-
-                    // Obtain var declaration and var name with basic sanity check.
-                    var var_decl = var_defs[var_defs_index];
-                    if (var_decl.value == null) break;
-                    var var_name = var_decl.name.name;
-                    if (!var_name || !var_name.length) break;
-
-                    // Bail if we've seen a var definition of same name before.
-                    if (var_name in var_names_seen) break;
-                    var_names_seen[var_name] = true;
-
-                    // Only interested in cases with just one reference to the variable.
-                    var def = self.find_variable && self.find_variable(var_name);
-                    if (!def || !def.references || def.references.length !== 1
-                        || var_name == "arguments" || (!toplevel && def.global)) {
-                        side_effects_encountered = true;
-                        continue;
-                    }
-                    var ref = def.references[0];
-
-                    // Don't replace ref if eval() or with statement in scope.
-                    if (ref.scope.uses_eval || ref.scope.uses_with) break;
-
-                    // Constant single use vars can be replaced in any scope.
-                    if (var_decl.value.is_constant()) {
-                        var ctt = new TreeTransformer(function(node) {
-                            var parent = ctt.parent();
-                            if (parent instanceof AST_IterationStatement
-                                && (parent.condition === node || parent.init === node)) {
-                                return node;
-                            }
-                            if (node === ref)
-                                return replace_var(node, parent, true);
-                        });
-                        stat.transform(ctt);
-                        continue;
-                    }
-
-                    // Restrict var replacement to constants if side effects encountered.
-                    if (side_effects_encountered |= lvalues_encountered) continue;
-
-                    var value_has_side_effects = var_decl.value.has_side_effects(compressor);
-                    // Non-constant single use vars can only be replaced in same scope.
-                    if (ref.scope !== self) {
-                        side_effects_encountered |= value_has_side_effects;
-                        continue;
-                    }
-
-                    // Detect lvalues in var value.
-                    var tw = new TreeWalker(function(node){
-                        if (node instanceof AST_SymbolRef && is_lvalue(node, tw.parent())) {
-                            lvalues[node.name] = lvalues_encountered = true;
-                        }
-                    });
-                    var_decl.value.walk(tw);
-
-                    // Replace the non-constant single use var in statement if side effect free.
-                    var unwind = false;
-                    var tt = new TreeTransformer(
-                        function preorder(node) {
-                            if (unwind) return node;
-                            var parent = tt.parent();
-                            if (node instanceof AST_Lambda
-                                || node instanceof AST_Try
-                                || node instanceof AST_With
-                                || node instanceof AST_Case
-                                || node instanceof AST_IterationStatement
-                                || (parent instanceof AST_If          && node !== parent.condition)
-                                || (parent instanceof AST_Conditional && node !== parent.condition)
-                                || (node instanceof AST_SymbolRef
-                                    && value_has_side_effects
-                                    && !are_references_in_scope(node.definition(), self))
-                                || (parent instanceof AST_Binary
-                                    && (parent.operator == "&&" || parent.operator == "||")
-                                    && node === parent.right)
-                                || (parent instanceof AST_Switch && node !== parent.expression)) {
-                                return side_effects_encountered = unwind = true, node;
-                            }
-                            function are_references_in_scope(def, scope) {
-                                if (def.orig.length === 1
-                                    && def.orig[0] instanceof AST_SymbolDefun) return true;
-                                if (def.scope !== scope) return false;
-                                var refs = def.references;
-                                for (var i = 0, len = refs.length; i < len; i++) {
-                                    if (refs[i].scope !== scope) return false;
-                                }
-                                return true;
-                            }
-                        },
-                        function postorder(node) {
-                            if (unwind) return node;
-                            if (node === ref)
-                                return unwind = true, replace_var(node, tt.parent(), false);
-                            if (side_effects_encountered |= node.has_side_effects(compressor))
-                                return unwind = true, node;
-                            if (lvalues_encountered && node instanceof AST_SymbolRef && node.name in lvalues) {
-                                side_effects_encountered = true;
-                                return unwind = true, node;
-                            }
-                        }
-                    );
-                    stat.transform(tt);
-                }
-            }
+  this._sources = new ArraySet();
+  this._names = new ArraySet();
 
-            // Remove extraneous empty statments in block after removing var definitions.
-            // Leave at least one statement in `statements`.
-            if (var_defs_removed) for (var i = statements.length; --i >= 0;) {
-                if (statements.length > 1 && statements[i] instanceof AST_EmptyStatement)
-                    statements.splice(i, 1);
-            }
+  var lastOffset = {
+    line: -1,
+    column: 0
+  };
+  this._sections = sections.map(function (s) {
+    if (s.url) {
+      // The url field will require support for asynchronicity.
+      // See https://github.com/mozilla/source-map/issues/16
+      throw new Error('Support for url field in sections not implemented.');
+    }
+    var offset = util.getArg(s, 'offset');
+    var offsetLine = util.getArg(offset, 'line');
+    var offsetColumn = util.getArg(offset, 'column');
+
+    if (offsetLine < lastOffset.line ||
+        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
+      throw new Error('Section offsets must be ordered and non-overlapping.');
+    }
+    lastOffset = offset;
 
-            return statements;
+    return {
+      generatedOffset: {
+        // The offset fields are 0-based, but we use 1-based indices when
+        // encoding/decoding from VLQ.
+        generatedLine: offsetLine + 1,
+        generatedColumn: offsetColumn + 1
+      },
+      consumer: new SourceMapConsumer(util.getArg(s, 'map'))
+    }
+  });
+}
 
-            function is_lvalue(node, parent) {
-                return node instanceof AST_SymbolRef && is_lhs(node, parent);
-            }
-            function replace_var(node, parent, is_constant) {
-                if (is_lvalue(node, parent)) return node;
+IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
 
-                // Remove var definition and return its value to the TreeTransformer to replace.
-                var value = maintain_this_binding(parent, node, var_decl.value);
-                var_decl.value = null;
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+IndexedSourceMapConsumer.prototype._version = 3;
 
-                var_defs.splice(var_defs_index, 1);
-                if (var_defs.length === 0) {
-                    statements[prev_stat_index] = make_node(AST_EmptyStatement, self);
-                    var_defs_removed = true;
-                }
-                // Further optimize statement after substitution.
-                stat.reset_opt_flags(compressor);
+/**
+ * The list of original sources.
+ */
+Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
+  get: function () {
+    var sources = [];
+    for (var i = 0; i < this._sections.length; i++) {
+      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
+        sources.push(this._sections[i].consumer.sources[j]);
+      }
+    }
+    return sources;
+  }
+});
+
+/**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ *   - line: The line number in the generated source.
+ *   - column: The column number in the generated source.
+ *
+ * and an object is returned with the following properties:
+ *
+ *   - source: The original source file, or null.
+ *   - line: The line number in the original source, or null.
+ *   - column: The column number in the original source, or null.
+ *   - name: The original identifier, or null.
+ */
+IndexedSourceMapConsumer.prototype.originalPositionFor =
+  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
+    var needle = {
+      generatedLine: util.getArg(aArgs, 'line'),
+      generatedColumn: util.getArg(aArgs, 'column')
+    };
 
-                compressor.info("Collapsing " + (is_constant ? "constant" : "variable") +
-                    " " + var_name + " [{file}:{line},{col}]", node.start);
-                CHANGED = true;
-                return value;
-            }
+    // Find the section containing the generated position we're trying to map
+    // to an original position.
+    var sectionIndex = binarySearch.search(needle, this._sections,
+      function(needle, section) {
+        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
+        if (cmp) {
+          return cmp;
         }
 
-        function process_for_angular(statements) {
-            function has_inject(comment) {
-                return /@ngInject/.test(comment.value);
-            }
-            function make_arguments_names_list(func) {
-                return func.argnames.map(function(sym){
-                    return make_node(AST_String, sym, { value: sym.name });
-                });
-            }
-            function make_array(orig, elements) {
-                return make_node(AST_Array, orig, { elements: elements });
-            }
-            function make_injector(func, name) {
-                return make_node(AST_SimpleStatement, func, {
-                    body: make_node(AST_Assign, func, {
-                        operator: "=",
-                        left: make_node(AST_Dot, name, {
-                            expression: make_node(AST_SymbolRef, name, name),
-                            property: "$inject"
-                        }),
-                        right: make_array(func, make_arguments_names_list(func))
-                    })
-                });
-            }
-            function check_expression(body) {
-                if (body && body.args) {
-                    // if this is a function call check all of arguments passed
-                    body.args.forEach(function(argument, index, array) {
-                        var comments = argument.start.comments_before;
-                        // if the argument is function preceded by @ngInject
-                        if (argument instanceof AST_Lambda && comments.length && has_inject(comments[0])) {
-                            // replace the function with an array of names of its parameters and function at the end
-                            array[index] = make_array(argument, make_arguments_names_list(argument).concat(argument));
-                        }
-                    });
-                    // if this is chained call check previous one recursively
-                    if (body.expression && body.expression.expression) {
-                        check_expression(body.expression.expression);
-                    }
-                }
-            }
-            return statements.reduce(function(a, stat){
-                a.push(stat);
-
-                if (stat.body && stat.body.args) {
-                    check_expression(stat.body);
-                } else {
-                    var token = stat.start;
-                    var comments = token.comments_before;
-                    if (comments && comments.length > 0) {
-                        var last = comments.pop();
-                        if (has_inject(last)) {
-                            // case 1: defun
-                            if (stat instanceof AST_Defun) {
-                                a.push(make_injector(stat, stat.name));
-                            }
-                            else if (stat instanceof AST_Definitions) {
-                                stat.definitions.forEach(function(def) {
-                                    if (def.value && def.value instanceof AST_Lambda) {
-                                        a.push(make_injector(def.value, def.name));
-                                    }
-                                });
-                            }
-                            else {
-                                compressor.warn("Unknown statement marked with @ngInject [{file}:{line},{col}]", token);
-                            }
-                        }
-                    }
-                }
-
-                return a;
-            }, []);
-        }
+        return (needle.generatedColumn -
+                section.generatedOffset.generatedColumn);
+      });
+    var section = this._sections[sectionIndex];
 
-        function eliminate_spurious_blocks(statements) {
-            var seen_dirs = [];
-            return statements.reduce(function(a, stat){
-                if (stat instanceof AST_BlockStatement) {
-                    CHANGED = true;
-                    a.push.apply(a, eliminate_spurious_blocks(stat.body));
-                } else if (stat instanceof AST_EmptyStatement) {
-                    CHANGED = true;
-                } else if (stat instanceof AST_Directive) {
-                    if (seen_dirs.indexOf(stat.value) < 0) {
-                        a.push(stat);
-                        seen_dirs.push(stat.value);
-                    } else {
-                        CHANGED = true;
-                    }
-                } else {
-                    a.push(stat);
-                }
-                return a;
-            }, []);
-        };
+    if (!section) {
+      return {
+        source: null,
+        line: null,
+        column: null,
+        name: null
+      };
+    }
 
-        function handle_if_return(statements, compressor) {
-            var self = compressor.self();
-            var multiple_if_returns = has_multiple_if_returns(statements);
-            var in_lambda = self instanceof AST_Lambda;
-            var ret = []; // Optimized statements, build from tail to front
-            loop: for (var i = statements.length; --i >= 0;) {
-                var stat = statements[i];
-                switch (true) {
-                  case (in_lambda && stat instanceof AST_Return && !stat.value && ret.length == 0):
-                    CHANGED = true;
-                    // note, ret.length is probably always zero
-                    // because we drop unreachable code before this
-                    // step.  nevertheless, it's good to check.
-                    continue loop;
-                  case stat instanceof AST_If:
-                    if (stat.body instanceof AST_Return) {
-                        //---
-                        // pretty silly case, but:
-                        // if (foo()) return; return; ==> foo(); return;
-                        if (((in_lambda && ret.length == 0)
-                             || (ret[0] instanceof AST_Return && !ret[0].value))
-                            && !stat.body.value && !stat.alternative) {
-                            CHANGED = true;
-                            var cond = make_node(AST_SimpleStatement, stat.condition, {
-                                body: stat.condition
-                            });
-                            ret.unshift(cond);
-                            continue loop;
-                        }
-                        //---
-                        // if (foo()) return x; return y; ==> return foo() ? x : y;
-                        if (ret[0] instanceof AST_Return && stat.body.value && ret[0].value && !stat.alternative) {
-                            CHANGED = true;
-                            stat = stat.clone();
-                            stat.alternative = ret[0];
-                            ret[0] = stat.transform(compressor);
-                            continue loop;
-                        }
-                        //---
-                        // if (foo()) return x; [ return ; ] ==> return foo() ? x : undefined;
-                        if (multiple_if_returns && (ret.length == 0 || ret[0] instanceof AST_Return)
-                            && stat.body.value && !stat.alternative && in_lambda) {
-                            CHANGED = true;
-                            stat = stat.clone();
-                            stat.alternative = ret[0] || make_node(AST_Return, stat, {
-                                value: null
-                            });
-                            ret[0] = stat.transform(compressor);
-                            continue loop;
-                        }
-                        //---
-                        // if (foo()) return; [ else x... ]; y... ==> if (!foo()) { x...; y... }
-                        if (!stat.body.value && in_lambda) {
-                            CHANGED = true;
-                            stat = stat.clone();
-                            stat.condition = stat.condition.negate(compressor);
-                            var body = as_statement_array(stat.alternative).concat(ret);
-                            var funs = extract_functions_from_statement_array(body);
-                            stat.body = make_node(AST_BlockStatement, stat, {
-                                body: body
-                            });
-                            stat.alternative = null;
-                            ret = funs.concat([ stat.transform(compressor) ]);
-                            continue loop;
-                        }
-
-                        //---
-                        // if (a) return b; if (c) return d; e; ==> return a ? b : c ? d : void e;
-                        //
-                        // if sequences is not enabled, this can lead to an endless loop (issue #866).
-                        // however, with sequences on this helps producing slightly better output for
-                        // the example code.
-                        if (compressor.option("sequences")
-                            && i > 0 && statements[i - 1] instanceof AST_If && statements[i - 1].body instanceof AST_Return
-                            && ret.length == 1 && in_lambda && ret[0] instanceof AST_SimpleStatement
-                            && !stat.alternative) {
-                            CHANGED = true;
-                            ret.push(make_node(AST_Return, ret[0], {
-                                value: null
-                            }).transform(compressor));
-                            ret.unshift(stat);
-                            continue loop;
-                        }
-                    }
-
-                    var ab = aborts(stat.body);
-                    var lct = ab instanceof AST_LoopControl ? compressor.loopcontrol_target(ab) : null;
-                    if (ab && ((ab instanceof AST_Return && !ab.value && in_lambda)
-                               || (ab instanceof AST_Continue && self === loop_body(lct))
-                               || (ab instanceof AST_Break && lct instanceof AST_BlockStatement && self === lct))) {
-                        if (ab.label) {
-                            remove(ab.label.thedef.references, ab);
-                        }
-                        CHANGED = true;
-                        var body = as_statement_array(stat.body).slice(0, -1);
-                        stat = stat.clone();
-                        stat.condition = stat.condition.negate(compressor);
-                        stat.body = make_node(AST_BlockStatement, stat, {
-                            body: as_statement_array(stat.alternative).concat(ret)
-                        });
-                        stat.alternative = make_node(AST_BlockStatement, stat, {
-                            body: body
-                        });
-                        ret = [ stat.transform(compressor) ];
-                        continue loop;
-                    }
-
-                    var ab = aborts(stat.alternative);
-                    var lct = ab instanceof AST_LoopControl ? compressor.loopcontrol_target(ab) : null;
-                    if (ab && ((ab instanceof AST_Return && !ab.value && in_lambda)
-                               || (ab instanceof AST_Continue && self === loop_body(lct))
-                               || (ab instanceof AST_Break && lct instanceof AST_BlockStatement && self === lct))) {
-                        if (ab.label) {
-                            remove(ab.label.thedef.references, ab);
-                        }
-                        CHANGED = true;
-                        stat = stat.clone();
-                        stat.body = make_node(AST_BlockStatement, stat.body, {
-                            body: as_statement_array(stat.body).concat(ret)
-                        });
-                        stat.alternative = make_node(AST_BlockStatement, stat.alternative, {
-                            body: as_statement_array(stat.alternative).slice(0, -1)
-                        });
-                        ret = [ stat.transform(compressor) ];
-                        continue loop;
-                    }
-
-                    ret.unshift(stat);
-                    break;
-                  default:
-                    ret.unshift(stat);
-                    break;
-                }
-            }
-            return ret;
-
-            function has_multiple_if_returns(statements) {
-                var n = 0;
-                for (var i = statements.length; --i >= 0;) {
-                    var stat = statements[i];
-                    if (stat instanceof AST_If && stat.body instanceof AST_Return) {
-                        if (++n > 1) return true;
-                    }
-                }
-                return false;
-            }
-        };
+    return section.consumer.originalPositionFor({
+      line: needle.generatedLine -
+        (section.generatedOffset.generatedLine - 1),
+      column: needle.generatedColumn -
+        (section.generatedOffset.generatedLine === needle.generatedLine
+         ? section.generatedOffset.generatedColumn - 1
+         : 0),
+      bias: aArgs.bias
+    });
+  };
 
-        function eliminate_dead_code(statements, compressor) {
-            var has_quit = false;
-            var orig = statements.length;
-            var self = compressor.self();
-            statements = statements.reduce(function(a, stat){
-                if (has_quit) {
-                    extract_declarations_from_unreachable_code(compressor, stat, a);
-                } else {
-                    if (stat instanceof AST_LoopControl) {
-                        var lct = compressor.loopcontrol_target(stat);
-                        if ((stat instanceof AST_Break
-                             && !(lct instanceof AST_IterationStatement)
-                             && loop_body(lct) === self) || (stat instanceof AST_Continue
-                                                             && loop_body(lct) === self)) {
-                            if (stat.label) {
-                                remove(stat.label.thedef.references, stat);
-                            }
-                        } else {
-                            a.push(stat);
-                        }
-                    } else {
-                        a.push(stat);
-                    }
-                    if (aborts(stat)) has_quit = true;
-                }
-                return a;
-            }, []);
-            CHANGED = statements.length != orig;
-            return statements;
-        };
+/**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
+  function IndexedSourceMapConsumer_hasContentsOfAllSources() {
+    return this._sections.every(function (s) {
+      return s.consumer.hasContentsOfAllSources();
+    });
+  };
 
-        function sequencesize(statements, compressor) {
-            if (statements.length < 2) return statements;
-            var seq = [], ret = [];
-            function push_seq() {
-                seq = AST_Seq.from_array(seq);
-                if (seq) ret.push(make_node(AST_SimpleStatement, seq, {
-                    body: seq
-                }));
-                seq = [];
-            };
-            statements.forEach(function(stat){
-                if (stat instanceof AST_SimpleStatement) {
-                    if (seqLength(seq) >= compressor.sequences_limit) push_seq();
-                    var body = stat.body;
-                    if (seq.length > 0) body = body.drop_side_effect_free(compressor);
-                    if (body) seq.push(body);
-                } else {
-                    push_seq();
-                    ret.push(stat);
-                }
-            });
-            push_seq();
-            ret = sequencesize_2(ret, compressor);
-            CHANGED = ret.length != statements.length;
-            return ret;
-        };
+/**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+IndexedSourceMapConsumer.prototype.sourceContentFor =
+  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+    for (var i = 0; i < this._sections.length; i++) {
+      var section = this._sections[i];
 
-        function seqLength(a) {
-            for (var len = 0, i = 0; i < a.length; ++i) {
-                var stat = a[i];
-                if (stat instanceof AST_Seq) {
-                    len += stat.len();
-                } else {
-                    len++;
-                }
-            }
-            return len;
-        };
+      var content = section.consumer.sourceContentFor(aSource, true);
+      if (content) {
+        return content;
+      }
+    }
+    if (nullOnMissing) {
+      return null;
+    }
+    else {
+      throw new Error('"' + aSource + '" is not in the SourceMap.');
+    }
+  };
 
-        function sequencesize_2(statements, compressor) {
-            function cons_seq(right) {
-                ret.pop();
-                var left = prev.body;
-                if (left instanceof AST_Seq) {
-                    left.add(right);
-                } else {
-                    left = AST_Seq.cons(left, right);
-                }
-                return left.transform(compressor);
-            };
-            var ret = [], prev = null;
-            statements.forEach(function(stat){
-                if (prev) {
-                    if (stat instanceof AST_For) {
-                        var opera = {};
-                        try {
-                            prev.body.walk(new TreeWalker(function(node){
-                                if (node instanceof AST_Binary && node.operator == "in")
-                                    throw opera;
-                            }));
-                            if (stat.init && !(stat.init instanceof AST_Definitions)) {
-                                stat.init = cons_seq(stat.init);
-                            }
-                            else if (!stat.init) {
-                                stat.init = prev.body.drop_side_effect_free(compressor);
-                                ret.pop();
-                            }
-                        } catch(ex) {
-                            if (ex !== opera) throw ex;
-                        }
-                    }
-                    else if (stat instanceof AST_If) {
-                        stat.condition = cons_seq(stat.condition);
-                    }
-                    else if (stat instanceof AST_With) {
-                        stat.expression = cons_seq(stat.expression);
-                    }
-                    else if (stat instanceof AST_Exit && stat.value) {
-                        stat.value = cons_seq(stat.value);
-                    }
-                    else if (stat instanceof AST_Exit) {
-                        stat.value = cons_seq(make_node(AST_Undefined, stat).transform(compressor));
-                    }
-                    else if (stat instanceof AST_Switch) {
-                        stat.expression = cons_seq(stat.expression);
-                    }
-                }
-                ret.push(stat);
-                prev = stat instanceof AST_SimpleStatement ? stat : null;
-            });
-            return ret;
-        };
+/**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ *   - source: The filename of the original source.
+ *   - line: The line number in the original source.
+ *   - column: The column number in the original source.
+ *
+ * and an object is returned with the following properties:
+ *
+ *   - line: The line number in the generated source, or null.
+ *   - column: The column number in the generated source, or null.
+ */
+IndexedSourceMapConsumer.prototype.generatedPositionFor =
+  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
+    for (var i = 0; i < this._sections.length; i++) {
+      var section = this._sections[i];
 
-        function join_consecutive_vars(statements, compressor) {
-            var prev = null;
-            return statements.reduce(function(a, stat){
-                if (stat instanceof AST_Definitions && prev && prev.TYPE == stat.TYPE) {
-                    prev.definitions = prev.definitions.concat(stat.definitions);
-                    CHANGED = true;
-                }
-                else if (stat instanceof AST_For
-                         && prev instanceof AST_Var
-                         && (!stat.init || stat.init.TYPE == prev.TYPE)) {
-                    CHANGED = true;
-                    a.pop();
-                    if (stat.init) {
-                        stat.init.definitions = prev.definitions.concat(stat.init.definitions);
-                    } else {
-                        stat.init = prev;
-                    }
-                    a.push(stat);
-                    prev = stat;
-                }
-                else {
-                    prev = stat;
-                    a.push(stat);
-                }
-                return a;
-            }, []);
+      // Only consider this section if the requested source is in the list of
+      // sources of the consumer.
+      if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {
+        continue;
+      }
+      var generatedPosition = section.consumer.generatedPositionFor(aArgs);
+      if (generatedPosition) {
+        var ret = {
+          line: generatedPosition.line +
+            (section.generatedOffset.generatedLine - 1),
+          column: generatedPosition.column +
+            (section.generatedOffset.generatedLine === generatedPosition.line
+             ? section.generatedOffset.generatedColumn - 1
+             : 0)
         };
+        return ret;
+      }
+    }
 
+    return {
+      line: null,
+      column: null
     };
+  };
 
-    function extract_functions_from_statement_array(statements) {
-        var funs = [];
-        for (var i = statements.length - 1; i >= 0; --i) {
-            var stat = statements[i];
-            if (stat instanceof AST_Defun) {
-                statements.splice(i, 1);
-                funs.unshift(stat);
-            }
-        }
-        return funs;
-    }
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+IndexedSourceMapConsumer.prototype._parseMappings =
+  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+    this.__generatedMappings = [];
+    this.__originalMappings = [];
+    for (var i = 0; i < this._sections.length; i++) {
+      var section = this._sections[i];
+      var sectionMappings = section.consumer._generatedMappings;
+      for (var j = 0; j < sectionMappings.length; j++) {
+        var mapping = sectionMappings[j];
 
-    function extract_declarations_from_unreachable_code(compressor, stat, target) {
-        if (!(stat instanceof AST_Defun)) {
-            compressor.warn("Dropping unreachable code [{file}:{line},{col}]", stat.start);
+        var source = section.consumer._sources.at(mapping.source);
+        if (section.consumer.sourceRoot !== null) {
+          source = util.join(section.consumer.sourceRoot, source);
         }
-        stat.walk(new TreeWalker(function(node){
-            if (node instanceof AST_Definitions) {
-                compressor.warn("Declarations in unreachable code! [{file}:{line},{col}]", node.start);
-                node.remove_initializers();
-                target.push(node);
-                return true;
-            }
-            if (node instanceof AST_Defun) {
-                target.push(node);
-                return true;
-            }
-            if (node instanceof AST_Scope) {
-                return true;
-            }
-        }));
-    };
+        this._sources.add(source);
+        source = this._sources.indexOf(source);
 
-    function is_undefined(node, compressor) {
-        return node.is_undefined
-            || node instanceof AST_Undefined
-            || node instanceof AST_UnaryPrefix
-                && node.operator == "void"
-                && !node.expression.has_side_effects(compressor);
-    }
+        var name = section.consumer._names.at(mapping.name);
+        this._names.add(name);
+        name = this._names.indexOf(name);
 
-    // may_eq_null()
-    // returns true if this node may evaluate to null or undefined
-    (function(def) {
-        AST_Node.DEFMETHOD("may_eq_null", function(compressor) {
-            var pure_getters = compressor.option("pure_getters");
-            return !pure_getters || this._eq_null(pure_getters);
-        });
+        // The mappings coming from the consumer for the section have
+        // generated positions relative to the start of the section, so we
+        // need to offset them to be relative to the start of the concatenated
+        // generated file.
+        var adjustedMapping = {
+          source: source,
+          generatedLine: mapping.generatedLine +
+            (section.generatedOffset.generatedLine - 1),
+          generatedColumn: mapping.generatedColumn +
+            (section.generatedOffset.generatedLine === mapping.generatedLine
+            ? section.generatedOffset.generatedColumn - 1
+            : 0),
+          originalLine: mapping.originalLine,
+          originalColumn: mapping.originalColumn,
+          name: name
+        };
 
-        function is_strict(pure_getters) {
-            return /strict/.test(pure_getters);
+        this.__generatedMappings.push(adjustedMapping);
+        if (typeof adjustedMapping.originalLine === 'number') {
+          this.__originalMappings.push(adjustedMapping);
         }
+      }
+    }
 
-        def(AST_Node, is_strict);
-        def(AST_Null, return_true);
-        def(AST_Undefined, return_true);
-        def(AST_Constant, return_false);
-        def(AST_Array, return_false);
-        def(AST_Object, return_false);
-        def(AST_Function, return_false);
-        def(AST_UnaryPostfix, return_false);
-        def(AST_UnaryPrefix, function() {
-            return this.operator == "void";
-        });
-        def(AST_Binary, function(pure_getters) {
-            switch (this.operator) {
-              case "&&":
-                return this.left._eq_null(pure_getters);
-              case "||":
-                return this.left._eq_null(pure_getters)
-                    && this.right._eq_null(pure_getters);
-              default:
-                return false;
-            }
-        })
-        def(AST_Assign, function(pure_getters) {
-            return this.operator == "="
-                && this.right._eq_null(pure_getters);
-        })
-        def(AST_Conditional, function(pure_getters) {
-            return this.consequent._eq_null(pure_getters)
-                || this.alternative._eq_null(pure_getters);
-        })
-        def(AST_Seq, function(pure_getters) {
-            return this.cdr._eq_null(pure_getters);
-        });
-        def(AST_SymbolRef, function(pure_getters) {
-            if (this.is_undefined) return true;
-            if (!is_strict(pure_getters)) return false;
-            var fixed = this.fixed_value();
-            return !fixed || fixed._eq_null(pure_getters);
-        });
-    })(function(node, func) {
-        node.DEFMETHOD("_eq_null", func);
-    });
-
-    /* -----[ boolean/negation helpers ]----- */
+    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
+    quickSort(this.__originalMappings, util.compareByOriginalPositions);
+  };
 
-    // methods to determine whether an expression has a boolean result type
-    (function (def){
-        var unary_bool = [ "!", "delete" ];
-        var binary_bool = [ "in", "instanceof", "==", "!=", "===", "!==", "<", "<=", ">=", ">" ];
-        def(AST_Node, return_false);
-        def(AST_UnaryPrefix, function(){
-            return member(this.operator, unary_bool);
-        });
-        def(AST_Binary, function(){
-            return member(this.operator, binary_bool) ||
-                ( (this.operator == "&&" || this.operator == "||") &&
-                  this.left.is_boolean() && this.right.is_boolean() );
-        });
-        def(AST_Conditional, function(){
-            return this.consequent.is_boolean() && this.alternative.is_boolean();
-        });
-        def(AST_Assign, function(){
-            return this.operator == "=" && this.right.is_boolean();
-        });
-        def(AST_Seq, function(){
-            return this.cdr.is_boolean();
-        });
-        def(AST_True, return_true);
-        def(AST_False, return_true);
-    })(function(node, func){
-        node.DEFMETHOD("is_boolean", func);
-    });
+exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
 
-    // methods to determine if an expression has a numeric result type
-    (function (def){
-        def(AST_Node, return_false);
-        def(AST_Number, return_true);
-        var unary = makePredicate("+ - ~ ++ --");
-        def(AST_Unary, function(){
-            return unary(this.operator);
-        });
-        var binary = makePredicate("- * / % & | ^ << >> >>>");
-        def(AST_Binary, function(compressor){
-            return binary(this.operator) || this.operator == "+"
-                && this.left.is_number(compressor)
-                && this.right.is_number(compressor);
-        });
-        def(AST_Assign, function(compressor){
-            return binary(this.operator.slice(0, -1))
-                || this.operator == "=" && this.right.is_number(compressor);
-        });
-        def(AST_Seq, function(compressor){
-            return this.cdr.is_number(compressor);
-        });
-        def(AST_Conditional, function(compressor){
-            return this.consequent.is_number(compressor) && this.alternative.is_number(compressor);
-        });
-    })(function(node, func){
-        node.DEFMETHOD("is_number", func);
-    });
+},{"./array-set":145,"./base64-vlq":146,"./binary-search":148,"./quick-sort":150,"./util":154}],152:[function(require,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
 
-    // methods to determine if an expression has a string result type
-    (function (def){
-        def(AST_Node, return_false);
-        def(AST_String, return_true);
-        def(AST_UnaryPrefix, function(){
-            return this.operator == "typeof";
-        });
-        def(AST_Binary, function(compressor){
-            return this.operator == "+" &&
-                (this.left.is_string(compressor) || this.right.is_string(compressor));
-        });
-        def(AST_Assign, function(compressor){
-            return (this.operator == "=" || this.operator == "+=") && this.right.is_string(compressor);
-        });
-        def(AST_Seq, function(compressor){
-            return this.cdr.is_string(compressor);
-        });
-        def(AST_Conditional, function(compressor){
-            return this.consequent.is_string(compressor) && this.alternative.is_string(compressor);
-        });
-    })(function(node, func){
-        node.DEFMETHOD("is_string", func);
-    });
+var base64VLQ = require('./base64-vlq');
+var util = require('./util');
+var ArraySet = require('./array-set').ArraySet;
+var MappingList = require('./mapping-list').MappingList;
 
-    var unary_side_effects = makePredicate("delete ++ --");
-
-    function is_lhs(node, parent) {
-        if (parent instanceof AST_Unary && unary_side_effects(parent.operator)) return parent.expression;
-        if (parent instanceof AST_Assign && parent.left === node) return node;
-    }
-
-    (function (def){
-        AST_Node.DEFMETHOD("resolve_defines", function(compressor) {
-            if (!compressor.option("global_defs")) return;
-            var def = this._find_defs(compressor, "");
-            if (def) {
-                var node, parent = this, level = 0;
-                do {
-                    node = parent;
-                    parent = compressor.parent(level++);
-                } while (parent instanceof AST_PropAccess && parent.expression === node);
-                if (is_lhs(node, parent)) {
-                    compressor.warn('global_defs ' + this.print_to_string() + ' redefined [{file}:{line},{col}]', this.start);
-                } else {
-                    return def;
-                }
-            }
-        });
-        function to_node(value, orig) {
-            if (value instanceof AST_Node) return make_node(value.CTOR, orig, value);
-            if (Array.isArray(value)) return make_node(AST_Array, orig, {
-                elements: value.map(function(value) {
-                    return to_node(value, orig);
-                })
-            });
-            if (value && typeof value == "object") {
-                var props = [];
-                for (var key in value) {
-                    props.push(make_node(AST_ObjectKeyVal, orig, {
-                        key: key,
-                        value: to_node(value[key], orig)
-                    }));
-                }
-                return make_node(AST_Object, orig, {
-                    properties: props
-                });
-            }
-            return make_node_from_constant(value, orig);
-        }
-        def(AST_Node, noop);
-        def(AST_Dot, function(compressor, suffix){
-            return this.expression._find_defs(compressor, "." + this.property + suffix);
-        });
-        def(AST_SymbolRef, function(compressor, suffix){
-            if (!this.global()) return;
-            var name;
-            var defines = compressor.option("global_defs");
-            if (defines && HOP(defines, (name = this.name + suffix))) {
-                var node = to_node(defines[name], this);
-                var top = compressor.find_parent(AST_Toplevel);
-                node.walk(new TreeWalker(function(node) {
-                    if (node instanceof AST_SymbolRef) {
-                        node.scope = top;
-                        node.thedef = top.def_global(node);
-                    }
-                }));
-                return node;
-            }
-        });
-    })(function(node, func){
-        node.DEFMETHOD("_find_defs", func);
-    });
+/**
+ * An instance of the SourceMapGenerator represents a source map which is
+ * being built incrementally. You may pass an object with the following
+ * properties:
+ *
+ *   - file: The filename of the generated source.
+ *   - sourceRoot: A root for all relative URLs in this source map.
+ */
+function SourceMapGenerator(aArgs) {
+  if (!aArgs) {
+    aArgs = {};
+  }
+  this._file = util.getArg(aArgs, 'file', null);
+  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
+  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
+  this._sources = new ArraySet();
+  this._names = new ArraySet();
+  this._mappings = new MappingList();
+  this._sourcesContents = null;
+}
 
-    function best_of_expression(ast1, ast2) {
-        return ast1.print_to_string().length >
-            ast2.print_to_string().length
-            ? ast2 : ast1;
-    }
-
-    function best_of_statement(ast1, ast2) {
-        return best_of_expression(make_node(AST_SimpleStatement, ast1, {
-            body: ast1
-        }), make_node(AST_SimpleStatement, ast2, {
-            body: ast2
-        })).body;
-    }
-
-    function best_of(compressor, ast1, ast2) {
-        return (first_in_statement(compressor) ? best_of_statement : best_of_expression)(ast1, ast2);
-    }
-
-    // methods to evaluate a constant expression
-    (function (def){
-        // If the node has been successfully reduced to a constant,
-        // then its value is returned; otherwise the element itself
-        // is returned.
-        // They can be distinguished as constant value is never a
-        // descendant of AST_Node.
-        AST_Node.DEFMETHOD("evaluate", function(compressor){
-            if (!compressor.option("evaluate")) return this;
-            try {
-                var val = this._eval(compressor);
-                return !val || val instanceof RegExp || typeof val != "object" ? val : this;
-            } catch(ex) {
-                if (ex !== def) throw ex;
-                return this;
-            }
-        });
-        var unaryPrefix = makePredicate("! ~ - + void");
-        AST_Node.DEFMETHOD("is_constant", function(){
-            // Accomodate when compress option evaluate=false
-            // as well as the common constant expressions !0 and -1
-            if (this instanceof AST_Constant) {
-                return !(this instanceof AST_RegExp);
-            } else {
-                return this instanceof AST_UnaryPrefix
-                    && this.expression instanceof AST_Constant
-                    && unaryPrefix(this.operator);
-            }
-        });
-        // Obtain the constant value of an expression already known to be constant.
-        // Result only valid iff this.is_constant() is true.
-        AST_Node.DEFMETHOD("constant_value", function(compressor){
-            // Accomodate when option evaluate=false.
-            if (this instanceof AST_Constant && !(this instanceof AST_RegExp)) {
-                return this.value;
-            }
-            // Accomodate the common constant expressions !0 and -1 when option evaluate=false.
-            if (this instanceof AST_UnaryPrefix
-                && this.expression instanceof AST_Constant) switch (this.operator) {
-              case "!":
-                return !this.expression.value;
-              case "~":
-                return ~this.expression.value;
-              case "-":
-                return -this.expression.value;
-              case "+":
-                return +this.expression.value;
-              default:
-                throw new Error(string_template("Cannot evaluate unary expression {value}", {
-                    value: this.print_to_string()
-                }));
-            }
-            var result = this.evaluate(compressor);
-            if (result !== this) {
-                return result;
-            }
-            throw new Error(string_template("Cannot evaluate constant [{file}:{line},{col}]", this.start));
-        });
-        def(AST_Statement, function(){
-            throw new Error(string_template("Cannot evaluate a statement [{file}:{line},{col}]", this.start));
-        });
-        def(AST_Lambda, function(){
-            throw def;
-        });
-        function ev(node, compressor) {
-            if (!compressor) throw new Error("Compressor must be passed");
+SourceMapGenerator.prototype._version = 3;
 
-            return node._eval(compressor);
-        };
-        def(AST_Node, function(){
-            throw def;          // not constant
-        });
-        def(AST_Constant, function(){
-            return this.getValue();
-        });
-        def(AST_Array, function(compressor){
-            if (compressor.option("unsafe")) {
-                return this.elements.map(function(element) {
-                    return ev(element, compressor);
-                });
-            }
-            throw def;
-        });
-        def(AST_Object, function(compressor){
-            if (compressor.option("unsafe")) {
-                var val = {};
-                for (var i = 0, len = this.properties.length; i < len; i++) {
-                    var prop = this.properties[i];
-                    var key = prop.key;
-                    if (key instanceof AST_Symbol) {
-                        key = key.name;
-                    } else if (key instanceof AST_Node) {
-                        key = ev(key, compressor);
-                    }
-                    if (typeof Object.prototype[key] === 'function') {
-                        throw def;
-                    }
-                    val[key] = ev(prop.value, compressor);
-                }
-                return val;
-            }
-            throw def;
-        });
-        def(AST_UnaryPrefix, function(compressor){
-            var e = this.expression;
-            switch (this.operator) {
-              case "!": return !ev(e, compressor);
-              case "typeof":
-                // Function would be evaluated to an array and so typeof would
-                // incorrectly return 'object'. Hence making is a special case.
-                if (e instanceof AST_Function) return typeof function(){};
-
-                e = ev(e, compressor);
-
-                // typeof <RegExp> returns "object" or "function" on different platforms
-                // so cannot evaluate reliably
-                if (e instanceof RegExp) throw def;
-
-                return typeof e;
-              case "void": return void ev(e, compressor);
-              case "~": return ~ev(e, compressor);
-              case "-": return -ev(e, compressor);
-              case "+": return +ev(e, compressor);
-            }
-            throw def;
-        });
-        def(AST_Binary, function(c){
-            var left = this.left, right = this.right, result;
-            switch (this.operator) {
-              case "&&"  : result = ev(left, c) &&  ev(right, c); break;
-              case "||"  : result = ev(left, c) ||  ev(right, c); break;
-              case "|"   : result = ev(left, c) |   ev(right, c); break;
-              case "&"   : result = ev(left, c) &   ev(right, c); break;
-              case "^"   : result = ev(left, c) ^   ev(right, c); break;
-              case "+"   : result = ev(left, c) +   ev(right, c); break;
-              case "*"   : result = ev(left, c) *   ev(right, c); break;
-              case "/"   : result = ev(left, c) /   ev(right, c); break;
-              case "%"   : result = ev(left, c) %   ev(right, c); break;
-              case "-"   : result = ev(left, c) -   ev(right, c); break;
-              case "<<"  : result = ev(left, c) <<  ev(right, c); break;
-              case ">>"  : result = ev(left, c) >>  ev(right, c); break;
-              case ">>>" : result = ev(left, c) >>> ev(right, c); break;
-              case "=="  : result = ev(left, c) ==  ev(right, c); break;
-              case "===" : result = ev(left, c) === ev(right, c); break;
-              case "!="  : result = ev(left, c) !=  ev(right, c); break;
-              case "!==" : result = ev(left, c) !== ev(right, c); break;
-              case "<"   : result = ev(left, c) <   ev(right, c); break;
-              case "<="  : result = ev(left, c) <=  ev(right, c); break;
-              case ">"   : result = ev(left, c) >   ev(right, c); break;
-              case ">="  : result = ev(left, c) >=  ev(right, c); break;
-              default:
-                  throw def;
-            }
-            if (isNaN(result) && c.find_parent(AST_With)) {
-                // leave original expression as is
-                throw def;
-            }
-            return result;
-        });
-        def(AST_Conditional, function(compressor){
-            return ev(this.condition, compressor)
-                ? ev(this.consequent, compressor)
-                : ev(this.alternative, compressor);
-        });
-        def(AST_SymbolRef, function(compressor){
-            if (this._evaluating) throw def;
-            this._evaluating = true;
-            try {
-                var fixed = this.fixed_value();
-                if (compressor.option("reduce_vars") && fixed) {
-                    if (compressor.option("unsafe")) {
-                        if (!HOP(fixed, "_evaluated")) {
-                            fixed._evaluated = ev(fixed, compressor);
-                        }
-                        return fixed._evaluated;
-                    }
-                    return ev(fixed, compressor);
-                }
-            } finally {
-                this._evaluating = false;
-            }
-            throw def;
-        });
-        def(AST_PropAccess, function(compressor){
-            if (compressor.option("unsafe")) {
-                var key = this.property;
-                if (key instanceof AST_Node) {
-                    key = ev(key, compressor);
-                }
-                var val = ev(this.expression, compressor);
-                if (val && HOP(val, key)) {
-                    return val[key];
-                }
-            }
-            throw def;
-        });
-    })(function(node, func){
-        node.DEFMETHOD("_eval", func);
+/**
+ * Creates a new SourceMapGenerator based on a SourceMapConsumer
+ *
+ * @param aSourceMapConsumer The SourceMap.
+ */
+SourceMapGenerator.fromSourceMap =
+  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
+    var sourceRoot = aSourceMapConsumer.sourceRoot;
+    var generator = new SourceMapGenerator({
+      file: aSourceMapConsumer.file,
+      sourceRoot: sourceRoot
     });
-
-    // method to negate an expression
-    (function(def){
-        function basic_negation(exp) {
-            return make_node(AST_UnaryPrefix, exp, {
-                operator: "!",
-                expression: exp
-            });
-        }
-        function best(orig, alt, first_in_statement) {
-            var negated = basic_negation(orig);
-            if (first_in_statement) {
-                var stat = make_node(AST_SimpleStatement, alt, {
-                    body: alt
-                });
-                return best_of_expression(negated, stat) === stat ? alt : negated;
-            }
-            return best_of_expression(negated, alt);
+    aSourceMapConsumer.eachMapping(function (mapping) {
+      var newMapping = {
+        generated: {
+          line: mapping.generatedLine,
+          column: mapping.generatedColumn
         }
-        def(AST_Node, function(){
-            return basic_negation(this);
-        });
-        def(AST_Statement, function(){
-            throw new Error("Cannot negate a statement");
-        });
-        def(AST_Function, function(){
-            return basic_negation(this);
-        });
-        def(AST_UnaryPrefix, function(){
-            if (this.operator == "!")
-                return this.expression;
-            return basic_negation(this);
-        });
-        def(AST_Seq, function(compressor){
-            var self = this.clone();
-            self.cdr = self.cdr.negate(compressor);
-            return self;
-        });
-        def(AST_Conditional, function(compressor, first_in_statement){
-            var self = this.clone();
-            self.consequent = self.consequent.negate(compressor);
-            self.alternative = self.alternative.negate(compressor);
-            return best(this, self, first_in_statement);
-        });
-        def(AST_Binary, function(compressor, first_in_statement){
-            var self = this.clone(), op = this.operator;
-            if (compressor.option("unsafe_comps")) {
-                switch (op) {
-                  case "<=" : self.operator = ">"  ; return self;
-                  case "<"  : self.operator = ">=" ; return self;
-                  case ">=" : self.operator = "<"  ; return self;
-                  case ">"  : self.operator = "<=" ; return self;
-                }
-            }
-            switch (op) {
-              case "==" : self.operator = "!="; return self;
-              case "!=" : self.operator = "=="; return self;
-              case "===": self.operator = "!=="; return self;
-              case "!==": self.operator = "==="; return self;
-              case "&&":
-                self.operator = "||";
-                self.left = self.left.negate(compressor, first_in_statement);
-                self.right = self.right.negate(compressor);
-                return best(this, self, first_in_statement);
-              case "||":
-                self.operator = "&&";
-                self.left = self.left.negate(compressor, first_in_statement);
-                self.right = self.right.negate(compressor);
-                return best(this, self, first_in_statement);
-            }
-            return basic_negation(this);
-        });
-    })(function(node, func){
-        node.DEFMETHOD("negate", function(compressor, first_in_statement){
-            return func.call(this, compressor, first_in_statement);
-        });
-    });
+      };
 
-    AST_Call.DEFMETHOD("has_pure_annotation", function(compressor) {
-        if (!compressor.option("side_effects")) return false;
-        if (this.pure !== undefined) return this.pure;
-        var pure = false;
-        var comments, last_comment;
-        if (this.start
-            && (comments = this.start.comments_before)
-            && comments.length
-            && /[@#]__PURE__/.test((last_comment = comments[comments.length - 1]).value)) {
-            pure = last_comment;
+      if (mapping.source != null) {
+        newMapping.source = mapping.source;
+        if (sourceRoot != null) {
+          newMapping.source = util.relative(sourceRoot, newMapping.source);
         }
-        return this.pure = pure;
-    });
-
-    // determine if expression has side effects
-    (function(def){
-        def(AST_Node, return_true);
-
-        def(AST_EmptyStatement, return_false);
-        def(AST_Constant, return_false);
-        def(AST_This, return_false);
 
-        def(AST_Call, function(compressor){
-            if (!this.has_pure_annotation(compressor) && compressor.pure_funcs(this)) return true;
-            for (var i = this.args.length; --i >= 0;) {
-                if (this.args[i].has_side_effects(compressor))
-                    return true;
-            }
-            return false;
-        });
+        newMapping.original = {
+          line: mapping.originalLine,
+          column: mapping.originalColumn
+        };
 
-        function any(list, compressor) {
-            for (var i = list.length; --i >= 0;)
-                if (list[i].has_side_effects(compressor))
-                    return true;
-            return false;
+        if (mapping.name != null) {
+          newMapping.name = mapping.name;
         }
+      }
 
-        def(AST_Block, function(compressor){
-            return any(this.body, compressor);
-        });
-        def(AST_Switch, function(compressor){
-            return this.expression.has_side_effects(compressor)
-                || any(this.body, compressor);
-        });
-        def(AST_Case, function(compressor){
-            return this.expression.has_side_effects(compressor)
-                || any(this.body, compressor);
-        });
-        def(AST_Try, function(compressor){
-            return any(this.body, compressor)
-                || this.bcatch && this.bcatch.has_side_effects(compressor)
-                || this.bfinally && this.bfinally.has_side_effects(compressor);
-        });
-        def(AST_If, function(compressor){
-            return this.condition.has_side_effects(compressor)
-                || this.body && this.body.has_side_effects(compressor)
-                || this.alternative && this.alternative.has_side_effects(compressor);
-        });
-        def(AST_LabeledStatement, function(compressor){
-            return this.body.has_side_effects(compressor);
-        });
-        def(AST_SimpleStatement, function(compressor){
-            return this.body.has_side_effects(compressor);
-        });
-        def(AST_Defun, return_true);
-        def(AST_Function, return_false);
-        def(AST_Binary, function(compressor){
-            return this.left.has_side_effects(compressor)
-                || this.right.has_side_effects(compressor);
-        });
-        def(AST_Assign, return_true);
-        def(AST_Conditional, function(compressor){
-            return this.condition.has_side_effects(compressor)
-                || this.consequent.has_side_effects(compressor)
-                || this.alternative.has_side_effects(compressor);
-        });
-        def(AST_Unary, function(compressor){
-            return unary_side_effects(this.operator)
-                || this.expression.has_side_effects(compressor);
-        });
-        def(AST_SymbolRef, function(compressor){
-            return this.undeclared();
-        });
-        def(AST_Object, function(compressor){
-            return any(this.properties, compressor);
-        });
-        def(AST_ObjectProperty, function(compressor){
-            return this.value.has_side_effects(compressor);
-        });
-        def(AST_Array, function(compressor){
-            return any(this.elements, compressor);
-        });
-        def(AST_Dot, function(compressor){
-            return this.expression.may_eq_null(compressor)
-                || this.expression.has_side_effects(compressor);
-        });
-        def(AST_Sub, function(compressor){
-            return this.expression.may_eq_null(compressor)
-                || this.expression.has_side_effects(compressor)
-                || this.property.has_side_effects(compressor);
-        });
-        def(AST_Seq, function(compressor){
-            return this.car.has_side_effects(compressor)
-                || this.cdr.has_side_effects(compressor);
-        });
-    })(function(node, func){
-        node.DEFMETHOD("has_side_effects", func);
+      generator.addMapping(newMapping);
     });
-
-    // tell me if a statement aborts
-    function aborts(thing) {
-        return thing && thing.aborts();
-    };
-    (function(def){
-        def(AST_Statement, return_null);
-        def(AST_Jump, return_this);
-        function block_aborts(){
-            var n = this.body.length;
-            return n > 0 && aborts(this.body[n - 1]);
-        };
-        def(AST_BlockStatement, block_aborts);
-        def(AST_SwitchBranch, block_aborts);
-        def(AST_If, function(){
-            return this.alternative && aborts(this.body) && aborts(this.alternative) && this;
-        });
-    })(function(node, func){
-        node.DEFMETHOD("aborts", func);
+    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+      if (content != null) {
+        generator.setSourceContent(sourceFile, content);
+      }
     });
+    return generator;
+  };
+
+/**
+ * Add a single mapping from original source line and column to the generated
+ * source's line and column for this source map being created. The mapping
+ * object should have the following properties:
+ *
+ *   - generated: An object with the generated line and column positions.
+ *   - original: An object with the original line and column positions.
+ *   - source: The original source file (relative to the sourceRoot).
+ *   - name: An optional original token name for this mapping.
+ */
+SourceMapGenerator.prototype.addMapping =
+  function SourceMapGenerator_addMapping(aArgs) {
+    var generated = util.getArg(aArgs, 'generated');
+    var original = util.getArg(aArgs, 'original', null);
+    var source = util.getArg(aArgs, 'source', null);
+    var name = util.getArg(aArgs, 'name', null);
 
-    /* -----[ optimizers ]----- */
+    if (!this._skipValidation) {
+      this._validateMapping(generated, original, source, name);
+    }
 
-    OPT(AST_Directive, function(self, compressor){
-        if (compressor.has_directive(self.value) !== self) {
-            return make_node(AST_EmptyStatement, self);
-        }
-        return self;
-    });
+    if (source != null) {
+      source = String(source);
+      if (!this._sources.has(source)) {
+        this._sources.add(source);
+      }
+    }
 
-    OPT(AST_Debugger, function(self, compressor){
-        if (compressor.option("drop_debugger"))
-            return make_node(AST_EmptyStatement, self);
-        return self;
-    });
+    if (name != null) {
+      name = String(name);
+      if (!this._names.has(name)) {
+        this._names.add(name);
+      }
+    }
 
-    OPT(AST_LabeledStatement, function(self, compressor){
-        if (self.body instanceof AST_Break
-            && compressor.loopcontrol_target(self.body) === self.body) {
-            return make_node(AST_EmptyStatement, self);
-        }
-        return self.label.references.length == 0 ? self.body : self;
+    this._mappings.add({
+      generatedLine: generated.line,
+      generatedColumn: generated.column,
+      originalLine: original != null && original.line,
+      originalColumn: original != null && original.column,
+      source: source,
+      name: name
     });
+  };
 
-    OPT(AST_Block, function(self, compressor){
-        self.body = tighten_body(self.body, compressor);
-        return self;
-    });
+/**
+ * Set the source content for a source file.
+ */
+SourceMapGenerator.prototype.setSourceContent =
+  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
+    var source = aSourceFile;
+    if (this._sourceRoot != null) {
+      source = util.relative(this._sourceRoot, source);
+    }
 
-    OPT(AST_BlockStatement, function(self, compressor){
-        self.body = tighten_body(self.body, compressor);
-        switch (self.body.length) {
-          case 1: return self.body[0];
-          case 0: return make_node(AST_EmptyStatement, self);
-        }
-        return self;
-    });
+    if (aSourceContent != null) {
+      // Add the source content to the _sourcesContents map.
+      // Create a new _sourcesContents map if the property is null.
+      if (!this._sourcesContents) {
+        this._sourcesContents = Object.create(null);
+      }
+      this._sourcesContents[util.toSetString(source)] = aSourceContent;
+    } else if (this._sourcesContents) {
+      // Remove the source file from the _sourcesContents map.
+      // If the _sourcesContents map is empty, set the property to null.
+      delete this._sourcesContents[util.toSetString(source)];
+      if (Object.keys(this._sourcesContents).length === 0) {
+        this._sourcesContents = null;
+      }
+    }
+  };
 
-    AST_Scope.DEFMETHOD("drop_unused", function(compressor){
-        var self = this;
-        if (compressor.has_directive("use asm")) return self;
-        var toplevel = compressor.option("toplevel");
-        if (compressor.option("unused")
-            && (!(self instanceof AST_Toplevel) || toplevel)
-            && !self.uses_eval
-            && !self.uses_with) {
-            var assign_as_unused = !/keep_assign/.test(compressor.option("unused"));
-            var drop_funcs = /funcs/.test(toplevel);
-            var drop_vars = /vars/.test(toplevel);
-            if (!(self instanceof AST_Toplevel) || toplevel == true) {
-                drop_funcs = drop_vars = true;
-            }
-            var in_use = [];
-            var in_use_ids = Object.create(null); // avoid expensive linear scans of in_use
-            if (self instanceof AST_Toplevel && compressor.top_retain) {
-                self.variables.each(function(def) {
-                    if (compressor.top_retain(def) && !(def.id in in_use_ids)) {
-                        in_use_ids[def.id] = true;
-                        in_use.push(def);
-                    }
-                });
-            }
-            var initializations = new Dictionary();
-            // pass 1: find out which symbols are directly used in
-            // this scope (not in nested scopes).
-            var scope = this;
-            var tw = new TreeWalker(function(node, descend){
-                if (node !== self) {
-                    if (node instanceof AST_Defun) {
-                        if (!drop_funcs && scope === self) {
-                            var node_def = node.name.definition();
-                            if (!(node_def.id in in_use_ids)) {
-                                in_use_ids[node_def.id] = true;
-                                in_use.push(node_def);
-                            }
-                        }
-                        initializations.add(node.name.name, node);
-                        return true; // don't go in nested scopes
-                    }
-                    if (node instanceof AST_Definitions && scope === self) {
-                        node.definitions.forEach(function(def){
-                            if (!drop_vars) {
-                                var node_def = def.name.definition();
-                                if (!(node_def.id in in_use_ids)) {
-                                    in_use_ids[node_def.id] = true;
-                                    in_use.push(node_def);
-                                }
-                            }
-                            if (def.value) {
-                                initializations.add(def.name.name, def.value);
-                                if (def.value.has_side_effects(compressor)) {
-                                    def.value.walk(tw);
-                                }
-                            }
-                        });
-                        return true;
-                    }
-                    if (assign_as_unused
-                        && node instanceof AST_Assign
-                        && node.operator == "="
-                        && node.left instanceof AST_SymbolRef
-                        && scope === self) {
-                        node.right.walk(tw);
-                        return true;
-                    }
-                    if (node instanceof AST_SymbolRef) {
-                        var node_def = node.definition();
-                        if (!(node_def.id in in_use_ids)) {
-                            in_use_ids[node_def.id] = true;
-                            in_use.push(node_def);
-                        }
-                        return true;
-                    }
-                    if (node instanceof AST_Scope) {
-                        var save_scope = scope;
-                        scope = node;
-                        descend();
-                        scope = save_scope;
-                        return true;
-                    }
-                }
-            });
-            self.walk(tw);
-            // pass 2: for every used symbol we need to walk its
-            // initialization code to figure out if it uses other
-            // symbols (that may not be in_use).
-            for (var i = 0; i < in_use.length; ++i) {
-                in_use[i].orig.forEach(function(decl){
-                    // undeclared globals will be instanceof AST_SymbolRef
-                    var init = initializations.get(decl.name);
-                    if (init) init.forEach(function(init){
-                        var tw = new TreeWalker(function(node){
-                            if (node instanceof AST_SymbolRef) {
-                                var node_def = node.definition();
-                                if (!(node_def.id in in_use_ids)) {
-                                    in_use_ids[node_def.id] = true;
-                                    in_use.push(node_def);
-                                }
-                            }
-                        });
-                        init.walk(tw);
-                    });
-                });
-            }
-            // pass 3: we should drop declarations not in_use
-            var tt = new TreeTransformer(
-                function before(node, descend, in_list) {
-                    if (node instanceof AST_Function
-                        && node.name
-                        && !compressor.option("keep_fnames")) {
-                        var def = node.name.definition();
-                        // any declarations with same name will overshadow
-                        // name of this anonymous function and can therefore
-                        // never be used anywhere
-                        if (!(def.id in in_use_ids) || def.orig.length > 1)
-                            node.name = null;
-                    }
-                    if (node instanceof AST_Lambda && !(node instanceof AST_Accessor)) {
-                        var trim = !compressor.option("keep_fargs");
-                        for (var a = node.argnames, i = a.length; --i >= 0;) {
-                            var sym = a[i];
-                            if (!(sym.definition().id in in_use_ids)) {
-                                sym.__unused = true;
-                                if (trim) {
-                                    a.pop();
-                                    compressor[sym.unreferenced() ? "warn" : "info"]("Dropping unused function argument {name} [{file}:{line},{col}]", {
-                                        name : sym.name,
-                                        file : sym.start.file,
-                                        line : sym.start.line,
-                                        col  : sym.start.col
-                                    });
-                                }
-                            }
-                            else {
-                                trim = false;
-                            }
-                        }
-                    }
-                    if (drop_funcs && node instanceof AST_Defun && node !== self) {
-                        if (!(node.name.definition().id in in_use_ids)) {
-                            compressor[node.name.unreferenced() ? "warn" : "info"]("Dropping unused function {name} [{file}:{line},{col}]", {
-                                name : node.name.name,
-                                file : node.name.start.file,
-                                line : node.name.start.line,
-                                col  : node.name.start.col
-                            });
-                            return make_node(AST_EmptyStatement, node);
-                        }
-                        return node;
-                    }
-                    if (drop_vars && node instanceof AST_Definitions && !(tt.parent() instanceof AST_ForIn)) {
-                        var def = node.definitions.filter(function(def){
-                            if (def.value) def.value = def.value.transform(tt);
-                            var sym = def.name.definition();
-                            if (sym.id in in_use_ids) return true;
-                            if (sym.orig[0] instanceof AST_SymbolCatch) {
-                                def.value = def.value && def.value.drop_side_effect_free(compressor);
-                                return true;
-                            }
-                            var w = {
-                                name : def.name.name,
-                                file : def.name.start.file,
-                                line : def.name.start.line,
-                                col  : def.name.start.col
-                            };
-                            if (def.value && (def._unused_side_effects = def.value.drop_side_effect_free(compressor))) {
-                                compressor.warn("Side effects in initialization of unused variable {name} [{file}:{line},{col}]", w);
-                                return true;
-                            }
-                            compressor[def.name.unreferenced() ? "warn" : "info"]("Dropping unused variable {name} [{file}:{line},{col}]", w);
-                            return false;
-                        });
-                        // place uninitialized names at the start
-                        def = mergeSort(def, function(a, b){
-                            if (!a.value && b.value) return -1;
-                            if (!b.value && a.value) return 1;
-                            return 0;
-                        });
-                        // for unused names whose initialization has
-                        // side effects, we can cascade the init. code
-                        // into the next one, or next statement.
-                        var side_effects = [];
-                        for (var i = 0; i < def.length;) {
-                            var x = def[i];
-                            if (x._unused_side_effects) {
-                                side_effects.push(x._unused_side_effects);
-                                def.splice(i, 1);
-                            } else {
-                                if (side_effects.length > 0) {
-                                    side_effects.push(x.value);
-                                    x.value = AST_Seq.from_array(side_effects);
-                                    side_effects = [];
-                                }
-                                ++i;
-                            }
-                        }
-                        if (side_effects.length > 0) {
-                            side_effects = make_node(AST_BlockStatement, node, {
-                                body: [ make_node(AST_SimpleStatement, node, {
-                                    body: AST_Seq.from_array(side_effects)
-                                }) ]
-                            });
-                        } else {
-                            side_effects = null;
-                        }
-                        if (def.length == 0 && !side_effects) {
-                            return make_node(AST_EmptyStatement, node);
-                        }
-                        if (def.length == 0) {
-                            return in_list ? MAP.splice(side_effects.body) : side_effects;
-                        }
-                        node.definitions = def;
-                        if (side_effects) {
-                            side_effects.body.unshift(node);
-                            return in_list ? MAP.splice(side_effects.body) : side_effects;
-                        }
-                        return node;
-                    }
-                    if (drop_vars && assign_as_unused
-                        && node instanceof AST_Assign
-                        && node.operator == "="
-                        && node.left instanceof AST_SymbolRef) {
-                        var def = node.left.definition();
-                        if (!(def.id in in_use_ids)
-                            && self.variables.get(def.name) === def) {
-                            return maintain_this_binding(tt.parent(), node, node.right.transform(tt));
-                        }
-                    }
-                    if (node instanceof AST_For) {
-                        descend(node, this);
-
-                        if (node.init instanceof AST_BlockStatement) {
-                            // certain combination of unused name + side effect leads to:
-                            //    https://github.com/mishoo/UglifyJS2/issues/44
-                            // that's an invalid AST.
-                            // We fix it at this stage by moving the `var` outside the `for`.
-
-                            var body = node.init.body.slice(0, -1);
-                            node.init = node.init.body.slice(-1)[0].body;
-                            body.push(node);
-
-                            return in_list ? MAP.splice(body) : make_node(AST_BlockStatement, node, {
-                                body: body
-                            });
-                        } else if (is_empty(node.init)) {
-                            node.init = null;
-                            return node;
-                        }
-                    }
-                    if (node instanceof AST_Scope && node !== self)
-                        return node;
-                }
-            );
-            self.transform(tt);
-        }
-    });
+/**
+ * Applies the mappings of a sub-source-map for a specific source file to the
+ * source map being generated. Each mapping to the supplied source file is
+ * rewritten using the supplied source map. Note: The resolution for the
+ * resulting mappings is the minimium of this map and the supplied map.
+ *
+ * @param aSourceMapConsumer The source map to be applied.
+ * @param aSourceFile Optional. The filename of the source file.
+ *        If omitted, SourceMapConsumer's file property will be used.
+ * @param aSourceMapPath Optional. The dirname of the path to the source map
+ *        to be applied. If relative, it is relative to the SourceMapConsumer.
+ *        This parameter is needed when the two source maps aren't in the same
+ *        directory, and the source map to be applied contains relative source
+ *        paths. If so, those relative source paths need to be rewritten
+ *        relative to the SourceMapGenerator.
+ */
+SourceMapGenerator.prototype.applySourceMap =
+  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
+    var sourceFile = aSourceFile;
+    // If aSourceFile is omitted, we will use the file property of the SourceMap
+    if (aSourceFile == null) {
+      if (aSourceMapConsumer.file == null) {
+        throw new Error(
+          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
+          'or the source map\'s "file" property. Both were omitted.'
+        );
+      }
+      sourceFile = aSourceMapConsumer.file;
+    }
+    var sourceRoot = this._sourceRoot;
+    // Make "sourceFile" relative if an absolute Url is passed.
+    if (sourceRoot != null) {
+      sourceFile = util.relative(sourceRoot, sourceFile);
+    }
+    // Applying the SourceMap can add and remove items from the sources and
+    // the names array.
+    var newSources = new ArraySet();
+    var newNames = new ArraySet();
 
-    AST_Scope.DEFMETHOD("hoist_declarations", function(compressor){
-        var self = this;
-        if (compressor.has_directive("use asm")) return self;
-        var hoist_funs = compressor.option("hoist_funs");
-        var hoist_vars = compressor.option("hoist_vars");
-        if (hoist_funs || hoist_vars) {
-            var dirs = [];
-            var hoisted = [];
-            var vars = new Dictionary(), vars_found = 0, var_decl = 0;
-            // let's count var_decl first, we seem to waste a lot of
-            // space if we hoist `var` when there's only one.
-            self.walk(new TreeWalker(function(node){
-                if (node instanceof AST_Scope && node !== self)
-                    return true;
-                if (node instanceof AST_Var) {
-                    ++var_decl;
-                    return true;
-                }
-            }));
-            hoist_vars = hoist_vars && var_decl > 1;
-            var tt = new TreeTransformer(
-                function before(node) {
-                    if (node !== self) {
-                        if (node instanceof AST_Directive) {
-                            dirs.push(node);
-                            return make_node(AST_EmptyStatement, node);
-                        }
-                        if (node instanceof AST_Defun && hoist_funs) {
-                            hoisted.push(node);
-                            return make_node(AST_EmptyStatement, node);
-                        }
-                        if (node instanceof AST_Var && hoist_vars) {
-                            node.definitions.forEach(function(def){
-                                vars.set(def.name.name, def);
-                                ++vars_found;
-                            });
-                            var seq = node.to_assignments(compressor);
-                            var p = tt.parent();
-                            if (p instanceof AST_ForIn && p.init === node) {
-                                if (seq == null) {
-                                    var def = node.definitions[0].name;
-                                    return make_node(AST_SymbolRef, def, def);
-                                }
-                                return seq;
-                            }
-                            if (p instanceof AST_For && p.init === node) {
-                                return seq;
-                            }
-                            if (!seq) return make_node(AST_EmptyStatement, node);
-                            return make_node(AST_SimpleStatement, node, {
-                                body: seq
-                            });
-                        }
-                        if (node instanceof AST_Scope)
-                            return node; // to avoid descending in nested scopes
-                    }
-                }
-            );
-            self = self.transform(tt);
-            if (vars_found > 0) {
-                // collect only vars which don't show up in self's arguments list
-                var defs = [];
-                vars.each(function(def, name){
-                    if (self instanceof AST_Lambda
-                        && find_if(function(x){ return x.name == def.name.name },
-                                   self.argnames)) {
-                        vars.del(name);
-                    } else {
-                        def = def.clone();
-                        def.value = null;
-                        defs.push(def);
-                        vars.set(name, def);
-                    }
-                });
-                if (defs.length > 0) {
-                    // try to merge in assignments
-                    for (var i = 0; i < self.body.length;) {
-                        if (self.body[i] instanceof AST_SimpleStatement) {
-                            var expr = self.body[i].body, sym, assign;
-                            if (expr instanceof AST_Assign
-                                && expr.operator == "="
-                                && (sym = expr.left) instanceof AST_Symbol
-                                && vars.has(sym.name))
-                            {
-                                var def = vars.get(sym.name);
-                                if (def.value) break;
-                                def.value = expr.right;
-                                remove(defs, def);
-                                defs.push(def);
-                                self.body.splice(i, 1);
-                                continue;
-                            }
-                            if (expr instanceof AST_Seq
-                                && (assign = expr.car) instanceof AST_Assign
-                                && assign.operator == "="
-                                && (sym = assign.left) instanceof AST_Symbol
-                                && vars.has(sym.name))
-                            {
-                                var def = vars.get(sym.name);
-                                if (def.value) break;
-                                def.value = assign.right;
-                                remove(defs, def);
-                                defs.push(def);
-                                self.body[i].body = expr.cdr;
-                                continue;
-                            }
-                        }
-                        if (self.body[i] instanceof AST_EmptyStatement) {
-                            self.body.splice(i, 1);
-                            continue;
-                        }
-                        if (self.body[i] instanceof AST_BlockStatement) {
-                            var tmp = [ i, 1 ].concat(self.body[i].body);
-                            self.body.splice.apply(self.body, tmp);
-                            continue;
-                        }
-                        break;
-                    }
-                    defs = make_node(AST_Var, self, {
-                        definitions: defs
-                    });
-                    hoisted.push(defs);
-                };
-            }
-            self.body = dirs.concat(hoisted, self.body);
+    // Find mappings for the "sourceFile"
+    this._mappings.unsortedForEach(function (mapping) {
+      if (mapping.source === sourceFile && mapping.originalLine != null) {
+        // Check if it can be mapped by the source map, then update the mapping.
+        var original = aSourceMapConsumer.originalPositionFor({
+          line: mapping.originalLine,
+          column: mapping.originalColumn
+        });
+        if (original.source != null) {
+          // Copy mapping
+          mapping.source = original.source;
+          if (aSourceMapPath != null) {
+            mapping.source = util.join(aSourceMapPath, mapping.source)
+          }
+          if (sourceRoot != null) {
+            mapping.source = util.relative(sourceRoot, mapping.source);
+          }
+          mapping.originalLine = original.line;
+          mapping.originalColumn = original.column;
+          if (original.name != null) {
+            mapping.name = original.name;
+          }
         }
-        return self;
-    });
+      }
 
-    // drop_side_effect_free()
-    // remove side-effect-free parts which only affects return value
-    (function(def){
-        // Drop side-effect-free elements from an array of expressions.
-        // Returns an array of expressions with side-effects or null
-        // if all elements were dropped. Note: original array may be
-        // returned if nothing changed.
-        function trim(nodes, compressor, first_in_statement) {
-            var ret = [], changed = false;
-            for (var i = 0, len = nodes.length; i < len; i++) {
-                var node = nodes[i].drop_side_effect_free(compressor, first_in_statement);
-                changed |= node !== nodes[i];
-                if (node) {
-                    ret.push(node);
-                    first_in_statement = false;
-                }
-            }
-            return changed ? ret.length ? ret : null : nodes;
-        }
+      var source = mapping.source;
+      if (source != null && !newSources.has(source)) {
+        newSources.add(source);
+      }
 
-        def(AST_Node, return_this);
-        def(AST_Constant, return_null);
-        def(AST_This, return_null);
-        def(AST_Call, function(compressor, first_in_statement){
-            if (!this.has_pure_annotation(compressor) && compressor.pure_funcs(this)) {
-                if (this.expression instanceof AST_Function
-                    && (!this.expression.name || !this.expression.name.definition().references.length)) {
-                    var node = this.clone();
-                    node.expression = node.expression.process_expression(false, compressor);
-                    return node;
-                }
-                return this;
-            }
-            if (this.pure) {
-                compressor.warn("Dropping __PURE__ call [{file}:{line},{col}]", this.start);
-                this.pure.value = this.pure.value.replace(/[@#]__PURE__/g, ' ');
-            }
-            var args = trim(this.args, compressor, first_in_statement);
-            return args && AST_Seq.from_array(args);
-        });
-        def(AST_Function, return_null);
-        def(AST_Binary, function(compressor, first_in_statement){
-            var right = this.right.drop_side_effect_free(compressor);
-            if (!right) return this.left.drop_side_effect_free(compressor, first_in_statement);
-            switch (this.operator) {
-              case "&&":
-              case "||":
-                if (right === this.right) return this;
-                var node = this.clone();
-                node.right = right;
-                return node;
-              default:
-                var left = this.left.drop_side_effect_free(compressor, first_in_statement);
-                if (!left) return this.right.drop_side_effect_free(compressor, first_in_statement);
-                return make_node(AST_Seq, this, {
-                    car: left,
-                    cdr: right
-                });
-            }
-        });
-        def(AST_Assign, return_this);
-        def(AST_Conditional, function(compressor){
-            var consequent = this.consequent.drop_side_effect_free(compressor);
-            var alternative = this.alternative.drop_side_effect_free(compressor);
-            if (consequent === this.consequent && alternative === this.alternative) return this;
-            if (!consequent) return alternative ? make_node(AST_Binary, this, {
-                operator: "||",
-                left: this.condition,
-                right: alternative
-            }) : this.condition.drop_side_effect_free(compressor);
-            if (!alternative) return make_node(AST_Binary, this, {
-                operator: "&&",
-                left: this.condition,
-                right: consequent
-            });
-            var node = this.clone();
-            node.consequent = consequent;
-            node.alternative = alternative;
-            return node;
-        });
-        def(AST_Unary, function(compressor, first_in_statement){
-            if (unary_side_effects(this.operator)) return this;
-            if (this.operator == "typeof" && this.expression instanceof AST_SymbolRef) return null;
-            var expression = this.expression.drop_side_effect_free(compressor, first_in_statement);
-            if (first_in_statement
-                && this instanceof AST_UnaryPrefix
-                && is_iife_call(expression)) {
-                if (expression === this.expression && this.operator.length === 1) return this;
-                return make_node(AST_UnaryPrefix, this, {
-                    operator: this.operator.length === 1 ? this.operator : "!",
-                    expression: expression
-                });
-            }
-            return expression;
-        });
-        def(AST_SymbolRef, function() {
-            return this.undeclared() ? this : null;
-        });
-        def(AST_Object, function(compressor, first_in_statement){
-            var values = trim(this.properties, compressor, first_in_statement);
-            return values && AST_Seq.from_array(values);
-        });
-        def(AST_ObjectProperty, function(compressor, first_in_statement){
-            return this.value.drop_side_effect_free(compressor, first_in_statement);
-        });
-        def(AST_Array, function(compressor, first_in_statement){
-            var values = trim(this.elements, compressor, first_in_statement);
-            return values && AST_Seq.from_array(values);
-        });
-        def(AST_Dot, function(compressor, first_in_statement){
-            if (this.expression.may_eq_null(compressor)) return this;
-            return this.expression.drop_side_effect_free(compressor, first_in_statement);
-        });
-        def(AST_Sub, function(compressor, first_in_statement){
-            if (this.expression.may_eq_null(compressor)) return this;
-            var expression = this.expression.drop_side_effect_free(compressor, first_in_statement);
-            if (!expression) return this.property.drop_side_effect_free(compressor, first_in_statement);
-            var property = this.property.drop_side_effect_free(compressor);
-            if (!property) return expression;
-            return make_node(AST_Seq, this, {
-                car: expression,
-                cdr: property
-            });
-        });
-        def(AST_Seq, function(compressor){
-            var cdr = this.cdr.drop_side_effect_free(compressor);
-            if (cdr === this.cdr) return this;
-            if (!cdr) return this.car;
-            return make_node(AST_Seq, this, {
-                car: this.car,
-                cdr: cdr
-            });
-        });
-    })(function(node, func){
-        node.DEFMETHOD("drop_side_effect_free", func);
-    });
+      var name = mapping.name;
+      if (name != null && !newNames.has(name)) {
+        newNames.add(name);
+      }
 
-    OPT(AST_SimpleStatement, function(self, compressor){
-        if (compressor.option("side_effects")) {
-            var body = self.body;
-            var node = body.drop_side_effect_free(compressor, true);
-            if (!node) {
-                compressor.warn("Dropping side-effect-free statement [{file}:{line},{col}]", self.start);
-                return make_node(AST_EmptyStatement, self);
-            }
-            if (node !== body) {
-                return make_node(AST_SimpleStatement, self, { body: node });
-            }
-        }
-        return self;
-    });
+    }, this);
+    this._sources = newSources;
+    this._names = newNames;
 
-    OPT(AST_DWLoop, function(self, compressor){
-        if (!compressor.option("loops")) return self;
-        var cond = self.condition.evaluate(compressor);
-        if (cond !== self.condition) {
-            if (cond) {
-                return make_node(AST_For, self, {
-                    body: self.body
-                });
-            }
-            if (compressor.option("dead_code") && self instanceof AST_While) {
-                var a = [];
-                extract_declarations_from_unreachable_code(compressor, self.body, a);
-                return make_node(AST_BlockStatement, self, { body: a });
-            }
-            if (self instanceof AST_Do) {
-                var has_loop_control = false;
-                var tw = new TreeWalker(function(node) {
-                    if (node instanceof AST_Scope || has_loop_control) return true;
-                    if (node instanceof AST_LoopControl && tw.loopcontrol_target(node) === self)
-                        return has_loop_control = true;
-                });
-                self.walk(tw);
-                if (!has_loop_control) return self.body;
-            }
+    // Copy sourcesContents of applied map.
+    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+      if (content != null) {
+        if (aSourceMapPath != null) {
+          sourceFile = util.join(aSourceMapPath, sourceFile);
         }
-        if (self instanceof AST_While) {
-            return make_node(AST_For, self, self).optimize(compressor);
+        if (sourceRoot != null) {
+          sourceFile = util.relative(sourceRoot, sourceFile);
         }
-        return self;
-    });
+        this.setSourceContent(sourceFile, content);
+      }
+    }, this);
+  };
 
-    function if_break_in_loop(self, compressor) {
-        function drop_it(rest) {
-            rest = as_statement_array(rest);
-            if (self.body instanceof AST_BlockStatement) {
-                self.body = self.body.clone();
-                self.body.body = rest.concat(self.body.body.slice(1));
-                self.body = self.body.transform(compressor);
-            } else {
-                self.body = make_node(AST_BlockStatement, self.body, {
-                    body: rest
-                }).transform(compressor);
-            }
-            if_break_in_loop(self, compressor);
-        }
-        var first = self.body instanceof AST_BlockStatement ? self.body.body[0] : self.body;
-        if (first instanceof AST_If) {
-            if (first.body instanceof AST_Break
-                && compressor.loopcontrol_target(first.body) === compressor.self()) {
-                if (self.condition) {
-                    self.condition = make_node(AST_Binary, self.condition, {
-                        left: self.condition,
-                        operator: "&&",
-                        right: first.condition.negate(compressor),
-                    });
-                } else {
-                    self.condition = first.condition.negate(compressor);
-                }
-                drop_it(first.alternative);
-            }
-            else if (first.alternative instanceof AST_Break
-                     && compressor.loopcontrol_target(first.alternative) === compressor.self()) {
-                if (self.condition) {
-                    self.condition = make_node(AST_Binary, self.condition, {
-                        left: self.condition,
-                        operator: "&&",
-                        right: first.condition,
-                    });
-                } else {
-                    self.condition = first.condition;
-                }
-                drop_it(first.body);
-            }
-        }
-    };
+/**
+ * A mapping can have one of the three levels of data:
+ *
+ *   1. Just the generated position.
+ *   2. The Generated position, original position, and original source.
+ *   3. Generated and original position, original source, as well as a name
+ *      token.
+ *
+ * To maintain consistency, we validate that any new mapping being added falls
+ * in to one of these categories.
+ */
+SourceMapGenerator.prototype._validateMapping =
+  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
+                                              aName) {
+    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+        && aGenerated.line > 0 && aGenerated.column >= 0
+        && !aOriginal && !aSource && !aName) {
+      // Case 1.
+      return;
+    }
+    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+             && aOriginal && 'line' in aOriginal && 'column' in aOriginal
+             && aGenerated.line > 0 && aGenerated.column >= 0
+             && aOriginal.line > 0 && aOriginal.column >= 0
+             && aSource) {
+      // Cases 2 and 3.
+      return;
+    }
+    else {
+      throw new Error('Invalid mapping: ' + JSON.stringify({
+        generated: aGenerated,
+        source: aSource,
+        original: aOriginal,
+        name: aName
+      }));
+    }
+  };
 
-    OPT(AST_For, function(self, compressor){
-        if (!compressor.option("loops")) return self;
-        if (self.condition) {
-            var cond = self.condition.evaluate(compressor);
-            if (compressor.option("dead_code") && !cond) {
-                var a = [];
-                if (self.init instanceof AST_Statement) {
-                    a.push(self.init);
-                }
-                else if (self.init) {
-                    a.push(make_node(AST_SimpleStatement, self.init, {
-                        body: self.init
-                    }));
-                }
-                extract_declarations_from_unreachable_code(compressor, self.body, a);
-                return make_node(AST_BlockStatement, self, { body: a });
-            }
-            if (cond !== self.condition) {
-                cond = make_node_from_constant(cond, self.condition).transform(compressor);
-                self.condition = best_of_expression(cond, self.condition);
-            }
-        }
-        if_break_in_loop(self, compressor);
-        return self;
-    });
+/**
+ * Serialize the accumulated mappings in to the stream of base 64 VLQs
+ * specified by the source map format.
+ */
+SourceMapGenerator.prototype._serializeMappings =
+  function SourceMapGenerator_serializeMappings() {
+    var previousGeneratedColumn = 0;
+    var previousGeneratedLine = 1;
+    var previousOriginalColumn = 0;
+    var previousOriginalLine = 0;
+    var previousName = 0;
+    var previousSource = 0;
+    var result = '';
+    var next;
+    var mapping;
+    var nameIdx;
+    var sourceIdx;
 
-    OPT(AST_If, function(self, compressor){
-        if (is_empty(self.alternative)) self.alternative = null;
-
-        if (!compressor.option("conditionals")) return self;
-        // if condition can be statically determined, warn and drop
-        // one of the blocks.  note, statically determined implies
-        // “has no side effects”; also it doesn't work for cases like
-        // `x && true`, though it probably should.
-        var cond = self.condition.evaluate(compressor);
-        if (cond !== self.condition) {
-            if (cond) {
-                compressor.warn("Condition always true [{file}:{line},{col}]", self.condition.start);
-                if (compressor.option("dead_code")) {
-                    var a = [];
-                    if (self.alternative) {
-                        extract_declarations_from_unreachable_code(compressor, self.alternative, a);
-                    }
-                    a.push(self.body);
-                    return make_node(AST_BlockStatement, self, { body: a }).optimize(compressor);
-                }
-            } else {
-                compressor.warn("Condition always false [{file}:{line},{col}]", self.condition.start);
-                if (compressor.option("dead_code")) {
-                    var a = [];
-                    extract_declarations_from_unreachable_code(compressor, self.body, a);
-                    if (self.alternative) a.push(self.alternative);
-                    return make_node(AST_BlockStatement, self, { body: a }).optimize(compressor);
-                }
-            }
-            cond = make_node_from_constant(cond, self.condition).transform(compressor);
-            self.condition = best_of_expression(cond, self.condition);
-        }
-        var negated = self.condition.negate(compressor);
-        var self_condition_length = self.condition.print_to_string().length;
-        var negated_length = negated.print_to_string().length;
-        var negated_is_best = negated_length < self_condition_length;
-        if (self.alternative && negated_is_best) {
-            negated_is_best = false; // because we already do the switch here.
-            // no need to swap values of self_condition_length and negated_length
-            // here because they are only used in an equality comparison later on.
-            self.condition = negated;
-            var tmp = self.body;
-            self.body = self.alternative || make_node(AST_EmptyStatement, self);
-            self.alternative = tmp;
-        }
-        if (is_empty(self.body) && is_empty(self.alternative)) {
-            return make_node(AST_SimpleStatement, self.condition, {
-                body: self.condition.clone()
-            }).optimize(compressor);
-        }
-        if (self.body instanceof AST_SimpleStatement
-            && self.alternative instanceof AST_SimpleStatement) {
-            return make_node(AST_SimpleStatement, self, {
-                body: make_node(AST_Conditional, self, {
-                    condition   : self.condition,
-                    consequent  : self.body.body,
-                    alternative : self.alternative.body
-                })
-            }).optimize(compressor);
-        }
-        if (is_empty(self.alternative) && self.body instanceof AST_SimpleStatement) {
-            if (self_condition_length === negated_length && !negated_is_best
-                && self.condition instanceof AST_Binary && self.condition.operator == "||") {
-                // although the code length of self.condition and negated are the same,
-                // negated does not require additional surrounding parentheses.
-                // see https://github.com/mishoo/UglifyJS2/issues/979
-                negated_is_best = true;
-            }
-            if (negated_is_best) return make_node(AST_SimpleStatement, self, {
-                body: make_node(AST_Binary, self, {
-                    operator : "||",
-                    left     : negated,
-                    right    : self.body.body
-                })
-            }).optimize(compressor);
-            return make_node(AST_SimpleStatement, self, {
-                body: make_node(AST_Binary, self, {
-                    operator : "&&",
-                    left     : self.condition,
-                    right    : self.body.body
-                })
-            }).optimize(compressor);
-        }
-        if (self.body instanceof AST_EmptyStatement
-            && self.alternative instanceof AST_SimpleStatement) {
-            return make_node(AST_SimpleStatement, self, {
-                body: make_node(AST_Binary, self, {
-                    operator : "||",
-                    left     : self.condition,
-                    right    : self.alternative.body
-                })
-            }).optimize(compressor);
-        }
-        if (self.body instanceof AST_Exit
-            && self.alternative instanceof AST_Exit
-            && self.body.TYPE == self.alternative.TYPE) {
-            return make_node(self.body.CTOR, self, {
-                value: make_node(AST_Conditional, self, {
-                    condition   : self.condition,
-                    consequent  : self.body.value || make_node(AST_Undefined, self.body),
-                    alternative : self.alternative.value || make_node(AST_Undefined, self.alternative)
-                }).transform(compressor)
-            }).optimize(compressor);
-        }
-        if (self.body instanceof AST_If
-            && !self.body.alternative
-            && !self.alternative) {
-            self = make_node(AST_If, self, {
-                condition: make_node(AST_Binary, self.condition, {
-                    operator: "&&",
-                    left: self.condition,
-                    right: self.body.condition
-                }),
-                body: self.body.body,
-                alternative: null
-            });
-        }
-        if (aborts(self.body)) {
-            if (self.alternative) {
-                var alt = self.alternative;
-                self.alternative = null;
-                return make_node(AST_BlockStatement, self, {
-                    body: [ self, alt ]
-                }).optimize(compressor);
-            }
-        }
-        if (aborts(self.alternative)) {
-            var body = self.body;
-            self.body = self.alternative;
-            self.condition = negated_is_best ? negated : self.condition.negate(compressor);
-            self.alternative = null;
-            return make_node(AST_BlockStatement, self, {
-                body: [ self, body ]
-            }).optimize(compressor);
-        }
-        return self;
-    });
+    var mappings = this._mappings.toArray();
+    for (var i = 0, len = mappings.length; i < len; i++) {
+      mapping = mappings[i];
+      next = ''
 
-    OPT(AST_Switch, function(self, compressor){
-        if (!compressor.option("switches")) return self;
-        var branch;
-        var value = self.expression.evaluate(compressor);
-        if (value !== self.expression) {
-            var expression = make_node_from_constant(value, self.expression).transform(compressor);
-            self.expression = best_of_expression(expression, self.expression);
-        }
-        if (!compressor.option("dead_code")) return self;
-        var decl = [];
-        var body = [];
-        var default_branch;
-        var exact_match;
-        for (var i = 0, len = self.body.length; i < len && !exact_match; i++) {
-            branch = self.body[i];
-            if (branch instanceof AST_Default) {
-                if (!default_branch) {
-                    default_branch = branch;
-                } else {
-                    eliminate_branch(branch, body[body.length - 1]);
-                }
-            } else if (value !== self.expression) {
-                var exp = branch.expression.evaluate(compressor);
-                if (exp === value) {
-                    exact_match = branch;
-                    if (default_branch) {
-                        var default_index = body.indexOf(default_branch);
-                        body.splice(default_index, 1);
-                        eliminate_branch(default_branch, body[default_index - 1]);
-                        default_branch = null;
-                    }
-                } else if (exp !== branch.expression) {
-                    eliminate_branch(branch, body[body.length - 1]);
-                    continue;
-                }
-            }
-            if (aborts(branch)) {
-                var prev = body[body.length - 1];
-                if (aborts(prev) && prev.body.length == branch.body.length
-                    && make_node(AST_BlockStatement, prev, prev).equivalent_to(make_node(AST_BlockStatement, branch, branch))) {
-                    prev.body = [];
-                }
-            }
-            body.push(branch);
-        }
-        while (i < len) eliminate_branch(self.body[i++], body[body.length - 1]);
-        if (body.length > 0) {
-            body[0].body = decl.concat(body[0].body);
-        }
-        self.body = body;
-        while (branch = body[body.length - 1]) {
-            var stat = branch.body[branch.body.length - 1];
-            if (stat instanceof AST_Break && compressor.loopcontrol_target(stat) === self)
-                branch.body.pop();
-            if (branch.body.length || branch instanceof AST_Case
-                && (default_branch || branch.expression.has_side_effects(compressor))) break;
-            if (body.pop() === default_branch) default_branch = null;
-        }
-        if (body.length == 0) {
-            return make_node(AST_BlockStatement, self, {
-                body: decl.concat(make_node(AST_SimpleStatement, self.expression, {
-                    body: self.expression
-                }))
-            }).optimize(compressor);
+      if (mapping.generatedLine !== previousGeneratedLine) {
+        previousGeneratedColumn = 0;
+        while (mapping.generatedLine !== previousGeneratedLine) {
+          next += ';';
+          previousGeneratedLine++;
         }
-        if (body.length == 1 && (body[0] === exact_match || body[0] === default_branch)) {
-            var has_break = false;
-            var tw = new TreeWalker(function(node) {
-                if (has_break
-                    || node instanceof AST_Lambda
-                    || node instanceof AST_SimpleStatement) return true;
-                if (node instanceof AST_Break && tw.loopcontrol_target(node) === self)
-                    has_break = true;
-            });
-            self.walk(tw);
-            if (!has_break) {
-                body = body[0].body.slice();
-                body.unshift(make_node(AST_SimpleStatement, self.expression, {
-                    body: self.expression
-                }));
-                return make_node(AST_BlockStatement, self, {
-                    body: body
-                }).optimize(compressor);
-            }
+      }
+      else {
+        if (i > 0) {
+          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
+            continue;
+          }
+          next += ',';
         }
-        return self;
+      }
 
-        function eliminate_branch(branch, prev) {
-            if (prev && !aborts(prev)) {
-                prev.body = prev.body.concat(branch.body);
-            } else {
-                extract_declarations_from_unreachable_code(compressor, branch, decl);
-            }
-        }
-    });
+      next += base64VLQ.encode(mapping.generatedColumn
+                                 - previousGeneratedColumn);
+      previousGeneratedColumn = mapping.generatedColumn;
+
+      if (mapping.source != null) {
+        sourceIdx = this._sources.indexOf(mapping.source);
+        next += base64VLQ.encode(sourceIdx - previousSource);
+        previousSource = sourceIdx;
+
+        // lines are stored 0-based in SourceMap spec version 3
+        next += base64VLQ.encode(mapping.originalLine - 1
+                                   - previousOriginalLine);
+        previousOriginalLine = mapping.originalLine - 1;
+
+        next += base64VLQ.encode(mapping.originalColumn
+                                   - previousOriginalColumn);
+        previousOriginalColumn = mapping.originalColumn;
 
-    OPT(AST_Try, function(self, compressor){
-        self.body = tighten_body(self.body, compressor);
-        if (self.bcatch && self.bfinally && all(self.bfinally.body, is_empty)) self.bfinally = null;
-        if (all(self.body, is_empty)) {
-            var body = [];
-            if (self.bcatch) extract_declarations_from_unreachable_code(compressor, self.bcatch, body);
-            if (self.bfinally) body = body.concat(self.bfinally.body);
-            return body.length > 0 ? make_node(AST_BlockStatement, self, {
-                body: body
-            }).optimize(compressor) : make_node(AST_EmptyStatement, self);
+        if (mapping.name != null) {
+          nameIdx = this._names.indexOf(mapping.name);
+          next += base64VLQ.encode(nameIdx - previousName);
+          previousName = nameIdx;
         }
-        return self;
-    });
+      }
 
-    AST_Definitions.DEFMETHOD("remove_initializers", function(){
-        this.definitions.forEach(function(def){ def.value = null });
-    });
+      result += next;
+    }
 
-    AST_Definitions.DEFMETHOD("to_assignments", function(compressor){
-        var reduce_vars = compressor.option("reduce_vars");
-        var assignments = this.definitions.reduce(function(a, def){
-            if (def.value) {
-                var name = make_node(AST_SymbolRef, def.name, def.name);
-                a.push(make_node(AST_Assign, def, {
-                    operator : "=",
-                    left     : name,
-                    right    : def.value
-                }));
-                if (reduce_vars) name.definition().fixed = false;
-            }
-            return a;
-        }, []);
-        if (assignments.length == 0) return null;
-        return AST_Seq.from_array(assignments);
-    });
+    return result;
+  };
 
-    OPT(AST_Definitions, function(self, compressor){
-        if (self.definitions.length == 0)
-            return make_node(AST_EmptyStatement, self);
-        return self;
-    });
+SourceMapGenerator.prototype._generateSourcesContent =
+  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
+    return aSources.map(function (source) {
+      if (!this._sourcesContents) {
+        return null;
+      }
+      if (aSourceRoot != null) {
+        source = util.relative(aSourceRoot, source);
+      }
+      var key = util.toSetString(source);
+      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
+        ? this._sourcesContents[key]
+        : null;
+    }, this);
+  };
 
-    OPT(AST_Call, function(self, compressor){
-        var exp = self.expression;
-        if (compressor.option("reduce_vars")
-            && exp instanceof AST_SymbolRef) {
-            var def = exp.definition();
-            var fixed = exp.fixed_value();
-            if (fixed instanceof AST_Defun) {
-                def.fixed = fixed = make_node(AST_Function, fixed, fixed).clone(true);
-            }
-            if (fixed instanceof AST_Function) {
-                exp = fixed;
-                if (compressor.option("unused")
-                    && def.references.length == 1
-                    && !(def.scope.uses_arguments
-                        && def.orig[0] instanceof AST_SymbolFunarg)
-                    && !def.scope.uses_eval
-                    && compressor.find_parent(AST_Scope) === def.scope) {
-                    self.expression = exp;
-                }
-            }
-        }
-        if (compressor.option("unused")
-            && exp instanceof AST_Function
-            && !exp.uses_arguments
-            && !exp.uses_eval) {
-            var pos = 0, last = 0;
-            for (var i = 0, len = self.args.length; i < len; i++) {
-                var trim = i >= exp.argnames.length;
-                if (trim || exp.argnames[i].__unused) {
-                    var node = self.args[i].drop_side_effect_free(compressor);
-                    if (node) {
-                        self.args[pos++] = node;
-                    } else if (!trim) {
-                        self.args[pos++] = make_node(AST_Number, self.args[i], {
-                            value: 0
-                        });
-                        continue;
-                    }
-                } else {
-                    self.args[pos++] = self.args[i];
-                }
-                last = pos;
-            }
-            self.args.length = last;
-        }
-        if (compressor.option("unsafe")) {
-            if (exp instanceof AST_SymbolRef && exp.undeclared()) {
-                switch (exp.name) {
-                  case "Array":
-                    if (self.args.length != 1) {
-                        return make_node(AST_Array, self, {
-                            elements: self.args
-                        }).optimize(compressor);
-                    }
-                    break;
-                  case "Object":
-                    if (self.args.length == 0) {
-                        return make_node(AST_Object, self, {
-                            properties: []
-                        });
-                    }
-                    break;
-                  case "String":
-                    if (self.args.length == 0) return make_node(AST_String, self, {
-                        value: ""
-                    });
-                    if (self.args.length <= 1) return make_node(AST_Binary, self, {
-                        left: self.args[0],
-                        operator: "+",
-                        right: make_node(AST_String, self, { value: "" })
-                    }).optimize(compressor);
-                    break;
-                  case "Number":
-                    if (self.args.length == 0) return make_node(AST_Number, self, {
-                        value: 0
-                    });
-                    if (self.args.length == 1) return make_node(AST_UnaryPrefix, self, {
-                        expression: self.args[0],
-                        operator: "+"
-                    }).optimize(compressor);
-                  case "Boolean":
-                    if (self.args.length == 0) return make_node(AST_False, self);
-                    if (self.args.length == 1) return make_node(AST_UnaryPrefix, self, {
-                        expression: make_node(AST_UnaryPrefix, self, {
-                            expression: self.args[0],
-                            operator: "!"
-                        }),
-                        operator: "!"
-                    }).optimize(compressor);
-                    break;
-                  case "Function":
-                    // new Function() => function(){}
-                    if (self.args.length == 0) return make_node(AST_Function, self, {
-                        argnames: [],
-                        body: []
-                    });
-                    if (all(self.args, function(x){ return x instanceof AST_String })) {
-                        // quite a corner-case, but we can handle it:
-                        //   https://github.com/mishoo/UglifyJS2/issues/203
-                        // if the code argument is a constant, then we can minify it.
-                        try {
-                            var code = "(function(" + self.args.slice(0, -1).map(function(arg){
-                                return arg.value;
-                            }).join(",") + "){" + self.args[self.args.length - 1].value + "})()";
-                            var ast = parse(code);
-                            ast.figure_out_scope({ screw_ie8: compressor.option("screw_ie8") });
-                            var comp = new Compressor(compressor.options);
-                            ast = ast.transform(comp);
-                            ast.figure_out_scope({ screw_ie8: compressor.option("screw_ie8") });
-                            ast.mangle_names();
-                            var fun;
-                            try {
-                                ast.walk(new TreeWalker(function(node){
-                                    if (node instanceof AST_Lambda) {
-                                        fun = node;
-                                        throw ast;
-                                    }
-                                }));
-                            } catch(ex) {
-                                if (ex !== ast) throw ex;
-                            };
-                            if (!fun) return self;
-                            var args = fun.argnames.map(function(arg, i){
-                                return make_node(AST_String, self.args[i], {
-                                    value: arg.print_to_string()
-                                });
-                            });
-                            var code = OutputStream();
-                            AST_BlockStatement.prototype._codegen.call(fun, fun, code);
-                            code = code.toString().replace(/^\{|\}$/g, "");
-                            args.push(make_node(AST_String, self.args[self.args.length - 1], {
-                                value: code
-                            }));
-                            self.args = args;
-                            return self;
-                        } catch(ex) {
-                            if (ex instanceof JS_Parse_Error) {
-                                compressor.warn("Error parsing code passed to new Function [{file}:{line},{col}]", self.args[self.args.length - 1].start);
-                                compressor.warn(ex.toString());
-                            } else {
-                                console.log(ex);
-                                throw ex;
-                            }
-                        }
-                    }
-                    break;
-                }
-            }
-            else if (exp instanceof AST_Dot && exp.property == "toString" && self.args.length == 0) {
-                return make_node(AST_Binary, self, {
-                    left: make_node(AST_String, self, { value: "" }),
-                    operator: "+",
-                    right: exp.expression
-                }).optimize(compressor);
-            }
-            else if (exp instanceof AST_Dot && exp.expression instanceof AST_Array && exp.property == "join") EXIT: {
-                var separator;
-                if (self.args.length > 0) {
-                    separator = self.args[0].evaluate(compressor);
-                    if (separator === self.args[0]) break EXIT; // not a constant
-                }
-                var elements = [];
-                var consts = [];
-                exp.expression.elements.forEach(function(el) {
-                    var value = el.evaluate(compressor);
-                    if (value !== el) {
-                        consts.push(value);
-                    } else {
-                        if (consts.length > 0) {
-                            elements.push(make_node(AST_String, self, {
-                                value: consts.join(separator)
-                            }));
-                            consts.length = 0;
-                        }
-                        elements.push(el);
-                    }
-                });
-                if (consts.length > 0) {
-                    elements.push(make_node(AST_String, self, {
-                        value: consts.join(separator)
-                    }));
-                }
-                if (elements.length == 0) return make_node(AST_String, self, { value: "" });
-                if (elements.length == 1) {
-                    if (elements[0].is_string(compressor)) {
-                        return elements[0];
-                    }
-                    return make_node(AST_Binary, elements[0], {
-                        operator : "+",
-                        left     : make_node(AST_String, self, { value: "" }),
-                        right    : elements[0]
-                    });
-                }
-                if (separator == "") {
-                    var first;
-                    if (elements[0].is_string(compressor)
-                        || elements[1].is_string(compressor)) {
-                        first = elements.shift();
-                    } else {
-                        first = make_node(AST_String, self, { value: "" });
-                    }
-                    return elements.reduce(function(prev, el){
-                        return make_node(AST_Binary, el, {
-                            operator : "+",
-                            left     : prev,
-                            right    : el
-                        });
-                    }, first).optimize(compressor);
-                }
-                // need this awkward cloning to not affect original element
-                // best_of will decide which one to get through.
-                var node = self.clone();
-                node.expression = node.expression.clone();
-                node.expression.expression = node.expression.expression.clone();
-                node.expression.expression.elements = elements;
-                return best_of(compressor, self, node);
-            }
-            else if (exp instanceof AST_Dot && exp.expression.is_string(compressor) && exp.property == "charAt") {
-                var arg = self.args[0];
-                var index = arg ? arg.evaluate(compressor) : 0;
-                if (index !== arg) {
-                    return make_node(AST_Sub, exp, {
-                        expression: exp.expression,
-                        property: make_node_from_constant(index | 0, arg || exp)
-                    }).optimize(compressor);
-                }
-            }
-        }
-        if (exp instanceof AST_Function) {
-            if (exp.body[0] instanceof AST_Return) {
-                var value = exp.body[0].value;
-                if (!value || value.is_constant()) {
-                    var args = self.args.concat(value || make_node(AST_Undefined, self));
-                    return AST_Seq.from_array(args).transform(compressor);
-                }
-            }
-            if (compressor.option("side_effects") && all(exp.body, is_empty)) {
-                var args = self.args.concat(make_node(AST_Undefined, self));
-                return AST_Seq.from_array(args).transform(compressor);
-            }
-        }
-        if (compressor.option("drop_console")) {
-            if (exp instanceof AST_PropAccess) {
-                var name = exp.expression;
-                while (name.expression) {
-                    name = name.expression;
-                }
-                if (name instanceof AST_SymbolRef
-                    && name.name == "console"
-                    && name.undeclared()) {
-                    return make_node(AST_Undefined, self).optimize(compressor);
-                }
-            }
-        }
-        if (compressor.option("negate_iife")
-            && compressor.parent() instanceof AST_SimpleStatement
-            && is_iife_call(self)) {
-            return self.negate(compressor, true);
-        }
-        return self;
-    });
+/**
+ * Externalize the source map.
+ */
+SourceMapGenerator.prototype.toJSON =
+  function SourceMapGenerator_toJSON() {
+    var map = {
+      version: this._version,
+      sources: this._sources.toArray(),
+      names: this._names.toArray(),
+      mappings: this._serializeMappings()
+    };
+    if (this._file != null) {
+      map.file = this._file;
+    }
+    if (this._sourceRoot != null) {
+      map.sourceRoot = this._sourceRoot;
+    }
+    if (this._sourcesContents) {
+      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
+    }
 
-    OPT(AST_New, function(self, compressor){
-        if (compressor.option("unsafe")) {
-            var exp = self.expression;
-            if (exp instanceof AST_SymbolRef && exp.undeclared()) {
-                switch (exp.name) {
-                  case "Object":
-                  case "RegExp":
-                  case "Function":
-                  case "Error":
-                  case "Array":
-                    return make_node(AST_Call, self, self).transform(compressor);
-                }
-            }
-        }
-        return self;
-    });
+    return map;
+  };
 
-    OPT(AST_Seq, function(self, compressor){
-        if (!compressor.option("side_effects"))
-            return self;
-        self.car = self.car.drop_side_effect_free(compressor, first_in_statement(compressor));
-        if (!self.car) return maintain_this_binding(compressor.parent(), self, self.cdr);
-        if (compressor.option("cascade")) {
-            var left;
-            if (self.car instanceof AST_Assign
-                && !self.car.left.has_side_effects(compressor)) {
-                left = self.car.left;
-            } else if (self.car instanceof AST_Unary
-                && (self.car.operator == "++" || self.car.operator == "--")) {
-                left = self.car.expression;
-            }
-            if (left
-                && !(left instanceof AST_SymbolRef
-                    && left.definition().orig[0] instanceof AST_SymbolLambda)) {
-                var parent, field;
-                var cdr = self.cdr;
-                while (true) {
-                    if (cdr.equivalent_to(left)) {
-                        var car = self.car instanceof AST_UnaryPostfix ? make_node(AST_UnaryPrefix, self.car, {
-                            operator: self.car.operator,
-                            expression: left
-                        }) : self.car;
-                        if (parent) {
-                            parent[field] = car;
-                            return self.cdr;
-                        }
-                        return car;
-                    }
-                    if (cdr instanceof AST_Binary && !(cdr instanceof AST_Assign)) {
-                        if (cdr.left.is_constant()) {
-                            if (cdr.operator == "||" || cdr.operator == "&&") break;
-                            field = "right";
-                        } else {
-                            field = "left";
-                        }
-                    } else if (cdr instanceof AST_Call
-                        || cdr instanceof AST_Unary && !unary_side_effects(cdr.operator)) {
-                        field = "expression";
-                    } else break;
-                    parent = cdr;
-                    cdr = cdr[field];
-                }
-            }
-        }
-        if (is_undefined(self.cdr, compressor)) {
-            return make_node(AST_UnaryPrefix, self, {
-                operator   : "void",
-                expression : self.car
-            });
-        }
-        return self;
-    });
+/**
+ * Render the source map being generated to a string.
+ */
+SourceMapGenerator.prototype.toString =
+  function SourceMapGenerator_toString() {
+    return JSON.stringify(this.toJSON());
+  };
 
-    AST_Unary.DEFMETHOD("lift_sequences", function(compressor){
-        if (compressor.option("sequences")) {
-            if (this.expression instanceof AST_Seq) {
-                var seq = this.expression;
-                var x = seq.to_array();
-                var e = this.clone();
-                e.expression = x.pop();
-                x.push(e);
-                seq = AST_Seq.from_array(x).transform(compressor);
-                return seq;
-            }
-        }
-        return this;
-    });
+exports.SourceMapGenerator = SourceMapGenerator;
 
-    OPT(AST_UnaryPostfix, function(self, compressor){
-        return self.lift_sequences(compressor);
-    });
+},{"./array-set":145,"./base64-vlq":146,"./mapping-list":149,"./util":154}],153:[function(require,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
 
-    OPT(AST_UnaryPrefix, function(self, compressor){
-        var e = self.expression;
-        if (self.operator == "delete"
-            && !(e instanceof AST_SymbolRef
-                || e instanceof AST_PropAccess
-                || e instanceof AST_NaN
-                || e instanceof AST_Infinity
-                || e instanceof AST_Undefined)) {
-            if (e instanceof AST_Seq) {
-                e = e.to_array();
-                e.push(make_node(AST_True, self));
-                return AST_Seq.from_array(e).optimize(compressor);
-            }
-            return make_node(AST_Seq, self, {
-                car: e,
-                cdr: make_node(AST_True, self)
-            }).optimize(compressor);
-        }
-        var seq = self.lift_sequences(compressor);
-        if (seq !== self) {
-            return seq;
-        }
-        if (compressor.option("side_effects") && self.operator == "void") {
-            e = e.drop_side_effect_free(compressor);
-            if (e) {
-                self.expression = e;
-                return self;
-            } else {
-                return make_node(AST_Undefined, self).optimize(compressor);
-            }
-        }
-        if (compressor.option("booleans") && compressor.in_boolean_context()) {
-            switch (self.operator) {
-              case "!":
-                if (e instanceof AST_UnaryPrefix && e.operator == "!") {
-                    // !!foo ==> foo, if we're in boolean context
-                    return e.expression;
-                }
-                if (e instanceof AST_Binary) {
-                    self = best_of(compressor, self, e.negate(compressor, first_in_statement(compressor)));
-                }
-                break;
-              case "typeof":
-                // typeof always returns a non-empty string, thus it's
-                // always true in booleans
-                compressor.warn("Boolean expression always true [{file}:{line},{col}]", self.start);
-                return (e instanceof AST_SymbolRef ? make_node(AST_True, self) : make_node(AST_Seq, self, {
-                    car: e,
-                    cdr: make_node(AST_True, self)
-                })).optimize(compressor);
-            }
-        }
-        if (self.operator == "-" && e instanceof AST_Infinity) {
-            e = e.transform(compressor);
-        }
-        if (e instanceof AST_Binary
-            && (self.operator == "+" || self.operator == "-")
-            && (e.operator == "*" || e.operator == "/" || e.operator == "%")) {
-            return make_node(AST_Binary, self, {
-                operator: e.operator,
-                left: make_node(AST_UnaryPrefix, e.left, {
-                    operator: self.operator,
-                    expression: e.left
-                }),
-                right: e.right
-            });
-        }
-        // avoids infinite recursion of numerals
-        if (self.operator != "-"
-            || !(e instanceof AST_Number || e instanceof AST_Infinity)) {
-            var ev = self.evaluate(compressor);
-            if (ev !== self) {
-                ev = make_node_from_constant(ev, self).optimize(compressor);
-                return best_of(compressor, ev, self);
-            }
-        }
-        return self;
-    });
+var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
+var util = require('./util');
 
-    AST_Binary.DEFMETHOD("lift_sequences", function(compressor){
-        if (compressor.option("sequences")) {
-            if (this.left instanceof AST_Seq) {
-                var seq = this.left;
-                var x = seq.to_array();
-                var e = this.clone();
-                e.left = x.pop();
-                x.push(e);
-                return AST_Seq.from_array(x).optimize(compressor);
-            }
-            if (this.right instanceof AST_Seq && !this.left.has_side_effects(compressor)) {
-                var assign = this.operator == "=" && this.left instanceof AST_SymbolRef;
-                var root = this.right.clone();
-                var cursor, seq = root;
-                while (assign || !seq.car.has_side_effects(compressor)) {
-                    cursor = seq;
-                    if (seq.cdr instanceof AST_Seq) {
-                        seq = seq.cdr = seq.cdr.clone();
-                    } else break;
-                }
-                if (cursor) {
-                    var e = this.clone();
-                    e.right = cursor.cdr;
-                    cursor.cdr = e;
-                    return root.optimize(compressor);
-                }
-            }
-        }
-        return this;
-    });
+// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
+// operating systems these days (capturing the result).
+var REGEX_NEWLINE = /(\r?\n)/;
 
-    var commutativeOperators = makePredicate("== === != !== * & | ^");
+// Newline character code for charCodeAt() comparisons
+var NEWLINE_CODE = 10;
 
-    OPT(AST_Binary, function(self, compressor){
-        function reversible() {
-            return self.left.is_constant()
-                || self.right.is_constant()
-                || !self.left.has_side_effects(compressor)
-                    && !self.right.has_side_effects(compressor);
-        }
-        function reverse(op) {
-            if (reversible()) {
-                if (op) self.operator = op;
-                var tmp = self.left;
-                self.left = self.right;
-                self.right = tmp;
-            }
-        }
-        if (commutativeOperators(self.operator)) {
-            if (self.right.is_constant()
-                && !self.left.is_constant()) {
-                // if right is a constant, whatever side effects the
-                // left side might have could not influence the
-                // result.  hence, force switch.
-
-                if (!(self.left instanceof AST_Binary
-                      && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) {
-                    reverse();
-                }
-            }
-        }
-        self = self.lift_sequences(compressor);
-        if (compressor.option("comparisons")) switch (self.operator) {
-          case "===":
-          case "!==":
-            if ((self.left.is_string(compressor) && self.right.is_string(compressor)) ||
-                (self.left.is_number(compressor) && self.right.is_number(compressor)) ||
-                (self.left.is_boolean() && self.right.is_boolean())) {
-                self.operator = self.operator.substr(0, 2);
-            }
-            // XXX: intentionally falling down to the next case
-          case "==":
-          case "!=":
-            // "undefined" == typeof x => undefined === x
-            if (self.left instanceof AST_String
-                && self.left.value == "undefined"
-                && self.right instanceof AST_UnaryPrefix
-                && self.right.operator == "typeof") {
-                var expr = self.right.expression;
-                if (expr instanceof AST_SymbolRef ? !expr.undeclared()
-                    : !(expr instanceof AST_PropAccess) || compressor.option("screw_ie8")) {
-                    self.right = expr;
-                    self.left = make_node(AST_Undefined, self.left).optimize(compressor);
-                    if (self.operator.length == 2) self.operator += "=";
-                }
-            }
-            break;
-        }
-        if (compressor.option("booleans") && self.operator == "+" && compressor.in_boolean_context()) {
-            var ll = self.left.evaluate(compressor);
-            var rr = self.right.evaluate(compressor);
-            if (ll && typeof ll == "string") {
-                compressor.warn("+ in boolean context always true [{file}:{line},{col}]", self.start);
-                return make_node(AST_Seq, self, {
-                    car: self.right,
-                    cdr: make_node(AST_True, self)
-                }).optimize(compressor);
-            }
-            if (rr && typeof rr == "string") {
-                compressor.warn("+ in boolean context always true [{file}:{line},{col}]", self.start);
-                return make_node(AST_Seq, self, {
-                    car: self.left,
-                    cdr: make_node(AST_True, self)
-                }).optimize(compressor);
-            }
-        }
-        if (compressor.option("comparisons") && self.is_boolean()) {
-            if (!(compressor.parent() instanceof AST_Binary)
-                || compressor.parent() instanceof AST_Assign) {
-                var negated = make_node(AST_UnaryPrefix, self, {
-                    operator: "!",
-                    expression: self.negate(compressor, first_in_statement(compressor))
-                });
-                self = best_of(compressor, self, negated);
-            }
-            if (compressor.option("unsafe_comps")) {
-                switch (self.operator) {
-                  case "<": reverse(">"); break;
-                  case "<=": reverse(">="); break;
-                }
-            }
-        }
-        if (self.operator == "+") {
-            if (self.right instanceof AST_String
-                && self.right.getValue() == ""
-                && self.left.is_string(compressor)) {
-                return self.left;
-            }
-            if (self.left instanceof AST_String
-                && self.left.getValue() == ""
-                && self.right.is_string(compressor)) {
-                return self.right;
-            }
-            if (self.left instanceof AST_Binary
-                && self.left.operator == "+"
-                && self.left.left instanceof AST_String
-                && self.left.left.getValue() == ""
-                && self.right.is_string(compressor)) {
-                self.left = self.left.right;
-                return self.transform(compressor);
-            }
-        }
-        if (compressor.option("evaluate")) {
-            switch (self.operator) {
-              case "&&":
-                var ll = self.left.evaluate(compressor);
-                if (!ll) {
-                    compressor.warn("Condition left of && always false [{file}:{line},{col}]", self.start);
-                    return maintain_this_binding(compressor.parent(), self, self.left).optimize(compressor);
-                } else if (ll !== self.left) {
-                    compressor.warn("Condition left of && always true [{file}:{line},{col}]", self.start);
-                    return maintain_this_binding(compressor.parent(), self, self.right).optimize(compressor);
-                }
-                if (compressor.option("booleans") && compressor.in_boolean_context()) {
-                    var rr = self.right.evaluate(compressor);
-                    if (!rr) {
-                        compressor.warn("Boolean && always false [{file}:{line},{col}]", self.start);
-                        return make_node(AST_Seq, self, {
-                            car: self.left,
-                            cdr: make_node(AST_False, self)
-                        }).optimize(compressor);
-                    } else if (rr !== self.right) {
-                        compressor.warn("Dropping side-effect-free && in boolean context [{file}:{line},{col}]", self.start);
-                        return self.left.optimize(compressor);
-                    }
-                }
-                break;
-              case "||":
-                var ll = self.left.evaluate(compressor);
-                if (!ll) {
-                    compressor.warn("Condition left of || always false [{file}:{line},{col}]", self.start);
-                    return maintain_this_binding(compressor.parent(), self, self.right).optimize(compressor);
-                } else if (ll !== self.left) {
-                    compressor.warn("Condition left of || always true [{file}:{line},{col}]", self.start);
-                    return maintain_this_binding(compressor.parent(), self, self.left).optimize(compressor);
-                }
-                if (compressor.option("booleans") && compressor.in_boolean_context()) {
-                    var rr = self.right.evaluate(compressor);
-                    if (!rr) {
-                        compressor.warn("Dropping side-effect-free || in boolean context [{file}:{line},{col}]", self.start);
-                        return self.left.optimize(compressor);
-                    } else if (rr !== self.right) {
-                        compressor.warn("Boolean || always true [{file}:{line},{col}]", self.start);
-                        return make_node(AST_Seq, self, {
-                            car: self.left,
-                            cdr: make_node(AST_True, self)
-                        }).optimize(compressor);
-                    }
-                }
-                break;
-            }
-            var associative = true;
-            switch (self.operator) {
-              case "+":
-                // "foo" + ("bar" + x) => "foobar" + x
-                if (self.left instanceof AST_Constant
-                    && self.right instanceof AST_Binary
-                    && self.right.operator == "+"
-                    && self.right.left instanceof AST_Constant
-                    && self.right.is_string(compressor)) {
-                    self = make_node(AST_Binary, self, {
-                        operator: "+",
-                        left: make_node(AST_String, self.left, {
-                            value: "" + self.left.getValue() + self.right.left.getValue(),
-                            start: self.left.start,
-                            end: self.right.left.end
-                        }),
-                        right: self.right.right
-                    });
-                }
-                // (x + "foo") + "bar" => x + "foobar"
-                if (self.right instanceof AST_Constant
-                    && self.left instanceof AST_Binary
-                    && self.left.operator == "+"
-                    && self.left.right instanceof AST_Constant
-                    && self.left.is_string(compressor)) {
-                    self = make_node(AST_Binary, self, {
-                        operator: "+",
-                        left: self.left.left,
-                        right: make_node(AST_String, self.right, {
-                            value: "" + self.left.right.getValue() + self.right.getValue(),
-                            start: self.left.right.start,
-                            end: self.right.end
-                        })
-                    });
-                }
-                // (x + "foo") + ("bar" + y) => (x + "foobar") + y
-                if (self.left instanceof AST_Binary
-                    && self.left.operator == "+"
-                    && self.left.is_string(compressor)
-                    && self.left.right instanceof AST_Constant
-                    && self.right instanceof AST_Binary
-                    && self.right.operator == "+"
-                    && self.right.left instanceof AST_Constant
-                    && self.right.is_string(compressor)) {
-                    self = make_node(AST_Binary, self, {
-                        operator: "+",
-                        left: make_node(AST_Binary, self.left, {
-                            operator: "+",
-                            left: self.left.left,
-                            right: make_node(AST_String, self.left.right, {
-                                value: "" + self.left.right.getValue() + self.right.left.getValue(),
-                                start: self.left.right.start,
-                                end: self.right.left.end
-                            })
-                        }),
-                        right: self.right.right
-                    });
-                }
-                // a + -b => a - b
-                if (self.right instanceof AST_UnaryPrefix
-                    && self.right.operator == "-"
-                    && self.left.is_number(compressor)) {
-                    self = make_node(AST_Binary, self, {
-                        operator: "-",
-                        left: self.left,
-                        right: self.right.expression
-                    });
-                    break;
-                }
-                // -a + b => b - a
-                if (self.left instanceof AST_UnaryPrefix
-                    && self.left.operator == "-"
-                    && reversible()
-                    && self.right.is_number(compressor)) {
-                    self = make_node(AST_Binary, self, {
-                        operator: "-",
-                        left: self.right,
-                        right: self.left.expression
-                    });
-                    break;
-                }
-              case "*":
-                associative = compressor.option("unsafe_math");
-              case "&":
-              case "|":
-              case "^":
-                // a + +b => +b + a
-                if (self.left.is_number(compressor)
-                    && self.right.is_number(compressor)
-                    && reversible()
-                    && !(self.left instanceof AST_Binary
-                        && self.left.operator != self.operator
-                        && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) {
-                    var reversed = make_node(AST_Binary, self, {
-                        operator: self.operator,
-                        left: self.right,
-                        right: self.left
-                    });
-                    if (self.right instanceof AST_Constant
-                        && !(self.left instanceof AST_Constant)) {
-                        self = best_of(compressor, reversed, self);
-                    } else {
-                        self = best_of(compressor, self, reversed);
-                    }
-                }
-                if (associative && self.is_number(compressor)) {
-                    // a + (b + c) => (a + b) + c
-                    if (self.right instanceof AST_Binary
-                        && self.right.operator == self.operator) {
-                        self = make_node(AST_Binary, self, {
-                            operator: self.operator,
-                            left: make_node(AST_Binary, self.left, {
-                                operator: self.operator,
-                                left: self.left,
-                                right: self.right.left,
-                                start: self.left.start,
-                                end: self.right.left.end
-                            }),
-                            right: self.right.right
-                        });
-                    }
-                    // (n + 2) + 3 => 5 + n
-                    // (2 * n) * 3 => 6 + n
-                    if (self.right instanceof AST_Constant
-                        && self.left instanceof AST_Binary
-                        && self.left.operator == self.operator) {
-                        if (self.left.left instanceof AST_Constant) {
-                            self = make_node(AST_Binary, self, {
-                                operator: self.operator,
-                                left: make_node(AST_Binary, self.left, {
-                                    operator: self.operator,
-                                    left: self.left.left,
-                                    right: self.right,
-                                    start: self.left.left.start,
-                                    end: self.right.end
-                                }),
-                                right: self.left.right
-                            });
-                        } else if (self.left.right instanceof AST_Constant) {
-                            self = make_node(AST_Binary, self, {
-                                operator: self.operator,
-                                left: make_node(AST_Binary, self.left, {
-                                    operator: self.operator,
-                                    left: self.left.right,
-                                    right: self.right,
-                                    start: self.left.right.start,
-                                    end: self.right.end
-                                }),
-                                right: self.left.left
-                            });
-                        }
-                    }
-                    // (a | 1) | (2 | d) => (3 | a) | b
-                    if (self.left instanceof AST_Binary
-                        && self.left.operator == self.operator
-                        && self.left.right instanceof AST_Constant
-                        && self.right instanceof AST_Binary
-                        && self.right.operator == self.operator
-                        && self.right.left instanceof AST_Constant) {
-                        self = make_node(AST_Binary, self, {
-                            operator: self.operator,
-                            left: make_node(AST_Binary, self.left, {
-                                operator: self.operator,
-                                left: make_node(AST_Binary, self.left.left, {
-                                    operator: self.operator,
-                                    left: self.left.right,
-                                    right: self.right.left,
-                                    start: self.left.right.start,
-                                    end: self.right.left.end
-                                }),
-                                right: self.left.left
-                            }),
-                            right: self.right.right
-                        });
-                    }
-                }
-            }
-        }
-        // x && (y && z)  ==>  x && y && z
-        // x || (y || z)  ==>  x || y || z
-        // x + ("y" + z)  ==>  x + "y" + z
-        // "x" + (y + "z")==>  "x" + y + "z"
-        if (self.right instanceof AST_Binary
-            && self.right.operator == self.operator
-            && (self.operator == "&&"
-                || self.operator == "||"
-                || (self.operator == "+"
-                    && (self.right.left.is_string(compressor)
-                        || (self.left.is_string(compressor)
-                            && self.right.right.is_string(compressor))))))
-        {
-            self.left = make_node(AST_Binary, self.left, {
-                operator : self.operator,
-                left     : self.left,
-                right    : self.right.left
-            });
-            self.right = self.right.right;
-            return self.transform(compressor);
-        }
-        var ev = self.evaluate(compressor);
-        if (ev !== self) {
-            ev = make_node_from_constant(ev, self).optimize(compressor);
-            return best_of(compressor, ev, self);
-        }
-        return self;
-    });
+// Private symbol for identifying `SourceNode`s when multiple versions of
+// the source-map library are loaded. This MUST NOT CHANGE across
+// versions!
+var isSourceNode = "$$$isSourceNode$$$";
 
-    OPT(AST_SymbolRef, function(self, compressor){
-        var def = self.resolve_defines(compressor);
-        if (def) {
-            return def.optimize(compressor);
-        }
-        // testing against !self.scope.uses_with first is an optimization
-        if (compressor.option("screw_ie8")
-            && self.undeclared()
-            && (!self.scope.uses_with || !compressor.find_parent(AST_With))) {
-            switch (self.name) {
-              case "undefined":
-                return make_node(AST_Undefined, self).optimize(compressor);
-              case "NaN":
-                return make_node(AST_NaN, self).optimize(compressor);
-              case "Infinity":
-                return make_node(AST_Infinity, self).optimize(compressor);
-            }
-        }
-        if (compressor.option("evaluate") && compressor.option("reduce_vars")) {
-            var d = self.definition();
-            var fixed = self.fixed_value();
-            if (fixed) {
-                if (d.should_replace === undefined) {
-                    var init = fixed.evaluate(compressor);
-                    if (init !== fixed) {
-                        init = make_node_from_constant(init, fixed);
-                        var value = best_of_expression(init.optimize(compressor), fixed).print_to_string().length;
-                        var name = d.name.length;
-                        var freq = d.references.length;
-                        var overhead = d.global || !freq ? 0 : (name + 2 + value) / freq;
-                        d.should_replace = value <= name + overhead ? init : false;
-                    } else {
-                        d.should_replace = false;
-                    }
-                }
-                if (d.should_replace) {
-                    return best_of_expression(d.should_replace.optimize(compressor), fixed).clone(true);
-                }
-            }
-        }
-        return self;
-    });
+/**
+ * SourceNodes provide a way to abstract over interpolating/concatenating
+ * snippets of generated JavaScript source code while maintaining the line and
+ * column information associated with the original source code.
+ *
+ * @param aLine The original line number.
+ * @param aColumn The original column number.
+ * @param aSource The original source's filename.
+ * @param aChunks Optional. An array of strings which are snippets of
+ *        generated JS, or other SourceNodes.
+ * @param aName The original identifier.
+ */
+function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
+  this.children = [];
+  this.sourceContents = {};
+  this.line = aLine == null ? null : aLine;
+  this.column = aColumn == null ? null : aColumn;
+  this.source = aSource == null ? null : aSource;
+  this.name = aName == null ? null : aName;
+  this[isSourceNode] = true;
+  if (aChunks != null) this.add(aChunks);
+}
 
-    function is_atomic(lhs, self) {
-        return lhs instanceof AST_SymbolRef || lhs.TYPE === self.TYPE;
-    }
+/**
+ * Creates a SourceNode from generated code and a SourceMapConsumer.
+ *
+ * @param aGeneratedCode The generated code
+ * @param aSourceMapConsumer The SourceMap for the generated code
+ * @param aRelativePath Optional. The path that relative sources in the
+ *        SourceMapConsumer should be relative to.
+ */
+SourceNode.fromStringWithSourceMap =
+  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
+    // The SourceNode we want to fill with the generated code
+    // and the SourceMap
+    var node = new SourceNode();
 
-    OPT(AST_Undefined, function(self, compressor){
-        if (compressor.option("unsafe")) {
-            var undef = find_variable(compressor, "undefined");
-            if (undef) {
-                var ref = make_node(AST_SymbolRef, self, {
-                    name   : "undefined",
-                    scope  : undef.scope,
-                    thedef : undef
-                });
-                ref.is_undefined = true;
-                return ref;
-            }
-        }
-        var lhs = is_lhs(compressor.self(), compressor.parent());
-        if (lhs && is_atomic(lhs, self)) return self;
-        return make_node(AST_UnaryPrefix, self, {
-            operator: "void",
-            expression: make_node(AST_Number, self, {
-                value: 0
-            })
-        });
-    });
+    // All even indices of this array are one line of the generated code,
+    // while all odd indices are the newlines between two adjacent lines
+    // (since `REGEX_NEWLINE` captures its match).
+    // Processed fragments are removed from this array, by calling `shiftNextLine`.
+    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
+    var shiftNextLine = function() {
+      var lineContents = remainingLines.shift();
+      // The last line of a file might not have a newline.
+      var newLine = remainingLines.shift() || "";
+      return lineContents + newLine;
+    };
 
-    OPT(AST_Infinity, function(self, compressor){
-        var lhs = is_lhs(compressor.self(), compressor.parent());
-        if (lhs && is_atomic(lhs, self)) return self;
-        if (compressor.option("keep_infinity")
-            && !(lhs && !is_atomic(lhs, self))
-            && !find_variable(compressor, "Infinity"))
-            return self;
-        return make_node(AST_Binary, self, {
-            operator: "/",
-            left: make_node(AST_Number, self, {
-                value: 1
-            }),
-            right: make_node(AST_Number, self, {
-                value: 0
-            })
-        });
-    });
+    // We need to remember the position of "remainingLines"
+    var lastGeneratedLine = 1, lastGeneratedColumn = 0;
 
-    OPT(AST_NaN, function(self, compressor){
-        var lhs = is_lhs(compressor.self(), compressor.parent());
-        if (lhs && !is_atomic(lhs, self)
-            || find_variable(compressor, "NaN")) {
-            return make_node(AST_Binary, self, {
-                operator: "/",
-                left: make_node(AST_Number, self, {
-                    value: 0
-                }),
-                right: make_node(AST_Number, self, {
-                    value: 0
-                })
-            });
-        }
-        return self;
-    });
+    // The generate SourceNodes we need a code range.
+    // To extract it current and last mapping is used.
+    // Here we store the last mapping.
+    var lastMapping = null;
 
-    var ASSIGN_OPS = [ '+', '-', '/', '*', '%', '>>', '<<', '>>>', '|', '^', '&' ];
-    var ASSIGN_OPS_COMMUTATIVE = [ '*', '|', '^', '&' ];
-    OPT(AST_Assign, function(self, compressor){
-        self = self.lift_sequences(compressor);
-        if (self.operator == "=" && self.left instanceof AST_SymbolRef && self.right instanceof AST_Binary) {
-            // x = expr1 OP expr2
-            if (self.right.left instanceof AST_SymbolRef
-                && self.right.left.name == self.left.name
-                && member(self.right.operator, ASSIGN_OPS)) {
-                // x = x - 2  --->  x -= 2
-                self.operator = self.right.operator + "=";
-                self.right = self.right.right;
-            }
-            else if (self.right.right instanceof AST_SymbolRef
-                && self.right.right.name == self.left.name
-                && member(self.right.operator, ASSIGN_OPS_COMMUTATIVE)
-                && !self.right.left.has_side_effects(compressor)) {
-                // x = 2 & x  --->  x &= 2
-                self.operator = self.right.operator + "=";
-                self.right = self.right.left;
-            }
+    aSourceMapConsumer.eachMapping(function (mapping) {
+      if (lastMapping !== null) {
+        // We add the code from "lastMapping" to "mapping":
+        // First check if there is a new line in between.
+        if (lastGeneratedLine < mapping.generatedLine) {
+          // Associate first line with "lastMapping"
+          addMappingWithCode(lastMapping, shiftNextLine());
+          lastGeneratedLine++;
+          lastGeneratedColumn = 0;
+          // The remaining code is added without mapping
+        } else {
+          // There is no new line in between.
+          // Associate the code between "lastGeneratedColumn" and
+          // "mapping.generatedColumn" with "lastMapping"
+          var nextLine = remainingLines[0];
+          var code = nextLine.substr(0, mapping.generatedColumn -
+                                        lastGeneratedColumn);
+          remainingLines[0] = nextLine.substr(mapping.generatedColumn -
+                                              lastGeneratedColumn);
+          lastGeneratedColumn = mapping.generatedColumn;
+          addMappingWithCode(lastMapping, code);
+          // No more remaining code, continue
+          lastMapping = mapping;
+          return;
         }
-        return self;
-    });
+      }
+      // We add the generated code until the first mapping
+      // to the SourceNode without any mapping.
+      // Each line is added as separate string.
+      while (lastGeneratedLine < mapping.generatedLine) {
+        node.add(shiftNextLine());
+        lastGeneratedLine++;
+      }
+      if (lastGeneratedColumn < mapping.generatedColumn) {
+        var nextLine = remainingLines[0];
+        node.add(nextLine.substr(0, mapping.generatedColumn));
+        remainingLines[0] = nextLine.substr(mapping.generatedColumn);
+        lastGeneratedColumn = mapping.generatedColumn;
+      }
+      lastMapping = mapping;
+    }, this);
+    // We have processed all mappings.
+    if (remainingLines.length > 0) {
+      if (lastMapping) {
+        // Associate the remaining code in the current line with "lastMapping"
+        addMappingWithCode(lastMapping, shiftNextLine());
+      }
+      // and add the remaining lines without any mapping
+      node.add(remainingLines.join(""));
+    }
 
-    OPT(AST_Conditional, function(self, compressor){
-        if (!compressor.option("conditionals")) return self;
-        if (self.condition instanceof AST_Seq) {
-            var car = self.condition.car;
-            self.condition = self.condition.cdr;
-            return AST_Seq.cons(car, self);
-        }
-        var cond = self.condition.evaluate(compressor);
-        if (cond !== self.condition) {
-            if (cond) {
-                compressor.warn("Condition always true [{file}:{line},{col}]", self.start);
-                return maintain_this_binding(compressor.parent(), self, self.consequent);
-            } else {
-                compressor.warn("Condition always false [{file}:{line},{col}]", self.start);
-                return maintain_this_binding(compressor.parent(), self, self.alternative);
-            }
-        }
-        var negated = cond.negate(compressor, first_in_statement(compressor));
-        if (best_of(compressor, cond, negated) === negated) {
-            self = make_node(AST_Conditional, self, {
-                condition: negated,
-                consequent: self.alternative,
-                alternative: self.consequent
-            });
-        }
-        var condition = self.condition;
-        var consequent = self.consequent;
-        var alternative = self.alternative;
-        // x?x:y --> x||y
-        if (condition instanceof AST_SymbolRef
-            && consequent instanceof AST_SymbolRef
-            && condition.definition() === consequent.definition()) {
-            return make_node(AST_Binary, self, {
-                operator: "||",
-                left: condition,
-                right: alternative
-            });
-        }
-        // if (foo) exp = something; else exp = something_else;
-        //                   |
-        //                   v
-        // exp = foo ? something : something_else;
-        if (consequent instanceof AST_Assign
-            && alternative instanceof AST_Assign
-            && consequent.operator == alternative.operator
-            && consequent.left.equivalent_to(alternative.left)
-            && (!self.condition.has_side_effects(compressor)
-                || consequent.operator == "="
-                    && !consequent.left.has_side_effects(compressor))) {
-            return make_node(AST_Assign, self, {
-                operator: consequent.operator,
-                left: consequent.left,
-                right: make_node(AST_Conditional, self, {
-                    condition: self.condition,
-                    consequent: consequent.right,
-                    alternative: alternative.right
-                })
-            });
-        }
-        // x ? y(a) : y(b) --> y(x ? a : b)
-        if (consequent instanceof AST_Call
-            && alternative.TYPE === consequent.TYPE
-            && consequent.args.length == 1
-            && alternative.args.length == 1
-            && consequent.expression.equivalent_to(alternative.expression)
-            && !consequent.expression.has_side_effects(compressor)) {
-            consequent.args[0] = make_node(AST_Conditional, self, {
-                condition: self.condition,
-                consequent: consequent.args[0],
-                alternative: alternative.args[0]
-            });
-            return consequent;
-        }
-        // x?y?z:a:a --> x&&y?z:a
-        if (consequent instanceof AST_Conditional
-            && consequent.alternative.equivalent_to(alternative)) {
-            return make_node(AST_Conditional, self, {
-                condition: make_node(AST_Binary, self, {
-                    left: self.condition,
-                    operator: "&&",
-                    right: consequent.condition
-                }),
-                consequent: consequent.consequent,
-                alternative: alternative
-            });
-        }
-        // x ? y : y --> x, y
-        if (consequent.equivalent_to(alternative)) {
-            return make_node(AST_Seq, self, {
-                car: self.condition,
-                cdr: consequent
-            }).optimize(compressor);
+    // Copy sourcesContent into SourceNode
+    aSourceMapConsumer.sources.forEach(function (sourceFile) {
+      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+      if (content != null) {
+        if (aRelativePath != null) {
+          sourceFile = util.join(aRelativePath, sourceFile);
         }
+        node.setSourceContent(sourceFile, content);
+      }
+    });
 
-        if (is_true(self.consequent)) {
-            if (is_false(self.alternative)) {
-                // c ? true : false ---> !!c
-                return booleanize(self.condition);
-            }
-            // c ? true : x ---> !!c || x
-            return make_node(AST_Binary, self, {
-                operator: "||",
-                left: booleanize(self.condition),
-                right: self.alternative
-            });
-        }
-        if (is_false(self.consequent)) {
-            if (is_true(self.alternative)) {
-                // c ? false : true ---> !c
-                return booleanize(self.condition.negate(compressor));
-            }
-            // c ? false : x ---> !c && x
-            return make_node(AST_Binary, self, {
-                operator: "&&",
-                left: booleanize(self.condition.negate(compressor)),
-                right: self.alternative
-            });
-        }
-        if (is_true(self.alternative)) {
-            // c ? x : true ---> !c || x
-            return make_node(AST_Binary, self, {
-                operator: "||",
-                left: booleanize(self.condition.negate(compressor)),
-                right: self.consequent
-            });
-        }
-        if (is_false(self.alternative)) {
-            // c ? x : false ---> !!c && x
-            return make_node(AST_Binary, self, {
-                operator: "&&",
-                left: booleanize(self.condition),
-                right: self.consequent
-            });
-        }
+    return node;
 
-        return self;
+    function addMappingWithCode(mapping, code) {
+      if (mapping === null || mapping.source === undefined) {
+        node.add(code);
+      } else {
+        var source = aRelativePath
+          ? util.join(aRelativePath, mapping.source)
+          : mapping.source;
+        node.add(new SourceNode(mapping.originalLine,
+                                mapping.originalColumn,
+                                source,
+                                code,
+                                mapping.name));
+      }
+    }
+  };
 
-        function booleanize(node) {
-            if (node.is_boolean()) return node;
-            // !!expression
-            return make_node(AST_UnaryPrefix, node, {
-                operator: "!",
-                expression: node.negate(compressor)
-            });
-        }
+/**
+ * Add a chunk of generated JS to this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ *        SourceNode, or an array where each member is one of those things.
+ */
+SourceNode.prototype.add = function SourceNode_add(aChunk) {
+  if (Array.isArray(aChunk)) {
+    aChunk.forEach(function (chunk) {
+      this.add(chunk);
+    }, this);
+  }
+  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+    if (aChunk) {
+      this.children.push(aChunk);
+    }
+  }
+  else {
+    throw new TypeError(
+      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+    );
+  }
+  return this;
+};
 
-        // AST_True or !0
-        function is_true(node) {
-            return node instanceof AST_True
-                || (node instanceof AST_UnaryPrefix
-                    && node.operator == "!"
-                    && node.expression instanceof AST_Constant
-                    && !node.expression.value);
-        }
-        // AST_False or !1
-        function is_false(node) {
-            return node instanceof AST_False
-                || (node instanceof AST_UnaryPrefix
-                    && node.operator == "!"
-                    && node.expression instanceof AST_Constant
-                    && !!node.expression.value);
-        }
-    });
+/**
+ * Add a chunk of generated JS to the beginning of this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ *        SourceNode, or an array where each member is one of those things.
+ */
+SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
+  if (Array.isArray(aChunk)) {
+    for (var i = aChunk.length-1; i >= 0; i--) {
+      this.prepend(aChunk[i]);
+    }
+  }
+  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+    this.children.unshift(aChunk);
+  }
+  else {
+    throw new TypeError(
+      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+    );
+  }
+  return this;
+};
 
-    OPT(AST_Boolean, function(self, compressor){
-        if (compressor.option("booleans")) {
-            var p = compressor.parent();
-            if (p instanceof AST_Binary && (p.operator == "=="
-                                            || p.operator == "!=")) {
-                compressor.warn("Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]", {
-                    operator : p.operator,
-                    value    : self.value,
-                    file     : p.start.file,
-                    line     : p.start.line,
-                    col      : p.start.col,
-                });
-                return make_node(AST_Number, self, {
-                    value: +self.value
-                });
-            }
-            return make_node(AST_UnaryPrefix, self, {
-                operator: "!",
-                expression: make_node(AST_Number, self, {
-                    value: 1 - self.value
-                })
-            });
-        }
-        return self;
-    });
+/**
+ * Walk over the tree of JS snippets in this node and its children. The
+ * walking function is called once for each snippet of JS and is passed that
+ * snippet and the its original associated source's line/column location.
+ *
+ * @param aFn The traversal function.
+ */
+SourceNode.prototype.walk = function SourceNode_walk(aFn) {
+  var chunk;
+  for (var i = 0, len = this.children.length; i < len; i++) {
+    chunk = this.children[i];
+    if (chunk[isSourceNode]) {
+      chunk.walk(aFn);
+    }
+    else {
+      if (chunk !== '') {
+        aFn(chunk, { source: this.source,
+                     line: this.line,
+                     column: this.column,
+                     name: this.name });
+      }
+    }
+  }
+};
 
-    OPT(AST_Sub, function(self, compressor){
-        var prop = self.property;
-        if (prop instanceof AST_String && compressor.option("properties")) {
-            prop = prop.getValue();
-            if (RESERVED_WORDS(prop) ? compressor.option("screw_ie8") : is_identifier_string(prop)) {
-                return make_node(AST_Dot, self, {
-                    expression : self.expression,
-                    property   : prop
-                }).optimize(compressor);
-            }
-            var v = parseFloat(prop);
-            if (!isNaN(v) && v.toString() == prop) {
-                self.property = make_node(AST_Number, self.property, {
-                    value: v
-                });
-            }
-        }
-        var ev = self.evaluate(compressor);
-        if (ev !== self) {
-            ev = make_node_from_constant(ev, self).optimize(compressor);
-            return best_of(compressor, ev, self);
-        }
-        return self;
-    });
+/**
+ * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
+ * each of `this.children`.
+ *
+ * @param aSep The separator.
+ */
+SourceNode.prototype.join = function SourceNode_join(aSep) {
+  var newChildren;
+  var i;
+  var len = this.children.length;
+  if (len > 0) {
+    newChildren = [];
+    for (i = 0; i < len-1; i++) {
+      newChildren.push(this.children[i]);
+      newChildren.push(aSep);
+    }
+    newChildren.push(this.children[i]);
+    this.children = newChildren;
+  }
+  return this;
+};
 
-    OPT(AST_Dot, function(self, compressor){
-        var def = self.resolve_defines(compressor);
-        if (def) {
-            return def.optimize(compressor);
-        }
-        var prop = self.property;
-        if (RESERVED_WORDS(prop) && !compressor.option("screw_ie8")) {
-            return make_node(AST_Sub, self, {
-                expression : self.expression,
-                property   : make_node(AST_String, self, {
-                    value: prop
-                })
-            }).optimize(compressor);
-        }
-        if (compressor.option("unsafe_proto")
-            && self.expression instanceof AST_Dot
-            && self.expression.property == "prototype") {
-            var exp = self.expression.expression;
-            if (exp instanceof AST_SymbolRef && exp.undeclared()) switch (exp.name) {
-              case "Array":
-                self.expression = make_node(AST_Array, self.expression, {
-                    elements: []
-                });
-                break;
-              case "Object":
-                self.expression = make_node(AST_Object, self.expression, {
-                    properties: []
-                });
-                break;
-              case "String":
-                self.expression = make_node(AST_String, self.expression, {
-                    value: ""
-                });
-                break;
-            }
-        }
-        var ev = self.evaluate(compressor);
-        if (ev !== self) {
-            ev = make_node_from_constant(ev, self).optimize(compressor);
-            return best_of(compressor, ev, self);
-        }
-        return self;
-    });
+/**
+ * Call String.prototype.replace on the very right-most source snippet. Useful
+ * for trimming whitespace from the end of a source node, etc.
+ *
+ * @param aPattern The pattern to replace.
+ * @param aReplacement The thing to replace the pattern with.
+ */
+SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
+  var lastChild = this.children[this.children.length - 1];
+  if (lastChild[isSourceNode]) {
+    lastChild.replaceRight(aPattern, aReplacement);
+  }
+  else if (typeof lastChild === 'string') {
+    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
+  }
+  else {
+    this.children.push(''.replace(aPattern, aReplacement));
+  }
+  return this;
+};
 
-    function literals_in_boolean_context(self, compressor) {
-        if (compressor.option("booleans") && compressor.in_boolean_context()) {
-            return best_of(compressor, self, make_node(AST_Seq, self, {
-                car: self,
-                cdr: make_node(AST_True, self)
-            }).optimize(compressor));
-        }
-        return self;
-    };
-    OPT(AST_Array, literals_in_boolean_context);
-    OPT(AST_Object, literals_in_boolean_context);
-    OPT(AST_RegExp, literals_in_boolean_context);
+/**
+ * Set the source content for a source file. This will be added to the SourceMapGenerator
+ * in the sourcesContent field.
+ *
+ * @param aSourceFile The filename of the source file
+ * @param aSourceContent The content of the source file
+ */
+SourceNode.prototype.setSourceContent =
+  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
+    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
+  };
+
+/**
+ * Walk over the tree of SourceNodes. The walking function is called for each
+ * source file content and is passed the filename and source content.
+ *
+ * @param aFn The traversal function.
+ */
+SourceNode.prototype.walkSourceContents =
+  function SourceNode_walkSourceContents(aFn) {
+    for (var i = 0, len = this.children.length; i < len; i++) {
+      if (this.children[i][isSourceNode]) {
+        this.children[i].walkSourceContents(aFn);
+      }
+    }
+
+    var sources = Object.keys(this.sourceContents);
+    for (var i = 0, len = sources.length; i < len; i++) {
+      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+    }
+  };
+
+/**
+ * Return the string representation of this source node. Walks over the tree
+ * and concatenates all the various snippets together to one string.
+ */
+SourceNode.prototype.toString = function SourceNode_toString() {
+  var str = "";
+  this.walk(function (chunk) {
+    str += chunk;
+  });
+  return str;
+};
 
-    OPT(AST_Return, function(self, compressor){
-        if (self.value && is_undefined(self.value, compressor)) {
-            self.value = null;
+/**
+ * Returns the string representation of this source node along with a source
+ * map.
+ */
+SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
+  var generated = {
+    code: "",
+    line: 1,
+    column: 0
+  };
+  var map = new SourceMapGenerator(aArgs);
+  var sourceMappingActive = false;
+  var lastOriginalSource = null;
+  var lastOriginalLine = null;
+  var lastOriginalColumn = null;
+  var lastOriginalName = null;
+  this.walk(function (chunk, original) {
+    generated.code += chunk;
+    if (original.source !== null
+        && original.line !== null
+        && original.column !== null) {
+      if(lastOriginalSource !== original.source
+         || lastOriginalLine !== original.line
+         || lastOriginalColumn !== original.column
+         || lastOriginalName !== original.name) {
+        map.addMapping({
+          source: original.source,
+          original: {
+            line: original.line,
+            column: original.column
+          },
+          generated: {
+            line: generated.line,
+            column: generated.column
+          },
+          name: original.name
+        });
+      }
+      lastOriginalSource = original.source;
+      lastOriginalLine = original.line;
+      lastOriginalColumn = original.column;
+      lastOriginalName = original.name;
+      sourceMappingActive = true;
+    } else if (sourceMappingActive) {
+      map.addMapping({
+        generated: {
+          line: generated.line,
+          column: generated.column
         }
-        return self;
-    });
-
-    OPT(AST_VarDef, function(self, compressor){
-        var defines = compressor.option("global_defs");
-        if (defines && HOP(defines, self.name.name)) {
-            compressor.warn('global_defs ' + self.name.name + ' redefined [{file}:{line},{col}]', self.start);
+      });
+      lastOriginalSource = null;
+      sourceMappingActive = false;
+    }
+    for (var idx = 0, length = chunk.length; idx < length; idx++) {
+      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
+        generated.line++;
+        generated.column = 0;
+        // Mappings end at eol
+        if (idx + 1 === length) {
+          lastOriginalSource = null;
+          sourceMappingActive = false;
+        } else if (sourceMappingActive) {
+          map.addMapping({
+            source: original.source,
+            original: {
+              line: original.line,
+              column: original.column
+            },
+            generated: {
+              line: generated.line,
+              column: generated.column
+            },
+            name: original.name
+          });
         }
-        return self;
-    });
-
-})();
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-"use strict";
-
-// a small wrapper around fitzgen's source-map library
-function SourceMap(options) {
-    options = defaults(options, {
-        file : null,
-        root : null,
-        orig : null,
-
-        orig_line_diff : 0,
-        dest_line_diff : 0,
-    });
-    var generator = new MOZ_SourceMap.SourceMapGenerator({
-        file       : options.file,
-        sourceRoot : options.root
-    });
-    var orig_map = options.orig && new MOZ_SourceMap.SourceMapConsumer(options.orig);
-
-    if (orig_map && Array.isArray(options.orig.sources)) {
-        orig_map._sources.toArray().forEach(function(source) {
-            var sourceContent = orig_map.sourceContentFor(source, true);
-            if (sourceContent) {
-                generator.setSourceContent(source, sourceContent);
-            }
-        });
+      } else {
+        generated.column++;
+      }
     }
+  });
+  this.walkSourceContents(function (sourceFile, sourceContent) {
+    map.setSourceContent(sourceFile, sourceContent);
+  });
 
-    function add(source, gen_line, gen_col, orig_line, orig_col, name) {
-        if (orig_map) {
-            var info = orig_map.originalPositionFor({
-                line: orig_line,
-                column: orig_col
-            });
-            if (info.source === null) {
-                return;
-            }
-            source = info.source;
-            orig_line = info.line;
-            orig_col = info.column;
-            name = info.name || name;
-        }
-        generator.addMapping({
-            generated : { line: gen_line + options.dest_line_diff, column: gen_col },
-            original  : { line: orig_line + options.orig_line_diff, column: orig_col },
-            source    : source,
-            name      : name
-        });
-    };
-    return {
-        add        : add,
-        get        : function() { return generator },
-        toString   : function() { return JSON.stringify(generator.toJSON()); }
-    };
+  return { code: generated.code, map: map };
 };
 
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
+exports.SourceNode = SourceNode;
 
-  Distributed under the BSD license:
+},{"./source-map-generator":152,"./util":154}],154:[function(require,module,exports){
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
 
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
+/**
+ * This is a helper function for getting values from parameter/options
+ * objects.
+ *
+ * @param args The object we are extracting values from
+ * @param name The name of the property we are getting.
+ * @param defaultValue An optional value to return if the property is missing
+ * from the object. If this is not specified and the property is missing, an
+ * error will be thrown.
+ */
+function getArg(aArgs, aName, aDefaultValue) {
+  if (aName in aArgs) {
+    return aArgs[aName];
+  } else if (arguments.length === 3) {
+    return aDefaultValue;
+  } else {
+    throw new Error('"' + aName + '" is a required argument.');
+  }
+}
+exports.getArg = getArg;
 
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
+var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
+var dataUrlRegexp = /^data:.+\,.+$/;
 
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
+function urlParse(aUrl) {
+  var match = aUrl.match(urlRegexp);
+  if (!match) {
+    return null;
+  }
+  return {
+    scheme: match[1],
+    auth: match[2],
+    host: match[3],
+    port: match[4],
+    path: match[5]
+  };
+}
+exports.urlParse = urlParse;
 
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
+function urlGenerate(aParsedUrl) {
+  var url = '';
+  if (aParsedUrl.scheme) {
+    url += aParsedUrl.scheme + ':';
+  }
+  url += '//';
+  if (aParsedUrl.auth) {
+    url += aParsedUrl.auth + '@';
+  }
+  if (aParsedUrl.host) {
+    url += aParsedUrl.host;
+  }
+  if (aParsedUrl.port) {
+    url += ":" + aParsedUrl.port
+  }
+  if (aParsedUrl.path) {
+    url += aParsedUrl.path;
+  }
+  return url;
+}
+exports.urlGenerate = urlGenerate;
 
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
+/**
+ * Normalizes a path, or the path portion of a URL:
+ *
+ * - Replaces consecutive slashes with one slash.
+ * - Removes unnecessary '.' parts.
+ * - Removes unnecessary '<dir>/..' parts.
+ *
+ * Based on code in the Node.js 'path' core module.
+ *
+ * @param aPath The path or url to normalize.
+ */
+function normalize(aPath) {
+  var path = aPath;
+  var url = urlParse(aPath);
+  if (url) {
+    if (!url.path) {
+      return aPath;
+    }
+    path = url.path;
+  }
+  var isAbsolute = exports.isAbsolute(path);
 
- ***********************************************************************/
+  var parts = path.split(/\/+/);
+  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
+    part = parts[i];
+    if (part === '.') {
+      parts.splice(i, 1);
+    } else if (part === '..') {
+      up++;
+    } else if (up > 0) {
+      if (part === '') {
+        // The first part is blank if the path is absolute. Trying to go
+        // above the root is a no-op. Therefore we can remove all '..' parts
+        // directly after the root.
+        parts.splice(i + 1, up);
+        up = 0;
+      } else {
+        parts.splice(i, 2);
+        up--;
+      }
+    }
+  }
+  path = parts.join('/');
 
-"use strict";
+  if (path === '') {
+    path = isAbsolute ? '/' : '.';
+  }
 
-(function(){
+  if (url) {
+    url.path = path;
+    return urlGenerate(url);
+  }
+  return path;
+}
+exports.normalize = normalize;
 
-    var normalize_directives = function(body) {
-        var in_directive = true;
+/**
+ * Joins two paths/URLs.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be joined with the root.
+ *
+ * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
+ *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
+ *   first.
+ * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
+ *   is updated with the result and aRoot is returned. Otherwise the result
+ *   is returned.
+ *   - If aPath is absolute, the result is aPath.
+ *   - Otherwise the two paths are joined with a slash.
+ * - Joining for example 'http://' and 'www.example.com' is also supported.
+ */
+function join(aRoot, aPath) {
+  if (aRoot === "") {
+    aRoot = ".";
+  }
+  if (aPath === "") {
+    aPath = ".";
+  }
+  var aPathUrl = urlParse(aPath);
+  var aRootUrl = urlParse(aRoot);
+  if (aRootUrl) {
+    aRoot = aRootUrl.path || '/';
+  }
 
-        for (var i = 0; i < body.length; i++) {
-            if (in_directive && body[i] instanceof AST_Statement && body[i].body instanceof AST_String) {
-                body[i] = new AST_Directive({
-                    start: body[i].start,
-                    end: body[i].end,
-                    value: body[i].body.value
-                });
-            } else if (in_directive && !(body[i] instanceof AST_Statement && body[i].body instanceof AST_String)) {
-                in_directive = false;
-            }
-        }
+  // `join(foo, '//www.example.org')`
+  if (aPathUrl && !aPathUrl.scheme) {
+    if (aRootUrl) {
+      aPathUrl.scheme = aRootUrl.scheme;
+    }
+    return urlGenerate(aPathUrl);
+  }
 
-        return body;
-    };
+  if (aPathUrl || aPath.match(dataUrlRegexp)) {
+    return aPath;
+  }
 
-    var MOZ_TO_ME = {
-        Program: function(M) {
-            return new AST_Toplevel({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                body: normalize_directives(M.body.map(from_moz))
-            });
-        },
-        FunctionDeclaration: function(M) {
-            return new AST_Defun({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                name: from_moz(M.id),
-                argnames: M.params.map(from_moz),
-                body: normalize_directives(from_moz(M.body).body)
-            });
-        },
-        FunctionExpression: function(M) {
-            return new AST_Function({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                name: from_moz(M.id),
-                argnames: M.params.map(from_moz),
-                body: normalize_directives(from_moz(M.body).body)
-            });
-        },
-        ExpressionStatement: function(M) {
-            return new AST_SimpleStatement({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                body: from_moz(M.expression)
-            });
-        },
-        TryStatement: function(M) {
-            var handlers = M.handlers || [M.handler];
-            if (handlers.length > 1 || M.guardedHandlers && M.guardedHandlers.length) {
-                throw new Error("Multiple catch clauses are not supported.");
-            }
-            return new AST_Try({
-                start    : my_start_token(M),
-                end      : my_end_token(M),
-                body     : from_moz(M.block).body,
-                bcatch   : from_moz(handlers[0]),
-                bfinally : M.finalizer ? new AST_Finally(from_moz(M.finalizer)) : null
-            });
-        },
-        Property: function(M) {
-            var key = M.key;
-            var name = key.type == "Identifier" ? key.name : key.value;
-            var args = {
-                start    : my_start_token(key),
-                end      : my_end_token(M.value),
-                key      : name,
-                value    : from_moz(M.value)
-            };
-            switch (M.kind) {
-              case "init":
-                return new AST_ObjectKeyVal(args);
-              case "set":
-                args.value.name = from_moz(key);
-                return new AST_ObjectSetter(args);
-              case "get":
-                args.value.name = from_moz(key);
-                return new AST_ObjectGetter(args);
-            }
-        },
-        ArrayExpression: function(M) {
-            return new AST_Array({
-                start    : my_start_token(M),
-                end      : my_end_token(M),
-                elements : M.elements.map(function(elem){
-                    return elem === null ? new AST_Hole() : from_moz(elem);
-                })
-            });
-        },
-        ObjectExpression: function(M) {
-            return new AST_Object({
-                start      : my_start_token(M),
-                end        : my_end_token(M),
-                properties : M.properties.map(function(prop){
-                    prop.type = "Property";
-                    return from_moz(prop)
-                })
-            });
-        },
-        SequenceExpression: function(M) {
-            return AST_Seq.from_array(M.expressions.map(from_moz));
-        },
-        MemberExpression: function(M) {
-            return new (M.computed ? AST_Sub : AST_Dot)({
-                start      : my_start_token(M),
-                end        : my_end_token(M),
-                property   : M.computed ? from_moz(M.property) : M.property.name,
-                expression : from_moz(M.object)
-            });
-        },
-        SwitchCase: function(M) {
-            return new (M.test ? AST_Case : AST_Default)({
-                start      : my_start_token(M),
-                end        : my_end_token(M),
-                expression : from_moz(M.test),
-                body       : M.consequent.map(from_moz)
-            });
-        },
-        VariableDeclaration: function(M) {
-            return new (M.kind === "const" ? AST_Const : AST_Var)({
-                start       : my_start_token(M),
-                end         : my_end_token(M),
-                definitions : M.declarations.map(from_moz)
-            });
-        },
-        Literal: function(M) {
-            var val = M.value, args = {
-                start  : my_start_token(M),
-                end    : my_end_token(M)
-            };
-            if (val === null) return new AST_Null(args);
-            switch (typeof val) {
-              case "string":
-                args.value = val;
-                return new AST_String(args);
-              case "number":
-                args.value = val;
-                return new AST_Number(args);
-              case "boolean":
-                return new (val ? AST_True : AST_False)(args);
-              default:
-                var rx = M.regex;
-                if (rx && rx.pattern) {
-                    // RegExpLiteral as per ESTree AST spec
-                    args.value = new RegExp(rx.pattern, rx.flags).toString();
-                } else {
-                    // support legacy RegExp
-                    args.value = M.regex && M.raw ? M.raw : val;
-                }
-                return new AST_RegExp(args);
-            }
-        },
-        Identifier: function(M) {
-            var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2];
-            return new (  p.type == "LabeledStatement" ? AST_Label
-                        : p.type == "VariableDeclarator" && p.id === M ? (p.kind == "const" ? AST_SymbolConst : AST_SymbolVar)
-                        : p.type == "FunctionExpression" ? (p.id === M ? AST_SymbolLambda : AST_SymbolFunarg)
-                        : p.type == "FunctionDeclaration" ? (p.id === M ? AST_SymbolDefun : AST_SymbolFunarg)
-                        : p.type == "CatchClause" ? AST_SymbolCatch
-                        : p.type == "BreakStatement" || p.type == "ContinueStatement" ? AST_LabelRef
-                        : AST_SymbolRef)({
-                            start : my_start_token(M),
-                            end   : my_end_token(M),
-                            name  : M.name
-                        });
-        }
-    };
+  // `join('http://', 'www.example.com')`
+  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
+    aRootUrl.host = aPath;
+    return urlGenerate(aRootUrl);
+  }
 
-    MOZ_TO_ME.UpdateExpression =
-    MOZ_TO_ME.UnaryExpression = function To_Moz_Unary(M) {
-        var prefix = "prefix" in M ? M.prefix
-            : M.type == "UnaryExpression" ? true : false;
-        return new (prefix ? AST_UnaryPrefix : AST_UnaryPostfix)({
-            start      : my_start_token(M),
-            end        : my_end_token(M),
-            operator   : M.operator,
-            expression : from_moz(M.argument)
-        });
-    };
+  var joined = aPath.charAt(0) === '/'
+    ? aPath
+    : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
 
-    map("EmptyStatement", AST_EmptyStatement);
-    map("BlockStatement", AST_BlockStatement, "body@body");
-    map("IfStatement", AST_If, "test>condition, consequent>body, alternate>alternative");
-    map("LabeledStatement", AST_LabeledStatement, "label>label, body>body");
-    map("BreakStatement", AST_Break, "label>label");
-    map("ContinueStatement", AST_Continue, "label>label");
-    map("WithStatement", AST_With, "object>expression, body>body");
-    map("SwitchStatement", AST_Switch, "discriminant>expression, cases@body");
-    map("ReturnStatement", AST_Return, "argument>value");
-    map("ThrowStatement", AST_Throw, "argument>value");
-    map("WhileStatement", AST_While, "test>condition, body>body");
-    map("DoWhileStatement", AST_Do, "test>condition, body>body");
-    map("ForStatement", AST_For, "init>init, test>condition, update>step, body>body");
-    map("ForInStatement", AST_ForIn, "left>init, right>object, body>body");
-    map("DebuggerStatement", AST_Debugger);
-    map("VariableDeclarator", AST_VarDef, "id>name, init>value");
-    map("CatchClause", AST_Catch, "param>argname, body%body");
-
-    map("ThisExpression", AST_This);
-    map("BinaryExpression", AST_Binary, "operator=operator, left>left, right>right");
-    map("LogicalExpression", AST_Binary, "operator=operator, left>left, right>right");
-    map("AssignmentExpression", AST_Assign, "operator=operator, left>left, right>right");
-    map("ConditionalExpression", AST_Conditional, "test>condition, consequent>consequent, alternate>alternative");
-    map("NewExpression", AST_New, "callee>expression, arguments@args");
-    map("CallExpression", AST_Call, "callee>expression, arguments@args");
-
-    def_to_moz(AST_Toplevel, function To_Moz_Program(M) {
-        return {
-            type: "Program",
-            body: M.body.map(to_moz)
-        };
-    });
+  if (aRootUrl) {
+    aRootUrl.path = joined;
+    return urlGenerate(aRootUrl);
+  }
+  return joined;
+}
+exports.join = join;
 
-    def_to_moz(AST_Defun, function To_Moz_FunctionDeclaration(M) {
-        return {
-            type: "FunctionDeclaration",
-            id: to_moz(M.name),
-            params: M.argnames.map(to_moz),
-            body: to_moz_block(M)
-        }
-    });
+exports.isAbsolute = function (aPath) {
+  return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);
+};
 
-    def_to_moz(AST_Function, function To_Moz_FunctionExpression(M) {
-        return {
-            type: "FunctionExpression",
-            id: to_moz(M.name),
-            params: M.argnames.map(to_moz),
-            body: to_moz_block(M)
-        }
-    });
+/**
+ * Make a path relative to a URL or another path.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be made relative to aRoot.
+ */
+function relative(aRoot, aPath) {
+  if (aRoot === "") {
+    aRoot = ".";
+  }
 
-    def_to_moz(AST_Directive, function To_Moz_Directive(M) {
-        return {
-            type: "ExpressionStatement",
-            expression: {
-                type: "Literal",
-                value: M.value
-            }
-        };
-    });
+  aRoot = aRoot.replace(/\/$/, '');
 
-    def_to_moz(AST_SimpleStatement, function To_Moz_ExpressionStatement(M) {
-        return {
-            type: "ExpressionStatement",
-            expression: to_moz(M.body)
-        };
-    });
+  // It is possible for the path to be above the root. In this case, simply
+  // checking whether the root is a prefix of the path won't work. Instead, we
+  // need to remove components from the root one by one, until either we find
+  // a prefix that fits, or we run out of components to remove.
+  var level = 0;
+  while (aPath.indexOf(aRoot + '/') !== 0) {
+    var index = aRoot.lastIndexOf("/");
+    if (index < 0) {
+      return aPath;
+    }
 
-    def_to_moz(AST_SwitchBranch, function To_Moz_SwitchCase(M) {
-        return {
-            type: "SwitchCase",
-            test: to_moz(M.expression),
-            consequent: M.body.map(to_moz)
-        };
-    });
+    // If the only part of the root that is left is the scheme (i.e. http://,
+    // file:///, etc.), one or more slashes (/), or simply nothing at all, we
+    // have exhausted all components, so the path is not relative to the root.
+    aRoot = aRoot.slice(0, index);
+    if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
+      return aPath;
+    }
 
-    def_to_moz(AST_Try, function To_Moz_TryStatement(M) {
-        return {
-            type: "TryStatement",
-            block: to_moz_block(M),
-            handler: to_moz(M.bcatch),
-            guardedHandlers: [],
-            finalizer: to_moz(M.bfinally)
-        };
-    });
+    ++level;
+  }
 
-    def_to_moz(AST_Catch, function To_Moz_CatchClause(M) {
-        return {
-            type: "CatchClause",
-            param: to_moz(M.argname),
-            guard: null,
-            body: to_moz_block(M)
-        };
-    });
+  // Make sure we add a "../" for each component we removed from the root.
+  return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
+}
+exports.relative = relative;
 
-    def_to_moz(AST_Definitions, function To_Moz_VariableDeclaration(M) {
-        return {
-            type: "VariableDeclaration",
-            kind: M instanceof AST_Const ? "const" : "var",
-            declarations: M.definitions.map(to_moz)
-        };
-    });
+var supportsNullProto = (function () {
+  var obj = Object.create(null);
+  return !('__proto__' in obj);
+}());
 
-    def_to_moz(AST_Seq, function To_Moz_SequenceExpression(M) {
-        return {
-            type: "SequenceExpression",
-            expressions: M.to_array().map(to_moz)
-        };
-    });
+function identity (s) {
+  return s;
+}
 
-    def_to_moz(AST_PropAccess, function To_Moz_MemberExpression(M) {
-        var isComputed = M instanceof AST_Sub;
-        return {
-            type: "MemberExpression",
-            object: to_moz(M.expression),
-            computed: isComputed,
-            property: isComputed ? to_moz(M.property) : {type: "Identifier", name: M.property}
-        };
-    });
+/**
+ * Because behavior goes wacky when you set `__proto__` on objects, we
+ * have to prefix all the strings in our set with an arbitrary character.
+ *
+ * See https://github.com/mozilla/source-map/pull/31 and
+ * https://github.com/mozilla/source-map/issues/30
+ *
+ * @param String aStr
+ */
+function toSetString(aStr) {
+  if (isProtoString(aStr)) {
+    return '$' + aStr;
+  }
 
-    def_to_moz(AST_Unary, function To_Moz_Unary(M) {
-        return {
-            type: M.operator == "++" || M.operator == "--" ? "UpdateExpression" : "UnaryExpression",
-            operator: M.operator,
-            prefix: M instanceof AST_UnaryPrefix,
-            argument: to_moz(M.expression)
-        };
-    });
+  return aStr;
+}
+exports.toSetString = supportsNullProto ? identity : toSetString;
 
-    def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) {
-        return {
-            type: M.operator == "&&" || M.operator == "||" ? "LogicalExpression" : "BinaryExpression",
-            left: to_moz(M.left),
-            operator: M.operator,
-            right: to_moz(M.right)
-        };
-    });
+function fromSetString(aStr) {
+  if (isProtoString(aStr)) {
+    return aStr.slice(1);
+  }
 
-    def_to_moz(AST_Array, function To_Moz_ArrayExpression(M) {
-        return {
-            type: "ArrayExpression",
-            elements: M.elements.map(to_moz)
-        };
-    });
+  return aStr;
+}
+exports.fromSetString = supportsNullProto ? identity : fromSetString;
 
-    def_to_moz(AST_Object, function To_Moz_ObjectExpression(M) {
-        return {
-            type: "ObjectExpression",
-            properties: M.properties.map(to_moz)
-        };
-    });
+function isProtoString(s) {
+  if (!s) {
+    return false;
+  }
 
-    def_to_moz(AST_ObjectProperty, function To_Moz_Property(M) {
-        var key = (
-            is_identifier(M.key)
-            ? {type: "Identifier", name: M.key}
-            : {type: "Literal", value: M.key}
-        );
-        var kind;
-        if (M instanceof AST_ObjectKeyVal) {
-            kind = "init";
-        } else
-        if (M instanceof AST_ObjectGetter) {
-            kind = "get";
-        } else
-        if (M instanceof AST_ObjectSetter) {
-            kind = "set";
-        }
-        return {
-            type: "Property",
-            kind: kind,
-            key: key,
-            value: to_moz(M.value)
-        };
-    });
+  var length = s.length;
 
-    def_to_moz(AST_Symbol, function To_Moz_Identifier(M) {
-        var def = M.definition();
-        return {
-            type: "Identifier",
-            name: def ? def.mangled_name || def.name : M.name
-        };
-    });
+  if (length < 9 /* "__proto__".length */) {
+    return false;
+  }
 
-    def_to_moz(AST_RegExp, function To_Moz_RegExpLiteral(M) {
-        var value = M.value;
-        return {
-            type: "Literal",
-            value: value,
-            raw: value.toString(),
-            regex: {
-                pattern: value.source,
-                flags: value.toString().match(/[gimuy]*$/)[0]
-            }
-        };
-    });
+  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
+      s.charCodeAt(length - 2) !== 95  /* '_' */ ||
+      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
+      s.charCodeAt(length - 4) !== 116 /* 't' */ ||
+      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
+      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
+      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
+      s.charCodeAt(length - 8) !== 95  /* '_' */ ||
+      s.charCodeAt(length - 9) !== 95  /* '_' */) {
+    return false;
+  }
 
-    def_to_moz(AST_Constant, function To_Moz_Literal(M) {
-        var value = M.value;
-        if (typeof value === 'number' && (value < 0 || (value === 0 && 1 / value < 0))) {
-            return {
-                type: "UnaryExpression",
-                operator: "-",
-                prefix: true,
-                argument: {
-                    type: "Literal",
-                    value: -value,
-                    raw: M.start.raw
-                }
-            };
-        }
-        return {
-            type: "Literal",
-            value: value,
-            raw: M.start.raw
-        };
-    });
+  for (var i = length - 10; i >= 0; i--) {
+    if (s.charCodeAt(i) !== 36 /* '$' */) {
+      return false;
+    }
+  }
 
-    def_to_moz(AST_Atom, function To_Moz_Atom(M) {
-        return {
-            type: "Identifier",
-            name: String(M.value)
-        };
-    });
+  return true;
+}
 
-    AST_Boolean.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast);
-    AST_Null.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast);
-    AST_Hole.DEFMETHOD("to_mozilla_ast", function To_Moz_ArrayHole() { return null });
+/**
+ * Comparator between two mappings where the original positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same original source/line/column, but different generated
+ * line and column the same. Useful when searching for a mapping with a
+ * stubbed out mapping.
+ */
+function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
+  var cmp = mappingA.source - mappingB.source;
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-    AST_Block.DEFMETHOD("to_mozilla_ast", AST_BlockStatement.prototype.to_mozilla_ast);
-    AST_Lambda.DEFMETHOD("to_mozilla_ast", AST_Function.prototype.to_mozilla_ast);
+  cmp = mappingA.originalLine - mappingB.originalLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-    /* -----[ tools ]----- */
+  cmp = mappingA.originalColumn - mappingB.originalColumn;
+  if (cmp !== 0 || onlyCompareOriginal) {
+    return cmp;
+  }
 
-    function raw_token(moznode) {
-        if (moznode.type == "Literal") {
-            return moznode.raw != null ? moznode.raw : moznode.value + "";
-        }
-    }
+  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-    function my_start_token(moznode) {
-        var loc = moznode.loc, start = loc && loc.start;
-        var range = moznode.range;
-        return new AST_Token({
-            file    : loc && loc.source,
-            line    : start && start.line,
-            col     : start && start.column,
-            pos     : range ? range[0] : moznode.start,
-            endline : start && start.line,
-            endcol  : start && start.column,
-            endpos  : range ? range[0] : moznode.start,
-            raw     : raw_token(moznode),
-        });
-    };
+  cmp = mappingA.generatedLine - mappingB.generatedLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-    function my_end_token(moznode) {
-        var loc = moznode.loc, end = loc && loc.end;
-        var range = moznode.range;
-        return new AST_Token({
-            file    : loc && loc.source,
-            line    : end && end.line,
-            col     : end && end.column,
-            pos     : range ? range[1] : moznode.end,
-            endline : end && end.line,
-            endcol  : end && end.column,
-            endpos  : range ? range[1] : moznode.end,
-            raw     : raw_token(moznode),
-        });
-    };
+  return mappingA.name - mappingB.name;
+}
+exports.compareByOriginalPositions = compareByOriginalPositions;
 
-    function map(moztype, mytype, propmap) {
-        var moz_to_me = "function From_Moz_" + moztype + "(M){\n";
-        moz_to_me += "return new U2." + mytype.name + "({\n" +
-            "start: my_start_token(M),\n" +
-            "end: my_end_token(M)";
-
-        var me_to_moz = "function To_Moz_" + moztype + "(M){\n";
-        me_to_moz += "return {\n" +
-            "type: " + JSON.stringify(moztype);
-
-        if (propmap) propmap.split(/\s*,\s*/).forEach(function(prop){
-            var m = /([a-z0-9$_]+)(=|@|>|%)([a-z0-9$_]+)/i.exec(prop);
-            if (!m) throw new Error("Can't understand property map: " + prop);
-            var moz = m[1], how = m[2], my = m[3];
-            moz_to_me += ",\n" + my + ": ";
-            me_to_moz += ",\n" + moz + ": ";
-            switch (how) {
-                case "@":
-                    moz_to_me += "M." + moz + ".map(from_moz)";
-                    me_to_moz += "M." +  my + ".map(to_moz)";
-                    break;
-                case ">":
-                    moz_to_me += "from_moz(M." + moz + ")";
-                    me_to_moz += "to_moz(M." + my + ")";
-                    break;
-                case "=":
-                    moz_to_me += "M." + moz;
-                    me_to_moz += "M." + my;
-                    break;
-                case "%":
-                    moz_to_me += "from_moz(M." + moz + ").body";
-                    me_to_moz += "to_moz_block(M)";
-                    break;
-                default:
-                    throw new Error("Can't understand operator in propmap: " + prop);
-            }
-        });
+/**
+ * Comparator between two mappings with deflated source and name indices where
+ * the generated positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same generated line and column, but different
+ * source/name/original line and column the same. Useful when searching for a
+ * mapping with a stubbed out mapping.
+ */
+function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
+  var cmp = mappingA.generatedLine - mappingB.generatedLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-        moz_to_me += "\n})\n}";
-        me_to_moz += "\n}\n}";
+  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+  if (cmp !== 0 || onlyCompareGenerated) {
+    return cmp;
+  }
 
-        //moz_to_me = parse(moz_to_me).print_to_string({ beautify: true });
-        //me_to_moz = parse(me_to_moz).print_to_string({ beautify: true });
-        //console.log(moz_to_me);
+  cmp = mappingA.source - mappingB.source;
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-        moz_to_me = new Function("U2", "my_start_token", "my_end_token", "from_moz", "return(" + moz_to_me + ")")(
-            exports, my_start_token, my_end_token, from_moz
-        );
-        me_to_moz = new Function("to_moz", "to_moz_block", "return(" + me_to_moz + ")")(
-            to_moz, to_moz_block
-        );
-        MOZ_TO_ME[moztype] = moz_to_me;
-        def_to_moz(mytype, me_to_moz);
-    };
+  cmp = mappingA.originalLine - mappingB.originalLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-    var FROM_MOZ_STACK = null;
+  cmp = mappingA.originalColumn - mappingB.originalColumn;
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-    function from_moz(node) {
-        FROM_MOZ_STACK.push(node);
-        var ret = node != null ? MOZ_TO_ME[node.type](node) : null;
-        FROM_MOZ_STACK.pop();
-        return ret;
-    };
+  return mappingA.name - mappingB.name;
+}
+exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
 
-    AST_Node.from_mozilla_ast = function(node){
-        var save_stack = FROM_MOZ_STACK;
-        FROM_MOZ_STACK = [];
-        var ast = from_moz(node);
-        FROM_MOZ_STACK = save_stack;
-        return ast;
-    };
+function strcmp(aStr1, aStr2) {
+  if (aStr1 === aStr2) {
+    return 0;
+  }
 
-    function set_moz_loc(mynode, moznode, myparent) {
-        var start = mynode.start;
-        var end = mynode.end;
-        if (start.pos != null && end.endpos != null) {
-            moznode.range = [start.pos, end.endpos];
-        }
-        if (start.line) {
-            moznode.loc = {
-                start: {line: start.line, column: start.col},
-                end: end.endline ? {line: end.endline, column: end.endcol} : null
-            };
-            if (start.file) {
-                moznode.loc.source = start.file;
-            }
-        }
-        return moznode;
-    };
+  if (aStr1 > aStr2) {
+    return 1;
+  }
 
-    function def_to_moz(mytype, handler) {
-        mytype.DEFMETHOD("to_mozilla_ast", function() {
-            return set_moz_loc(this, handler(this));
-        });
-    };
+  return -1;
+}
 
-    function to_moz(node) {
-        return node != null ? node.to_mozilla_ast() : null;
-    };
+/**
+ * Comparator between two mappings with inflated source and name strings where
+ * the generated positions are compared.
+ */
+function compareByGeneratedPositionsInflated(mappingA, mappingB) {
+  var cmp = mappingA.generatedLine - mappingB.generatedLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-    function to_moz_block(node) {
-        return {
-            type: "BlockStatement",
-            body: node.body.map(to_moz)
-        };
-    };
+  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-})();
+  cmp = strcmp(mappingA.source, mappingB.source);
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-/***********************************************************************
+  cmp = mappingA.originalLine - mappingB.originalLine;
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
+  cmp = mappingA.originalColumn - mappingB.originalColumn;
+  if (cmp !== 0) {
+    return cmp;
+  }
 
-  -------------------------------- (C) ---------------------------------
+  return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
 
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
+},{}],155:[function(require,module,exports){
+/*
+ * Copyright 2009-2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE.txt or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;
+exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;
+exports.SourceNode = require('./lib/source-node').SourceNode;
 
-  Distributed under the BSD license:
+},{"./lib/source-map-consumer":151,"./lib/source-map-generator":152,"./lib/source-node":153}],156:[function(require,module,exports){
+(function (global){
+var ClientRequest = require('./lib/request')
+var extend = require('xtend')
+var statusCodes = require('builtin-status-codes')
+var url = require('url')
 
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
+var http = exports
 
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
+http.request = function (opts, cb) {
+       if (typeof opts === 'string')
+               opts = url.parse(opts)
+       else
+               opts = extend(opts)
 
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
+       // Normally, the page is loaded from http or https, so not specifying a protocol
+       // will result in a (valid) protocol-relative url. However, this won't work if
+       // the protocol is something else, like 'file:'
+       var defaultProtocol = global.location.protocol.search(/^https?:$/) === -1 ? 'http:' : ''
 
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
+       var protocol = opts.protocol || defaultProtocol
+       var host = opts.hostname || opts.host
+       var port = opts.port
+       var path = opts.path || '/'
 
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
+       // Necessary for IPv6 addresses
+       if (host && host.indexOf(':') !== -1)
+               host = '[' + host + ']'
 
- ***********************************************************************/
+       // This may be a relative url. The browser should always be able to interpret it correctly.
+       opts.url = (host ? (protocol + '//' + host) : '') + (port ? ':' + port : '') + path
+       opts.method = (opts.method || 'GET').toUpperCase()
+       opts.headers = opts.headers || {}
 
-"use strict";
+       // Also valid opts.auth, opts.mode
 
-function find_builtins() {
-    // NaN will be included due to Number.NaN
-    var a = [
-        "null",
-        "true",
-        "false",
-        "Infinity",
-        "-Infinity",
-        "undefined",
-    ];
-    [ Object, Array, Function, Number,
-      String, Boolean, Error, Math,
-      Date, RegExp
-    ].forEach(function(ctor){
-        Object.getOwnPropertyNames(ctor).map(add);
-        if (ctor.prototype) {
-            Object.getOwnPropertyNames(ctor.prototype).map(add);
-        }
-    });
-    function add(name) {
-        push_uniq(a, name);
-    }
-    return a;
+       var req = new ClientRequest(opts)
+       if (cb)
+               req.on('response', cb)
+       return req
 }
 
-function mangle_properties(ast, options) {
-    options = defaults(options, {
-        cache: null,
-        debug: false,
-        ignore_quoted: false,
-        only_cache: false,
-        regex: null,
-        reserved: null,
-    });
-
-    var reserved = options.reserved;
-    if (reserved == null)
-        reserved = find_builtins();
-
-    var cache = options.cache;
-    if (cache == null) {
-        cache = {
-            cname: -1,
-            props: new Dictionary()
-        };
-    }
-
-    var regex = options.regex;
-    var ignore_quoted = options.ignore_quoted;
-
-    // note debug is either false (disabled), or a string of the debug suffix to use (enabled).
-    // note debug may be enabled as an empty string, which is falsey. Also treat passing 'true'
-    // the same as passing an empty string.
-    var debug = (options.debug !== false);
-    var debug_name_suffix;
-    if (debug) {
-        debug_name_suffix = (options.debug === true ? "" : options.debug);
-    }
-
-    var names_to_mangle = [];
-    var unmangleable = [];
-    var ignored = {};
+http.get = function get (opts, cb) {
+       var req = http.request(opts, cb)
+       req.end()
+       return req
+}
 
-    // step 1: find candidates to mangle
-    ast.walk(new TreeWalker(function(node){
-        if (node instanceof AST_ObjectKeyVal) {
-            add(node.key, ignore_quoted && node.quote);
-        }
-        else if (node instanceof AST_ObjectProperty) {
-            // setter or getter, since KeyVal is handled above
-            add(node.key.name);
-        }
-        else if (node instanceof AST_Dot) {
-            add(node.property);
-        }
-        else if (node instanceof AST_Sub) {
-            addStrings(node.property, ignore_quoted);
-        }
-    }));
+http.Agent = function () {}
+http.Agent.defaultMaxSockets = 4
 
-    // step 2: transform the tree, renaming properties
-    return ast.transform(new TreeTransformer(function(node){
-        if (node instanceof AST_ObjectKeyVal) {
-            if (!(ignore_quoted && node.quote))
-                node.key = mangle(node.key);
-        }
-        else if (node instanceof AST_ObjectProperty) {
-            // setter or getter
-            node.key.name = mangle(node.key.name);
-        }
-        else if (node instanceof AST_Dot) {
-            node.property = mangle(node.property);
-        }
-        else if (node instanceof AST_Sub) {
-            if (!ignore_quoted)
-                node.property = mangleStrings(node.property);
-        }
-        // else if (node instanceof AST_String) {
-        //     if (should_mangle(node.value)) {
-        //         AST_Node.warn(
-        //             "Found \"{prop}\" property candidate for mangling in an arbitrary string [{file}:{line},{col}]", {
-        //                 file : node.start.file,
-        //                 line : node.start.line,
-        //                 col  : node.start.col,
-        //                 prop : node.value
-        //             }
-        //         );
-        //     }
-        // }
-    }));
-
-    // only function declarations after this line
-
-    function can_mangle(name) {
-        if (unmangleable.indexOf(name) >= 0) return false;
-        if (reserved.indexOf(name) >= 0) return false;
-        if (options.only_cache) {
-            return cache.props.has(name);
-        }
-        if (/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(name)) return false;
-        return true;
-    }
+http.STATUS_CODES = statusCodes
 
-    function should_mangle(name) {
-        if (ignore_quoted && name in ignored) return false;
-        if (regex && !regex.test(name)) return false;
-        if (reserved.indexOf(name) >= 0) return false;
-        return cache.props.has(name)
-            || names_to_mangle.indexOf(name) >= 0;
-    }
+http.METHODS = [
+       'CHECKOUT',
+       'CONNECT',
+       'COPY',
+       'DELETE',
+       'GET',
+       'HEAD',
+       'LOCK',
+       'M-SEARCH',
+       'MERGE',
+       'MKACTIVITY',
+       'MKCOL',
+       'MOVE',
+       'NOTIFY',
+       'OPTIONS',
+       'PATCH',
+       'POST',
+       'PROPFIND',
+       'PROPPATCH',
+       'PURGE',
+       'PUT',
+       'REPORT',
+       'SEARCH',
+       'SUBSCRIBE',
+       'TRACE',
+       'UNLOCK',
+       'UNSUBSCRIBE'
+]
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{"./lib/request":158,"builtin-status-codes":6,"url":161,"xtend":165}],157:[function(require,module,exports){
+(function (global){
+exports.fetch = isFunction(global.fetch) && isFunction(global.ReadableStream)
 
-    function add(name, ignore) {
-        if (ignore) {
-            ignored[name] = true;
-            return;
-        }
+exports.blobConstructor = false
+try {
+       new Blob([new ArrayBuffer(1)])
+       exports.blobConstructor = true
+} catch (e) {}
 
-        if (can_mangle(name))
-            push_uniq(names_to_mangle, name);
+// The xhr request to example.com may violate some restrictive CSP configurations,
+// so if we're running in a browser that supports `fetch`, avoid calling getXHR()
+// and assume support for certain features below.
+var xhr
+function getXHR () {
+       // Cache the xhr value
+       if (xhr !== undefined) return xhr
 
-        if (!should_mangle(name)) {
-            push_uniq(unmangleable, name);
-        }
-    }
+       if (global.XMLHttpRequest) {
+               xhr = new global.XMLHttpRequest()
+               // If XDomainRequest is available (ie only, where xhr might not work
+               // cross domain), use the page location. Otherwise use example.com
+               // Note: this doesn't actually make an http request.
+               try {
+                       xhr.open('GET', global.XDomainRequest ? '/' : 'https://example.com')
+               } catch(e) {
+                       xhr = null
+               }
+       } else {
+               // Service workers don't have XHR
+               xhr = null
+       }
+       return xhr
+}
 
-    function mangle(name) {
-        if (!should_mangle(name)) {
-            return name;
-        }
+function checkTypeSupport (type) {
+       var xhr = getXHR()
+       if (!xhr) return false
+       try {
+               xhr.responseType = type
+               return xhr.responseType === type
+       } catch (e) {}
+       return false
+}
 
-        var mangled = cache.props.get(name);
-        if (!mangled) {
-            if (debug) {
-                // debug mode: use a prefix and suffix to preserve readability, e.g. o.foo -> o._$foo$NNN_.
-                var debug_mangled = "_$" + name + "$" + debug_name_suffix + "_";
+// For some strange reason, Safari 7.0 reports typeof global.ArrayBuffer === 'object'.
+// Safari 7.1 appears to have fixed this bug.
+var haveArrayBuffer = typeof global.ArrayBuffer !== 'undefined'
+var haveSlice = haveArrayBuffer && isFunction(global.ArrayBuffer.prototype.slice)
 
-                if (can_mangle(debug_mangled) && !(ignore_quoted && debug_mangled in ignored)) {
-                    mangled = debug_mangled;
-                }
-            }
+// If fetch is supported, then arraybuffer will be supported too. Skip calling
+// checkTypeSupport(), since that calls getXHR().
+exports.arraybuffer = exports.fetch || (haveArrayBuffer && checkTypeSupport('arraybuffer'))
 
-            // either debug mode is off, or it is on and we could not use the mangled name
-            if (!mangled) {
-                // note can_mangle() does not check if the name collides with the 'ignored' set
-                // (filled with quoted properties when ignore_quoted set). Make sure we add this
-                // check so we don't collide with a quoted name.
-                do {
-                    mangled = base54(++cache.cname);
-                } while (!can_mangle(mangled) || (ignore_quoted && mangled in ignored));
-            }
+// These next two tests unavoidably show warnings in Chrome. Since fetch will always
+// be used if it's available, just return false for these to avoid the warnings.
+exports.msstream = !exports.fetch && haveSlice && checkTypeSupport('ms-stream')
+exports.mozchunkedarraybuffer = !exports.fetch && haveArrayBuffer &&
+       checkTypeSupport('moz-chunked-arraybuffer')
 
-            cache.props.set(name, mangled);
-        }
-        return mangled;
-    }
+// If fetch is supported, then overrideMimeType will be supported too. Skip calling
+// getXHR().
+exports.overrideMimeType = exports.fetch || (getXHR() ? isFunction(getXHR().overrideMimeType) : false)
 
-    function addStrings(node, ignore) {
-        var out = {};
-        try {
-            (function walk(node){
-                node.walk(new TreeWalker(function(node){
-                    if (node instanceof AST_Seq) {
-                        walk(node.cdr);
-                        return true;
-                    }
-                    if (node instanceof AST_String) {
-                        add(node.value, ignore);
-                        return true;
-                    }
-                    if (node instanceof AST_Conditional) {
-                        walk(node.consequent);
-                        walk(node.alternative);
-                        return true;
-                    }
-                    throw out;
-                }));
-            })(node);
-        } catch(ex) {
-            if (ex !== out) throw ex;
-        }
-    }
+exports.vbArray = isFunction(global.VBArray)
 
-    function mangleStrings(node) {
-        return node.transform(new TreeTransformer(function(node){
-            if (node instanceof AST_Seq) {
-                node.cdr = mangleStrings(node.cdr);
-            }
-            else if (node instanceof AST_String) {
-                node.value = mangle(node.value);
-            }
-            else if (node instanceof AST_Conditional) {
-                node.consequent = mangleStrings(node.consequent);
-                node.alternative = mangleStrings(node.alternative);
-            }
-            return node;
-        }));
-    }
-
-}
-
-exports["Compressor"] = Compressor;
-exports["DefaultsError"] = DefaultsError;
-exports["Dictionary"] = Dictionary;
-exports["JS_Parse_Error"] = JS_Parse_Error;
-exports["MAP"] = MAP;
-exports["OutputStream"] = OutputStream;
-exports["SourceMap"] = SourceMap;
-exports["TreeTransformer"] = TreeTransformer;
-exports["TreeWalker"] = TreeWalker;
-exports["base54"] = base54;
-exports["defaults"] = defaults;
-exports["mangle_properties"] = mangle_properties;
-exports["merge"] = merge;
-exports["parse"] = parse;
-exports["push_uniq"] = push_uniq;
-exports["string_template"] = string_template;
-exports["tokenizer"] = tokenizer;
-exports["is_identifier"] = is_identifier;
-exports["SymbolDef"] = SymbolDef;
-
-
-exports.sys = sys;
-exports.MOZ_SourceMap = MOZ_SourceMap;
-exports.UglifyJS = UglifyJS;
-exports.array_to_hash = array_to_hash;
-exports.slice = slice;
-exports.characters = characters;
-exports.member = member;
-exports.find_if = find_if;
-exports.repeat_string = repeat_string;
-exports.configure_error_stack = configure_error_stack;
-exports.DefaultsError = DefaultsError;
-exports.defaults = defaults;
-exports.merge = merge;
-exports.noop = noop;
-exports.return_false = return_false;
-exports.return_true = return_true;
-exports.return_this = return_this;
-exports.return_null = return_null;
-exports.MAP = MAP;
-exports.push_uniq = push_uniq;
-exports.string_template = string_template;
-exports.remove = remove;
-exports.mergeSort = mergeSort;
-exports.set_difference = set_difference;
-exports.set_intersection = set_intersection;
-exports.makePredicate = makePredicate;
-exports.all = all;
-exports.Dictionary = Dictionary;
-exports.HOP = HOP;
-exports.first_in_statement = first_in_statement;
-exports.DEFNODE = DEFNODE;
-exports.AST_Token = AST_Token;
-exports.AST_Node = AST_Node;
-exports.AST_Statement = AST_Statement;
-exports.AST_Debugger = AST_Debugger;
-exports.AST_Directive = AST_Directive;
-exports.AST_SimpleStatement = AST_SimpleStatement;
-exports.walk_body = walk_body;
-exports.AST_Block = AST_Block;
-exports.AST_BlockStatement = AST_BlockStatement;
-exports.AST_EmptyStatement = AST_EmptyStatement;
-exports.AST_StatementWithBody = AST_StatementWithBody;
-exports.AST_LabeledStatement = AST_LabeledStatement;
-exports.AST_IterationStatement = AST_IterationStatement;
-exports.AST_DWLoop = AST_DWLoop;
-exports.AST_Do = AST_Do;
-exports.AST_While = AST_While;
-exports.AST_For = AST_For;
-exports.AST_ForIn = AST_ForIn;
-exports.AST_With = AST_With;
-exports.AST_Scope = AST_Scope;
-exports.AST_Toplevel = AST_Toplevel;
-exports.AST_Lambda = AST_Lambda;
-exports.AST_Accessor = AST_Accessor;
-exports.AST_Function = AST_Function;
-exports.AST_Defun = AST_Defun;
-exports.AST_Jump = AST_Jump;
-exports.AST_Exit = AST_Exit;
-exports.AST_Return = AST_Return;
-exports.AST_Throw = AST_Throw;
-exports.AST_LoopControl = AST_LoopControl;
-exports.AST_Break = AST_Break;
-exports.AST_Continue = AST_Continue;
-exports.AST_If = AST_If;
-exports.AST_Switch = AST_Switch;
-exports.AST_SwitchBranch = AST_SwitchBranch;
-exports.AST_Default = AST_Default;
-exports.AST_Case = AST_Case;
-exports.AST_Try = AST_Try;
-exports.AST_Catch = AST_Catch;
-exports.AST_Finally = AST_Finally;
-exports.AST_Definitions = AST_Definitions;
-exports.AST_Var = AST_Var;
-exports.AST_Const = AST_Const;
-exports.AST_VarDef = AST_VarDef;
-exports.AST_Call = AST_Call;
-exports.AST_New = AST_New;
-exports.AST_Seq = AST_Seq;
-exports.AST_PropAccess = AST_PropAccess;
-exports.AST_Dot = AST_Dot;
-exports.AST_Sub = AST_Sub;
-exports.AST_Unary = AST_Unary;
-exports.AST_UnaryPrefix = AST_UnaryPrefix;
-exports.AST_UnaryPostfix = AST_UnaryPostfix;
-exports.AST_Binary = AST_Binary;
-exports.AST_Conditional = AST_Conditional;
-exports.AST_Assign = AST_Assign;
-exports.AST_Array = AST_Array;
-exports.AST_Object = AST_Object;
-exports.AST_ObjectProperty = AST_ObjectProperty;
-exports.AST_ObjectKeyVal = AST_ObjectKeyVal;
-exports.AST_ObjectSetter = AST_ObjectSetter;
-exports.AST_ObjectGetter = AST_ObjectGetter;
-exports.AST_Symbol = AST_Symbol;
-exports.AST_SymbolAccessor = AST_SymbolAccessor;
-exports.AST_SymbolDeclaration = AST_SymbolDeclaration;
-exports.AST_SymbolVar = AST_SymbolVar;
-exports.AST_SymbolConst = AST_SymbolConst;
-exports.AST_SymbolFunarg = AST_SymbolFunarg;
-exports.AST_SymbolDefun = AST_SymbolDefun;
-exports.AST_SymbolLambda = AST_SymbolLambda;
-exports.AST_SymbolCatch = AST_SymbolCatch;
-exports.AST_Label = AST_Label;
-exports.AST_SymbolRef = AST_SymbolRef;
-exports.AST_LabelRef = AST_LabelRef;
-exports.AST_This = AST_This;
-exports.AST_Constant = AST_Constant;
-exports.AST_String = AST_String;
-exports.AST_Number = AST_Number;
-exports.AST_RegExp = AST_RegExp;
-exports.AST_Atom = AST_Atom;
-exports.AST_Null = AST_Null;
-exports.AST_NaN = AST_NaN;
-exports.AST_Undefined = AST_Undefined;
-exports.AST_Hole = AST_Hole;
-exports.AST_Infinity = AST_Infinity;
-exports.AST_Boolean = AST_Boolean;
-exports.AST_False = AST_False;
-exports.AST_True = AST_True;
-exports.TreeWalker = TreeWalker;
-exports.KEYWORDS = KEYWORDS;
-exports.KEYWORDS_ATOM = KEYWORDS_ATOM;
-exports.RESERVED_WORDS = RESERVED_WORDS;
-exports.KEYWORDS_BEFORE_EXPRESSION = KEYWORDS_BEFORE_EXPRESSION;
-exports.OPERATOR_CHARS = OPERATOR_CHARS;
-exports.RE_HEX_NUMBER = RE_HEX_NUMBER;
-exports.RE_OCT_NUMBER = RE_OCT_NUMBER;
-exports.OPERATORS = OPERATORS;
-exports.WHITESPACE_CHARS = WHITESPACE_CHARS;
-exports.NEWLINE_CHARS = NEWLINE_CHARS;
-exports.PUNC_BEFORE_EXPRESSION = PUNC_BEFORE_EXPRESSION;
-exports.PUNC_CHARS = PUNC_CHARS;
-exports.REGEXP_MODIFIERS = REGEXP_MODIFIERS;
-exports.UNICODE = UNICODE;
-exports.is_letter = is_letter;
-exports.is_digit = is_digit;
-exports.is_alphanumeric_char = is_alphanumeric_char;
-exports.is_unicode_digit = is_unicode_digit;
-exports.is_unicode_combining_mark = is_unicode_combining_mark;
-exports.is_unicode_connector_punctuation = is_unicode_connector_punctuation;
-exports.is_identifier = is_identifier;
-exports.is_identifier_start = is_identifier_start;
-exports.is_identifier_char = is_identifier_char;
-exports.is_identifier_string = is_identifier_string;
-exports.parse_js_number = parse_js_number;
-exports.JS_Parse_Error = JS_Parse_Error;
-exports.js_error = js_error;
-exports.is_token = is_token;
-exports.EX_EOF = EX_EOF;
-exports.tokenizer = tokenizer;
-exports.UNARY_PREFIX = UNARY_PREFIX;
-exports.UNARY_POSTFIX = UNARY_POSTFIX;
-exports.ASSIGNMENT = ASSIGNMENT;
-exports.PRECEDENCE = PRECEDENCE;
-exports.STATEMENTS_WITH_LABELS = STATEMENTS_WITH_LABELS;
-exports.ATOMIC_START_TOKEN = ATOMIC_START_TOKEN;
-exports.parse = parse;
-exports.TreeTransformer = TreeTransformer;
-exports.SymbolDef = SymbolDef;
-exports.base54 = base54;
-exports.EXPECT_DIRECTIVE = EXPECT_DIRECTIVE;
-exports.is_some_comments = is_some_comments;
-exports.OutputStream = OutputStream;
-exports.Compressor = Compressor;
-exports.SourceMap = SourceMap;
-exports.find_builtins = find_builtins;
-exports.mangle_properties = mangle_properties;
-
-exports.AST_Node.warn_function = function (txt) { if (typeof console != "undefined" && typeof console.warn === "function") console.warn(txt) }
-
-exports.minify = function (files, options) {
-    options = UglifyJS.defaults(options, {
-        compress         : {},
-        fromString       : false,
-        inSourceMap      : null,
-        mangle           : {},
-        mangleProperties : false,
-        nameCache        : null,
-        outFileName      : null,
-        output           : null,
-        outSourceMap     : null,
-        parse            : {},
-        sourceMapInline  : false,
-        sourceMapUrl     : null,
-        sourceRoot       : null,
-        spidermonkey     : false,
-        warnings         : false,
-    });
-    UglifyJS.base54.reset();
+function isFunction (value) {
+       return typeof value === 'function'
+}
 
-    var inMap = options.inSourceMap;
-    if (typeof inMap == "string" && inMap != "inline") {
-        inMap = JSON.parse(fs.readFileSync(inMap, "utf8"));
-    }
+xhr = null // Help gc
 
-    // 1. parse
-    var toplevel = null,
-        sourcesContent = {};
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],158:[function(require,module,exports){
+(function (process,global,Buffer){
+var capability = require('./capability')
+var inherits = require('inherits')
+var response = require('./response')
+var stream = require('readable-stream')
+var toArrayBuffer = require('to-arraybuffer')
 
-    if (options.spidermonkey) {
-        if (inMap == "inline") {
-            throw new Error("inline source map only works with built-in parser");
-        }
-        toplevel = UglifyJS.AST_Node.from_mozilla_ast(files);
-    } else {
-        function addFile(file, fileUrl) {
-            var code = options.fromString
-                ? file
-                : fs.readFileSync(file, "utf8");
-            if (inMap == "inline") {
-                inMap = read_source_map(code);
-            }
-            sourcesContent[fileUrl] = code;
-            toplevel = UglifyJS.parse(code, {
-                filename: fileUrl,
-                toplevel: toplevel,
-                bare_returns: options.parse ? options.parse.bare_returns : undefined
-            });
-        }
-        if (!options.fromString) {
-            files = UglifyJS.simple_glob(files);
-            if (inMap == "inline" && files.length > 1) {
-                throw new Error("inline source map only works with singular input");
-            }
-        }
-        [].concat(files).forEach(function (files, i) {
-            if (typeof files === 'string') {
-                addFile(files, options.fromString ? i : files);
-            } else {
-                for (var fileUrl in files) {
-                    addFile(files[fileUrl], fileUrl);
-                }
-            }
-        });
-    }
-    if (options.wrap) {
-      toplevel = toplevel.wrap_commonjs(options.wrap, options.exportAll);
-    }
+var IncomingMessage = response.IncomingMessage
+var rStates = response.readyStates
 
-    // 2. compress
-    if (options.compress) {
-        var compress = { warnings: options.warnings };
-        UglifyJS.merge(compress, options.compress);
-        toplevel.figure_out_scope(options.mangle);
-        var sq = UglifyJS.Compressor(compress);
-        toplevel = sq.compress(toplevel);
-    }
+function decideMode (preferBinary, useFetch) {
+       if (capability.fetch && useFetch) {
+               return 'fetch'
+       } else if (capability.mozchunkedarraybuffer) {
+               return 'moz-chunked-arraybuffer'
+       } else if (capability.msstream) {
+               return 'ms-stream'
+       } else if (capability.arraybuffer && preferBinary) {
+               return 'arraybuffer'
+       } else if (capability.vbArray && preferBinary) {
+               return 'text:vbarray'
+       } else {
+               return 'text'
+       }
+}
 
-    // 3. mangle properties
-    if (options.mangleProperties || options.nameCache) {
-        options.mangleProperties.cache = UglifyJS.readNameCache(options.nameCache, "props");
-        toplevel = UglifyJS.mangle_properties(toplevel, options.mangleProperties);
-        UglifyJS.writeNameCache(options.nameCache, "props", options.mangleProperties.cache);
-    }
+var ClientRequest = module.exports = function (opts) {
+       var self = this
+       stream.Writable.call(self)
 
-    // 4. mangle
-    if (options.mangle) {
-        toplevel.figure_out_scope(options.mangle);
-        toplevel.compute_char_frequency(options.mangle);
-        toplevel.mangle_names(options.mangle);
-    }
+       self._opts = opts
+       self._body = []
+       self._headers = {}
+       if (opts.auth)
+               self.setHeader('Authorization', 'Basic ' + new Buffer(opts.auth).toString('base64'))
+       Object.keys(opts.headers).forEach(function (name) {
+               self.setHeader(name, opts.headers[name])
+       })
 
-    // 5. output
-    var output = { max_line_len: 32000 };
-    if (options.outSourceMap || options.sourceMapInline) {
-        output.source_map = UglifyJS.SourceMap({
-            // prefer outFileName, otherwise use outSourceMap without .map suffix
-            file: options.outFileName || (typeof options.outSourceMap === 'string' ? options.outSourceMap.replace(/\.map$/i, '') : null),
-            orig: inMap,
-            root: options.sourceRoot
-        });
-        if (options.sourceMapIncludeSources) {
-            for (var file in sourcesContent) {
-                if (sourcesContent.hasOwnProperty(file)) {
-                    output.source_map.get().setSourceContent(file, sourcesContent[file]);
-                }
-            }
-        }
+       var preferBinary
+       var useFetch = true
+       if (opts.mode === 'disable-fetch' || 'timeout' in opts) {
+               // If the use of XHR should be preferred and includes preserving the 'content-type' header.
+               // Force XHR to be used since the Fetch API does not yet support timeouts.
+               useFetch = false
+               preferBinary = true
+       } else if (opts.mode === 'prefer-streaming') {
+               // If streaming is a high priority but binary compatibility and
+               // the accuracy of the 'content-type' header aren't
+               preferBinary = false
+       } else if (opts.mode === 'allow-wrong-content-type') {
+               // If streaming is more important than preserving the 'content-type' header
+               preferBinary = !capability.overrideMimeType
+       } else if (!opts.mode || opts.mode === 'default' || opts.mode === 'prefer-fast') {
+               // Use binary if text streaming may corrupt data or the content-type header, or for speed
+               preferBinary = true
+       } else {
+               throw new Error('Invalid value for opts.mode')
+       }
+       self._mode = decideMode(preferBinary, useFetch)
 
-    }
-    if (options.output) {
-        UglifyJS.merge(output, options.output);
-    }
-    var stream = UglifyJS.OutputStream(output);
-    toplevel.print(stream);
+       self.on('finish', function () {
+               self._onFinish()
+       })
+}
 
+inherits(ClientRequest, stream.Writable)
 
-    var source_map = output.source_map;
-    if (source_map) {
-        source_map = source_map + "";
-    }
+ClientRequest.prototype.setHeader = function (name, value) {
+       var self = this
+       var lowerName = name.toLowerCase()
+       // This check is not necessary, but it prevents warnings from browsers about setting unsafe
+       // headers. To be honest I'm not entirely sure hiding these warnings is a good thing, but
+       // http-browserify did it, so I will too.
+       if (unsafeHeaders.indexOf(lowerName) !== -1)
+               return
 
-    var mappingUrlPrefix = "\n//# sourceMappingURL=";
-    if (options.sourceMapInline) {
-        stream += mappingUrlPrefix + "data:application/json;charset=utf-8;base64," + new Buffer(source_map).toString("base64");
-    } else if (options.outSourceMap && typeof options.outSourceMap === "string" && options.sourceMapUrl !== false) {
-        stream += mappingUrlPrefix + (typeof options.sourceMapUrl === "string" ? options.sourceMapUrl : options.outSourceMap);
-    }
+       self._headers[lowerName] = {
+               name: name,
+               value: value
+       }
+}
 
-    return {
-        code : stream + "",
-        map  : source_map
-    };
-};
+ClientRequest.prototype.getHeader = function (name) {
+       var header = this._headers[name.toLowerCase()]
+       if (header)
+               return header.value
+       return null
+}
 
-exports.describe_ast = function () {
-    var out = UglifyJS.OutputStream({ beautify: true });
-    function doitem(ctor) {
-        out.print("AST_" + ctor.TYPE);
-        var props = ctor.SELF_PROPS.filter(function(prop){
-            return !/^\$/.test(prop);
-        });
-        if (props.length > 0) {
-            out.space();
-            out.with_parens(function(){
-                props.forEach(function(prop, i){
-                    if (i) out.space();
-                    out.print(prop);
-                });
-            });
-        }
-        if (ctor.documentation) {
-            out.space();
-            out.print_string(ctor.documentation);
-        }
-        if (ctor.SUBCLASSES.length > 0) {
-            out.space();
-            out.with_block(function(){
-                ctor.SUBCLASSES.forEach(function(ctor, i){
-                    out.indent();
-                    doitem(ctor);
-                    out.newline();
-                });
-            });
-        }
-    };
-    doitem(UglifyJS.AST_Node);
-    return out + "";
-};
-}).call(this,require("buffer").Buffer)
-},{"buffer":5,"source-map":152,"util":164}],159:[function(require,module,exports){
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
+ClientRequest.prototype.removeHeader = function (name) {
+       var self = this
+       delete self._headers[name.toLowerCase()]
+}
 
-'use strict';
+ClientRequest.prototype._onFinish = function () {
+       var self = this
 
-var punycode = require('punycode');
-var util = require('./util');
+       if (self._destroyed)
+               return
+       var opts = self._opts
 
-exports.parse = urlParse;
-exports.resolve = urlResolve;
-exports.resolveObject = urlResolveObject;
-exports.format = urlFormat;
+       var headersObj = self._headers
+       var body = null
+       if (opts.method !== 'GET' && opts.method !== 'HEAD') {
+               if (capability.blobConstructor) {
+                       body = new global.Blob(self._body.map(function (buffer) {
+                               return toArrayBuffer(buffer)
+                       }), {
+                               type: (headersObj['content-type'] || {}).value || ''
+                       })
+               } else {
+                       // get utf8 string
+                       body = Buffer.concat(self._body).toString()
+               }
+       }
 
-exports.Url = Url;
+       // create flattened list of headers
+       var headersList = []
+       Object.keys(headersObj).forEach(function (keyName) {
+               var name = headersObj[keyName].name
+               var value = headersObj[keyName].value
+               if (Array.isArray(value)) {
+                       value.forEach(function (v) {
+                               headersList.push([name, v])
+                       })
+               } else {
+                       headersList.push([name, value])
+               }
+       })
 
-function Url() {
-  this.protocol = null;
-  this.slashes = null;
-  this.auth = null;
-  this.host = null;
-  this.port = null;
-  this.hostname = null;
-  this.hash = null;
-  this.search = null;
-  this.query = null;
-  this.pathname = null;
-  this.path = null;
-  this.href = null;
-}
+       if (self._mode === 'fetch') {
+               global.fetch(self._opts.url, {
+                       method: self._opts.method,
+                       headers: headersList,
+                       body: body || undefined,
+                       mode: 'cors',
+                       credentials: opts.withCredentials ? 'include' : 'same-origin'
+               }).then(function (response) {
+                       self._fetchResponse = response
+                       self._connect()
+               }, function (reason) {
+                       self.emit('error', reason)
+               })
+       } else {
+               var xhr = self._xhr = new global.XMLHttpRequest()
+               try {
+                       xhr.open(self._opts.method, self._opts.url, true)
+               } catch (err) {
+                       process.nextTick(function () {
+                               self.emit('error', err)
+                       })
+                       return
+               }
 
-// Reference: RFC 3986, RFC 1808, RFC 2396
+               // Can't set responseType on really old browsers
+               if ('responseType' in xhr)
+                       xhr.responseType = self._mode.split(':')[0]
 
-// define these here so at least they only have to be
-// compiled once on the first module load.
-var protocolPattern = /^([a-z0-9.+-]+:)/i,
-    portPattern = /:[0-9]*$/,
+               if ('withCredentials' in xhr)
+                       xhr.withCredentials = !!opts.withCredentials
 
-    // Special case for a simple path URL
-    simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
+               if (self._mode === 'text' && 'overrideMimeType' in xhr)
+                       xhr.overrideMimeType('text/plain; charset=x-user-defined')
 
-    // RFC 2396: characters reserved for delimiting URLs.
-    // We actually just auto-escape these.
-    delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],
+               if ('timeout' in opts) {
+                       xhr.timeout = opts.timeout
+                       xhr.ontimeout = function () {
+                               self.emit('timeout')
+                       }
+               }
 
-    // RFC 2396: characters not allowed for various reasons.
-    unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims),
+               headersList.forEach(function (header) {
+                       xhr.setRequestHeader(header[0], header[1])
+               })
 
-    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.
-    autoEscape = ['\''].concat(unwise),
-    // Characters that are never ever allowed in a hostname.
-    // Note that any invalid chars are also handled, but these
-    // are the ones that are *expected* to be seen, so we fast-path
-    // them.
-    nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),
-    hostEndingChars = ['/', '?', '#'],
-    hostnameMaxLen = 255,
-    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,
-    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
-    // protocols that can allow "unsafe" and "unwise" chars.
-    unsafeProtocol = {
-      'javascript': true,
-      'javascript:': true
-    },
-    // protocols that never have a hostname.
-    hostlessProtocol = {
-      'javascript': true,
-      'javascript:': true
-    },
-    // protocols that always contain a // bit.
-    slashedProtocol = {
-      'http': true,
-      'https': true,
-      'ftp': true,
-      'gopher': true,
-      'file': true,
-      'http:': true,
-      'https:': true,
-      'ftp:': true,
-      'gopher:': true,
-      'file:': true
-    },
-    querystring = require('querystring');
+               self._response = null
+               xhr.onreadystatechange = function () {
+                       switch (xhr.readyState) {
+                               case rStates.LOADING:
+                               case rStates.DONE:
+                                       self._onXHRProgress()
+                                       break
+                       }
+               }
+               // Necessary for streaming in Firefox, since xhr.response is ONLY defined
+               // in onprogress, not in onreadystatechange with xhr.readyState = 3
+               if (self._mode === 'moz-chunked-arraybuffer') {
+                       xhr.onprogress = function () {
+                               self._onXHRProgress()
+                       }
+               }
 
-function urlParse(url, parseQueryString, slashesDenoteHost) {
-  if (url && util.isObject(url) && url instanceof Url) return url;
+               xhr.onerror = function () {
+                       if (self._destroyed)
+                               return
+                       self.emit('error', new Error('XHR error'))
+               }
 
-  var u = new Url;
-  u.parse(url, parseQueryString, slashesDenoteHost);
-  return u;
+               try {
+                       xhr.send(body)
+               } catch (err) {
+                       process.nextTick(function () {
+                               self.emit('error', err)
+                       })
+                       return
+               }
+       }
 }
 
-Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
-  if (!util.isString(url)) {
-    throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
-  }
-
-  // Copy chrome, IE, opera backslash-handling behavior.
-  // Back slashes before the query string get converted to forward slashes
-  // See: https://code.google.com/p/chromium/issues/detail?id=25916
-  var queryIndex = url.indexOf('?'),
-      splitter =
-          (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',
-      uSplit = url.split(splitter),
-      slashRegex = /\\/g;
-  uSplit[0] = uSplit[0].replace(slashRegex, '/');
-  url = uSplit.join(splitter);
-
-  var rest = url;
+/**
+ * Checks if xhr.status is readable and non-zero, indicating no error.
+ * Even though the spec says it should be available in readyState 3,
+ * accessing it throws an exception in IE8
+ */
+function statusValid (xhr) {
+       try {
+               var status = xhr.status
+               return (status !== null && status !== 0)
+       } catch (e) {
+               return false
+       }
+}
 
-  // trim before proceeding.
-  // This is to support parse stuff like "  http://foo.com  \n"
-  rest = rest.trim();
+ClientRequest.prototype._onXHRProgress = function () {
+       var self = this
 
-  if (!slashesDenoteHost && url.split('#').length === 1) {
-    // Try fast path regexp
-    var simplePath = simplePathPattern.exec(rest);
-    if (simplePath) {
-      this.path = rest;
-      this.href = rest;
-      this.pathname = simplePath[1];
-      if (simplePath[2]) {
-        this.search = simplePath[2];
-        if (parseQueryString) {
-          this.query = querystring.parse(this.search.substr(1));
-        } else {
-          this.query = this.search.substr(1);
-        }
-      } else if (parseQueryString) {
-        this.search = '';
-        this.query = {};
-      }
-      return this;
-    }
-  }
+       if (!statusValid(self._xhr) || self._destroyed)
+               return
 
-  var proto = protocolPattern.exec(rest);
-  if (proto) {
-    proto = proto[0];
-    var lowerProto = proto.toLowerCase();
-    this.protocol = lowerProto;
-    rest = rest.substr(proto.length);
-  }
+       if (!self._response)
+               self._connect()
 
-  // figure out if it's got a host
-  // user@server is *always* interpreted as a hostname, and url
-  // resolution will treat //foo/bar as host=foo,path=bar because that's
-  // how the browser resolves relative URLs.
-  if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
-    var slashes = rest.substr(0, 2) === '//';
-    if (slashes && !(proto && hostlessProtocol[proto])) {
-      rest = rest.substr(2);
-      this.slashes = true;
-    }
-  }
+       self._response._onXHRProgress()
+}
 
-  if (!hostlessProtocol[proto] &&
-      (slashes || (proto && !slashedProtocol[proto]))) {
+ClientRequest.prototype._connect = function () {
+       var self = this
 
-    // there's a hostname.
-    // the first instance of /, ?, ;, or # ends the host.
-    //
-    // If there is an @ in the hostname, then non-host chars *are* allowed
-    // to the left of the last @ sign, unless some host-ending character
-    // comes *before* the @-sign.
-    // URLs are obnoxious.
-    //
-    // ex:
-    // http://a@b@c/ => user:a@b host:c
-    // http://a@b?@c => user:a host:c path:/?@c
+       if (self._destroyed)
+               return
 
-    // v0.12 TODO(isaacs): This is not quite how Chrome does things.
-    // Review our test case against browsers more comprehensively.
+       self._response = new IncomingMessage(self._xhr, self._fetchResponse, self._mode)
+       self._response.on('error', function(err) {
+               self.emit('error', err)
+       })
 
-    // find the first instance of any hostEndingChars
-    var hostEnd = -1;
-    for (var i = 0; i < hostEndingChars.length; i++) {
-      var hec = rest.indexOf(hostEndingChars[i]);
-      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
-        hostEnd = hec;
-    }
+       self.emit('response', self._response)
+}
 
-    // at this point, either we have an explicit point where the
-    // auth portion cannot go past, or the last @ char is the decider.
-    var auth, atSign;
-    if (hostEnd === -1) {
-      // atSign can be anywhere.
-      atSign = rest.lastIndexOf('@');
-    } else {
-      // atSign must be in auth portion.
-      // http://a@b/c@d => host:b auth:a path:/c@d
-      atSign = rest.lastIndexOf('@', hostEnd);
-    }
+ClientRequest.prototype._write = function (chunk, encoding, cb) {
+       var self = this
 
-    // Now we have a portion which is definitely the auth.
-    // Pull that off.
-    if (atSign !== -1) {
-      auth = rest.slice(0, atSign);
-      rest = rest.slice(atSign + 1);
-      this.auth = decodeURIComponent(auth);
-    }
+       self._body.push(chunk)
+       cb()
+}
 
-    // the host is the remaining to the left of the first non-host char
-    hostEnd = -1;
-    for (var i = 0; i < nonHostChars.length; i++) {
-      var hec = rest.indexOf(nonHostChars[i]);
-      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
-        hostEnd = hec;
-    }
-    // if we still have not hit it, then the entire thing is a host.
-    if (hostEnd === -1)
-      hostEnd = rest.length;
+ClientRequest.prototype.abort = ClientRequest.prototype.destroy = function () {
+       var self = this
+       self._destroyed = true
+       if (self._response)
+               self._response._destroyed = true
+       if (self._xhr)
+               self._xhr.abort()
+       // Currently, there isn't a way to truly abort a fetch.
+       // If you like bikeshedding, see https://github.com/whatwg/fetch/issues/27
+}
 
-    this.host = rest.slice(0, hostEnd);
-    rest = rest.slice(hostEnd);
+ClientRequest.prototype.end = function (data, encoding, cb) {
+       var self = this
+       if (typeof data === 'function') {
+               cb = data
+               data = undefined
+       }
 
-    // pull out port.
-    this.parseHost();
+       stream.Writable.prototype.end.call(self, data, encoding, cb)
+}
 
-    // we've indicated that there is a hostname,
-    // so even if it's empty, it has to be present.
-    this.hostname = this.hostname || '';
+ClientRequest.prototype.flushHeaders = function () {}
+ClientRequest.prototype.setTimeout = function () {}
+ClientRequest.prototype.setNoDelay = function () {}
+ClientRequest.prototype.setSocketKeepAlive = function () {}
 
-    // if hostname begins with [ and ends with ]
-    // assume that it's an IPv6 address.
-    var ipv6Hostname = this.hostname[0] === '[' &&
-        this.hostname[this.hostname.length - 1] === ']';
+// Taken from http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader%28%29-method
+var unsafeHeaders = [
+       'accept-charset',
+       'accept-encoding',
+       'access-control-request-headers',
+       'access-control-request-method',
+       'connection',
+       'content-length',
+       'cookie',
+       'cookie2',
+       'date',
+       'dnt',
+       'expect',
+       'host',
+       'keep-alive',
+       'origin',
+       'referer',
+       'te',
+       'trailer',
+       'transfer-encoding',
+       'upgrade',
+       'user-agent',
+       'via'
+]
 
-    // validate a little.
-    if (!ipv6Hostname) {
-      var hostparts = this.hostname.split(/\./);
-      for (var i = 0, l = hostparts.length; i < l; i++) {
-        var part = hostparts[i];
-        if (!part) continue;
-        if (!part.match(hostnamePartPattern)) {
-          var newpart = '';
-          for (var j = 0, k = part.length; j < k; j++) {
-            if (part.charCodeAt(j) > 127) {
-              // we replace non-ASCII char with a temporary placeholder
-              // we need this to make sure size of hostname is not
-              // broken by replacing non-ASCII by nothing
-              newpart += 'x';
-            } else {
-              newpart += part[j];
-            }
-          }
-          // we test again with ASCII char only
-          if (!newpart.match(hostnamePartPattern)) {
-            var validParts = hostparts.slice(0, i);
-            var notHost = hostparts.slice(i + 1);
-            var bit = part.match(hostnamePartStart);
-            if (bit) {
-              validParts.push(bit[1]);
-              notHost.unshift(bit[2]);
-            }
-            if (notHost.length) {
-              rest = '/' + notHost.join('.') + rest;
-            }
-            this.hostname = validParts.join('.');
-            break;
-          }
-        }
-      }
-    }
+}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
+},{"./capability":157,"./response":159,"_process":114,"buffer":5,"inherits":107,"readable-stream":127,"to-arraybuffer":160}],159:[function(require,module,exports){
+(function (process,global,Buffer){
+var capability = require('./capability')
+var inherits = require('inherits')
+var stream = require('readable-stream')
 
-    if (this.hostname.length > hostnameMaxLen) {
-      this.hostname = '';
-    } else {
-      // hostnames are always lower case.
-      this.hostname = this.hostname.toLowerCase();
-    }
+var rStates = exports.readyStates = {
+       UNSENT: 0,
+       OPENED: 1,
+       HEADERS_RECEIVED: 2,
+       LOADING: 3,
+       DONE: 4
+}
 
-    if (!ipv6Hostname) {
-      // IDNA Support: Returns a punycoded representation of "domain".
-      // It only converts parts of the domain name that
-      // have non-ASCII characters, i.e. it doesn't matter if
-      // you call it with a domain that already is ASCII-only.
-      this.hostname = punycode.toASCII(this.hostname);
-    }
+var IncomingMessage = exports.IncomingMessage = function (xhr, response, mode) {
+       var self = this
+       stream.Readable.call(self)
 
-    var p = this.port ? ':' + this.port : '';
-    var h = this.hostname || '';
-    this.host = h + p;
-    this.href += this.host;
+       self._mode = mode
+       self.headers = {}
+       self.rawHeaders = []
+       self.trailers = {}
+       self.rawTrailers = []
 
-    // strip [ and ] from the hostname
-    // the host field still retains them, though
-    if (ipv6Hostname) {
-      this.hostname = this.hostname.substr(1, this.hostname.length - 2);
-      if (rest[0] !== '/') {
-        rest = '/' + rest;
-      }
-    }
-  }
+       // Fake the 'close' event, but only once 'end' fires
+       self.on('end', function () {
+               // The nextTick is necessary to prevent the 'request' module from causing an infinite loop
+               process.nextTick(function () {
+                       self.emit('close')
+               })
+       })
 
-  // now rest is set to the post-host stuff.
-  // chop off any delim chars.
-  if (!unsafeProtocol[lowerProto]) {
+       if (mode === 'fetch') {
+               self._fetchResponse = response
 
-    // First, make 100% sure that any "autoEscape" chars get
-    // escaped, even if encodeURIComponent doesn't think they
-    // need to be.
-    for (var i = 0, l = autoEscape.length; i < l; i++) {
-      var ae = autoEscape[i];
-      if (rest.indexOf(ae) === -1)
-        continue;
-      var esc = encodeURIComponent(ae);
-      if (esc === ae) {
-        esc = escape(ae);
-      }
-      rest = rest.split(ae).join(esc);
-    }
-  }
+               self.url = response.url
+               self.statusCode = response.status
+               self.statusMessage = response.statusText
+               
+               response.headers.forEach(function(header, key){
+                       self.headers[key.toLowerCase()] = header
+                       self.rawHeaders.push(key, header)
+               })
 
 
-  // chop off from the tail first.
-  var hash = rest.indexOf('#');
-  if (hash !== -1) {
-    // got a fragment string.
-    this.hash = rest.substr(hash);
-    rest = rest.slice(0, hash);
-  }
-  var qm = rest.indexOf('?');
-  if (qm !== -1) {
-    this.search = rest.substr(qm);
-    this.query = rest.substr(qm + 1);
-    if (parseQueryString) {
-      this.query = querystring.parse(this.query);
-    }
-    rest = rest.slice(0, qm);
-  } else if (parseQueryString) {
-    // no query string, but parseQueryString still requested
-    this.search = '';
-    this.query = {};
-  }
-  if (rest) this.pathname = rest;
-  if (slashedProtocol[lowerProto] &&
-      this.hostname && !this.pathname) {
-    this.pathname = '/';
-  }
+               // TODO: this doesn't respect backpressure. Once WritableStream is available, this can be fixed
+               var reader = response.body.getReader()
+               function read () {
+                       reader.read().then(function (result) {
+                               if (self._destroyed)
+                                       return
+                               if (result.done) {
+                                       self.push(null)
+                                       return
+                               }
+                               self.push(new Buffer(result.value))
+                               read()
+                       }).catch(function(err) {
+                               self.emit('error', err)
+                       })
+               }
+               read()
 
-  //to support http.request
-  if (this.pathname || this.search) {
-    var p = this.pathname || '';
-    var s = this.search || '';
-    this.path = p + s;
-  }
+       } else {
+               self._xhr = xhr
+               self._pos = 0
 
-  // finally, reconstruct the href based on what has been validated.
-  this.href = this.format();
-  return this;
-};
+               self.url = xhr.responseURL
+               self.statusCode = xhr.status
+               self.statusMessage = xhr.statusText
+               var headers = xhr.getAllResponseHeaders().split(/\r?\n/)
+               headers.forEach(function (header) {
+                       var matches = header.match(/^([^:]+):\s*(.*)/)
+                       if (matches) {
+                               var key = matches[1].toLowerCase()
+                               if (key === 'set-cookie') {
+                                       if (self.headers[key] === undefined) {
+                                               self.headers[key] = []
+                                       }
+                                       self.headers[key].push(matches[2])
+                               } else if (self.headers[key] !== undefined) {
+                                       self.headers[key] += ', ' + matches[2]
+                               } else {
+                                       self.headers[key] = matches[2]
+                               }
+                               self.rawHeaders.push(matches[1], matches[2])
+                       }
+               })
 
-// format a parsed object into a url string
-function urlFormat(obj) {
-  // ensure it's an object, and not a string url.
-  // If it's an obj, this is a no-op.
-  // this way, you can call url_format() on strings
-  // to clean up potentially wonky urls.
-  if (util.isString(obj)) obj = urlParse(obj);
-  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);
-  return obj.format();
+               self._charset = 'x-user-defined'
+               if (!capability.overrideMimeType) {
+                       var mimeType = self.rawHeaders['mime-type']
+                       if (mimeType) {
+                               var charsetMatch = mimeType.match(/;\s*charset=([^;])(;|$)/)
+                               if (charsetMatch) {
+                                       self._charset = charsetMatch[1].toLowerCase()
+                               }
+                       }
+                       if (!self._charset)
+                               self._charset = 'utf-8' // best guess
+               }
+       }
 }
 
-Url.prototype.format = function() {
-  var auth = this.auth || '';
-  if (auth) {
-    auth = encodeURIComponent(auth);
-    auth = auth.replace(/%3A/i, ':');
-    auth += '@';
-  }
-
-  var protocol = this.protocol || '',
-      pathname = this.pathname || '',
-      hash = this.hash || '',
-      host = false,
-      query = '';
+inherits(IncomingMessage, stream.Readable)
 
-  if (this.host) {
-    host = auth + this.host;
-  } else if (this.hostname) {
-    host = auth + (this.hostname.indexOf(':') === -1 ?
-        this.hostname :
-        '[' + this.hostname + ']');
-    if (this.port) {
-      host += ':' + this.port;
-    }
-  }
+IncomingMessage.prototype._read = function () {}
 
-  if (this.query &&
-      util.isObject(this.query) &&
-      Object.keys(this.query).length) {
-    query = querystring.stringify(this.query);
-  }
+IncomingMessage.prototype._onXHRProgress = function () {
+       var self = this
 
-  var search = this.search || (query && ('?' + query)) || '';
+       var xhr = self._xhr
 
-  if (protocol && protocol.substr(-1) !== ':') protocol += ':';
+       var response = null
+       switch (self._mode) {
+               case 'text:vbarray': // For IE9
+                       if (xhr.readyState !== rStates.DONE)
+                               break
+                       try {
+                               // This fails in IE8
+                               response = new global.VBArray(xhr.responseBody).toArray()
+                       } catch (e) {}
+                       if (response !== null) {
+                               self.push(new Buffer(response))
+                               break
+                       }
+                       // Falls through in IE8 
+               case 'text':
+                       try { // This will fail when readyState = 3 in IE9. Switch mode and wait for readyState = 4
+                               response = xhr.responseText
+                       } catch (e) {
+                               self._mode = 'text:vbarray'
+                               break
+                       }
+                       if (response.length > self._pos) {
+                               var newData = response.substr(self._pos)
+                               if (self._charset === 'x-user-defined') {
+                                       var buffer = new Buffer(newData.length)
+                                       for (var i = 0; i < newData.length; i++)
+                                               buffer[i] = newData.charCodeAt(i) & 0xff
 
-  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.
-  // unless they had them to begin with.
-  if (this.slashes ||
-      (!protocol || slashedProtocol[protocol]) && host !== false) {
-    host = '//' + (host || '');
-    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;
-  } else if (!host) {
-    host = '';
-  }
+                                       self.push(buffer)
+                               } else {
+                                       self.push(newData, self._charset)
+                               }
+                               self._pos = response.length
+                       }
+                       break
+               case 'arraybuffer':
+                       if (xhr.readyState !== rStates.DONE || !xhr.response)
+                               break
+                       response = xhr.response
+                       self.push(new Buffer(new Uint8Array(response)))
+                       break
+               case 'moz-chunked-arraybuffer': // take whole
+                       response = xhr.response
+                       if (xhr.readyState !== rStates.LOADING || !response)
+                               break
+                       self.push(new Buffer(new Uint8Array(response)))
+                       break
+               case 'ms-stream':
+                       response = xhr.response
+                       if (xhr.readyState !== rStates.LOADING)
+                               break
+                       var reader = new global.MSStreamReader()
+                       reader.onprogress = function () {
+                               if (reader.result.byteLength > self._pos) {
+                                       self.push(new Buffer(new Uint8Array(reader.result.slice(self._pos))))
+                                       self._pos = reader.result.byteLength
+                               }
+                       }
+                       reader.onload = function () {
+                               self.push(null)
+                       }
+                       // reader.onerror = ??? // TODO: this
+                       reader.readAsArrayBuffer(response)
+                       break
+       }
 
-  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;
-  if (search && search.charAt(0) !== '?') search = '?' + search;
+       // The ms-stream case handles end separately in reader.onload()
+       if (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') {
+               self.push(null)
+       }
+}
 
-  pathname = pathname.replace(/[?#]/g, function(match) {
-    return encodeURIComponent(match);
-  });
-  search = search.replace('#', '%23');
+}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
+},{"./capability":157,"_process":114,"buffer":5,"inherits":107,"readable-stream":127}],160:[function(require,module,exports){
+var Buffer = require('buffer').Buffer
 
-  return protocol + host + pathname + search + hash;
-};
+module.exports = function (buf) {
+       // If the buffer is backed by a Uint8Array, a faster version will work
+       if (buf instanceof Uint8Array) {
+               // If the buffer isn't a subarray, return the underlying ArrayBuffer
+               if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) {
+                       return buf.buffer
+               } else if (typeof buf.buffer.slice === 'function') {
+                       // Otherwise we need to get a proper copy
+                       return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength)
+               }
+       }
 
-function urlResolve(source, relative) {
-  return urlParse(source, false, true).resolve(relative);
+       if (Buffer.isBuffer(buf)) {
+               // This is the slow version that will work with any Buffer
+               // implementation (even in old browsers)
+               var arrayCopy = new Uint8Array(buf.length)
+               var len = buf.length
+               for (var i = 0; i < len; i++) {
+                       arrayCopy[i] = buf[i]
+               }
+               return arrayCopy.buffer
+       } else {
+               throw new Error('Argument must be a Buffer')
+       }
 }
 
-Url.prototype.resolve = function(relative) {
-  return this.resolveObject(urlParse(relative, false, true)).format();
-};
-
-function urlResolveObject(source, relative) {
-  if (!source) return relative;
-  return urlParse(source, false, true).resolveObject(relative);
-}
+},{"buffer":5}],161:[function(require,module,exports){
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-Url.prototype.resolveObject = function(relative) {
-  if (util.isString(relative)) {
-    var rel = new Url();
-    rel.parse(relative, false, true);
-    relative = rel;
-  }
+'use strict';
 
-  var result = new Url();
-  var tkeys = Object.keys(this);
-  for (var tk = 0; tk < tkeys.length; tk++) {
-    var tkey = tkeys[tk];
-    result[tkey] = this[tkey];
-  }
+var punycode = require('punycode');
+var util = require('./util');
 
-  // hash is always overridden, no matter what.
-  // even href="" will remove it.
-  result.hash = relative.hash;
+exports.parse = urlParse;
+exports.resolve = urlResolve;
+exports.resolveObject = urlResolveObject;
+exports.format = urlFormat;
 
-  // if the relative url is empty, then there's nothing left to do here.
-  if (relative.href === '') {
-    result.href = result.format();
-    return result;
-  }
+exports.Url = Url;
 
-  // hrefs like //foo/bar always cut to the protocol.
-  if (relative.slashes && !relative.protocol) {
-    // take everything except the protocol from relative
-    var rkeys = Object.keys(relative);
-    for (var rk = 0; rk < rkeys.length; rk++) {
-      var rkey = rkeys[rk];
-      if (rkey !== 'protocol')
-        result[rkey] = relative[rkey];
-    }
+function Url() {
+  this.protocol = null;
+  this.slashes = null;
+  this.auth = null;
+  this.host = null;
+  this.port = null;
+  this.hostname = null;
+  this.hash = null;
+  this.search = null;
+  this.query = null;
+  this.pathname = null;
+  this.path = null;
+  this.href = null;
+}
 
-    //urlParse appends trailing / to urls like http://www.example.com
-    if (slashedProtocol[result.protocol] &&
-        result.hostname && !result.pathname) {
-      result.path = result.pathname = '/';
-    }
+// Reference: RFC 3986, RFC 1808, RFC 2396
 
-    result.href = result.format();
-    return result;
-  }
+// define these here so at least they only have to be
+// compiled once on the first module load.
+var protocolPattern = /^([a-z0-9.+-]+:)/i,
+    portPattern = /:[0-9]*$/,
 
-  if (relative.protocol && relative.protocol !== result.protocol) {
-    // if it's a known url protocol, then changing
-    // the protocol does weird things
-    // first, if it's not file:, then we MUST have a host,
-    // and if there was a path
-    // to begin with, then we MUST have a path.
-    // if it is file:, then the host is dropped,
-    // because that's known to be hostless.
-    // anything else is assumed to be absolute.
-    if (!slashedProtocol[relative.protocol]) {
-      var keys = Object.keys(relative);
-      for (var v = 0; v < keys.length; v++) {
-        var k = keys[v];
-        result[k] = relative[k];
-      }
-      result.href = result.format();
-      return result;
-    }
+    // Special case for a simple path URL
+    simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
 
-    result.protocol = relative.protocol;
-    if (!relative.host && !hostlessProtocol[relative.protocol]) {
-      var relPath = (relative.pathname || '').split('/');
-      while (relPath.length && !(relative.host = relPath.shift()));
-      if (!relative.host) relative.host = '';
-      if (!relative.hostname) relative.hostname = '';
-      if (relPath[0] !== '') relPath.unshift('');
-      if (relPath.length < 2) relPath.unshift('');
-      result.pathname = relPath.join('/');
-    } else {
-      result.pathname = relative.pathname;
-    }
-    result.search = relative.search;
-    result.query = relative.query;
-    result.host = relative.host || '';
-    result.auth = relative.auth;
-    result.hostname = relative.hostname || relative.host;
-    result.port = relative.port;
-    // to support http.request
-    if (result.pathname || result.search) {
-      var p = result.pathname || '';
-      var s = result.search || '';
-      result.path = p + s;
-    }
-    result.slashes = result.slashes || relative.slashes;
-    result.href = result.format();
-    return result;
-  }
+    // RFC 2396: characters reserved for delimiting URLs.
+    // We actually just auto-escape these.
+    delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],
 
-  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),
-      isRelAbs = (
-          relative.host ||
-          relative.pathname && relative.pathname.charAt(0) === '/'
-      ),
-      mustEndAbs = (isRelAbs || isSourceAbs ||
-                    (result.host && relative.pathname)),
-      removeAllDots = mustEndAbs,
-      srcPath = result.pathname && result.pathname.split('/') || [],
-      relPath = relative.pathname && relative.pathname.split('/') || [],
-      psychotic = result.protocol && !slashedProtocol[result.protocol];
+    // RFC 2396: characters not allowed for various reasons.
+    unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims),
 
-  // if the url is a non-slashed url, then relative
-  // links like ../.. should be able
-  // to crawl up to the hostname, as well.  This is strange.
-  // result.protocol has already been set by now.
-  // Later on, put the first path part into the host field.
-  if (psychotic) {
-    result.hostname = '';
-    result.port = null;
-    if (result.host) {
-      if (srcPath[0] === '') srcPath[0] = result.host;
-      else srcPath.unshift(result.host);
-    }
-    result.host = '';
-    if (relative.protocol) {
-      relative.hostname = null;
-      relative.port = null;
-      if (relative.host) {
-        if (relPath[0] === '') relPath[0] = relative.host;
-        else relPath.unshift(relative.host);
-      }
-      relative.host = null;
-    }
-    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');
-  }
+    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.
+    autoEscape = ['\''].concat(unwise),
+    // Characters that are never ever allowed in a hostname.
+    // Note that any invalid chars are also handled, but these
+    // are the ones that are *expected* to be seen, so we fast-path
+    // them.
+    nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),
+    hostEndingChars = ['/', '?', '#'],
+    hostnameMaxLen = 255,
+    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,
+    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
+    // protocols that can allow "unsafe" and "unwise" chars.
+    unsafeProtocol = {
+      'javascript': true,
+      'javascript:': true
+    },
+    // protocols that never have a hostname.
+    hostlessProtocol = {
+      'javascript': true,
+      'javascript:': true
+    },
+    // protocols that always contain a // bit.
+    slashedProtocol = {
+      'http': true,
+      'https': true,
+      'ftp': true,
+      'gopher': true,
+      'file': true,
+      'http:': true,
+      'https:': true,
+      'ftp:': true,
+      'gopher:': true,
+      'file:': true
+    },
+    querystring = require('querystring');
 
-  if (isRelAbs) {
-    // it's absolute.
-    result.host = (relative.host || relative.host === '') ?
-                  relative.host : result.host;
-    result.hostname = (relative.hostname || relative.hostname === '') ?
-                      relative.hostname : result.hostname;
-    result.search = relative.search;
-    result.query = relative.query;
-    srcPath = relPath;
-    // fall through to the dot-handling below.
-  } else if (relPath.length) {
-    // it's relative
-    // throw away the existing file, and take the new path instead.
-    if (!srcPath) srcPath = [];
-    srcPath.pop();
-    srcPath = srcPath.concat(relPath);
-    result.search = relative.search;
-    result.query = relative.query;
-  } else if (!util.isNullOrUndefined(relative.search)) {
-    // just pull out the search.
-    // like href='?foo'.
-    // Put this after the other two cases because it simplifies the booleans
-    if (psychotic) {
-      result.hostname = result.host = srcPath.shift();
-      //occationaly the auth can get stuck only in host
-      //this especially happens in cases like
-      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
-      var authInHost = result.host && result.host.indexOf('@') > 0 ?
-                       result.host.split('@') : false;
-      if (authInHost) {
-        result.auth = authInHost.shift();
-        result.host = result.hostname = authInHost.shift();
-      }
-    }
-    result.search = relative.search;
-    result.query = relative.query;
-    //to support http.request
-    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
-      result.path = (result.pathname ? result.pathname : '') +
-                    (result.search ? result.search : '');
-    }
-    result.href = result.format();
-    return result;
-  }
+function urlParse(url, parseQueryString, slashesDenoteHost) {
+  if (url && util.isObject(url) && url instanceof Url) return url;
 
-  if (!srcPath.length) {
-    // no path at all.  easy.
-    // we've already handled the other stuff above.
-    result.pathname = null;
-    //to support http.request
-    if (result.search) {
-      result.path = '/' + result.search;
-    } else {
-      result.path = null;
-    }
-    result.href = result.format();
-    return result;
+  var u = new Url;
+  u.parse(url, parseQueryString, slashesDenoteHost);
+  return u;
+}
+
+Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
+  if (!util.isString(url)) {
+    throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
   }
 
-  // if a url ENDs in . or .., then it must get a trailing slash.
-  // however, if it ends in anything else non-slashy,
-  // then it must NOT get a trailing slash.
-  var last = srcPath.slice(-1)[0];
-  var hasTrailingSlash = (
-      (result.host || relative.host || srcPath.length > 1) &&
-      (last === '.' || last === '..') || last === '');
+  // Copy chrome, IE, opera backslash-handling behavior.
+  // Back slashes before the query string get converted to forward slashes
+  // See: https://code.google.com/p/chromium/issues/detail?id=25916
+  var queryIndex = url.indexOf('?'),
+      splitter =
+          (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',
+      uSplit = url.split(splitter),
+      slashRegex = /\\/g;
+  uSplit[0] = uSplit[0].replace(slashRegex, '/');
+  url = uSplit.join(splitter);
 
-  // strip single dots, resolve double dots to parent dir
-  // if the path tries to go above the root, `up` ends up > 0
-  var up = 0;
-  for (var i = srcPath.length; i >= 0; i--) {
-    last = srcPath[i];
-    if (last === '.') {
-      srcPath.splice(i, 1);
-    } else if (last === '..') {
-      srcPath.splice(i, 1);
-      up++;
-    } else if (up) {
-      srcPath.splice(i, 1);
-      up--;
-    }
-  }
+  var rest = url;
 
-  // if the path is allowed to go above the root, restore leading ..s
-  if (!mustEndAbs && !removeAllDots) {
-    for (; up--; up) {
-      srcPath.unshift('..');
+  // trim before proceeding.
+  // This is to support parse stuff like "  http://foo.com  \n"
+  rest = rest.trim();
+
+  if (!slashesDenoteHost && url.split('#').length === 1) {
+    // Try fast path regexp
+    var simplePath = simplePathPattern.exec(rest);
+    if (simplePath) {
+      this.path = rest;
+      this.href = rest;
+      this.pathname = simplePath[1];
+      if (simplePath[2]) {
+        this.search = simplePath[2];
+        if (parseQueryString) {
+          this.query = querystring.parse(this.search.substr(1));
+        } else {
+          this.query = this.search.substr(1);
+        }
+      } else if (parseQueryString) {
+        this.search = '';
+        this.query = {};
+      }
+      return this;
     }
   }
 
-  if (mustEndAbs && srcPath[0] !== '' &&
-      (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {
-    srcPath.unshift('');
+  var proto = protocolPattern.exec(rest);
+  if (proto) {
+    proto = proto[0];
+    var lowerProto = proto.toLowerCase();
+    this.protocol = lowerProto;
+    rest = rest.substr(proto.length);
   }
 
-  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {
-    srcPath.push('');
+  // figure out if it's got a host
+  // user@server is *always* interpreted as a hostname, and url
+  // resolution will treat //foo/bar as host=foo,path=bar because that's
+  // how the browser resolves relative URLs.
+  if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
+    var slashes = rest.substr(0, 2) === '//';
+    if (slashes && !(proto && hostlessProtocol[proto])) {
+      rest = rest.substr(2);
+      this.slashes = true;
+    }
   }
 
-  var isAbsolute = srcPath[0] === '' ||
-      (srcPath[0] && srcPath[0].charAt(0) === '/');
+  if (!hostlessProtocol[proto] &&
+      (slashes || (proto && !slashedProtocol[proto]))) {
 
-  // put the host back
-  if (psychotic) {
-    result.hostname = result.host = isAbsolute ? '' :
-                                    srcPath.length ? srcPath.shift() : '';
-    //occationaly the auth can get stuck only in host
-    //this especially happens in cases like
-    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
-    var authInHost = result.host && result.host.indexOf('@') > 0 ?
-                     result.host.split('@') : false;
-    if (authInHost) {
-      result.auth = authInHost.shift();
-      result.host = result.hostname = authInHost.shift();
-    }
-  }
+    // there's a hostname.
+    // the first instance of /, ?, ;, or # ends the host.
+    //
+    // If there is an @ in the hostname, then non-host chars *are* allowed
+    // to the left of the last @ sign, unless some host-ending character
+    // comes *before* the @-sign.
+    // URLs are obnoxious.
+    //
+    // ex:
+    // http://a@b@c/ => user:a@b host:c
+    // http://a@b?@c => user:a host:c path:/?@c
 
-  mustEndAbs = mustEndAbs || (result.host && srcPath.length);
+    // v0.12 TODO(isaacs): This is not quite how Chrome does things.
+    // Review our test case against browsers more comprehensively.
 
-  if (mustEndAbs && !isAbsolute) {
-    srcPath.unshift('');
-  }
+    // find the first instance of any hostEndingChars
+    var hostEnd = -1;
+    for (var i = 0; i < hostEndingChars.length; i++) {
+      var hec = rest.indexOf(hostEndingChars[i]);
+      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
+        hostEnd = hec;
+    }
 
-  if (!srcPath.length) {
-    result.pathname = null;
-    result.path = null;
-  } else {
-    result.pathname = srcPath.join('/');
-  }
+    // at this point, either we have an explicit point where the
+    // auth portion cannot go past, or the last @ char is the decider.
+    var auth, atSign;
+    if (hostEnd === -1) {
+      // atSign can be anywhere.
+      atSign = rest.lastIndexOf('@');
+    } else {
+      // atSign must be in auth portion.
+      // http://a@b/c@d => host:b auth:a path:/c@d
+      atSign = rest.lastIndexOf('@', hostEnd);
+    }
 
-  //to support request.http
-  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
-    result.path = (result.pathname ? result.pathname : '') +
-                  (result.search ? result.search : '');
-  }
-  result.auth = relative.auth || result.auth;
-  result.slashes = result.slashes || relative.slashes;
-  result.href = result.format();
-  return result;
-};
+    // Now we have a portion which is definitely the auth.
+    // Pull that off.
+    if (atSign !== -1) {
+      auth = rest.slice(0, atSign);
+      rest = rest.slice(atSign + 1);
+      this.auth = decodeURIComponent(auth);
+    }
 
-Url.prototype.parseHost = function() {
-  var host = this.host;
-  var port = portPattern.exec(host);
-  if (port) {
-    port = port[0];
-    if (port !== ':') {
-      this.port = port.substr(1);
+    // the host is the remaining to the left of the first non-host char
+    hostEnd = -1;
+    for (var i = 0; i < nonHostChars.length; i++) {
+      var hec = rest.indexOf(nonHostChars[i]);
+      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))
+        hostEnd = hec;
     }
-    host = host.substr(0, host.length - port.length);
-  }
-  if (host) this.hostname = host;
-};
+    // if we still have not hit it, then the entire thing is a host.
+    if (hostEnd === -1)
+      hostEnd = rest.length;
+
+    this.host = rest.slice(0, hostEnd);
+    rest = rest.slice(hostEnd);
 
-},{"./util":160,"punycode":112,"querystring":115}],160:[function(require,module,exports){
-'use strict';
+    // pull out port.
+    this.parseHost();
 
-module.exports = {
-  isString: function(arg) {
-    return typeof(arg) === 'string';
-  },
-  isObject: function(arg) {
-    return typeof(arg) === 'object' && arg !== null;
-  },
-  isNull: function(arg) {
-    return arg === null;
-  },
-  isNullOrUndefined: function(arg) {
-    return arg == null;
-  }
-};
+    // we've indicated that there is a hostname,
+    // so even if it's empty, it has to be present.
+    this.hostname = this.hostname || '';
 
-},{}],161:[function(require,module,exports){
-(function (global){
+    // if hostname begins with [ and ends with ]
+    // assume that it's an IPv6 address.
+    var ipv6Hostname = this.hostname[0] === '[' &&
+        this.hostname[this.hostname.length - 1] === ']';
 
-/**
- * Module exports.
- */
+    // validate a little.
+    if (!ipv6Hostname) {
+      var hostparts = this.hostname.split(/\./);
+      for (var i = 0, l = hostparts.length; i < l; i++) {
+        var part = hostparts[i];
+        if (!part) continue;
+        if (!part.match(hostnamePartPattern)) {
+          var newpart = '';
+          for (var j = 0, k = part.length; j < k; j++) {
+            if (part.charCodeAt(j) > 127) {
+              // we replace non-ASCII char with a temporary placeholder
+              // we need this to make sure size of hostname is not
+              // broken by replacing non-ASCII by nothing
+              newpart += 'x';
+            } else {
+              newpart += part[j];
+            }
+          }
+          // we test again with ASCII char only
+          if (!newpart.match(hostnamePartPattern)) {
+            var validParts = hostparts.slice(0, i);
+            var notHost = hostparts.slice(i + 1);
+            var bit = part.match(hostnamePartStart);
+            if (bit) {
+              validParts.push(bit[1]);
+              notHost.unshift(bit[2]);
+            }
+            if (notHost.length) {
+              rest = '/' + notHost.join('.') + rest;
+            }
+            this.hostname = validParts.join('.');
+            break;
+          }
+        }
+      }
+    }
 
-module.exports = deprecate;
+    if (this.hostname.length > hostnameMaxLen) {
+      this.hostname = '';
+    } else {
+      // hostnames are always lower case.
+      this.hostname = this.hostname.toLowerCase();
+    }
 
-/**
- * Mark that a method should not be used.
- * Returns a modified function which warns once by default.
- *
- * If `localStorage.noDeprecation = true` is set, then it is a no-op.
- *
- * If `localStorage.throwDeprecation = true` is set, then deprecated functions
- * will throw an Error when invoked.
- *
- * If `localStorage.traceDeprecation = true` is set, then deprecated functions
- * will invoke `console.trace()` instead of `console.error()`.
- *
- * @param {Function} fn - the function to deprecate
- * @param {String} msg - the string to print to the console when `fn` is invoked
- * @returns {Function} a new "deprecated" version of `fn`
- * @api public
- */
+    if (!ipv6Hostname) {
+      // IDNA Support: Returns a punycoded representation of "domain".
+      // It only converts parts of the domain name that
+      // have non-ASCII characters, i.e. it doesn't matter if
+      // you call it with a domain that already is ASCII-only.
+      this.hostname = punycode.toASCII(this.hostname);
+    }
 
-function deprecate (fn, msg) {
-  if (config('noDeprecation')) {
-    return fn;
-  }
+    var p = this.port ? ':' + this.port : '';
+    var h = this.hostname || '';
+    this.host = h + p;
+    this.href += this.host;
 
-  var warned = false;
-  function deprecated() {
-    if (!warned) {
-      if (config('throwDeprecation')) {
-        throw new Error(msg);
-      } else if (config('traceDeprecation')) {
-        console.trace(msg);
-      } else {
-        console.warn(msg);
+    // strip [ and ] from the hostname
+    // the host field still retains them, though
+    if (ipv6Hostname) {
+      this.hostname = this.hostname.substr(1, this.hostname.length - 2);
+      if (rest[0] !== '/') {
+        rest = '/' + rest;
       }
-      warned = true;
     }
-    return fn.apply(this, arguments);
   }
 
-  return deprecated;
-}
-
-/**
- * Checks `localStorage` for boolean values for the given `name`.
- *
- * @param {String} name
- * @returns {Boolean}
- * @api private
- */
+  // now rest is set to the post-host stuff.
+  // chop off any delim chars.
+  if (!unsafeProtocol[lowerProto]) {
 
-function config (name) {
-  // accessing global.localStorage can trigger a DOMException in sandboxed iframes
-  try {
-    if (!global.localStorage) return false;
-  } catch (_) {
-    return false;
+    // First, make 100% sure that any "autoEscape" chars get
+    // escaped, even if encodeURIComponent doesn't think they
+    // need to be.
+    for (var i = 0, l = autoEscape.length; i < l; i++) {
+      var ae = autoEscape[i];
+      if (rest.indexOf(ae) === -1)
+        continue;
+      var esc = encodeURIComponent(ae);
+      if (esc === ae) {
+        esc = escape(ae);
+      }
+      rest = rest.split(ae).join(esc);
+    }
   }
-  var val = global.localStorage[name];
-  if (null == val) return false;
-  return String(val).toLowerCase() === 'true';
-}
 
-}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{}],162:[function(require,module,exports){
-arguments[4][104][0].apply(exports,arguments)
-},{"dup":104}],163:[function(require,module,exports){
-module.exports = function isBuffer(arg) {
-  return arg && typeof arg === 'object'
-    && typeof arg.copy === 'function'
-    && typeof arg.fill === 'function'
-    && typeof arg.readUInt8 === 'function';
-}
-},{}],164:[function(require,module,exports){
-(function (process,global){
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-var formatRegExp = /%[sdj%]/g;
-exports.format = function(f) {
-  if (!isString(f)) {
-    var objects = [];
-    for (var i = 0; i < arguments.length; i++) {
-      objects.push(inspect(arguments[i]));
+  // chop off from the tail first.
+  var hash = rest.indexOf('#');
+  if (hash !== -1) {
+    // got a fragment string.
+    this.hash = rest.substr(hash);
+    rest = rest.slice(0, hash);
+  }
+  var qm = rest.indexOf('?');
+  if (qm !== -1) {
+    this.search = rest.substr(qm);
+    this.query = rest.substr(qm + 1);
+    if (parseQueryString) {
+      this.query = querystring.parse(this.query);
     }
-    return objects.join(' ');
+    rest = rest.slice(0, qm);
+  } else if (parseQueryString) {
+    // no query string, but parseQueryString still requested
+    this.search = '';
+    this.query = {};
+  }
+  if (rest) this.pathname = rest;
+  if (slashedProtocol[lowerProto] &&
+      this.hostname && !this.pathname) {
+    this.pathname = '/';
   }
 
-  var i = 1;
-  var args = arguments;
-  var len = args.length;
-  var str = String(f).replace(formatRegExp, function(x) {
-    if (x === '%%') return '%';
-    if (i >= len) return x;
-    switch (x) {
-      case '%s': return String(args[i++]);
-      case '%d': return Number(args[i++]);
-      case '%j':
-        try {
-          return JSON.stringify(args[i++]);
-        } catch (_) {
-          return '[Circular]';
-        }
-      default:
-        return x;
-    }
-  });
-  for (var x = args[i]; i < len; x = args[++i]) {
-    if (isNull(x) || !isObject(x)) {
-      str += ' ' + x;
-    } else {
-      str += ' ' + inspect(x);
-    }
+  //to support http.request
+  if (this.pathname || this.search) {
+    var p = this.pathname || '';
+    var s = this.search || '';
+    this.path = p + s;
   }
-  return str;
+
+  // finally, reconstruct the href based on what has been validated.
+  this.href = this.format();
+  return this;
 };
 
+// format a parsed object into a url string
+function urlFormat(obj) {
+  // ensure it's an object, and not a string url.
+  // If it's an obj, this is a no-op.
+  // this way, you can call url_format() on strings
+  // to clean up potentially wonky urls.
+  if (util.isString(obj)) obj = urlParse(obj);
+  if (!(obj instanceof Url)) return Url.prototype.format.call(obj);
+  return obj.format();
+}
 
-// Mark that a method should not be used.
-// Returns a modified function which warns once by default.
-// If --no-deprecation is set, then it is a no-op.
-exports.deprecate = function(fn, msg) {
-  // Allow for deprecating things in the process of starting up.
-  if (isUndefined(global.process)) {
-    return function() {
-      return exports.deprecate(fn, msg).apply(this, arguments);
-    };
+Url.prototype.format = function() {
+  var auth = this.auth || '';
+  if (auth) {
+    auth = encodeURIComponent(auth);
+    auth = auth.replace(/%3A/i, ':');
+    auth += '@';
   }
 
-  if (process.noDeprecation === true) {
-    return fn;
-  }
+  var protocol = this.protocol || '',
+      pathname = this.pathname || '',
+      hash = this.hash || '',
+      host = false,
+      query = '';
 
-  var warned = false;
-  function deprecated() {
-    if (!warned) {
-      if (process.throwDeprecation) {
-        throw new Error(msg);
-      } else if (process.traceDeprecation) {
-        console.trace(msg);
-      } else {
-        console.error(msg);
-      }
-      warned = true;
+  if (this.host) {
+    host = auth + this.host;
+  } else if (this.hostname) {
+    host = auth + (this.hostname.indexOf(':') === -1 ?
+        this.hostname :
+        '[' + this.hostname + ']');
+    if (this.port) {
+      host += ':' + this.port;
     }
-    return fn.apply(this, arguments);
   }
 
-  return deprecated;
-};
+  if (this.query &&
+      util.isObject(this.query) &&
+      Object.keys(this.query).length) {
+    query = querystring.stringify(this.query);
+  }
 
+  var search = this.search || (query && ('?' + query)) || '';
 
-var debugs = {};
-var debugEnviron;
-exports.debuglog = function(set) {
-  if (isUndefined(debugEnviron))
-    debugEnviron = process.env.NODE_DEBUG || '';
-  set = set.toUpperCase();
-  if (!debugs[set]) {
-    if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
-      var pid = process.pid;
-      debugs[set] = function() {
-        var msg = exports.format.apply(exports, arguments);
-        console.error('%s %d: %s', set, pid, msg);
-      };
-    } else {
-      debugs[set] = function() {};
-    }
+  if (protocol && protocol.substr(-1) !== ':') protocol += ':';
+
+  // only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.
+  // unless they had them to begin with.
+  if (this.slashes ||
+      (!protocol || slashedProtocol[protocol]) && host !== false) {
+    host = '//' + (host || '');
+    if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;
+  } else if (!host) {
+    host = '';
   }
-  return debugs[set];
-};
 
+  if (hash && hash.charAt(0) !== '#') hash = '#' + hash;
+  if (search && search.charAt(0) !== '?') search = '?' + search;
 
-/**
- * Echos the value of a value. Trys to print the value out
- * in the best way possible given the different types.
- *
- * @param {Object} obj The object to print out.
- * @param {Object} opts Optional options object that alters the output.
- */
-/* legacy: obj, showHidden, depth, colors*/
-function inspect(obj, opts) {
-  // default options
-  var ctx = {
-    seen: [],
-    stylize: stylizeNoColor
-  };
-  // legacy...
-  if (arguments.length >= 3) ctx.depth = arguments[2];
-  if (arguments.length >= 4) ctx.colors = arguments[3];
-  if (isBoolean(opts)) {
-    // legacy...
-    ctx.showHidden = opts;
-  } else if (opts) {
-    // got an "options" object
-    exports._extend(ctx, opts);
-  }
-  // set default options
-  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
-  if (isUndefined(ctx.depth)) ctx.depth = 2;
-  if (isUndefined(ctx.colors)) ctx.colors = false;
-  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
-  if (ctx.colors) ctx.stylize = stylizeWithColor;
-  return formatValue(ctx, obj, ctx.depth);
-}
-exports.inspect = inspect;
-
-
-// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
-inspect.colors = {
-  'bold' : [1, 22],
-  'italic' : [3, 23],
-  'underline' : [4, 24],
-  'inverse' : [7, 27],
-  'white' : [37, 39],
-  'grey' : [90, 39],
-  'black' : [30, 39],
-  'blue' : [34, 39],
-  'cyan' : [36, 39],
-  'green' : [32, 39],
-  'magenta' : [35, 39],
-  'red' : [31, 39],
-  'yellow' : [33, 39]
-};
+  pathname = pathname.replace(/[?#]/g, function(match) {
+    return encodeURIComponent(match);
+  });
+  search = search.replace('#', '%23');
 
-// Don't use 'blue' not visible on cmd.exe
-inspect.styles = {
-  'special': 'cyan',
-  'number': 'yellow',
-  'boolean': 'yellow',
-  'undefined': 'grey',
-  'null': 'bold',
-  'string': 'green',
-  'date': 'magenta',
-  // "name": intentionally not styling
-  'regexp': 'red'
+  return protocol + host + pathname + search + hash;
 };
 
-
-function stylizeWithColor(str, styleType) {
-  var style = inspect.styles[styleType];
-
-  if (style) {
-    return '\u001b[' + inspect.colors[style][0] + 'm' + str +
-           '\u001b[' + inspect.colors[style][1] + 'm';
-  } else {
-    return str;
-  }
+function urlResolve(source, relative) {
+  return urlParse(source, false, true).resolve(relative);
 }
 
+Url.prototype.resolve = function(relative) {
+  return this.resolveObject(urlParse(relative, false, true)).format();
+};
 
-function stylizeNoColor(str, styleType) {
-  return str;
+function urlResolveObject(source, relative) {
+  if (!source) return relative;
+  return urlParse(source, false, true).resolveObject(relative);
 }
 
+Url.prototype.resolveObject = function(relative) {
+  if (util.isString(relative)) {
+    var rel = new Url();
+    rel.parse(relative, false, true);
+    relative = rel;
+  }
 
-function arrayToHash(array) {
-  var hash = {};
+  var result = new Url();
+  var tkeys = Object.keys(this);
+  for (var tk = 0; tk < tkeys.length; tk++) {
+    var tkey = tkeys[tk];
+    result[tkey] = this[tkey];
+  }
 
-  array.forEach(function(val, idx) {
-    hash[val] = true;
-  });
+  // hash is always overridden, no matter what.
+  // even href="" will remove it.
+  result.hash = relative.hash;
 
-  return hash;
-}
+  // if the relative url is empty, then there's nothing left to do here.
+  if (relative.href === '') {
+    result.href = result.format();
+    return result;
+  }
 
+  // hrefs like //foo/bar always cut to the protocol.
+  if (relative.slashes && !relative.protocol) {
+    // take everything except the protocol from relative
+    var rkeys = Object.keys(relative);
+    for (var rk = 0; rk < rkeys.length; rk++) {
+      var rkey = rkeys[rk];
+      if (rkey !== 'protocol')
+        result[rkey] = relative[rkey];
+    }
 
-function formatValue(ctx, value, recurseTimes) {
-  // Provide a hook for user-specified inspect functions.
-  // Check that value is an object with an inspect function on it
-  if (ctx.customInspect &&
-      value &&
-      isFunction(value.inspect) &&
-      // Filter out the util module, it's inspect function is special
-      value.inspect !== exports.inspect &&
-      // Also filter out any prototype objects using the circular check.
-      !(value.constructor && value.constructor.prototype === value)) {
-    var ret = value.inspect(recurseTimes, ctx);
-    if (!isString(ret)) {
-      ret = formatValue(ctx, ret, recurseTimes);
+    //urlParse appends trailing / to urls like http://www.example.com
+    if (slashedProtocol[result.protocol] &&
+        result.hostname && !result.pathname) {
+      result.path = result.pathname = '/';
     }
-    return ret;
-  }
 
-  // Primitive types cannot have properties
-  var primitive = formatPrimitive(ctx, value);
-  if (primitive) {
-    return primitive;
+    result.href = result.format();
+    return result;
   }
 
-  // Look up the keys of the object.
-  var keys = Object.keys(value);
-  var visibleKeys = arrayToHash(keys);
+  if (relative.protocol && relative.protocol !== result.protocol) {
+    // if it's a known url protocol, then changing
+    // the protocol does weird things
+    // first, if it's not file:, then we MUST have a host,
+    // and if there was a path
+    // to begin with, then we MUST have a path.
+    // if it is file:, then the host is dropped,
+    // because that's known to be hostless.
+    // anything else is assumed to be absolute.
+    if (!slashedProtocol[relative.protocol]) {
+      var keys = Object.keys(relative);
+      for (var v = 0; v < keys.length; v++) {
+        var k = keys[v];
+        result[k] = relative[k];
+      }
+      result.href = result.format();
+      return result;
+    }
 
-  if (ctx.showHidden) {
-    keys = Object.getOwnPropertyNames(value);
+    result.protocol = relative.protocol;
+    if (!relative.host && !hostlessProtocol[relative.protocol]) {
+      var relPath = (relative.pathname || '').split('/');
+      while (relPath.length && !(relative.host = relPath.shift()));
+      if (!relative.host) relative.host = '';
+      if (!relative.hostname) relative.hostname = '';
+      if (relPath[0] !== '') relPath.unshift('');
+      if (relPath.length < 2) relPath.unshift('');
+      result.pathname = relPath.join('/');
+    } else {
+      result.pathname = relative.pathname;
+    }
+    result.search = relative.search;
+    result.query = relative.query;
+    result.host = relative.host || '';
+    result.auth = relative.auth;
+    result.hostname = relative.hostname || relative.host;
+    result.port = relative.port;
+    // to support http.request
+    if (result.pathname || result.search) {
+      var p = result.pathname || '';
+      var s = result.search || '';
+      result.path = p + s;
+    }
+    result.slashes = result.slashes || relative.slashes;
+    result.href = result.format();
+    return result;
   }
 
-  // IE doesn't make error fields non-enumerable
-  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
-  if (isError(value)
-      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
-    return formatError(value);
+  var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),
+      isRelAbs = (
+          relative.host ||
+          relative.pathname && relative.pathname.charAt(0) === '/'
+      ),
+      mustEndAbs = (isRelAbs || isSourceAbs ||
+                    (result.host && relative.pathname)),
+      removeAllDots = mustEndAbs,
+      srcPath = result.pathname && result.pathname.split('/') || [],
+      relPath = relative.pathname && relative.pathname.split('/') || [],
+      psychotic = result.protocol && !slashedProtocol[result.protocol];
+
+  // if the url is a non-slashed url, then relative
+  // links like ../.. should be able
+  // to crawl up to the hostname, as well.  This is strange.
+  // result.protocol has already been set by now.
+  // Later on, put the first path part into the host field.
+  if (psychotic) {
+    result.hostname = '';
+    result.port = null;
+    if (result.host) {
+      if (srcPath[0] === '') srcPath[0] = result.host;
+      else srcPath.unshift(result.host);
+    }
+    result.host = '';
+    if (relative.protocol) {
+      relative.hostname = null;
+      relative.port = null;
+      if (relative.host) {
+        if (relPath[0] === '') relPath[0] = relative.host;
+        else relPath.unshift(relative.host);
+      }
+      relative.host = null;
+    }
+    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');
   }
 
-  // Some type of object without properties can be shortcutted.
-  if (keys.length === 0) {
-    if (isFunction(value)) {
-      var name = value.name ? ': ' + value.name : '';
-      return ctx.stylize('[Function' + name + ']', 'special');
+  if (isRelAbs) {
+    // it's absolute.
+    result.host = (relative.host || relative.host === '') ?
+                  relative.host : result.host;
+    result.hostname = (relative.hostname || relative.hostname === '') ?
+                      relative.hostname : result.hostname;
+    result.search = relative.search;
+    result.query = relative.query;
+    srcPath = relPath;
+    // fall through to the dot-handling below.
+  } else if (relPath.length) {
+    // it's relative
+    // throw away the existing file, and take the new path instead.
+    if (!srcPath) srcPath = [];
+    srcPath.pop();
+    srcPath = srcPath.concat(relPath);
+    result.search = relative.search;
+    result.query = relative.query;
+  } else if (!util.isNullOrUndefined(relative.search)) {
+    // just pull out the search.
+    // like href='?foo'.
+    // Put this after the other two cases because it simplifies the booleans
+    if (psychotic) {
+      result.hostname = result.host = srcPath.shift();
+      //occationaly the auth can get stuck only in host
+      //this especially happens in cases like
+      //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
+      var authInHost = result.host && result.host.indexOf('@') > 0 ?
+                       result.host.split('@') : false;
+      if (authInHost) {
+        result.auth = authInHost.shift();
+        result.host = result.hostname = authInHost.shift();
+      }
+    }
+    result.search = relative.search;
+    result.query = relative.query;
+    //to support http.request
+    if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
+      result.path = (result.pathname ? result.pathname : '') +
+                    (result.search ? result.search : '');
     }
-    if (isRegExp(value)) {
-      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+    result.href = result.format();
+    return result;
+  }
+
+  if (!srcPath.length) {
+    // no path at all.  easy.
+    // we've already handled the other stuff above.
+    result.pathname = null;
+    //to support http.request
+    if (result.search) {
+      result.path = '/' + result.search;
+    } else {
+      result.path = null;
     }
-    if (isDate(value)) {
-      return ctx.stylize(Date.prototype.toString.call(value), 'date');
+    result.href = result.format();
+    return result;
+  }
+
+  // if a url ENDs in . or .., then it must get a trailing slash.
+  // however, if it ends in anything else non-slashy,
+  // then it must NOT get a trailing slash.
+  var last = srcPath.slice(-1)[0];
+  var hasTrailingSlash = (
+      (result.host || relative.host || srcPath.length > 1) &&
+      (last === '.' || last === '..') || last === '');
+
+  // strip single dots, resolve double dots to parent dir
+  // if the path tries to go above the root, `up` ends up > 0
+  var up = 0;
+  for (var i = srcPath.length; i >= 0; i--) {
+    last = srcPath[i];
+    if (last === '.') {
+      srcPath.splice(i, 1);
+    } else if (last === '..') {
+      srcPath.splice(i, 1);
+      up++;
+    } else if (up) {
+      srcPath.splice(i, 1);
+      up--;
     }
-    if (isError(value)) {
-      return formatError(value);
+  }
+
+  // if the path is allowed to go above the root, restore leading ..s
+  if (!mustEndAbs && !removeAllDots) {
+    for (; up--; up) {
+      srcPath.unshift('..');
     }
   }
 
-  var base = '', array = false, braces = ['{', '}'];
-
-  // Make Array say that they are Array
-  if (isArray(value)) {
-    array = true;
-    braces = ['[', ']'];
+  if (mustEndAbs && srcPath[0] !== '' &&
+      (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {
+    srcPath.unshift('');
   }
 
-  // Make functions say that they are functions
-  if (isFunction(value)) {
-    var n = value.name ? ': ' + value.name : '';
-    base = ' [Function' + n + ']';
+  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {
+    srcPath.push('');
   }
 
-  // Make RegExps say that they are RegExps
-  if (isRegExp(value)) {
-    base = ' ' + RegExp.prototype.toString.call(value);
+  var isAbsolute = srcPath[0] === '' ||
+      (srcPath[0] && srcPath[0].charAt(0) === '/');
+
+  // put the host back
+  if (psychotic) {
+    result.hostname = result.host = isAbsolute ? '' :
+                                    srcPath.length ? srcPath.shift() : '';
+    //occationaly the auth can get stuck only in host
+    //this especially happens in cases like
+    //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
+    var authInHost = result.host && result.host.indexOf('@') > 0 ?
+                     result.host.split('@') : false;
+    if (authInHost) {
+      result.auth = authInHost.shift();
+      result.host = result.hostname = authInHost.shift();
+    }
   }
 
-  // Make dates with properties first say the date
-  if (isDate(value)) {
-    base = ' ' + Date.prototype.toUTCString.call(value);
+  mustEndAbs = mustEndAbs || (result.host && srcPath.length);
+
+  if (mustEndAbs && !isAbsolute) {
+    srcPath.unshift('');
   }
 
-  // Make error with message first say the error
-  if (isError(value)) {
-    base = ' ' + formatError(value);
+  if (!srcPath.length) {
+    result.pathname = null;
+    result.path = null;
+  } else {
+    result.pathname = srcPath.join('/');
   }
 
-  if (keys.length === 0 && (!array || value.length == 0)) {
-    return braces[0] + base + braces[1];
+  //to support request.http
+  if (!util.isNull(result.pathname) || !util.isNull(result.search)) {
+    result.path = (result.pathname ? result.pathname : '') +
+                  (result.search ? result.search : '');
   }
+  result.auth = relative.auth || result.auth;
+  result.slashes = result.slashes || relative.slashes;
+  result.href = result.format();
+  return result;
+};
 
-  if (recurseTimes < 0) {
-    if (isRegExp(value)) {
-      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
-    } else {
-      return ctx.stylize('[Object]', 'special');
+Url.prototype.parseHost = function() {
+  var host = this.host;
+  var port = portPattern.exec(host);
+  if (port) {
+    port = port[0];
+    if (port !== ':') {
+      this.port = port.substr(1);
     }
+    host = host.substr(0, host.length - port.length);
   }
+  if (host) this.hostname = host;
+};
 
-  ctx.seen.push(value);
+},{"./util":162,"punycode":115,"querystring":118}],162:[function(require,module,exports){
+'use strict';
 
-  var output;
-  if (array) {
-    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
-  } else {
-    output = keys.map(function(key) {
-      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
-    });
+module.exports = {
+  isString: function(arg) {
+    return typeof(arg) === 'string';
+  },
+  isObject: function(arg) {
+    return typeof(arg) === 'object' && arg !== null;
+  },
+  isNull: function(arg) {
+    return arg === null;
+  },
+  isNullOrUndefined: function(arg) {
+    return arg == null;
   }
+};
 
-  ctx.seen.pop();
-
-  return reduceToSingleString(output, base, braces);
-}
-
-
-function formatPrimitive(ctx, value) {
-  if (isUndefined(value))
-    return ctx.stylize('undefined', 'undefined');
-  if (isString(value)) {
-    var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
-                                             .replace(/'/g, "\\'")
-                                             .replace(/\\"/g, '"') + '\'';
-    return ctx.stylize(simple, 'string');
-  }
-  if (isNumber(value))
-    return ctx.stylize('' + value, 'number');
-  if (isBoolean(value))
-    return ctx.stylize('' + value, 'boolean');
-  // For some reason typeof null is "object", so special case here.
-  if (isNull(value))
-    return ctx.stylize('null', 'null');
-}
+},{}],163:[function(require,module,exports){
+(function (global){
 
+/**
+ * Module exports.
+ */
 
-function formatError(value) {
-  return '[' + Error.prototype.toString.call(value) + ']';
-}
+module.exports = deprecate;
 
+/**
+ * Mark that a method should not be used.
+ * Returns a modified function which warns once by default.
+ *
+ * If `localStorage.noDeprecation = true` is set, then it is a no-op.
+ *
+ * If `localStorage.throwDeprecation = true` is set, then deprecated functions
+ * will throw an Error when invoked.
+ *
+ * If `localStorage.traceDeprecation = true` is set, then deprecated functions
+ * will invoke `console.trace()` instead of `console.error()`.
+ *
+ * @param {Function} fn - the function to deprecate
+ * @param {String} msg - the string to print to the console when `fn` is invoked
+ * @returns {Function} a new "deprecated" version of `fn`
+ * @api public
+ */
 
-function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
-  var output = [];
-  for (var i = 0, l = value.length; i < l; ++i) {
-    if (hasOwnProperty(value, String(i))) {
-      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
-          String(i), true));
-    } else {
-      output.push('');
-    }
+function deprecate (fn, msg) {
+  if (config('noDeprecation')) {
+    return fn;
   }
-  keys.forEach(function(key) {
-    if (!key.match(/^\d+$/)) {
-      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
-          key, true));
-    }
-  });
-  return output;
-}
-
 
-function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
-  var name, str, desc;
-  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
-  if (desc.get) {
-    if (desc.set) {
-      str = ctx.stylize('[Getter/Setter]', 'special');
-    } else {
-      str = ctx.stylize('[Getter]', 'special');
-    }
-  } else {
-    if (desc.set) {
-      str = ctx.stylize('[Setter]', 'special');
-    }
-  }
-  if (!hasOwnProperty(visibleKeys, key)) {
-    name = '[' + key + ']';
-  }
-  if (!str) {
-    if (ctx.seen.indexOf(desc.value) < 0) {
-      if (isNull(recurseTimes)) {
-        str = formatValue(ctx, desc.value, null);
+  var warned = false;
+  function deprecated() {
+    if (!warned) {
+      if (config('throwDeprecation')) {
+        throw new Error(msg);
+      } else if (config('traceDeprecation')) {
+        console.trace(msg);
       } else {
-        str = formatValue(ctx, desc.value, recurseTimes - 1);
-      }
-      if (str.indexOf('\n') > -1) {
-        if (array) {
-          str = str.split('\n').map(function(line) {
-            return '  ' + line;
-          }).join('\n').substr(2);
-        } else {
-          str = '\n' + str.split('\n').map(function(line) {
-            return '   ' + line;
-          }).join('\n');
-        }
+        console.warn(msg);
       }
-    } else {
-      str = ctx.stylize('[Circular]', 'special');
-    }
-  }
-  if (isUndefined(name)) {
-    if (array && key.match(/^\d+$/)) {
-      return str;
-    }
-    name = JSON.stringify('' + key);
-    if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
-      name = name.substr(1, name.length - 2);
-      name = ctx.stylize(name, 'name');
-    } else {
-      name = name.replace(/'/g, "\\'")
-                 .replace(/\\"/g, '"')
-                 .replace(/(^"|"$)/g, "'");
-      name = ctx.stylize(name, 'string');
+      warned = true;
     }
+    return fn.apply(this, arguments);
   }
 
-  return name + ': ' + str;
-}
-
-
-function reduceToSingleString(output, base, braces) {
-  var numLinesEst = 0;
-  var length = output.reduce(function(prev, cur) {
-    numLinesEst++;
-    if (cur.indexOf('\n') >= 0) numLinesEst++;
-    return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
-  }, 0);
-
-  if (length > 60) {
-    return braces[0] +
-           (base === '' ? '' : base + '\n ') +
-           ' ' +
-           output.join(',\n  ') +
-           ' ' +
-           braces[1];
-  }
-
-  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
-}
-
-
-// NOTE: These type checking functions intentionally don't use `instanceof`
-// because it is fragile and can be easily faked with `Object.create()`.
-function isArray(ar) {
-  return Array.isArray(ar);
-}
-exports.isArray = isArray;
-
-function isBoolean(arg) {
-  return typeof arg === 'boolean';
-}
-exports.isBoolean = isBoolean;
-
-function isNull(arg) {
-  return arg === null;
-}
-exports.isNull = isNull;
-
-function isNullOrUndefined(arg) {
-  return arg == null;
-}
-exports.isNullOrUndefined = isNullOrUndefined;
-
-function isNumber(arg) {
-  return typeof arg === 'number';
-}
-exports.isNumber = isNumber;
-
-function isString(arg) {
-  return typeof arg === 'string';
-}
-exports.isString = isString;
-
-function isSymbol(arg) {
-  return typeof arg === 'symbol';
-}
-exports.isSymbol = isSymbol;
-
-function isUndefined(arg) {
-  return arg === void 0;
-}
-exports.isUndefined = isUndefined;
-
-function isRegExp(re) {
-  return isObject(re) && objectToString(re) === '[object RegExp]';
-}
-exports.isRegExp = isRegExp;
-
-function isObject(arg) {
-  return typeof arg === 'object' && arg !== null;
-}
-exports.isObject = isObject;
-
-function isDate(d) {
-  return isObject(d) && objectToString(d) === '[object Date]';
-}
-exports.isDate = isDate;
-
-function isError(e) {
-  return isObject(e) &&
-      (objectToString(e) === '[object Error]' || e instanceof Error);
-}
-exports.isError = isError;
-
-function isFunction(arg) {
-  return typeof arg === 'function';
-}
-exports.isFunction = isFunction;
-
-function isPrimitive(arg) {
-  return arg === null ||
-         typeof arg === 'boolean' ||
-         typeof arg === 'number' ||
-         typeof arg === 'string' ||
-         typeof arg === 'symbol' ||  // ES6 symbol
-         typeof arg === 'undefined';
-}
-exports.isPrimitive = isPrimitive;
-
-exports.isBuffer = require('./support/isBuffer');
-
-function objectToString(o) {
-  return Object.prototype.toString.call(o);
-}
-
-
-function pad(n) {
-  return n < 10 ? '0' + n.toString(10) : n.toString(10);
-}
-
-
-var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
-              'Oct', 'Nov', 'Dec'];
-
-// 26 Feb 16:19:34
-function timestamp() {
-  var d = new Date();
-  var time = [pad(d.getHours()),
-              pad(d.getMinutes()),
-              pad(d.getSeconds())].join(':');
-  return [d.getDate(), months[d.getMonth()], time].join(' ');
+  return deprecated;
 }
 
-
-// log is just a thin wrapper to console.log that prepends a timestamp
-exports.log = function() {
-  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
-};
-
-
 /**
- * Inherit the prototype methods from one constructor into another.
- *
- * The Function.prototype.inherits from lang.js rewritten as a standalone
- * function (not on Function.prototype). NOTE: If this file is to be loaded
- * during bootstrapping this function needs to be rewritten using some native
- * functions as prototype setup using normal JavaScript does not work as
- * expected during bootstrapping (see mirror.js in r114903).
+ * Checks `localStorage` for boolean values for the given `name`.
  *
- * @param {function} ctor Constructor function which needs to inherit the
- *     prototype.
- * @param {function} superCtor Constructor function to inherit prototype from.
+ * @param {String} name
+ * @returns {Boolean}
+ * @api private
  */
-exports.inherits = require('inherits');
-
-exports._extend = function(origin, add) {
-  // Don't do anything if add isn't an object
-  if (!add || !isObject(add)) return origin;
 
-  var keys = Object.keys(add);
-  var i = keys.length;
-  while (i--) {
-    origin[keys[i]] = add[keys[i]];
+function config (name) {
+  // accessing global.localStorage can trigger a DOMException in sandboxed iframes
+  try {
+    if (!global.localStorage) return false;
+  } catch (_) {
+    return false;
   }
-  return origin;
-};
-
-function hasOwnProperty(obj, prop) {
-  return Object.prototype.hasOwnProperty.call(obj, prop);
+  var val = global.localStorage[name];
+  if (null == val) return false;
+  return String(val).toLowerCase() === 'true';
 }
 
-}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./support/isBuffer":163,"_process":111,"inherits":162}],165:[function(require,module,exports){
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}],164:[function(require,module,exports){
 exports.baseChar = /[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B36-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60\u0D61\u0E01-\u0E2E\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102\u1103\u1105-\u1107\u1109\u110B\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D\u116E\u1172\u1173\u1175\u119E\u11A8\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u212E\u2180-\u2182\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\uAC00-\uD7A3]/;
 
 exports.ideographic = /[\u3007\u3021-\u3029\u4E00-\u9FA5]/;
@@ -32752,7 +22658,7 @@ exports.combiningChar = /[\u0300-\u0345\u0360\u0361\u0483-\u0486\u0591-\u05A1\u0
 exports.digit = /[0-9\u0660-\u0669\u06F0-\u06F9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE7-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29]/;
 
 exports.extender = /[\xB7\u02D0\u02D1\u0387\u0640\u0E46\u0EC6\u3005\u3031-\u3035\u309D\u309E\u30FC-\u30FE]/;
-},{}],166:[function(require,module,exports){
+},{}],165:[function(require,module,exports){
 module.exports = extend
 
 var hasOwnProperty = Object.prototype.hasOwnProperty;
@@ -32773,7 +22679,7 @@ function extend() {
     return target
 }
 
-},{}],167:[function(require,module,exports){
+},{}],166:[function(require,module,exports){
 /*!
  * HTML Parser By John Resig (ejohn.org)
  * Modified by Juriy "kangax" Zaytsev
@@ -33303,7 +23209,7 @@ exports.HTMLtoDOM = function(html, doc) {
   return doc;
 };
 
-},{"./utils":169,"ncname":107}],168:[function(require,module,exports){
+},{"./utils":168,"ncname":110}],167:[function(require,module,exports){
 'use strict';
 
 function Sorter() {
@@ -33376,7 +23282,7 @@ TokenChain.prototype = {
 
 module.exports = TokenChain;
 
-},{}],169:[function(require,module,exports){
+},{}],168:[function(require,module,exports){
 'use strict';
 
 function createMap(values, ignoreCase) {
@@ -34075,23 +23981,17 @@ function processOptions(options) {
     if (typeof minifyJS !== 'object') {
       minifyJS = {};
     }
-    minifyJS.fromString = true;
     (minifyJS.parse || (minifyJS.parse = {})).bare_returns = false;
     options.minifyJS = function(text, inline) {
       var start = text.match(/^\s*<!--.*/);
       var code = start ? text.slice(start[0].length).replace(/\n\s*-->\s*$/, '') : text;
-      try {
-        minifyJS.parse.bare_returns = inline;
-        code = UglifyJS.minify(code, minifyJS).code;
-        if (/;$/.test(code)) {
-          code = code.slice(0, -1);
-        }
-        return code;
-      }
-      catch (err) {
-        options.log(err);
+      minifyJS.parse.bare_returns = inline;
+      var result = UglifyJS.minify(code, minifyJS);
+      if (result.error) {
+        options.log(result.error);
         return text;
       }
+      return result.code.replace(/;$/, '');
     };
   }
 
@@ -34706,4 +24606,8 @@ exports.minify = function(value, options) {
   return minify(value, options);
 };
 
-},{"./htmlparser":167,"./tokenchain":168,"./utils":169,"clean-css":7,"he":101,"relateurl":127,"uglify-js":158}]},{},["html-minifier"]);
+},{"./htmlparser":166,"./tokenchain":167,"./utils":168,"clean-css":7,"he":104,"relateurl":130,"uglify-js":"uglify-js"}],"uglify-js":[function(require,module,exports){
+(function (Buffer){
+(function(exports){"use strict";function array_to_hash(a){var ret=Object.create(null);for(var i=0;i<a.length;++i)ret[a[i]]=true;return ret}function slice(a,start){return Array.prototype.slice.call(a,start||0)}function characters(str){return str.split("")}function member(name,array){return array.indexOf(name)>=0}function find_if(func,array){for(var i=0,n=array.length;i<n;++i){if(func(array[i]))return array[i]}}function repeat_string(str,i){if(i<=0)return"";if(i==1)return str;var d=repeat_string(str,i>>1);d+=d;if(i&1)d+=str;return d}function configure_error_stack(fn){Object.defineProperty(fn.prototype,"stack",{get:function(){var err=new Error(this.message);err.name=this.name;try{throw err}catch(e){return e.stack}}})}function DefaultsError(msg,defs){this.message=msg;this.defs=defs}DefaultsError.prototype=Object.create(Error.prototype);DefaultsError.prototype.constructor=DefaultsError;DefaultsError.prototype.name="DefaultsError";configure_error_stack(DefaultsError);DefaultsError.croak=function(msg,defs){throw new DefaultsError(msg,defs)};function defaults(args,defs,croak){if(args===true)args={};var ret=args||{};if(croak)for(var i in ret)if(HOP(ret,i)&&!HOP(defs,i))DefaultsError.croak("`"+i+"` is not a supported option",defs);for(var i in defs)if(HOP(defs,i)){ret[i]=args&&HOP(args,i)?args[i]:defs[i]}return ret}function merge(obj,ext){var count=0;for(var i in ext)if(HOP(ext,i)){obj[i]=ext[i];count++}return count}function noop(){}function return_false(){return false}function return_true(){return true}function return_this(){return this}function return_null(){return null}var MAP=function(){function MAP(a,f,backwards){var ret=[],top=[],i;function doit(){var val=f(a[i],i);var is_last=val instanceof Last;if(is_last)val=val.v;if(val instanceof AtTop){val=val.v;if(val instanceof Splice){top.push.apply(top,backwards?val.v.slice().reverse():val.v)}else{top.push(val)}}else if(val!==skip){if(val instanceof Splice){ret.push.apply(ret,backwards?val.v.slice().reverse():val.v)}else{ret.push(val)}}return is_last}if(a instanceof Array){if(backwards){for(i=a.length;--i>=0;)if(doit())break;ret.reverse();top.reverse()}else{for(i=0;i<a.length;++i)if(doit())break}}else{for(i in a)if(HOP(a,i))if(doit())break}return top.concat(ret)}MAP.at_top=function(val){return new AtTop(val)};MAP.splice=function(val){return new Splice(val)};MAP.last=function(val){return new Last(val)};var skip=MAP.skip={};function AtTop(val){this.v=val}function Splice(val){this.v=val}function Last(val){this.v=val}return MAP}();function push_uniq(array,el){if(array.indexOf(el)<0)array.push(el)}function string_template(text,props){return text.replace(/\{(.+?)\}/g,function(str,p){return props&&props[p]})}function remove(array,el){for(var i=array.length;--i>=0;){if(array[i]===el)array.splice(i,1)}}function mergeSort(array,cmp){if(array.length<2)return array.slice();function merge(a,b){var r=[],ai=0,bi=0,i=0;while(ai<a.length&&bi<b.length){cmp(a[ai],b[bi])<=0?r[i++]=a[ai++]:r[i++]=b[bi++]}if(ai<a.length)r.push.apply(r,a.slice(ai));if(bi<b.length)r.push.apply(r,b.slice(bi));return r}function _ms(a){if(a.length<=1)return a;var m=Math.floor(a.length/2),left=a.slice(0,m),right=a.slice(m);left=_ms(left);right=_ms(right);return merge(left,right)}return _ms(array)}function set_difference(a,b){return a.filter(function(el){return b.indexOf(el)<0})}function set_intersection(a,b){return a.filter(function(el){return b.indexOf(el)>=0})}function makePredicate(words){if(!(words instanceof Array))words=words.split(" ");var f="",cats=[];out:for(var i=0;i<words.length;++i){for(var j=0;j<cats.length;++j)if(cats[j][0].length==words[i].length){cats[j].push(words[i]);continue out}cats.push([words[i]])}function quote(word){return JSON.stringify(word).replace(/[\u2028\u2029]/g,function(s){switch(s){case"\u2028":return"\\u2028";case"\u2029":return"\\u2029"}return s})}function compareTo(arr){if(arr.length==1)return f+="return str === "+quote(arr[0])+";";f+="switch(str){";for(var i=0;i<arr.length;++i)f+="case "+quote(arr[i])+":";f+="return true}return false;"}if(cats.length>3){cats.sort(function(a,b){return b.length-a.length});f+="switch(str.length){";for(var i=0;i<cats.length;++i){var cat=cats[i];f+="case "+cat[0].length+":";compareTo(cat)}f+="}"}else{compareTo(words)}return new Function("str",f)}function all(array,predicate){for(var i=array.length;--i>=0;)if(!predicate(array[i]))return false;return true}function Dictionary(){this._values=Object.create(null);this._size=0}Dictionary.prototype={set:function(key,val){if(!this.has(key))++this._size;this._values["$"+key]=val;return this},add:function(key,val){if(this.has(key)){this.get(key).push(val)}else{this.set(key,[val])}return this},get:function(key){return this._values["$"+key]},del:function(key){if(this.has(key)){--this._size;delete this._values["$"+key]}return this},has:function(key){return"$"+key in this._values},each:function(f){for(var i in this._values)f(this._values[i],i.substr(1))},size:function(){return this._size},map:function(f){var ret=[];for(var i in this._values)ret.push(f(this._values[i],i.substr(1)));return ret},toObject:function(){return this._values}};Dictionary.fromObject=function(obj){var dict=new Dictionary;dict._size=merge(dict._values,obj);return dict};function HOP(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}function first_in_statement(stack){var node=stack.parent(-1);for(var i=0,p;p=stack.parent(i);i++){if(p instanceof AST_Statement&&p.body===node)return true;if(p instanceof AST_Sequence&&p.expressions[0]===node||p instanceof AST_Call&&p.expression===node&&!(p instanceof AST_New)||p instanceof AST_Dot&&p.expression===node||p instanceof AST_Sub&&p.expression===node||p instanceof AST_Conditional&&p.condition===node||p instanceof AST_Binary&&p.left===node||p instanceof AST_UnaryPostfix&&p.expression===node){node=p}else{return false}}}"use strict";function DEFNODE(type,props,methods,base){if(arguments.length<4)base=AST_Node;if(!props)props=[];else props=props.split(/\s+/);var self_props=props;if(base&&base.PROPS)props=props.concat(base.PROPS);var code="return function AST_"+type+"(props){ if (props) { ";for(var i=props.length;--i>=0;){code+="this."+props[i]+" = props."+props[i]+";"}var proto=base&&new base;if(proto&&proto.initialize||methods&&methods.initialize)code+="this.initialize();";code+="}}";var ctor=new Function(code)();if(proto){ctor.prototype=proto;ctor.BASE=base}if(base)base.SUBCLASSES.push(ctor);ctor.prototype.CTOR=ctor;ctor.PROPS=props||null;ctor.SELF_PROPS=self_props;ctor.SUBCLASSES=[];if(type){ctor.prototype.TYPE=ctor.TYPE=type}if(methods)for(i in methods)if(HOP(methods,i)){if(/^\$/.test(i)){ctor[i.substr(1)]=methods[i]}else{ctor.prototype[i]=methods[i]}}ctor.DEFMETHOD=function(name,method){this.prototype[name]=method};if(typeof exports!=="undefined"){exports["AST_"+type]=ctor}return ctor}var AST_Token=DEFNODE("Token","type value line col pos endline endcol endpos nlb comments_before file raw",{},null);var AST_Node=DEFNODE("Node","start end",{_clone:function(deep){if(deep){var self=this.clone();return self.transform(new TreeTransformer(function(node){if(node!==self){return node.clone(true)}}))}return new this.CTOR(this)},clone:function(deep){return this._clone(deep)},$documentation:"Base class of all AST nodes",$propdoc:{start:"[AST_Token] The first token of this node",end:"[AST_Token] The last token of this node"},_walk:function(visitor){return visitor._visit(this)},walk:function(visitor){return this._walk(visitor)}},null);AST_Node.warn_function=null;AST_Node.warn=function(txt,props){if(AST_Node.warn_function)AST_Node.warn_function(string_template(txt,props))};var AST_Statement=DEFNODE("Statement",null,{$documentation:"Base class of all statements"});var AST_Debugger=DEFNODE("Debugger",null,{$documentation:"Represents a debugger statement"},AST_Statement);var AST_Directive=DEFNODE("Directive","value scope quote",{$documentation:'Represents a directive, like "use strict";',$propdoc:{value:"[string] The value of this directive as a plain string (it's not an AST_String!)",scope:"[AST_Scope/S] The scope that this directive affects",quote:"[string] the original quote character"}},AST_Statement);var AST_SimpleStatement=DEFNODE("SimpleStatement","body",{$documentation:"A statement consisting of an expression, i.e. a = 1 + 2",$propdoc:{body:"[AST_Node] an expression node (should not be instanceof AST_Statement)"},_walk:function(visitor){return visitor._visit(this,function(){this.body._walk(visitor)})}},AST_Statement);function walk_body(node,visitor){var body=node.body;if(body instanceof AST_Statement){body._walk(visitor)}else for(var i=0,len=body.length;i<len;i++){body[i]._walk(visitor)}}var AST_Block=DEFNODE("Block","body",{$documentation:"A body of statements (usually bracketed)",$propdoc:{body:"[AST_Statement*] an array of statements"},_walk:function(visitor){return visitor._visit(this,function(){walk_body(this,visitor)})}},AST_Statement);var AST_BlockStatement=DEFNODE("BlockStatement",null,{$documentation:"A block statement"},AST_Block);var AST_EmptyStatement=DEFNODE("EmptyStatement",null,{$documentation:"The empty statement (empty block or simply a semicolon)"},AST_Statement);var AST_StatementWithBody=DEFNODE("StatementWithBody","body",{$documentation:"Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`",$propdoc:{body:"[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement"}},AST_Statement);var AST_LabeledStatement=DEFNODE("LabeledStatement","label",{$documentation:"Statement with a label",$propdoc:{label:"[AST_Label] a label definition"},_walk:function(visitor){return visitor._visit(this,function(){this.label._walk(visitor);this.body._walk(visitor)})},clone:function(deep){var node=this._clone(deep);if(deep){var label=node.label;var def=this.label;node.walk(new TreeWalker(function(node){if(node instanceof AST_LoopControl&&node.label&&node.label.thedef===def){node.label.thedef=label;label.references.push(node)}}))}return node}},AST_StatementWithBody);var AST_IterationStatement=DEFNODE("IterationStatement",null,{$documentation:"Internal class.  All loops inherit from it."},AST_StatementWithBody);var AST_DWLoop=DEFNODE("DWLoop","condition",{$documentation:"Base class for do/while statements",$propdoc:{condition:"[AST_Node] the loop condition.  Should not be instanceof AST_Statement"}},AST_IterationStatement);var AST_Do=DEFNODE("Do",null,{$documentation:"A `do` statement",_walk:function(visitor){return visitor._visit(this,function(){this.body._walk(visitor);this.condition._walk(visitor)})}},AST_DWLoop);var AST_While=DEFNODE("While",null,{$documentation:"A `while` statement",_walk:function(visitor){return visitor._visit(this,function(){this.condition._walk(visitor);this.body._walk(visitor)})}},AST_DWLoop);var AST_For=DEFNODE("For","init condition step",{$documentation:"A `for` statement",$propdoc:{init:"[AST_Node?] the `for` initialization code, or null if empty",condition:"[AST_Node?] the `for` termination clause, or null if empty",step:"[AST_Node?] the `for` update clause, or null if empty"},_walk:function(visitor){return visitor._visit(this,function(){if(this.init)this.init._walk(visitor);if(this.condition)this.condition._walk(visitor);if(this.step)this.step._walk(visitor);this.body._walk(visitor)})}},AST_IterationStatement);var AST_ForIn=DEFNODE("ForIn","init name object",{$documentation:"A `for ... in` statement",$propdoc:{init:"[AST_Node] the `for/in` initialization code",name:"[AST_SymbolRef?] the loop variable, only if `init` is AST_Var",object:"[AST_Node] the object that we're looping through"},_walk:function(visitor){return visitor._visit(this,function(){this.init._walk(visitor);this.object._walk(visitor);this.body._walk(visitor)})}},AST_IterationStatement);var AST_With=DEFNODE("With","expression",{$documentation:"A `with` statement",$propdoc:{expression:"[AST_Node] the `with` expression"},_walk:function(visitor){return visitor._visit(this,function(){this.expression._walk(visitor);this.body._walk(visitor)})}},AST_StatementWithBody);var AST_Scope=DEFNODE("Scope","directives variables functions uses_with uses_eval parent_scope enclosed cname",{$documentation:"Base class for all statements introducing a lexical scope",$propdoc:{directives:"[string*/S] an array of directives declared in this scope",variables:"[Object/S] a map of name -> SymbolDef for all variables/functions defined in this scope",functions:"[Object/S] like `variables`, but only lists function declarations",uses_with:"[boolean/S] tells whether this scope uses the `with` statement",uses_eval:"[boolean/S] tells whether this scope contains a direct call to the global `eval`",parent_scope:"[AST_Scope?/S] link to the parent scope",enclosed:"[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes",cname:"[integer/S] current index for mangling variables (used internally by the mangler)"}},AST_Block);var AST_Toplevel=DEFNODE("Toplevel","globals",{$documentation:"The toplevel scope",$propdoc:{globals:"[Object/S] a map of name -> SymbolDef for all undeclared names"},wrap_commonjs:function(name){var body=this.body;var wrapped_tl="(function(exports){'$ORIG';})(typeof "+name+"=='undefined'?("+name+"={}):"+name+");";wrapped_tl=parse(wrapped_tl);wrapped_tl=wrapped_tl.transform(new TreeTransformer(function before(node){if(node instanceof AST_Directive&&node.value=="$ORIG"){return MAP.splice(body)}}));return wrapped_tl}},AST_Scope);var AST_Lambda=DEFNODE("Lambda","name argnames uses_arguments",{$documentation:"Base class for functions",$propdoc:{name:"[AST_SymbolDeclaration?] the name of this function",argnames:"[AST_SymbolFunarg*] array of function arguments",uses_arguments:"[boolean/S] tells whether this function accesses the arguments array"},_walk:function(visitor){return visitor._visit(this,function(){if(this.name)this.name._walk(visitor);var argnames=this.argnames;for(var i=0,len=argnames.length;i<len;i++){argnames[i]._walk(visitor)}walk_body(this,visitor)})}},AST_Scope);var AST_Accessor=DEFNODE("Accessor",null,{$documentation:"A setter/getter function.  The `name` property is always null."},AST_Lambda);var AST_Function=DEFNODE("Function",null,{$documentation:"A function expression"},AST_Lambda);var AST_Defun=DEFNODE("Defun",null,{$documentation:"A function definition"},AST_Lambda);var AST_Jump=DEFNODE("Jump",null,{$documentation:"Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)"},AST_Statement);var AST_Exit=DEFNODE("Exit","value",{$documentation:"Base class for “exits” (`return` and `throw`)",$propdoc:{value:"[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return"},_walk:function(visitor){return visitor._visit(this,this.value&&function(){this.value._walk(visitor)})}},AST_Jump);var AST_Return=DEFNODE("Return",null,{$documentation:"A `return` statement"},AST_Exit);var AST_Throw=DEFNODE("Throw",null,{$documentation:"A `throw` statement"},AST_Exit);var AST_LoopControl=DEFNODE("LoopControl","label",{$documentation:"Base class for loop control statements (`break` and `continue`)",$propdoc:{label:"[AST_LabelRef?] the label, or null if none"},_walk:function(visitor){return visitor._visit(this,this.label&&function(){this.label._walk(visitor)})}},AST_Jump);var AST_Break=DEFNODE("Break",null,{$documentation:"A `break` statement"},AST_LoopControl);var AST_Continue=DEFNODE("Continue",null,{$documentation:"A `continue` statement"},AST_LoopControl);var AST_If=DEFNODE("If","condition alternative",{$documentation:"A `if` statement",$propdoc:{condition:"[AST_Node] the `if` condition",alternative:"[AST_Statement?] the `else` part, or null if not present"},_walk:function(visitor){return visitor._visit(this,function(){this.condition._walk(visitor);this.body._walk(visitor);if(this.alternative)this.alternative._walk(visitor)})}},AST_StatementWithBody);var AST_Switch=DEFNODE("Switch","expression",{$documentation:"A `switch` statement",$propdoc:{expression:"[AST_Node] the `switch` “discriminant”"},_walk:function(visitor){return visitor._visit(this,function(){this.expression._walk(visitor);walk_body(this,visitor)})}},AST_Block);var AST_SwitchBranch=DEFNODE("SwitchBranch",null,{$documentation:"Base class for `switch` branches"},AST_Block);var AST_Default=DEFNODE("Default",null,{$documentation:"A `default` switch branch"},AST_SwitchBranch);var AST_Case=DEFNODE("Case","expression",{$documentation:"A `case` switch branch",$propdoc:{expression:"[AST_Node] the `case` expression"},_walk:function(visitor){return visitor._visit(this,function(){this.expression._walk(visitor);walk_body(this,visitor)})}},AST_SwitchBranch);var AST_Try=DEFNODE("Try","bcatch bfinally",{$documentation:"A `try` statement",$propdoc:{bcatch:"[AST_Catch?] the catch block, or null if not present",bfinally:"[AST_Finally?] the finally block, or null if not present"},_walk:function(visitor){return visitor._visit(this,function(){walk_body(this,visitor);if(this.bcatch)this.bcatch._walk(visitor);if(this.bfinally)this.bfinally._walk(visitor)})}},AST_Block);var AST_Catch=DEFNODE("Catch","argname",{$documentation:"A `catch` node; only makes sense as part of a `try` statement",$propdoc:{argname:"[AST_SymbolCatch] symbol for the exception"},_walk:function(visitor){return visitor._visit(this,function(){this.argname._walk(visitor);walk_body(this,visitor)})}},AST_Block);var AST_Finally=DEFNODE("Finally",null,{$documentation:"A `finally` node; only makes sense as part of a `try` statement"},AST_Block);var AST_Definitions=DEFNODE("Definitions","definitions",{$documentation:"Base class for `var` nodes (variable declarations/initializations)",$propdoc:{definitions:"[AST_VarDef*] array of variable definitions"},_walk:function(visitor){return visitor._visit(this,function(){var definitions=this.definitions;for(var i=0,len=definitions.length;i<len;i++){definitions[i]._walk(visitor)}})}},AST_Statement);var AST_Var=DEFNODE("Var",null,{$documentation:"A `var` statement"},AST_Definitions);var AST_VarDef=DEFNODE("VarDef","name value",{$documentation:"A variable declaration; only appears in a AST_Definitions node",$propdoc:{name:"[AST_SymbolVar] name of the variable",value:"[AST_Node?] initializer, or null of there's no initializer"},_walk:function(visitor){return visitor._visit(this,function(){this.name._walk(visitor);if(this.value)this.value._walk(visitor)})}});var AST_Call=DEFNODE("Call","expression args",{$documentation:"A function call expression",$propdoc:{expression:"[AST_Node] expression to invoke as function",args:"[AST_Node*] array of arguments"},_walk:function(visitor){return visitor._visit(this,function(){var args=this.args;for(var i=0,len=args.length;i<len;i++){args[i]._walk(visitor)}this.expression._walk(visitor)})}});var AST_New=DEFNODE("New",null,{$documentation:"An object instantiation.  Derives from a function call since it has exactly the same properties"},AST_Call);var AST_Sequence=DEFNODE("Sequence","expressions",{$documentation:"A sequence expression (comma-separated expressions)",$propdoc:{expressions:"[AST_Node*] array of expressions (at least two)"},_walk:function(visitor){return visitor._visit(this,function(){this.expressions.forEach(function(node){node._walk(visitor)})})}});var AST_PropAccess=DEFNODE("PropAccess","expression property",{$documentation:'Base class for property access expressions, i.e. `a.foo` or `a["foo"]`',$propdoc:{expression:"[AST_Node] the “container” expression",property:"[AST_Node|string] the property to access.  For AST_Dot this is always a plain string, while for AST_Sub it's an arbitrary AST_Node"}});var AST_Dot=DEFNODE("Dot",null,{$documentation:"A dotted property access expression",_walk:function(visitor){return visitor._visit(this,function(){this.expression._walk(visitor)})}},AST_PropAccess);var AST_Sub=DEFNODE("Sub",null,{$documentation:'Index-style property access, i.e. `a["foo"]`',_walk:function(visitor){return visitor._visit(this,function(){this.expression._walk(visitor);this.property._walk(visitor)})}},AST_PropAccess);var AST_Unary=DEFNODE("Unary","operator expression",{$documentation:"Base class for unary expressions",$propdoc:{operator:"[string] the operator",expression:"[AST_Node] expression that this unary operator applies to"},_walk:function(visitor){return visitor._visit(this,function(){this.expression._walk(visitor)})}});var AST_UnaryPrefix=DEFNODE("UnaryPrefix",null,{$documentation:"Unary prefix expression, i.e. `typeof i` or `++i`"},AST_Unary);var AST_UnaryPostfix=DEFNODE("UnaryPostfix",null,{$documentation:"Unary postfix expression, i.e. `i++`"},AST_Unary);var AST_Binary=DEFNODE("Binary","operator left right",{$documentation:"Binary expression, i.e. `a + b`",$propdoc:{left:"[AST_Node] left-hand side expression",operator:"[string] the operator",right:"[AST_Node] right-hand side expression"},_walk:function(visitor){return visitor._visit(this,function(){this.left._walk(visitor);this.right._walk(visitor)})}});var AST_Conditional=DEFNODE("Conditional","condition consequent alternative",{$documentation:"Conditional expression using the ternary operator, i.e. `a ? b : c`",$propdoc:{condition:"[AST_Node]",consequent:"[AST_Node]",alternative:"[AST_Node]"},_walk:function(visitor){return visitor._visit(this,function(){this.condition._walk(visitor);this.consequent._walk(visitor);this.alternative._walk(visitor)})}});var AST_Assign=DEFNODE("Assign",null,{$documentation:"An assignment expression — `a = b + 5`"},AST_Binary);var AST_Array=DEFNODE("Array","elements",{$documentation:"An array literal",$propdoc:{elements:"[AST_Node*] array of elements"},_walk:function(visitor){return visitor._visit(this,function(){var elements=this.elements;for(var i=0,len=elements.length;i<len;i++){elements[i]._walk(visitor)}})}});var AST_Object=DEFNODE("Object","properties",{$documentation:"An object literal",$propdoc:{properties:"[AST_ObjectProperty*] array of properties"},_walk:function(visitor){return visitor._visit(this,function(){var properties=this.properties;for(var i=0,len=properties.length;i<len;i++){properties[i]._walk(visitor)}})}});var AST_ObjectProperty=DEFNODE("ObjectProperty","key value",{$documentation:"Base class for literal object properties",$propdoc:{key:"[string] the property name converted to a string for ObjectKeyVal.  For setters and getters this is an AST_SymbolAccessor.",value:"[AST_Node] property value.  For setters and getters this is an AST_Accessor."},_walk:function(visitor){return visitor._visit(this,function(){this.value._walk(visitor)})}});var AST_ObjectKeyVal=DEFNODE("ObjectKeyVal","quote",{$documentation:"A key: value object property",$propdoc:{quote:"[string] the original quote character"}},AST_ObjectProperty);var AST_ObjectSetter=DEFNODE("ObjectSetter",null,{$documentation:"An object setter property"},AST_ObjectProperty);var AST_ObjectGetter=DEFNODE("ObjectGetter",null,{$documentation:"An object getter property"},AST_ObjectProperty);var AST_Symbol=DEFNODE("Symbol","scope name thedef",{$propdoc:{name:"[string] name of this symbol",scope:"[AST_Scope/S] the current scope (not necessarily the definition scope)",thedef:"[SymbolDef/S] the definition of this symbol"},$documentation:"Base class for all symbols"});var AST_SymbolAccessor=DEFNODE("SymbolAccessor",null,{$documentation:"The name of a property accessor (setter/getter function)"},AST_Symbol);var AST_SymbolDeclaration=DEFNODE("SymbolDeclaration","init",{$documentation:"A declaration symbol (symbol in var, function name or argument, symbol in catch)"},AST_Symbol);var AST_SymbolVar=DEFNODE("SymbolVar",null,{$documentation:"Symbol defining a variable"},AST_SymbolDeclaration);var AST_SymbolFunarg=DEFNODE("SymbolFunarg",null,{$documentation:"Symbol naming a function argument"},AST_SymbolVar);var AST_SymbolDefun=DEFNODE("SymbolDefun",null,{$documentation:"Symbol defining a function"},AST_SymbolDeclaration);var AST_SymbolLambda=DEFNODE("SymbolLambda",null,{$documentation:"Symbol naming a function expression"},AST_SymbolDeclaration);var AST_SymbolCatch=DEFNODE("SymbolCatch",null,{$documentation:"Symbol naming the exception in catch"},AST_SymbolDeclaration);var AST_Label=DEFNODE("Label","references",{$documentation:"Symbol naming a label (declaration)",$propdoc:{references:"[AST_LoopControl*] a list of nodes referring to this label"},initialize:function(){this.references=[];this.thedef=this}},AST_Symbol);var AST_SymbolRef=DEFNODE("SymbolRef",null,{$documentation:"Reference to some symbol (not definition/declaration)"},AST_Symbol);var AST_LabelRef=DEFNODE("LabelRef",null,{$documentation:"Reference to a label symbol"},AST_Symbol);var AST_This=DEFNODE("This",null,{$documentation:"The `this` symbol"},AST_Symbol);var AST_Constant=DEFNODE("Constant",null,{$documentation:"Base class for all constants",getValue:function(){return this.value}});var AST_String=DEFNODE("String","value quote",{$documentation:"A string literal",$propdoc:{value:"[string] the contents of this string",quote:"[string] the original quote character"}},AST_Constant);var AST_Number=DEFNODE("Number","value literal",{$documentation:"A number literal",$propdoc:{value:"[number] the numeric value",literal:"[string] numeric value as string (optional)"}},AST_Constant);var AST_RegExp=DEFNODE("RegExp","value",{$documentation:"A regexp literal",$propdoc:{value:"[RegExp] the actual regexp"}},AST_Constant);var AST_Atom=DEFNODE("Atom",null,{$documentation:"Base class for atoms"},AST_Constant);var AST_Null=DEFNODE("Null",null,{$documentation:"The `null` atom",value:null},AST_Atom);var AST_NaN=DEFNODE("NaN",null,{$documentation:"The impossible value",value:0/0},AST_Atom);var AST_Undefined=DEFNODE("Undefined",null,{$documentation:"The `undefined` value",value:function(){}()},AST_Atom);var AST_Hole=DEFNODE("Hole",null,{$documentation:"A hole in an array",value:function(){}()},AST_Atom);var AST_Infinity=DEFNODE("Infinity",null,{$documentation:"The `Infinity` value",value:1/0},AST_Atom);var AST_Boolean=DEFNODE("Boolean",null,{$documentation:"Base class for booleans"},AST_Atom);var AST_False=DEFNODE("False",null,{$documentation:"The `false` atom",value:false},AST_Boolean);var AST_True=DEFNODE("True",null,{$documentation:"The `true` atom",value:true},AST_Boolean);function TreeWalker(callback){this.visit=callback;this.stack=[];this.directives=Object.create(null)}TreeWalker.prototype={_visit:function(node,descend){this.push(node);var ret=this.visit(node,descend?function(){descend.call(node)}:noop);if(!ret&&descend){descend.call(node)}this.pop(node);return ret},parent:function(n){return this.stack[this.stack.length-2-(n||0)]},push:function(node){if(node instanceof AST_Lambda){this.directives=Object.create(this.directives)}else if(node instanceof AST_Directive&&!this.directives[node.value]){this.directives[node.value]=node}this.stack.push(node)},pop:function(node){this.stack.pop();if(node instanceof AST_Lambda){this.directives=Object.getPrototypeOf(this.directives)}},self:function(){return this.stack[this.stack.length-1]},find_parent:function(type){var stack=this.stack;for(var i=stack.length;--i>=0;){var x=stack[i];if(x instanceof type)return x}},has_directive:function(type){var dir=this.directives[type];if(dir)return dir;var node=this.stack[this.stack.length-1];if(node instanceof AST_Scope){for(var i=0;i<node.body.length;++i){var st=node.body[i];if(!(st instanceof AST_Directive))break;if(st.value==type)return st}}},in_boolean_context:function(){var stack=this.stack;var i=stack.length,self=stack[--i];while(i>0){var p=stack[--i];if(p instanceof AST_If&&p.condition===self||p instanceof AST_Conditional&&p.condition===self||p instanceof AST_DWLoop&&p.condition===self||p instanceof AST_For&&p.condition===self||p instanceof AST_UnaryPrefix&&p.operator=="!"&&p.expression===self){return true}if(!(p instanceof AST_Binary&&(p.operator=="&&"||p.operator=="||")))return false;self=p}},loopcontrol_target:function(node){var stack=this.stack;if(node.label)for(var i=stack.length;--i>=0;){var x=stack[i];if(x instanceof AST_LabeledStatement&&x.label.name==node.label.name)return x.body}else for(var i=stack.length;--i>=0;){var x=stack[i];if(x instanceof AST_IterationStatement||node instanceof AST_Break&&x instanceof AST_Switch)return x}}};"use strict";var KEYWORDS="break case catch const continue debugger default delete do else finally for function if in instanceof new return switch throw try typeof var void while with";var KEYWORDS_ATOM="false null true";var RESERVED_WORDS="abstract boolean byte char class double enum export extends final float goto implements import int interface let long native package private protected public short static super synchronized this throws transient volatile yield"+" "+KEYWORDS_ATOM+" "+KEYWORDS;var KEYWORDS_BEFORE_EXPRESSION="return new delete throw else case";KEYWORDS=makePredicate(KEYWORDS);RESERVED_WORDS=makePredicate(RESERVED_WORDS);KEYWORDS_BEFORE_EXPRESSION=makePredicate(KEYWORDS_BEFORE_EXPRESSION);KEYWORDS_ATOM=makePredicate(KEYWORDS_ATOM);var OPERATOR_CHARS=makePredicate(characters("+-*&%=<>!?|~^"));var RE_HEX_NUMBER=/^0x[0-9a-f]+$/i;var RE_OCT_NUMBER=/^0[0-7]+$/;var OPERATORS=makePredicate(["in","instanceof","typeof","new","void","delete","++","--","+","-","!","~","&","|","^","*","/","%",">>","<<",">>>","<",">","<=",">=","==","===","!=","!==","?","=","+=","-=","/=","*=","%=",">>=","<<=",">>>=","|=","^=","&=","&&","||"]);var WHITESPACE_CHARS=makePredicate(characters("  \n\r\t\f\v​           \u2028\u2029   \ufeff"));var NEWLINE_CHARS=makePredicate(characters("\n\r\u2028\u2029"));var PUNC_BEFORE_EXPRESSION=makePredicate(characters("[{(,;:"));var PUNC_CHARS=makePredicate(characters("[]{}(),;:"));var REGEXP_MODIFIERS=makePredicate(characters("gmsiy"));var UNICODE={letter:new RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),digit:new RegExp("[\\u0030-\\u0039\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]"),non_spacing_mark:new RegExp("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]"),space_combining_mark:new RegExp("[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]"),connector_punctuation:new RegExp("[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]")};function is_letter(code){return code>=97&&code<=122||code>=65&&code<=90||code>=170&&UNICODE.letter.test(String.fromCharCode(code))}function is_digit(code){return code>=48&&code<=57}function is_alphanumeric_char(code){return is_digit(code)||is_letter(code)}function is_unicode_digit(code){return UNICODE.digit.test(String.fromCharCode(code))}function is_unicode_combining_mark(ch){return UNICODE.non_spacing_mark.test(ch)||UNICODE.space_combining_mark.test(ch)}function is_unicode_connector_punctuation(ch){return UNICODE.connector_punctuation.test(ch)}function is_identifier(name){return!RESERVED_WORDS(name)&&/^[a-z_$][a-z0-9_$]*$/i.test(name)}function is_identifier_start(code){return code==36||code==95||is_letter(code)}function is_identifier_char(ch){var code=ch.charCodeAt(0);return is_identifier_start(code)||is_digit(code)||code==8204||code==8205||is_unicode_combining_mark(ch)||is_unicode_connector_punctuation(ch)||is_unicode_digit(code)}function is_identifier_string(str){return/^[a-z_$][a-z0-9_$]*$/i.test(str)}function parse_js_number(num){if(RE_HEX_NUMBER.test(num)){return parseInt(num.substr(2),16)}else if(RE_OCT_NUMBER.test(num)){return parseInt(num.substr(1),8)}else{var val=parseFloat(num);if(val==num)return val}}function JS_Parse_Error(message,filename,line,col,pos){this.message=message;this.filename=filename;this.line=line;this.col=col;this.pos=pos}JS_Parse_Error.prototype=Object.create(Error.prototype);JS_Parse_Error.prototype.constructor=JS_Parse_Error;JS_Parse_Error.prototype.name="SyntaxError";configure_error_stack(JS_Parse_Error);function js_error(message,filename,line,col,pos){throw new JS_Parse_Error(message,filename,line,col,pos)}function is_token(token,type,val){return token.type==type&&(val==null||token.value==val)}var EX_EOF={};function tokenizer($TEXT,filename,html5_comments,shebang){var S={text:$TEXT,filename:filename,pos:0,tokpos:0,line:1,tokline:0,col:0,tokcol:0,newline_before:false,regex_allowed:false,comments_before:[],directives:{},directive_stack:[]};function peek(){return S.text.charAt(S.pos)}function next(signal_eof,in_string){var ch=S.text.charAt(S.pos++);if(signal_eof&&!ch)throw EX_EOF;if(NEWLINE_CHARS(ch)){S.newline_before=S.newline_before||!in_string;++S.line;S.col=0;if(!in_string&&ch=="\r"&&peek()=="\n"){++S.pos;ch="\n"}}else{++S.col}return ch}function forward(i){while(i-- >0)next()}function looking_at(str){return S.text.substr(S.pos,str.length)==str}function find_eol(){var text=S.text;for(var i=S.pos,n=S.text.length;i<n;++i){var ch=text[i];if(NEWLINE_CHARS(ch))return i}return-1}function find(what,signal_eof){var pos=S.text.indexOf(what,S.pos);if(signal_eof&&pos==-1)throw EX_EOF;return pos}function start_token(){S.tokline=S.line;S.tokcol=S.col;S.tokpos=S.pos}var prev_was_dot=false;function token(type,value,is_comment){S.regex_allowed=type=="operator"&&!UNARY_POSTFIX(value)||type=="keyword"&&KEYWORDS_BEFORE_EXPRESSION(value)||type=="punc"&&PUNC_BEFORE_EXPRESSION(value);prev_was_dot=type=="punc"&&value==".";var ret={type:type,value:value,line:S.tokline,col:S.tokcol,pos:S.tokpos,endline:S.line,endcol:S.col,endpos:S.pos,nlb:S.newline_before,file:filename};if(/^(?:num|string|regexp)$/i.test(type)){ret.raw=$TEXT.substring(ret.pos,ret.endpos)}if(!is_comment){ret.comments_before=S.comments_before;S.comments_before=[];for(var i=0,len=ret.comments_before.length;i<len;i++){ret.nlb=ret.nlb||ret.comments_before[i].nlb}}S.newline_before=false;return new AST_Token(ret)}function skip_whitespace(){while(WHITESPACE_CHARS(peek()))next()}function read_while(pred){var ret="",ch,i=0;while((ch=peek())&&pred(ch,i++))ret+=next();return ret}function parse_error(err){js_error(err,filename,S.tokline,S.tokcol,S.tokpos)}function read_num(prefix){var has_e=false,after_e=false,has_x=false,has_dot=prefix==".";var num=read_while(function(ch,i){var code=ch.charCodeAt(0);switch(code){case 120:case 88:return has_x?false:has_x=true;case 101:case 69:return has_x?true:has_e?false:has_e=after_e=true;case 45:return after_e||i==0&&!prefix;case 43:return after_e;case after_e=false,46:return!has_dot&&!has_x&&!has_e?has_dot=true:false}return is_alphanumeric_char(code)});if(prefix)num=prefix+num;if(RE_OCT_NUMBER.test(num)&&next_token.has_directive("use strict")){parse_error("Legacy octal literals are not allowed in strict mode")}var valid=parse_js_number(num);if(!isNaN(valid)){return token("num",valid)}else{parse_error("Invalid syntax: "+num)}}function read_escaped_char(in_string){var ch=next(true,in_string);switch(ch.charCodeAt(0)){case 110:return"\n";case 114:return"\r";case 116:return"\t";case 98:return"\b";case 118:return"\v";case 102:return"\f";case 120:return String.fromCharCode(hex_bytes(2));case 117:return String.fromCharCode(hex_bytes(4));case 10:return"";case 13:if(peek()=="\n"){next(true,in_string);return""}}if(ch>="0"&&ch<="7")return read_octal_escape_sequence(ch);return ch}function read_octal_escape_sequence(ch){var p=peek();if(p>="0"&&p<="7"){ch+=next(true);if(ch[0]<="3"&&(p=peek())>="0"&&p<="7")ch+=next(true)}if(ch==="0")return"\0";if(ch.length>0&&next_token.has_directive("use strict"))parse_error("Legacy octal escape sequences are not allowed in strict mode");return String.fromCharCode(parseInt(ch,8))}function hex_bytes(n){var num=0;for(;n>0;--n){var digit=parseInt(next(true),16);if(isNaN(digit))parse_error("Invalid hex-character pattern in string");num=num<<4|digit}return num}var read_string=with_eof_error("Unterminated string constant",function(quote_char){var quote=next(),ret="";for(;;){var ch=next(true,true);if(ch=="\\")ch=read_escaped_char(true);else if(NEWLINE_CHARS(ch))parse_error("Unterminated string constant");else if(ch==quote)break;ret+=ch}var tok=token("string",ret);tok.quote=quote_char;return tok});function skip_line_comment(type){var regex_allowed=S.regex_allowed;var i=find_eol(),ret;if(i==-1){ret=S.text.substr(S.pos);S.pos=S.text.length}else{ret=S.text.substring(S.pos,i);S.pos=i}S.col=S.tokcol+(S.pos-S.tokpos);S.comments_before.push(token(type,ret,true));S.regex_allowed=regex_allowed;return next_token}var skip_multiline_comment=with_eof_error("Unterminated multiline comment",function(){var regex_allowed=S.regex_allowed;var i=find("*/",true);var text=S.text.substring(S.pos,i).replace(/\r\n|\r|\u2028|\u2029/g,"\n");forward(text.length+2);S.comments_before.push(token("comment2",text,true));S.regex_allowed=regex_allowed;return next_token});function read_name(){var backslash=false,name="",ch,escaped=false,hex;while((ch=peek())!=null){if(!backslash){if(ch=="\\")escaped=backslash=true,next();else if(is_identifier_char(ch))name+=next();else break}else{if(ch!="u")parse_error("Expecting UnicodeEscapeSequence -- uXXXX");ch=read_escaped_char();if(!is_identifier_char(ch))parse_error("Unicode char: "+ch.charCodeAt(0)+" is not valid in identifier");name+=ch;backslash=false}}if(KEYWORDS(name)&&escaped){hex=name.charCodeAt(0).toString(16).toUpperCase();name="\\u"+"0000".substr(hex.length)+hex+name.slice(1)}return name}var read_regexp=with_eof_error("Unterminated regular expression",function(regexp){var prev_backslash=false,ch,in_class=false;while(ch=next(true))if(NEWLINE_CHARS(ch)){parse_error("Unexpected line terminator")}else if(prev_backslash){regexp+="\\"+ch;prev_backslash=false}else if(ch=="["){in_class=true;regexp+=ch}else if(ch=="]"&&in_class){in_class=false;regexp+=ch}else if(ch=="/"&&!in_class){break}else if(ch=="\\"){prev_backslash=true}else{regexp+=ch}var mods=read_name();try{return token("regexp",new RegExp(regexp,mods))}catch(e){parse_error(e.message)}});function read_operator(prefix){function grow(op){if(!peek())return op;var bigger=op+peek();if(OPERATORS(bigger)){next();return grow(bigger)}else{return op}}return token("operator",grow(prefix||next()))}function handle_slash(){next();switch(peek()){case"/":next();return skip_line_comment("comment1");case"*":next();return skip_multiline_comment()}return S.regex_allowed?read_regexp(""):read_operator("/")}function handle_dot(){next();return is_digit(peek().charCodeAt(0))?read_num("."):token("punc",".")}function read_word(){var word=read_name();if(prev_was_dot)return token("name",word);return KEYWORDS_ATOM(word)?token("atom",word):!KEYWORDS(word)?token("name",word):OPERATORS(word)?token("operator",word):token("keyword",word)}function with_eof_error(eof_error,cont){return function(x){try{return cont(x)}catch(ex){if(ex===EX_EOF)parse_error(eof_error);else throw ex}}}function next_token(force_regexp){if(force_regexp!=null)return read_regexp(force_regexp);if(shebang&&S.pos==0&&looking_at("#!")){start_token();forward(2);skip_line_comment("comment5")}for(;;){skip_whitespace();start_token();if(html5_comments){if(looking_at("\x3c!--")){forward(4);skip_line_comment("comment3");continue}if(looking_at("--\x3e")&&S.newline_before){forward(3);skip_line_comment("comment4");continue}}var ch=peek();if(!ch)return token("eof");var code=ch.charCodeAt(0);switch(code){case 34:case 39:return read_string(ch);case 46:return handle_dot();case 47:{var tok=handle_slash();if(tok===next_token)continue;return tok}}if(is_digit(code))return read_num();if(PUNC_CHARS(ch))return token("punc",next());if(OPERATOR_CHARS(ch))return read_operator();if(code==92||is_identifier_start(code))return read_word();break}parse_error("Unexpected character '"+ch+"'")}next_token.context=function(nc){if(nc)S=nc;return S};next_token.add_directive=function(directive){S.directive_stack[S.directive_stack.length-1].push(directive);if(S.directives[directive]===undefined){S.directives[directive]=1}else{S.directives[directive]++}};next_token.push_directives_stack=function(){S.directive_stack.push([])};next_token.pop_directives_stack=function(){var directives=S.directive_stack[S.directive_stack.length-1];for(var i=0;i<directives.length;i++){S.directives[directives[i]]--}S.directive_stack.pop()};next_token.has_directive=function(directive){return S.directives[directive]>0};return next_token}var UNARY_PREFIX=makePredicate(["typeof","void","delete","--","++","!","~","-","+"]);var UNARY_POSTFIX=makePredicate(["--","++"]);var ASSIGNMENT=makePredicate(["=","+=","-=","/=","*=","%=",">>=","<<=",">>>=","|=","^=","&="]);var PRECEDENCE=function(a,ret){for(var i=0;i<a.length;++i){var b=a[i];for(var j=0;j<b.length;++j){ret[b[j]]=i+1}}return ret}([["||"],["&&"],["|"],["^"],["&"],["==","===","!=","!=="],["<",">","<=",">=","in","instanceof"],[">>","<<",">>>"],["+","-"],["*","/","%"]],{});var STATEMENTS_WITH_LABELS=array_to_hash(["for","do","while","switch"]);var ATOMIC_START_TOKEN=array_to_hash(["atom","num","string","regexp","name"]);function parse($TEXT,options){options=defaults(options,{bare_returns:false,expression:false,filename:null,html5_comments:true,shebang:true,strict:false,toplevel:null});var S={input:typeof $TEXT=="string"?tokenizer($TEXT,options.filename,options.html5_comments,options.shebang):$TEXT,token:null,prev:null,peeked:null,in_function:0,in_directives:true,in_loop:0,labels:[]};S.token=next();function is(type,value){return is_token(S.token,type,value)}function peek(){return S.peeked||(S.peeked=S.input())}function next(){S.prev=S.token;if(S.peeked){S.token=S.peeked;S.peeked=null}else{S.token=S.input()}S.in_directives=S.in_directives&&(S.token.type=="string"||is("punc",";"));return S.token}function prev(){return S.prev}function croak(msg,line,col,pos){var ctx=S.input.context();js_error(msg,ctx.filename,line!=null?line:ctx.tokline,col!=null?col:ctx.tokcol,pos!=null?pos:ctx.tokpos)}function token_error(token,msg){croak(msg,token.line,token.col)}function unexpected(token){if(token==null)token=S.token;token_error(token,"Unexpected token: "+token.type+" ("+token.value+")")}function expect_token(type,val){if(is(type,val)){return next()}token_error(S.token,"Unexpected token "+S.token.type+" «"+S.token.value+"»"+", expected "+type+" «"+val+"»")}function expect(punc){return expect_token("punc",punc)}function can_insert_semicolon(){return!options.strict&&(S.token.nlb||is("eof")||is("punc","}"))}function semicolon(optional){if(is("punc",";"))next();else if(!optional&&!can_insert_semicolon())unexpected()}function parenthesised(){expect("(");var exp=expression(true);expect(")");return exp}function embed_tokens(parser){return function(){var start=S.token;var expr=parser();var end=prev();expr.start=start;expr.end=end;return expr}}function handle_regexp(){if(is("operator","/")||is("operator","/=")){S.peeked=null;S.token=S.input(S.token.value.substr(1))}}var statement=embed_tokens(function(){var tmp;handle_regexp();switch(S.token.type){case"string":if(S.in_directives){tmp=peek();if(S.token.raw.indexOf("\\")==-1&&(tmp.nlb||is_token(tmp,"eof")||is_token(tmp,"punc",";")||is_token(tmp,"punc","}"))){S.input.add_directive(S.token.value)}else{S.in_directives=false}}var dir=S.in_directives,stat=simple_statement();return dir?new AST_Directive(stat.body):stat;case"num":case"regexp":case"operator":case"atom":return simple_statement();case"name":return is_token(peek(),"punc",":")?labeled_statement():simple_statement();case"punc":switch(S.token.value){case"{":return new AST_BlockStatement({start:S.token,body:block_(),end:prev()});case"[":case"(":return simple_statement();case";":S.in_directives=false;next();return new AST_EmptyStatement;default:unexpected()}case"keyword":switch(tmp=S.token.value,next(),tmp){case"break":return break_cont(AST_Break);case"continue":return break_cont(AST_Continue);case"debugger":semicolon();return new AST_Debugger;case"do":return new AST_Do({body:in_loop(statement),condition:(expect_token("keyword","while"),tmp=parenthesised(),semicolon(true),tmp)});case"while":return new AST_While({condition:parenthesised(),body:in_loop(statement)});case"for":return for_();case"function":return function_(AST_Defun);case"if":return if_();case"return":if(S.in_function==0&&!options.bare_returns)croak("'return' outside of function");return new AST_Return({value:is("punc",";")?(next(),null):can_insert_semicolon()?null:(tmp=expression(true),semicolon(),tmp)});case"switch":return new AST_Switch({expression:parenthesised(),body:in_loop(switch_body_)});case"throw":if(S.token.nlb)croak("Illegal newline after 'throw'");return new AST_Throw({value:(tmp=expression(true),semicolon(),tmp)});case"try":return try_();case"var":return tmp=var_(),semicolon(),tmp;case"with":if(S.input.has_directive("use strict")){croak("Strict mode may not include a with statement")}return new AST_With({expression:parenthesised(),body:statement()})}}unexpected()});function labeled_statement(){var label=as_symbol(AST_Label);if(find_if(function(l){return l.name==label.name},S.labels)){croak("Label "+label.name+" defined twice")}expect(":");S.labels.push(label);var stat=statement();S.labels.pop();if(!(stat instanceof AST_IterationStatement)){label.references.forEach(function(ref){if(ref instanceof AST_Continue){ref=ref.label.start;croak("Continue label `"+label.name+"` refers to non-IterationStatement.",ref.line,ref.col,ref.pos)}})}return new AST_LabeledStatement({body:stat,label:label})}function simple_statement(tmp){return new AST_SimpleStatement({body:(tmp=expression(true),semicolon(),tmp)})}function break_cont(type){var label=null,ldef;if(!can_insert_semicolon()){label=as_symbol(AST_LabelRef,true)}if(label!=null){ldef=find_if(function(l){return l.name==label.name},S.labels);if(!ldef)croak("Undefined label "+label.name);label.thedef=ldef}else if(S.in_loop==0)croak(type.TYPE+" not inside a loop or switch");semicolon();var stat=new type({label:label});if(ldef)ldef.references.push(stat);return stat}function for_(){expect("(");var init=null;if(!is("punc",";")){init=is("keyword","var")?(next(),var_(true)):expression(true,true);if(is("operator","in")){if(init instanceof AST_Var&&init.definitions.length>1)croak("Only one variable declaration allowed in for..in loop");next();return for_in(init)}}return regular_for(init)}function regular_for(init){expect(";");var test=is("punc",";")?null:expression(true);expect(";");var step=is("punc",")")?null:expression(true);expect(")");return new AST_For({init:init,condition:test,step:step,body:in_loop(statement)})}function for_in(init){var lhs=init instanceof AST_Var?init.definitions[0].name:null;var obj=expression(true);expect(")");return new AST_ForIn({init:init,name:lhs,object:obj,body:in_loop(statement)})}var function_=function(ctor){var in_statement=ctor===AST_Defun;var name=is("name")?as_symbol(in_statement?AST_SymbolDefun:AST_SymbolLambda):null;if(in_statement&&!name)unexpected();expect("(");var argnames=[];for(var first=true;!is("punc",")");){if(first)first=false;else expect(",");argnames.push(as_symbol(AST_SymbolFunarg))}next();var loop=S.in_loop;var labels=S.labels;++S.in_function;S.in_directives=true;S.input.push_directives_stack();S.in_loop=0;S.labels=[];var body=block_();if(S.input.has_directive("use strict")){if(name)strict_verify_symbol(name);argnames.forEach(strict_verify_symbol)}S.input.pop_directives_stack();--S.in_function;S.in_loop=loop;S.labels=labels;return new ctor({name:name,argnames:argnames,body:body})};function if_(){var cond=parenthesised(),body=statement(),belse=null;if(is("keyword","else")){next();belse=statement()}return new AST_If({condition:cond,body:body,alternative:belse})}function block_(){expect("{");var a=[];while(!is("punc","}")){if(is("eof"))unexpected();a.push(statement())}next();return a}function switch_body_(){expect("{");var a=[],cur=null,branch=null,tmp;while(!is("punc","}")){if(is("eof"))unexpected();if(is("keyword","case")){if(branch)branch.end=prev();cur=[];branch=new AST_Case({start:(tmp=S.token,next(),tmp),expression:expression(true),body:cur});a.push(branch);expect(":")}else if(is("keyword","default")){if(branch)branch.end=prev();cur=[];branch=new AST_Default({start:(tmp=S.token,next(),expect(":"),tmp),body:cur});a.push(branch)}else{if(!cur)unexpected();cur.push(statement())}}if(branch)branch.end=prev();next();return a}function try_(){var body=block_(),bcatch=null,bfinally=null;if(is("keyword","catch")){var start=S.token;next();expect("(");var name=as_symbol(AST_SymbolCatch);expect(")");bcatch=new AST_Catch({start:start,argname:name,body:block_(),end:prev()})}if(is("keyword","finally")){var start=S.token;next();bfinally=new AST_Finally({start:start,body:block_(),end:prev()})}if(!bcatch&&!bfinally)croak("Missing catch/finally blocks");return new AST_Try({body:body,bcatch:bcatch,bfinally:bfinally})}function vardefs(no_in){var a=[];for(;;){a.push(new AST_VarDef({start:S.token,name:as_symbol(AST_SymbolVar),value:is("operator","=")?(next(),expression(false,no_in)):null,end:prev()}));if(!is("punc",","))break;next()}return a}var var_=function(no_in){return new AST_Var({start:prev(),definitions:vardefs(no_in),end:prev()})};var new_=function(allow_calls){var start=S.token;expect_token("operator","new");var newexp=expr_atom(false),args;if(is("punc","(")){next();args=expr_list(")")}else{args=[]}return subscripts(new AST_New({start:start,expression:newexp,args:args,end:prev()}),allow_calls)};function as_atom_node(){var tok=S.token,ret;switch(tok.type){case"name":case"keyword":ret=_make_symbol(AST_SymbolRef);break;case"num":ret=new AST_Number({start:tok,end:tok,value:tok.value});break;case"string":ret=new AST_String({start:tok,end:tok,value:tok.value,quote:tok.quote});break;case"regexp":ret=new AST_RegExp({start:tok,end:tok,value:tok.value});break;case"atom":switch(tok.value){case"false":ret=new AST_False({start:tok,end:tok});break;case"true":ret=new AST_True({start:tok,end:tok});break;case"null":ret=new AST_Null({start:tok,end:tok});break}break;case"operator":if(!is_identifier_string(tok.value)){croak("Invalid getter/setter name: "+tok.value,tok.line,tok.col,tok.pos)}ret=_make_symbol(AST_SymbolRef);break}next();return ret}var expr_atom=function(allow_calls){if(is("operator","new")){return new_(allow_calls)}var start=S.token;if(is("punc")){switch(start.value){case"(":next();var ex=expression(true);ex.start=start;ex.end=S.token;expect(")");return subscripts(ex,allow_calls);case"[":return subscripts(array_(),allow_calls);case"{":return subscripts(object_(),allow_calls)}unexpected()}if(is("keyword","function")){next();var func=function_(AST_Function);func.start=start;func.end=prev();return subscripts(func,allow_calls)}if(ATOMIC_START_TOKEN[S.token.type]){return subscripts(as_atom_node(),allow_calls)}unexpected()};function expr_list(closing,allow_trailing_comma,allow_empty){var first=true,a=[];while(!is("punc",closing)){if(first)first=false;else expect(",");if(allow_trailing_comma&&is("punc",closing))break;if(is("punc",",")&&allow_empty){a.push(new AST_Hole({start:S.token,end:S.token}))}else{a.push(expression(false))}}next();return a}var array_=embed_tokens(function(){expect("[");return new AST_Array({elements:expr_list("]",!options.strict,true)})});var create_accessor=embed_tokens(function(){return function_(AST_Accessor)});var object_=embed_tokens(function(){expect("{");var first=true,a=[];while(!is("punc","}")){if(first)first=false;else expect(",");if(!options.strict&&is("punc","}"))break;var start=S.token;var type=start.type;var name=as_property_name();if(type=="name"&&!is("punc",":")){var key=new AST_SymbolAccessor({start:S.token,name:as_property_name(),end:prev()});if(name=="get"){a.push(new AST_ObjectGetter({start:start,key:key,value:create_accessor(),end:prev()}));continue}if(name=="set"){a.push(new AST_ObjectSetter({start:start,key:key,value:create_accessor(),end:prev()}));continue}}expect(":");a.push(new AST_ObjectKeyVal({start:start,quote:start.quote,key:name,value:expression(false),end:prev()}))}next();return new AST_Object({properties:a})});function as_property_name(){var tmp=S.token;switch(tmp.type){case"operator":if(!KEYWORDS(tmp.value))unexpected();case"num":case"string":case"name":case"keyword":case"atom":next();return tmp.value;default:unexpected()}}function as_name(){var tmp=S.token;if(tmp.type!="name")unexpected();next();return tmp.value}function _make_symbol(type){var name=S.token.value;return new(name=="this"?AST_This:type)({name:String(name),start:S.token,end:S.token})}function strict_verify_symbol(sym){if(sym.name=="arguments"||sym.name=="eval")croak("Unexpected "+sym.name+" in strict mode",sym.start.line,sym.start.col,sym.start.pos)}function as_symbol(type,noerror){if(!is("name")){if(!noerror)croak("Name expected");return null}var sym=_make_symbol(type);if(S.input.has_directive("use strict")&&sym instanceof AST_SymbolDeclaration){strict_verify_symbol(sym)}next();return sym}var subscripts=function(expr,allow_calls){var start=expr.start;if(is("punc",".")){next();return subscripts(new AST_Dot({start:start,expression:expr,property:as_name(),end:prev()}),allow_calls)}if(is("punc","[")){next();var prop=expression(true);expect("]");return subscripts(new AST_Sub({start:start,expression:expr,property:prop,end:prev()}),allow_calls)}if(allow_calls&&is("punc","(")){next();return subscripts(new AST_Call({start:start,expression:expr,args:expr_list(")"),end:prev()}),true)}return expr};var maybe_unary=function(allow_calls){var start=S.token;if(is("operator")&&UNARY_PREFIX(start.value)){next();handle_regexp();var ex=make_unary(AST_UnaryPrefix,start,maybe_unary(allow_calls));ex.start=start;ex.end=prev();return ex}var val=expr_atom(allow_calls);while(is("operator")&&UNARY_POSTFIX(S.token.value)&&!S.token.nlb){val=make_unary(AST_UnaryPostfix,S.token,val);val.start=start;val.end=S.token;next()}return val};function make_unary(ctor,token,expr){var op=token.value;switch(op){case"++":case"--":if(!is_assignable(expr))croak("Invalid use of "+op+" operator",token.line,token.col,token.pos);break;case"delete":if(expr instanceof AST_SymbolRef&&S.input.has_directive("use strict"))croak("Calling delete on expression not allowed in strict mode",expr.start.line,expr.start.col,expr.start.pos);break}return new ctor({operator:op,expression:expr})}var expr_op=function(left,min_prec,no_in){var op=is("operator")?S.token.value:null;if(op=="in"&&no_in)op=null;var prec=op!=null?PRECEDENCE[op]:null;if(prec!=null&&prec>min_prec){next();var right=expr_op(maybe_unary(true),prec,no_in);return expr_op(new AST_Binary({start:left.start,left:left,operator:op,right:right,end:right.end}),min_prec,no_in)}return left};function expr_ops(no_in){return expr_op(maybe_unary(true),0,no_in)}var maybe_conditional=function(no_in){var start=S.token;var expr=expr_ops(no_in);if(is("operator","?")){next();var yes=expression(false);expect(":");return new AST_Conditional({start:start,condition:expr,consequent:yes,alternative:expression(false,no_in),end:prev()})}return expr};function is_assignable(expr){return expr instanceof AST_PropAccess||expr instanceof AST_SymbolRef}var maybe_assign=function(no_in){var start=S.token;var left=maybe_conditional(no_in),val=S.token.value;if(is("operator")&&ASSIGNMENT(val)){if(is_assignable(left)){next();return new AST_Assign({start:start,left:left,operator:val,right:maybe_assign(no_in),end:prev()})}croak("Invalid assignment")}return left};var expression=function(commas,no_in){var start=S.token;var exprs=[];while(true){exprs.push(maybe_assign(no_in));if(!commas||!is("punc",","))break;next();commas=true}return exprs.length==1?exprs[0]:new AST_Sequence({start:start,expressions:exprs,end:peek()})};function in_loop(cont){++S.in_loop;var ret=cont();--S.in_loop;return ret}if(options.expression){return expression(true)}return function(){var start=S.token;var body=[];S.input.push_directives_stack();while(!is("eof"))body.push(statement());S.input.pop_directives_stack();var end=prev();var toplevel=options.toplevel;if(toplevel){toplevel.body=toplevel.body.concat(body);toplevel.end=end}else{toplevel=new AST_Toplevel({start:start,body:body,end:end})}return toplevel}()}"use strict";function TreeTransformer(before,after){TreeWalker.call(this);this.before=before;this.after=after}TreeTransformer.prototype=new TreeWalker;(function(undefined){function _(node,descend){node.DEFMETHOD("transform",function(tw,in_list){var x,y;tw.push(this);if(tw.before)x=tw.before(this,descend,in_list);if(x===undefined){if(!tw.after){x=this;descend(x,tw)}else{tw.stack[tw.stack.length-1]=x=this;descend(x,tw);y=tw.after(x,in_list);if(y!==undefined)x=y}}tw.pop(this);return x})}function do_list(list,tw){return MAP(list,function(node){return node.transform(tw,true)})}_(AST_Node,noop);_(AST_LabeledStatement,function(self,tw){self.label=self.label.transform(tw);self.body=self.body.transform(tw)});_(AST_SimpleStatement,function(self,tw){self.body=self.body.transform(tw)});_(AST_Block,function(self,tw){self.body=do_list(self.body,tw)});_(AST_DWLoop,function(self,tw){self.condition=self.condition.transform(tw);self.body=self.body.transform(tw)});_(AST_For,function(self,tw){if(self.init)self.init=self.init.transform(tw);if(self.condition)self.condition=self.condition.transform(tw);if(self.step)self.step=self.step.transform(tw);self.body=self.body.transform(tw)});_(AST_ForIn,function(self,tw){self.init=self.init.transform(tw);self.object=self.object.transform(tw);self.body=self.body.transform(tw)});_(AST_With,function(self,tw){self.expression=self.expression.transform(tw);self.body=self.body.transform(tw)});_(AST_Exit,function(self,tw){if(self.value)self.value=self.value.transform(tw)});_(AST_LoopControl,function(self,tw){if(self.label)self.label=self.label.transform(tw)});_(AST_If,function(self,tw){self.condition=self.condition.transform(tw);self.body=self.body.transform(tw);if(self.alternative)self.alternative=self.alternative.transform(tw)});_(AST_Switch,function(self,tw){self.expression=self.expression.transform(tw);self.body=do_list(self.body,tw)});_(AST_Case,function(self,tw){self.expression=self.expression.transform(tw);self.body=do_list(self.body,tw)});_(AST_Try,function(self,tw){self.body=do_list(self.body,tw);if(self.bcatch)self.bcatch=self.bcatch.transform(tw);if(self.bfinally)self.bfinally=self.bfinally.transform(tw)});_(AST_Catch,function(self,tw){self.argname=self.argname.transform(tw);self.body=do_list(self.body,tw)});_(AST_Definitions,function(self,tw){self.definitions=do_list(self.definitions,tw)});_(AST_VarDef,function(self,tw){self.name=self.name.transform(tw);if(self.value)self.value=self.value.transform(tw)});_(AST_Lambda,function(self,tw){if(self.name)self.name=self.name.transform(tw);self.argnames=do_list(self.argnames,tw);self.body=do_list(self.body,tw)});_(AST_Call,function(self,tw){self.expression=self.expression.transform(tw);self.args=do_list(self.args,tw)});_(AST_Sequence,function(self,tw){self.expressions=do_list(self.expressions,tw)});_(AST_Dot,function(self,tw){self.expression=self.expression.transform(tw)});_(AST_Sub,function(self,tw){self.expression=self.expression.transform(tw);self.property=self.property.transform(tw)});_(AST_Unary,function(self,tw){self.expression=self.expression.transform(tw)});_(AST_Binary,function(self,tw){self.left=self.left.transform(tw);self.right=self.right.transform(tw)});_(AST_Conditional,function(self,tw){self.condition=self.condition.transform(tw);self.consequent=self.consequent.transform(tw);self.alternative=self.alternative.transform(tw)});_(AST_Array,function(self,tw){self.elements=do_list(self.elements,tw)});_(AST_Object,function(self,tw){self.properties=do_list(self.properties,tw)});_(AST_ObjectProperty,function(self,tw){self.value=self.value.transform(tw)})})();"use strict";function SymbolDef(scope,index,orig){this.name=orig.name;this.orig=[orig];this.scope=scope;this.references=[];this.global=false;this.mangled_name=null;this.undeclared=false;this.index=index;this.id=SymbolDef.next_id++}SymbolDef.next_id=1;SymbolDef.prototype={unmangleable:function(options){if(!options)options={};return this.global&&!options.toplevel||this.undeclared||!options.eval&&(this.scope.uses_eval||this.scope.uses_with)||options.keep_fnames&&(this.orig[0]instanceof AST_SymbolLambda||this.orig[0]instanceof AST_SymbolDefun)},mangle:function(options){var cache=options.cache&&options.cache.props;if(this.global&&cache&&cache.has(this.name)){this.mangled_name=cache.get(this.name)}else if(!this.mangled_name&&!this.unmangleable(options)){var s=this.scope;var sym=this.orig[0];if(options.ie8&&sym instanceof AST_SymbolLambda)s=s.parent_scope;var def;if(this.defun&&(def=this.defun.variables.get(this.name))){this.mangled_name=def.mangled_name||def.name}else this.mangled_name=s.next_mangled(options,this);if(this.global&&cache){cache.set(this.name,this.mangled_name)}}}};AST_Toplevel.DEFMETHOD("figure_out_scope",function(options){options=defaults(options,{cache:null,ie8:false});var self=this;var scope=self.parent_scope=null;var labels=new Dictionary;var defun=null;var tw=new TreeWalker(function(node,descend){if(node instanceof AST_Catch){var save_scope=scope;scope=new AST_Scope(node);scope.init_scope_vars(save_scope);descend();scope=save_scope;return true}if(node instanceof AST_Scope){node.init_scope_vars(scope);var save_scope=scope;var save_defun=defun;var save_labels=labels;defun=scope=node;labels=new Dictionary;descend();scope=save_scope;defun=save_defun;labels=save_labels;return true}if(node instanceof AST_LabeledStatement){var l=node.label;if(labels.has(l.name)){throw new Error(string_template("Label {name} defined twice",l))}labels.set(l.name,l);descend();labels.del(l.name);return true}if(node instanceof AST_With){for(var s=scope;s;s=s.parent_scope)s.uses_with=true;return}if(node instanceof AST_Symbol){node.scope=scope}if(node instanceof AST_Label){node.thedef=node;node.references=[]}if(node instanceof AST_SymbolLambda){defun.def_function(node)}else if(node instanceof AST_SymbolDefun){(node.scope=defun.parent_scope).def_function(node)}else if(node instanceof AST_SymbolVar){defun.def_variable(node);if(defun!==scope){node.mark_enclosed(options);var def=scope.find_variable(node);if(node.thedef!==def){node.thedef=def;node.reference(options)}}}else if(node instanceof AST_SymbolCatch){scope.def_variable(node).defun=defun}else if(node instanceof AST_LabelRef){var sym=labels.get(node.name);if(!sym)throw new Error(string_template("Undefined label {name} [{line},{col}]",{name:node.name,line:node.start.line,col:node.start.col}));node.thedef=sym}});self.walk(tw);var func=null;var globals=self.globals=new Dictionary;var tw=new TreeWalker(function(node,descend){if(node instanceof AST_Lambda){var prev_func=func;func=node;descend();func=prev_func;return true}if(node instanceof AST_LoopControl&&node.label){node.label.thedef.references.push(node);return true}if(node instanceof AST_SymbolRef){var name=node.name;if(name=="eval"&&tw.parent()instanceof AST_Call){for(var s=node.scope;s&&!s.uses_eval;s=s.parent_scope){s.uses_eval=true}}var sym=node.scope.find_variable(name);if(node.scope instanceof AST_Lambda&&name=="arguments"){node.scope.uses_arguments=true}if(!sym){sym=self.def_global(node)}node.thedef=sym;node.reference(options);return true}});self.walk(tw);if(options.ie8){self.walk(new TreeWalker(function(node,descend){if(node instanceof AST_SymbolCatch){var name=node.name;var refs=node.thedef.references;var scope=node.thedef.defun;var def=scope.find_variable(name)||self.globals.get(name)||scope.def_variable(node);refs.forEach(function(ref){ref.thedef=def;ref.reference(options)});node.thedef=def;return true}}))}if(options.cache){this.cname=options.cache.cname}});AST_Toplevel.DEFMETHOD("def_global",function(node){var globals=this.globals,name=node.name;if(globals.has(name)){return globals.get(name)}else{var g=new SymbolDef(this,globals.size(),node);g.undeclared=true;g.global=true;globals.set(name,g);return g}});AST_Scope.DEFMETHOD("init_scope_vars",function(parent_scope){this.variables=new Dictionary;this.functions=new Dictionary;this.uses_with=false;this.uses_eval=false;this.parent_scope=parent_scope;this.enclosed=[];this.cname=-1});AST_Lambda.DEFMETHOD("init_scope_vars",function(){AST_Scope.prototype.init_scope_vars.apply(this,arguments);this.uses_arguments=false;this.def_variable(new AST_SymbolFunarg({name:"arguments",start:this.start,end:this.end}))});AST_Symbol.DEFMETHOD("mark_enclosed",function(options){var def=this.definition();var s=this.scope;while(s){push_uniq(s.enclosed,def);if(options.keep_fnames){s.functions.each(function(d){push_uniq(def.scope.enclosed,d)})}if(s===def.scope)break;s=s.parent_scope}});AST_Symbol.DEFMETHOD("reference",function(options){this.definition().references.push(this);this.mark_enclosed(options)});AST_Scope.DEFMETHOD("find_variable",function(name){if(name instanceof AST_Symbol)name=name.name;return this.variables.get(name)||this.parent_scope&&this.parent_scope.find_variable(name)});AST_Scope.DEFMETHOD("def_function",function(symbol){this.functions.set(symbol.name,this.def_variable(symbol))});AST_Scope.DEFMETHOD("def_variable",function(symbol){var def;if(!this.variables.has(symbol.name)){def=new SymbolDef(this,this.variables.size(),symbol);this.variables.set(symbol.name,def);def.global=!this.parent_scope}else{def=this.variables.get(symbol.name);def.orig.push(symbol)}return symbol.thedef=def});AST_Scope.DEFMETHOD("next_mangled",function(options){var ext=this.enclosed;out:while(true){var m=base54(++this.cname);if(!is_identifier(m))continue;if(options.reserved.indexOf(m)>=0)continue;for(var i=ext.length;--i>=0;){var sym=ext[i];var name=sym.mangled_name||sym.unmangleable(options)&&sym.name;if(m==name)continue out}return m}});AST_Function.DEFMETHOD("next_mangled",function(options,def){var tricky_def=def.orig[0]instanceof AST_SymbolFunarg&&this.name&&this.name.definition();var tricky_name=tricky_def?tricky_def.mangled_name||tricky_def.name:null;while(true){var name=AST_Lambda.prototype.next_mangled.call(this,options,def);if(!tricky_name||tricky_name!=name)return name}});AST_Symbol.DEFMETHOD("unmangleable",function(options){return this.definition().unmangleable(options)});AST_Label.DEFMETHOD("unmangleable",function(){return false});AST_Symbol.DEFMETHOD("unreferenced",function(){return this.definition().references.length==0&&!(this.scope.uses_eval||this.scope.uses_with)});AST_Symbol.DEFMETHOD("undeclared",function(){return this.definition().undeclared});AST_LabelRef.DEFMETHOD("undeclared",function(){return false});AST_Label.DEFMETHOD("undeclared",function(){return false});AST_Symbol.DEFMETHOD("definition",function(){return this.thedef});AST_Symbol.DEFMETHOD("global",function(){return this.definition().global});AST_Toplevel.DEFMETHOD("_default_mangler_options",function(options){return defaults(options,{eval:false,ie8:false,keep_fnames:false,reserved:[],toplevel:false})});AST_Toplevel.DEFMETHOD("mangle_names",function(options){options=this._default_mangler_options(options);options.reserved.push("arguments");var lname=-1;var to_mangle=[];if(options.cache){this.globals.each(function(symbol){if(options.reserved.indexOf(symbol.name)<0){to_mangle.push(symbol)}})}var tw=new TreeWalker(function(node,descend){if(node instanceof AST_LabeledStatement){var save_nesting=lname;descend();lname=save_nesting;return true}if(node instanceof AST_Scope){var p=tw.parent(),a=[];node.variables.each(function(symbol){if(options.reserved.indexOf(symbol.name)<0){a.push(symbol)}});to_mangle.push.apply(to_mangle,a);return}if(node instanceof AST_Label){var name;do{name=base54(++lname)}while(!is_identifier(name));node.mangled_name=name;return true}if(!options.ie8&&node instanceof AST_SymbolCatch){to_mangle.push(node.definition());return}});this.walk(tw);to_mangle.forEach(function(def){def.mangle(options)});if(options.cache){options.cache.cname=this.cname}});AST_Toplevel.DEFMETHOD("compute_char_frequency",function(options){options=this._default_mangler_options(options);var tw=new TreeWalker(function(node){if(node instanceof AST_Constant)base54.consider(node.print_to_string());else if(node instanceof AST_Return)base54.consider("return");else if(node instanceof AST_Throw)base54.consider("throw");else if(node instanceof AST_Continue)base54.consider("continue");else if(node instanceof AST_Break)base54.consider("break");else if(node instanceof AST_Debugger)base54.consider("debugger");else if(node instanceof AST_Directive)base54.consider(node.value);else if(node instanceof AST_While)base54.consider("while");else if(node instanceof AST_Do)base54.consider("do while");else if(node instanceof AST_If){base54.consider("if");if(node.alternative)base54.consider("else")}else if(node instanceof AST_Var)base54.consider("var");else if(node instanceof AST_Lambda)base54.consider("function");else if(node instanceof AST_For)base54.consider("for");else if(node instanceof AST_ForIn)base54.consider("for in");else if(node instanceof AST_Switch)base54.consider("switch");else if(node instanceof AST_Case)base54.consider("case");else if(node instanceof AST_Default)base54.consider("default");else if(node instanceof AST_With)base54.consider("with");else if(node instanceof AST_ObjectSetter)base54.consider("set"+node.key);else if(node instanceof AST_ObjectGetter)base54.consider("get"+node.key);else if(node instanceof AST_ObjectKeyVal)base54.consider(node.key);else if(node instanceof AST_New)base54.consider("new");else if(node instanceof AST_This)base54.consider("this");else if(node instanceof AST_Try)base54.consider("try");else if(node instanceof AST_Catch)base54.consider("catch");else if(node instanceof AST_Finally)base54.consider("finally");else if(node instanceof AST_Symbol&&node.unmangleable(options))base54.consider(node.name);else if(node instanceof AST_Unary||node instanceof AST_Binary)base54.consider(node.operator);else if(node instanceof AST_Dot)base54.consider(node.property)});this.walk(tw);base54.sort()});var base54=function(){var string="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789";var chars,frequency;function reset(){frequency=Object.create(null);chars=string.split("").map(function(ch){return ch.charCodeAt(0)});chars.forEach(function(ch){frequency[ch]=0})}base54.consider=function(str){for(var i=str.length;--i>=0;){var code=str.charCodeAt(i);if(code in frequency)++frequency[code]}};base54.sort=function(){chars=mergeSort(chars,function(a,b){if(is_digit(a)&&!is_digit(b))return 1;if(is_digit(b)&&!is_digit(a))return-1;return frequency[b]-frequency[a]})};base54.reset=reset;reset();base54.get=function(){return chars};base54.freq=function(){return frequency};function base54(num){var ret="",base=54;num++;do{num--;ret+=String.fromCharCode(chars[num%base]);num=Math.floor(num/base);base=64}while(num>0);return ret}return base54}();"use strict";var EXPECT_DIRECTIVE=/^$|[;{][\s\n]*$/;function is_some_comments(comment){return comment.type=="comment2"&&/@preserve|@license|@cc_on/i.test(comment.value)}function OutputStream(options){options=defaults(options,{ascii_only:false,beautify:false,bracketize:false,comments:false,ie8:false,indent_level:4,indent_start:0,inline_script:true,keep_quoted_props:false,max_line_len:false,preamble:null,preserve_line:false,quote_keys:false,quote_style:0,semicolons:true,shebang:true,source_map:null,space_colon:true,unescape_regexps:false,width:80,wrap_iife:false},true);var comment_filter=return_false;if(options.comments){var comments=options.comments;if(typeof options.comments==="string"&&/^\/.*\/[a-zA-Z]*$/.test(options.comments)){var regex_pos=options.comments.lastIndexOf("/");comments=new RegExp(options.comments.substr(1,regex_pos-1),options.comments.substr(regex_pos+1))}if(comments instanceof RegExp){comment_filter=function(comment){return comment.type!="comment5"&&comments.test(comment.value)}}else if(typeof comments==="function"){comment_filter=function(comment){return comment.type!="comment5"&&comments(this,comment)}}else if(comments==="some"){comment_filter=is_some_comments}else{comment_filter=return_true}}var indentation=0;var current_col=0;var current_line=1;var current_pos=0;var OUTPUT="";function to_ascii(str,identifier){return str.replace(/[\u0000-\u001f\u007f-\uffff]/g,function(ch){var code=ch.charCodeAt(0).toString(16);if(code.length<=2&&!identifier){while(code.length<2)code="0"+code;return"\\x"+code}else{while(code.length<4)code="0"+code;return"\\u"+code}})}function make_string(str,quote){var dq=0,sq=0;str=str.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g,function(s,i){switch(s){case'"':++dq;return'"';case"'":++sq;return"'";case"\\":return"\\\\";case"\n":return"\\n";case"\r":return"\\r";case"\t":return"\\t";case"\b":return"\\b";case"\f":return"\\f";case"\v":return options.ie8?"\\x0B":"\\v";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";case"\ufeff":return"\\ufeff";case"\0":return/[0-7]/.test(str.charAt(i+1))?"\\x00":"\\0"}return s});function quote_single(){return"'"+str.replace(/\x27/g,"\\'")+"'"}function quote_double(){return'"'+str.replace(/\x22/g,'\\"')+'"'}if(options.ascii_only)str=to_ascii(str);switch(options.quote_style){case 1:return quote_single();case 2:return quote_double();case 3:return quote=="'"?quote_single():quote_double();default:return dq>sq?quote_single():quote_double()}}function encode_string(str,quote){var ret=make_string(str,quote);if(options.inline_script){ret=ret.replace(/<\x2fscript([>\/\t\n\f\r ])/gi,"<\\/script$1");ret=ret.replace(/\x3c!--/g,"\\x3c!--");ret=ret.replace(/--\x3e/g,"--\\x3e")}return ret}function make_name(name){name=name.toString();if(options.ascii_only)name=to_ascii(name,true);return name}function make_indent(back){return repeat_string(" ",options.indent_start+indentation-back*options.indent_level)}var might_need_space=false;var might_need_semicolon=false;var might_add_newline=0;var last="";var ensure_line_len=options.max_line_len?function(){if(current_col>options.max_line_len){if(might_add_newline){var left=OUTPUT.slice(0,might_add_newline);var right=OUTPUT.slice(might_add_newline);OUTPUT=left+"\n"+right;current_line++;current_pos++;current_col=right.length}if(current_col>options.max_line_len){AST_Node.warn("Output exceeds {max_line_len} characters",options)}}might_add_newline=0}:noop;var requireSemicolonChars=makePredicate("( [ + * / - , .");function print(str){str=String(str);var ch=str.charAt(0);var prev=last.charAt(last.length-1);if(might_need_semicolon){might_need_semicolon=false;if(prev==":"&&ch=="}"||(!ch||";}".indexOf(ch)<0)&&prev!=";"){if(options.semicolons||requireSemicolonChars(ch)){OUTPUT+=";";current_col++;current_pos++}else{ensure_line_len();OUTPUT+="\n";current_pos++;current_line++;current_col=0;if(/^\s+$/.test(str)){might_need_semicolon=true}}if(!options.beautify)might_need_space=false}}if(!options.beautify&&options.preserve_line&&stack[stack.length-1]){var target_line=stack[stack.length-1].start.line;while(current_line<target_line){ensure_line_len();OUTPUT+="\n";current_pos++;current_line++;current_col=0;might_need_space=false}}if(might_need_space){if(is_identifier_char(prev)&&(is_identifier_char(ch)||ch=="\\")||ch=="/"&&ch==prev||(ch=="+"||ch=="-")&&ch==last){OUTPUT+=" ";current_col++;current_pos++}might_need_space=false}OUTPUT+=str;current_pos+=str.length;var a=str.split(/\r?\n/),n=a.length-1;current_line+=n;current_col+=a[0].length;if(n>0){ensure_line_len();current_col=a[n].length}last=str}var space=options.beautify?function(){print(" ")}:function(){might_need_space=true};var indent=options.beautify?function(half){if(options.beautify){print(make_indent(half?.5:0))}}:noop;var with_indent=options.beautify?function(col,cont){if(col===true)col=next_indent();var save_indentation=indentation;indentation=col;var ret=cont();indentation=save_indentation;return ret}:function(col,cont){return cont()};var newline=options.beautify?function(){print("\n")}:options.max_line_len?function(){ensure_line_len();might_add_newline=OUTPUT.length}:noop;var semicolon=options.beautify?function(){print(";")}:function(){might_need_semicolon=true};function force_semicolon(){might_need_semicolon=false;print(";")}function next_indent(){return indentation+options.indent_level}function with_block(cont){var ret;print("{");newline();with_indent(next_indent(),function(){ret=cont()});indent();print("}");return ret}function with_parens(cont){print("(");var ret=cont();print(")");return ret}function with_square(cont){print("[");var ret=cont();print("]");return ret}function comma(){print(",");space()}function colon(){print(":");if(options.space_colon)space()}var add_mapping=options.source_map?function(token,name){try{if(token)options.source_map.add(token.file||"?",current_line,current_col,token.line,token.col,!name&&token.type=="name"?token.value:name)}catch(ex){AST_Node.warn("Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]",{file:token.file,line:token.line,col:token.col,cline:current_line,ccol:current_col,name:name||""})}}:noop;function get(){if(might_add_newline){ensure_line_len()}return OUTPUT}var stack=[];return{get:get,toString:get,indent:indent,indentation:function(){return indentation},current_width:function(){return current_col-indentation},should_break:function(){return options.width&&this.current_width()>=options.width},newline:newline,print:print,space:space,comma:comma,colon:colon,last:function(){return last},semicolon:semicolon,force_semicolon:force_semicolon,to_ascii:to_ascii,print_name:function(name){print(make_name(name))},print_string:function(str,quote,escape_directive){var encoded=encode_string(str,quote);if(escape_directive===true&&encoded.indexOf("\\")===-1){if(!EXPECT_DIRECTIVE.test(OUTPUT)){force_semicolon()}force_semicolon()}print(encoded)},encode_string:encode_string,next_indent:next_indent,with_indent:with_indent,with_block:with_block,with_parens:with_parens,with_square:with_square,add_mapping:add_mapping,option:function(opt){return options[opt]},comment_filter:comment_filter,line:function(){return current_line},col:function(){return current_col},pos:function(){return current_pos},push_node:function(node){stack.push(node)},pop_node:function(){return stack.pop()},parent:function(n){return stack[stack.length-2-(n||0)]}}}(function(){function DEFPRINT(nodetype,generator){nodetype.DEFMETHOD("_codegen",generator)}var use_asm=false;var in_directive=false;AST_Node.DEFMETHOD("print",function(stream,force_parens){var self=this,generator=self._codegen,prev_use_asm=use_asm;if(self instanceof AST_Directive&&self.value=="use asm"&&stream.parent()instanceof AST_Scope){use_asm=true}function doit(){self.add_comments(stream);self.add_source_map(stream);generator(self,stream)}stream.push_node(self);if(force_parens||self.needs_parens(stream)){stream.with_parens(doit)}else{doit()}stream.pop_node();if(self instanceof AST_Scope){use_asm=prev_use_asm}});AST_Node.DEFMETHOD("print_to_string",function(options){var s=OutputStream(options);if(!options)s._readonly=true;this.print(s);return s.get()});AST_Node.DEFMETHOD("add_comments",function(output){if(output._readonly)return;var self=this;var start=self.start;if(start&&!start._comments_dumped){start._comments_dumped=true;var comments=start.comments_before||[];if(self instanceof AST_Exit&&self.value){self.value.walk(new TreeWalker(function(node){if(node.start&&node.start.comments_before){comments=comments.concat(node.start.comments_before);node.start.comments_before=[]}if(node instanceof AST_Function||node instanceof AST_Array||node instanceof AST_Object){return true}}))}if(output.pos()==0){if(comments.length>0&&output.option("shebang")&&comments[0].type=="comment5"){output.print("#!"+comments.shift().value+"\n");output.indent()}var preamble=output.option("preamble");if(preamble){output.print(preamble.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g,"\n"))}}comments=comments.filter(output.comment_filter,self);if(!output.option("beautify")&&comments.length>0&&/comment[134]/.test(comments[0].type)&&output.col()!==0&&comments[0].nlb){output.print("\n")}comments.forEach(function(c){if(/comment[134]/.test(c.type)){output.print("//"+c.value+"\n");output.indent()}else if(c.type=="comment2"){output.print("/*"+c.value+"*/");if(start.nlb){output.print("\n");output.indent()}else{output.space()}}})}});function PARENS(nodetype,func){if(Array.isArray(nodetype)){nodetype.forEach(function(nodetype){PARENS(nodetype,func)})}else{nodetype.DEFMETHOD("needs_parens",func)}}PARENS(AST_Node,function(){return false});PARENS(AST_Function,function(output){if(first_in_statement(output)){return true}if(output.option("wrap_iife")){var p=output.parent();return p instanceof AST_Call&&p.expression===this}return false});PARENS(AST_Object,function(output){return first_in_statement(output)});PARENS(AST_Unary,function(output){var p=output.parent();return p instanceof AST_PropAccess&&p.expression===this||p instanceof AST_Call&&p.expression===this});PARENS(AST_Sequence,function(output){var p=output.parent();return p instanceof AST_Call||p instanceof AST_Unary||p instanceof AST_Binary||p instanceof AST_VarDef||p instanceof AST_PropAccess||p instanceof AST_Array||p instanceof AST_ObjectProperty||p instanceof AST_Conditional});PARENS(AST_Binary,function(output){var p=output.parent();if(p instanceof AST_Call&&p.expression===this)return true;if(p instanceof AST_Unary)return true;if(p instanceof AST_PropAccess&&p.expression===this)return true;if(p instanceof AST_Binary){var po=p.operator,pp=PRECEDENCE[po];var so=this.operator,sp=PRECEDENCE[so];if(pp>sp||pp==sp&&this===p.right){return true}}});PARENS(AST_PropAccess,function(output){var p=output.parent();if(p instanceof AST_New&&p.expression===this){try{this.walk(new TreeWalker(function(node){if(node instanceof AST_Call)throw p}))}catch(ex){if(ex!==p)throw ex;return true}}});PARENS(AST_Call,function(output){var p=output.parent(),p1;if(p instanceof AST_New&&p.expression===this)return true;return this.expression instanceof AST_Function&&p instanceof AST_PropAccess&&p.expression===this&&(p1=output.parent(1))instanceof AST_Assign&&p1.left===p});PARENS(AST_New,function(output){var p=output.parent();if(!need_constructor_parens(this,output)&&(p instanceof AST_PropAccess||p instanceof AST_Call&&p.expression===this))return true});PARENS(AST_Number,function(output){var p=output.parent();if(p instanceof AST_PropAccess&&p.expression===this){var value=this.getValue();if(value<0||/^0/.test(make_num(value))){return true}}});PARENS([AST_Assign,AST_Conditional],function(output){var p=output.parent();if(p instanceof AST_Unary)return true;if(p instanceof AST_Binary&&!(p instanceof AST_Assign))return true;if(p instanceof AST_Call&&p.expression===this)return true;if(p instanceof AST_Conditional&&p.condition===this)return true;if(p instanceof AST_PropAccess&&p.expression===this)return true});DEFPRINT(AST_Directive,function(self,output){output.print_string(self.value,self.quote);output.semicolon()});DEFPRINT(AST_Debugger,function(self,output){output.print("debugger");output.semicolon()});function display_body(body,is_toplevel,output,allow_directives){var last=body.length-1;in_directive=allow_directives;body.forEach(function(stmt,i){if(in_directive===true&&!(stmt instanceof AST_Directive||stmt instanceof AST_EmptyStatement||stmt instanceof AST_SimpleStatement&&stmt.body instanceof AST_String)){in_directive=false}if(!(stmt instanceof AST_EmptyStatement)){output.indent();stmt.print(output);if(!(i==last&&is_toplevel)){output.newline();if(is_toplevel)output.newline()}}if(in_directive===true&&stmt instanceof AST_SimpleStatement&&stmt.body instanceof AST_String){in_directive=false}});in_directive=false}AST_StatementWithBody.DEFMETHOD("_do_print_body",function(output){force_statement(this.body,output)});DEFPRINT(AST_Statement,function(self,output){self.body.print(output);output.semicolon()});DEFPRINT(AST_Toplevel,function(self,output){display_body(self.body,true,output,true);output.print("")});DEFPRINT(AST_LabeledStatement,function(self,output){self.label.print(output);output.colon();self.body.print(output)});DEFPRINT(AST_SimpleStatement,function(self,output){self.body.print(output);output.semicolon()});function print_bracketed(body,output,allow_directives){if(body.length>0)output.with_block(function(){display_body(body,false,output,allow_directives)});else output.print("{}")}DEFPRINT(AST_BlockStatement,function(self,output){print_bracketed(self.body,output)});DEFPRINT(AST_EmptyStatement,function(self,output){output.semicolon()});DEFPRINT(AST_Do,function(self,output){output.print("do");output.space();make_block(self.body,output);output.space();output.print("while");output.space();output.with_parens(function(){self.condition.print(output)});output.semicolon()});DEFPRINT(AST_While,function(self,output){output.print("while");output.space();output.with_parens(function(){self.condition.print(output)});output.space();self._do_print_body(output)});DEFPRINT(AST_For,function(self,output){output.print("for");output.space();output.with_parens(function(){if(self.init){if(self.init instanceof AST_Definitions){self.init.print(output)}else{parenthesize_for_noin(self.init,output,true)}output.print(";");output.space()}else{output.print(";")}if(self.condition){self.condition.print(output);output.print(";");output.space()}else{output.print(";")}if(self.step){self.step.print(output)}});output.space();self._do_print_body(output)});DEFPRINT(AST_ForIn,function(self,output){output.print("for");output.space();output.with_parens(function(){self.init.print(output);output.space();output.print("in");output.space();self.object.print(output)});output.space();self._do_print_body(output)});DEFPRINT(AST_With,function(self,output){output.print("with");output.space();output.with_parens(function(){self.expression.print(output)});output.space();self._do_print_body(output)});AST_Lambda.DEFMETHOD("_do_print",function(output,nokeyword){var self=this;if(!nokeyword){output.print("function")}if(self.name){output.space();self.name.print(output)}output.with_parens(function(){self.argnames.forEach(function(arg,i){if(i)output.comma();arg.print(output)})});output.space();print_bracketed(self.body,output,true)});DEFPRINT(AST_Lambda,function(self,output){self._do_print(output)});AST_Exit.DEFMETHOD("_do_print",function(output,kind){output.print(kind);if(this.value){output.space();this.value.print(output)}output.semicolon()});DEFPRINT(AST_Return,function(self,output){self._do_print(output,"return")});DEFPRINT(AST_Throw,function(self,output){self._do_print(output,"throw")});AST_LoopControl.DEFMETHOD("_do_print",function(output,kind){output.print(kind);if(this.label){output.space();this.label.print(output)}output.semicolon()});DEFPRINT(AST_Break,function(self,output){self._do_print(output,"break")});DEFPRINT(AST_Continue,function(self,output){self._do_print(output,"continue")});function make_then(self,output){var b=self.body;if(output.option("bracketize")||output.option("ie8")&&b instanceof AST_Do)return make_block(b,output);if(!b)return output.force_semicolon();while(true){if(b instanceof AST_If){if(!b.alternative){make_block(self.body,output);return}b=b.alternative}else if(b instanceof AST_StatementWithBody){b=b.body}else break}force_statement(self.body,output)}DEFPRINT(AST_If,function(self,output){output.print("if");output.space();output.with_parens(function(){self.condition.print(output)});output.space();if(self.alternative){make_then(self,output);output.space();output.print("else");output.space();if(self.alternative instanceof AST_If)self.alternative.print(output);else force_statement(self.alternative,output)}else{self._do_print_body(output)}});DEFPRINT(AST_Switch,function(self,output){output.print("switch");output.space();output.with_parens(function(){self.expression.print(output)});output.space();var last=self.body.length-1;if(last<0)output.print("{}");else output.with_block(function(){self.body.forEach(function(branch,i){output.indent(true);branch.print(output);if(i<last&&branch.body.length>0)output.newline()})})});AST_SwitchBranch.DEFMETHOD("_do_print_body",function(output){output.newline();this.body.forEach(function(stmt){output.indent();stmt.print(output);output.newline()})});DEFPRINT(AST_Default,function(self,output){output.print("default:");self._do_print_body(output)});DEFPRINT(AST_Case,function(self,output){output.print("case");output.space();self.expression.print(output);output.print(":");self._do_print_body(output)});DEFPRINT(AST_Try,function(self,output){output.print("try");output.space();print_bracketed(self.body,output);if(self.bcatch){output.space();self.bcatch.print(output)}if(self.bfinally){output.space();self.bfinally.print(output)}});DEFPRINT(AST_Catch,function(self,output){output.print("catch");output.space();output.with_parens(function(){self.argname.print(output)});output.space();print_bracketed(self.body,output)});DEFPRINT(AST_Finally,function(self,output){output.print("finally");output.space();print_bracketed(self.body,output)});AST_Definitions.DEFMETHOD("_do_print",function(output,kind){output.print(kind);output.space();this.definitions.forEach(function(def,i){if(i)output.comma();def.print(output)});var p=output.parent();var in_for=p instanceof AST_For||p instanceof AST_ForIn;var avoid_semicolon=in_for&&p.init===this;if(!avoid_semicolon)output.semicolon()});DEFPRINT(AST_Var,function(self,output){self._do_print(output,"var")});function parenthesize_for_noin(node,output,noin){if(!noin)node.print(output);else try{node.walk(new TreeWalker(function(node){if(node instanceof AST_Binary&&node.operator=="in")throw output}));node.print(output)}catch(ex){if(ex!==output)throw ex;node.print(output,true)}}DEFPRINT(AST_VarDef,function(self,output){self.name.print(output);if(self.value){output.space();output.print("=");output.space();var p=output.parent(1);var noin=p instanceof AST_For||p instanceof AST_ForIn;parenthesize_for_noin(self.value,output,noin)}});DEFPRINT(AST_Call,function(self,output){self.expression.print(output);if(self instanceof AST_New&&!need_constructor_parens(self,output))return;output.with_parens(function(){self.args.forEach(function(expr,i){if(i)output.comma();expr.print(output)})})});DEFPRINT(AST_New,function(self,output){output.print("new");output.space();AST_Call.prototype._codegen(self,output)});AST_Sequence.DEFMETHOD("_do_print",function(output){this.expressions.forEach(function(node,index){if(index>0){output.comma();if(output.should_break()){output.newline();output.indent()}}node.print(output)})});DEFPRINT(AST_Sequence,function(self,output){self._do_print(output)});DEFPRINT(AST_Dot,function(self,output){var expr=self.expression;expr.print(output);if(expr instanceof AST_Number&&expr.getValue()>=0){if(!/[xa-f.)]/i.test(output.last())){output.print(".")}}output.print(".");output.add_mapping(self.end);output.print_name(self.property)});DEFPRINT(AST_Sub,function(self,output){self.expression.print(output);output.print("[");self.property.print(output);output.print("]")});DEFPRINT(AST_UnaryPrefix,function(self,output){var op=self.operator;output.print(op);if(/^[a-z]/i.test(op)||/[+-]$/.test(op)&&self.expression instanceof AST_UnaryPrefix&&/^[+-]/.test(self.expression.operator)){output.space()}self.expression.print(output)});DEFPRINT(AST_UnaryPostfix,function(self,output){self.expression.print(output);output.print(self.operator)});DEFPRINT(AST_Binary,function(self,output){var op=self.operator;self.left.print(output);if(op[0]==">"&&self.left instanceof AST_UnaryPostfix&&self.left.operator=="--"){output.print(" ")}else{output.space()}output.print(op);if((op=="<"||op=="<<")&&self.right instanceof AST_UnaryPrefix&&self.right.operator=="!"&&self.right.expression instanceof AST_UnaryPrefix&&self.right.expression.operator=="--"){output.print(" ")}else{output.space()}self.right.print(output)});DEFPRINT(AST_Conditional,function(self,output){self.condition.print(output);output.space();output.print("?");output.space();self.consequent.print(output);output.space();output.colon();self.alternative.print(output)});DEFPRINT(AST_Array,function(self,output){output.with_square(function(){var a=self.elements,len=a.length;if(len>0)output.space();a.forEach(function(exp,i){if(i)output.comma();exp.print(output);if(i===len-1&&exp instanceof AST_Hole)output.comma()});if(len>0)output.space()})});DEFPRINT(AST_Object,function(self,output){if(self.properties.length>0)output.with_block(function(){self.properties.forEach(function(prop,i){if(i){output.print(",");output.newline()}output.indent();prop.print(output)});output.newline()});else output.print("{}")});DEFPRINT(AST_ObjectKeyVal,function(self,output){var key=self.key;var quote=self.quote;if(output.option("quote_keys")){output.print_string(key+"")}else if((typeof key=="number"||!output.option("beautify")&&+key+""==key)&&parseFloat(key)>=0){output.print(make_num(key))}else if(RESERVED_WORDS(key)?!output.option("ie8"):is_identifier_string(key)){if(quote&&output.option("keep_quoted_props")){output.print_string(key,quote)}else{output.print_name(key)}}else{output.print_string(key,quote)}output.colon();self.value.print(output)});DEFPRINT(AST_ObjectSetter,function(self,output){output.print("set");output.space();self.key.print(output);self.value._do_print(output,true)});DEFPRINT(AST_ObjectGetter,function(self,output){output.print("get");output.space();self.key.print(output);self.value._do_print(output,true)});DEFPRINT(AST_Symbol,function(self,output){var def=self.definition();output.print_name(def?def.mangled_name||def.name:self.name)});DEFPRINT(AST_Hole,noop);DEFPRINT(AST_This,function(self,output){output.print("this")});DEFPRINT(AST_Constant,function(self,output){output.print(self.getValue())});DEFPRINT(AST_String,function(self,output){output.print_string(self.getValue(),self.quote,in_directive)});DEFPRINT(AST_Number,function(self,output){if(use_asm&&self.start&&self.start.raw!=null){output.print(self.start.raw)}else{output.print(make_num(self.getValue()))}});function regexp_safe_literal(code){return[92,47,46,43,42,63,40,41,91,93,123,125,36,94,58,124,33,10,13,0,65279,8232,8233].indexOf(code)<0}DEFPRINT(AST_RegExp,function(self,output){var str=self.getValue().toString();if(output.option("ascii_only")){str=output.to_ascii(str)}else if(output.option("unescape_regexps")){str=str.split("\\\\").map(function(str){return str.replace(/\\u[0-9a-fA-F]{4}|\\x[0-9a-fA-F]{2}/g,function(s){var code=parseInt(s.substr(2),16);return regexp_safe_literal(code)?String.fromCharCode(code):s})}).join("\\\\")}output.print(str);var p=output.parent();if(p instanceof AST_Binary&&/^in/.test(p.operator)&&p.left===self)output.print(" ")});function force_statement(stat,output){if(output.option("bracketize")){make_block(stat,output)}else{if(!stat||stat instanceof AST_EmptyStatement)output.force_semicolon();else stat.print(output)}}function need_constructor_parens(self,output){if(self.args.length>0)return true;return output.option("beautify")}function best_of(a){var best=a[0],len=best.length;for(var i=1;i<a.length;++i){if(a[i].length<len){best=a[i];len=best.length}}return best}function make_num(num){var str=num.toString(10),a=[str.replace(/^0\./,".").replace("e+","e")],m;if(Math.floor(num)===num){if(num>=0){a.push("0x"+num.toString(16).toLowerCase(),"0"+num.toString(8))}else{a.push("-0x"+(-num).toString(16).toLowerCase(),"-0"+(-num).toString(8))}if(m=/^(.*?)(0+)$/.exec(num)){a.push(m[1]+"e"+m[2].length)}}else if(m=/^0?\.(0+)(.*)$/.exec(num)){a.push(m[2]+"e-"+(m[1].length+m[2].length),str.substr(str.indexOf(".")))}return best_of(a)}function make_block(stmt,output){if(!stmt||stmt instanceof AST_EmptyStatement)output.print("{}");else if(stmt instanceof AST_BlockStatement)stmt.print(output);else output.with_block(function(){output.indent();stmt.print(output);output.newline()})}function DEFMAP(nodetype,generator){nodetype.DEFMETHOD("add_source_map",function(stream){generator(this,stream)})}DEFMAP(AST_Node,noop);function basic_sourcemap_gen(self,output){output.add_mapping(self.start)}DEFMAP(AST_Directive,basic_sourcemap_gen);DEFMAP(AST_Debugger,basic_sourcemap_gen);DEFMAP(AST_Symbol,basic_sourcemap_gen);DEFMAP(AST_Jump,basic_sourcemap_gen);DEFMAP(AST_StatementWithBody,basic_sourcemap_gen);DEFMAP(AST_LabeledStatement,noop);DEFMAP(AST_Lambda,basic_sourcemap_gen);DEFMAP(AST_Switch,basic_sourcemap_gen);DEFMAP(AST_SwitchBranch,basic_sourcemap_gen);DEFMAP(AST_BlockStatement,basic_sourcemap_gen);DEFMAP(AST_Toplevel,noop);DEFMAP(AST_New,basic_sourcemap_gen);DEFMAP(AST_Try,basic_sourcemap_gen);DEFMAP(AST_Catch,basic_sourcemap_gen);DEFMAP(AST_Finally,basic_sourcemap_gen);DEFMAP(AST_Definitions,basic_sourcemap_gen);DEFMAP(AST_Constant,basic_sourcemap_gen);DEFMAP(AST_ObjectSetter,function(self,output){output.add_mapping(self.start,self.key.name)});DEFMAP(AST_ObjectGetter,function(self,output){output.add_mapping(self.start,self.key.name)});DEFMAP(AST_ObjectProperty,function(self,output){output.add_mapping(self.start,self.key)})})();"use strict";function Compressor(options,false_by_default){if(!(this instanceof Compressor))return new Compressor(options,false_by_default);TreeTransformer.call(this,this.before,this.after);this.options=defaults(options,{booleans:!false_by_default,cascade:!false_by_default,collapse_vars:!false_by_default,comparisons:!false_by_default,conditionals:!false_by_default,dead_code:!false_by_default,drop_console:false,drop_debugger:!false_by_default,evaluate:!false_by_default,expression:false,global_defs:{},hoist_funs:!false_by_default,hoist_vars:false,ie8:false,if_return:!false_by_default,join_vars:!false_by_default,keep_fargs:true,keep_fnames:false,keep_infinity:false,loops:!false_by_default,negate_iife:!false_by_default,passes:1,properties:!false_by_default,pure_getters:!false_by_default&&"strict",pure_funcs:null,reduce_vars:!false_by_default,sequences:!false_by_default,side_effects:!false_by_default,switches:!false_by_default,top_retain:null,toplevel:!!(options&&options["top_retain"]),unsafe:false,unsafe_comps:false,unsafe_math:false,unsafe_proto:false,unused:!false_by_default,warnings:false},true);var pure_funcs=this.options["pure_funcs"];if(typeof pure_funcs=="function"){this.pure_funcs=pure_funcs}else{this.pure_funcs=pure_funcs?function(node){return pure_funcs.indexOf(node.expression.print_to_string())<0}:return_true}var top_retain=this.options["top_retain"];if(top_retain instanceof RegExp){this.top_retain=function(def){return top_retain.test(def.name)}}else if(typeof top_retain=="function"){this.top_retain=top_retain}else if(top_retain){if(typeof top_retain=="string"){top_retain=top_retain.split(/,/)}this.top_retain=function(def){return top_retain.indexOf(def.name)>=0}}var toplevel=this.options["toplevel"];if(typeof toplevel=="string"){this.toplevel.funcs=/funcs/.test(toplevel);this.toplevel.vars=/vars/.test(toplevel)}else{this.toplevel=toplevel?return_true:return_false;this.toplevel.funcs=this.toplevel.vars=toplevel}var sequences=this.options["sequences"];this.sequences_limit=sequences==1?800:sequences|0;this.warnings_produced={}}Compressor.prototype=new TreeTransformer;merge(Compressor.prototype,{option:function(key){return this.options[key]},toplevel:function(def){for(var i=0,len=def.orig.length;i<len;i++)if(!this.toplevel[def.orig[i]instanceof AST_SymbolDefun?"funcs":"vars"])return false;return true},compress:function(node){if(this.option("expression")){node.process_expression(true)}var passes=+this.options.passes||1;for(var pass=0;pass<passes&&pass<3;++pass){if(pass>0||this.option("reduce_vars"))node.reset_opt_flags(this,true);node=node.transform(this)}if(this.option("expression")){node.process_expression(false)}return node},info:function(){if(this.options.warnings=="verbose"){AST_Node.warn.apply(AST_Node,arguments)}},warn:function(text,props){if(this.options.warnings){var message=string_template(text,props);if(!(message in this.warnings_produced)){this.warnings_produced[message]=true;AST_Node.warn.apply(AST_Node,arguments)}}},clear_warnings:function(){this.warnings_produced={}},before:function(node,descend,in_list){if(node._squeezed)return node;var was_scope=false;if(node instanceof AST_Scope){node=node.hoist_declarations(this);was_scope=true}descend(node,this);descend(node,this);var opt=node.optimize(this);if(was_scope&&opt instanceof AST_Scope){opt.drop_unused(this);descend(opt,this)}if(opt===node)opt._squeezed=true;return opt}});(function(){function OPT(node,optimizer){node.DEFMETHOD("optimize",function(compressor){var self=this;if(self._optimized)return self;if(compressor.has_directive("use asm"))return self;var opt=optimizer(self,compressor);opt._optimized=true;return opt})}OPT(AST_Node,function(self,compressor){return self});AST_Node.DEFMETHOD("equivalent_to",function(node){return this.TYPE==node.TYPE&&this.print_to_string()==node.print_to_string()});AST_Scope.DEFMETHOD("process_expression",function(insert,compressor){var self=this;var tt=new TreeTransformer(function(node){if(insert&&node instanceof AST_SimpleStatement){return make_node(AST_Return,node,{value:node.body})}if(!insert&&node instanceof AST_Return){if(compressor){var value=node.value&&node.value.drop_side_effect_free(compressor,true);return value?make_node(AST_SimpleStatement,node,{body:value}):make_node(AST_EmptyStatement,node)}return make_node(AST_SimpleStatement,node,{body:node.value||make_node(AST_UnaryPrefix,node,{operator:"void",expression:make_node(AST_Number,node,{value:0})})})}if(node instanceof AST_Lambda&&node!==self){return node}if(node instanceof AST_Block){var index=node.body.length-1;if(index>=0){node.body[index]=node.body[index].transform(tt)}}if(node instanceof AST_If){node.body=node.body.transform(tt);if(node.alternative){node.alternative=node.alternative.transform(tt)}}if(node instanceof AST_With){node.body=node.body.transform(tt)}return node});self.transform(tt)});AST_Node.DEFMETHOD("reset_opt_flags",function(compressor,rescan){var reduce_vars=rescan&&compressor.option("reduce_vars");var safe_ids=Object.create(null);var suppressor=new TreeWalker(function(node){if(node instanceof AST_Symbol){var d=node.definition();if(node instanceof AST_SymbolRef)d.references.push(node);d.fixed=false}});var tw=new TreeWalker(function(node,descend){node._squeezed=false;node._optimized=false;if(reduce_vars){if(node instanceof AST_Toplevel)node.globals.each(reset_def);if(node instanceof AST_Scope)node.variables.each(reset_def);if(node instanceof AST_SymbolRef){var d=node.definition();d.references.push(node);if(d.fixed===undefined||!safe_to_read(d)||is_modified(node,0,is_immutable(node.fixed_value()))){d.fixed=false}else{var parent=tw.parent();if(parent instanceof AST_Assign&&parent.operator=="="&&node===parent.right||parent instanceof AST_Call&&node!==parent.expression||parent instanceof AST_Return&&node===parent.value&&node.scope!==d.scope||parent instanceof AST_VarDef&&node===parent.value){d.escaped=true}}}if(node instanceof AST_SymbolCatch){node.definition().fixed=false}if(node instanceof AST_VarDef){var d=node.name.definition();if(d.fixed===undefined||safe_to_assign(d,node.value)){if(node.value){d.fixed=function(){return node.value};mark(d,false);descend()}else{d.fixed=null}mark(d,true);return true}else if(node.value){d.fixed=false}}if(node instanceof AST_Assign&&node.operator=="="&&node.left instanceof AST_SymbolRef){var d=node.left.definition();if(safe_to_assign(d,node.right)){d.references.push(node.left);d.fixed=function(){return node.right};mark(d,false);node.right.walk(tw);mark(d,true);return true}}if(node instanceof AST_Defun){var d=node.name.definition();if(d.global&&!compressor.toplevel(d)||safe_to_read(d)){d.fixed=false}else{d.fixed=node;mark(d,true)}var save_ids=safe_ids;safe_ids=Object.create(null);descend();safe_ids=save_ids;return true}if(node instanceof AST_Function){push();var iife;if(!node.name&&(iife=tw.parent())instanceof AST_Call&&iife.expression===node){node.argnames.forEach(function(arg,i){var d=arg.definition();if(!node.uses_arguments&&d.fixed===undefined){d.fixed=function(){return iife.args[i]||make_node(AST_Undefined,iife)};mark(d,true)}else{d.fixed=false}})}descend();pop();return true}if(node instanceof AST_Accessor){var save_ids=safe_ids;safe_ids=Object.create(null);descend();safe_ids=save_ids;return true}if(node instanceof AST_Binary&&(node.operator=="&&"||node.operator=="||")){node.left.walk(tw);push();node.right.walk(tw);pop();return true}if(node instanceof AST_Conditional){node.condition.walk(tw);push();node.consequent.walk(tw);pop();push();node.alternative.walk(tw);pop();return true}if(node instanceof AST_If){node.condition.walk(tw);push();node.body.walk(tw);pop();if(node.alternative){push();node.alternative.walk(tw);pop()}return true}if(node instanceof AST_DWLoop){push();node.condition.walk(tw);node.body.walk(tw);pop();return true}if(node instanceof AST_LabeledStatement){push();node.body.walk(tw);pop();return true}if(node instanceof AST_For){if(node.init)node.init.walk(tw);if(node.condition){push();node.condition.walk(tw);pop()}push();node.body.walk(tw);pop();if(node.step){push();node.step.walk(tw);pop()}return true}if(node instanceof AST_ForIn){node.init.walk(suppressor);node.object.walk(tw);push();node.body.walk(tw);pop();return true}if(node instanceof AST_Try){push();walk_body(node,tw);pop();if(node.bcatch){push();node.bcatch.walk(tw);pop()}if(node.bfinally)node.bfinally.walk(tw);return true}if(node instanceof AST_SwitchBranch){push();descend();pop();return true}}});this.walk(tw);function mark(def,safe){safe_ids[def.id]=safe}function safe_to_read(def){if(safe_ids[def.id]){if(def.fixed==null){var orig=def.orig[0];if(orig instanceof AST_SymbolFunarg||orig.name=="arguments")return false;def.fixed=make_node(AST_Undefined,orig)}return true}}function safe_to_assign(def,value){if(!HOP(safe_ids,def.id))return false;if(!safe_to_read(def))return false;if(def.fixed===false)return false;if(def.fixed!=null&&(!value||def.references.length>0))return false;return!def.orig.some(function(sym){return sym instanceof AST_SymbolDefun||sym instanceof AST_SymbolLambda})}function push(){safe_ids=Object.create(safe_ids)}function pop(){safe_ids=Object.getPrototypeOf(safe_ids)}function reset_def(def){def.escaped=false;if(def.scope.uses_eval){def.fixed=false}else if(!def.global||compressor.toplevel(def)){def.fixed=undefined}else{def.fixed=false}def.references=[];def.should_replace=undefined}function is_immutable(value){return value&&value.is_constant()||value instanceof AST_Lambda}function is_modified(node,level,immutable){var parent=tw.parent(level);if(is_lhs(node,parent)||!immutable&&parent instanceof AST_Call&&parent.expression===node){return true}else if(parent instanceof AST_PropAccess&&parent.expression===node){return!immutable&&is_modified(parent,level+1)}}});AST_SymbolRef.DEFMETHOD("fixed_value",function(){var fixed=this.definition().fixed;if(!fixed||fixed instanceof AST_Node)return fixed;return fixed()});function is_lhs_read_only(lhs){return lhs instanceof AST_SymbolRef&&lhs.definition().orig[0]instanceof AST_SymbolLambda}function find_variable(compressor,name){var scope,i=0;while(scope=compressor.parent(i++)){if(scope instanceof AST_Scope)break;if(scope instanceof AST_Catch){scope=scope.argname.definition().scope;break}}return scope.find_variable(name)}function make_node(ctor,orig,props){if(!props)props={};if(orig){if(!props.start)props.start=orig.start;if(!props.end)props.end=orig.end}return new ctor(props)}function make_sequence(orig,expressions){if(expressions.length==1)return expressions[0];return make_node(AST_Sequence,orig,{expressions:expressions})}function make_node_from_constant(val,orig){switch(typeof val){case"string":return make_node(AST_String,orig,{value:val});case"number":if(isNaN(val))return make_node(AST_NaN,orig);if(isFinite(val)){return 1/val<0?make_node(AST_UnaryPrefix,orig,{operator:"-",expression:make_node(AST_Number,orig,{value:-val})}):make_node(AST_Number,orig,{value:val})}return val<0?make_node(AST_UnaryPrefix,orig,{operator:"-",expression:make_node(AST_Infinity,orig)}):make_node(AST_Infinity,orig);case"boolean":return make_node(val?AST_True:AST_False,orig);case"undefined":return make_node(AST_Undefined,orig);default:if(val===null){return make_node(AST_Null,orig,{value:null})}if(val instanceof RegExp){return make_node(AST_RegExp,orig,{value:val})}throw new Error(string_template("Can't handle constant of type: {type}",{type:typeof val}))}}function maintain_this_binding(parent,orig,val){if(parent instanceof AST_UnaryPrefix&&parent.operator=="delete"||parent instanceof AST_Call&&parent.expression===orig&&(val instanceof AST_PropAccess||val instanceof AST_SymbolRef&&val.name=="eval")){return make_sequence(orig,[make_node(AST_Number,orig,{value:0}),val])}return val}function merge_sequence(array,node){if(node instanceof AST_Sequence){array.push.apply(array,node.expressions)}else{array.push(node)}}function as_statement_array(thing){if(thing===null)return[];if(thing instanceof AST_BlockStatement)return thing.body;if(thing instanceof AST_EmptyStatement)return[];if(thing instanceof AST_Statement)return[thing];throw new Error("Can't convert thing to statement array")}function is_empty(thing){if(thing===null)return true;if(thing instanceof AST_EmptyStatement)return true;if(thing instanceof AST_BlockStatement)return thing.body.length==0;return false}function loop_body(x){if(x instanceof AST_Switch)return x;if(x instanceof AST_For||x instanceof AST_ForIn||x instanceof AST_DWLoop){return x.body instanceof AST_BlockStatement?x.body:x}return x}function is_iife_call(node){if(node instanceof AST_Call&&!(node instanceof AST_New)){return node.expression instanceof AST_Function||is_iife_call(node.expression)}return false}function tighten_body(statements,compressor){var CHANGED,max_iter=10;do{CHANGED=false;statements=eliminate_spurious_blocks(statements);if(compressor.option("dead_code")){statements=eliminate_dead_code(statements,compressor)}if(compressor.option("if_return")){statements=handle_if_return(statements,compressor)}if(compressor.sequences_limit>0){statements=sequencesize(statements,compressor)}if(compressor.option("join_vars")){statements=join_consecutive_vars(statements,compressor)}if(compressor.option("collapse_vars")){statements=collapse(statements,compressor)}}while(CHANGED&&max_iter-- >0);return statements;function collapse(statements,compressor){var scope=compressor.find_parent(AST_Scope);if(scope.uses_eval||scope.uses_with)return statements;var candidates=[];var stat_index=statements.length;while(--stat_index>=0){extract_candidates(statements[stat_index]);while(candidates.length>0){var candidate=candidates.pop();var lhs=get_lhs(candidate);if(!lhs||is_lhs_read_only(lhs))continue;var lvalues=get_lvalues(candidate);if(lhs instanceof AST_SymbolRef)lvalues[lhs.name]=false;var side_effects=value_has_side_effects(candidate);var hit=false,abort=false,replaced=false;var tt=new TreeTransformer(function(node,descend){if(abort)return node;if(!hit){if(node===candidate){hit=true;return node}return}var parent=tt.parent();if(node instanceof AST_Assign&&node.operator!="="&&lhs.equivalent_to(node.left)||node instanceof AST_Debugger||node instanceof AST_IterationStatement&&!(node instanceof AST_For)||node instanceof AST_SymbolRef&&node.undeclared()||node instanceof AST_Try||node instanceof AST_With||parent instanceof AST_For&&node!==parent.init){abort=true;return node}if(!(node instanceof AST_SymbolDeclaration)&&!is_lhs(node,parent)&&lhs.equivalent_to(node)){CHANGED=replaced=abort=true;compressor.info("Collapsing {name} [{file}:{line},{col}]",{name:node.print_to_string(),file:node.start.file,line:node.start.line,col:node.start.col});if(candidate instanceof AST_UnaryPostfix){return make_node(AST_UnaryPrefix,candidate,candidate)}if(candidate instanceof AST_VarDef){var def=candidate.name.definition();if(def.references.length==1&&(!def.global||compressor.toplevel(def))){return maintain_this_binding(parent,node,candidate.value)}return make_node(AST_Assign,candidate,{operator:"=",left:make_node(AST_SymbolRef,candidate.name,candidate.name),right:candidate.value})}return candidate}var sym;if(node instanceof AST_Call||node instanceof AST_Exit||node instanceof AST_PropAccess||node instanceof AST_SymbolRef&&(lvalues[node.name]||side_effects&&!references_in_scope(node.definition()))||(sym=lhs_or_def(node))&&get_symbol(sym).name in lvalues||parent instanceof AST_Binary&&(parent.operator=="&&"||parent.operator=="||")||parent instanceof AST_Case||parent instanceof AST_Conditional||parent instanceof AST_For||parent instanceof AST_If){if(!(node instanceof AST_Scope))descend(node,tt);abort=true;return node}if(node instanceof AST_Default||node instanceof AST_Scope)return node});for(var i=stat_index;!abort&&i<statements.length;i++){statements[i].transform(tt)}if(replaced&&!remove_candidate(candidate))statements.splice(stat_index,1)}}return statements;function extract_candidates(expr){if(expr instanceof AST_Assign&&!expr.left.has_side_effects(compressor)||expr instanceof AST_Unary&&(expr.operator=="++"||expr.operator=="--")){candidates.push(expr)}else if(expr instanceof AST_Sequence){expr.expressions.forEach(extract_candidates)}else if(expr instanceof AST_Definitions){expr.definitions.forEach(function(var_def){if(var_def.value)candidates.push(var_def)})}else if(expr instanceof AST_SimpleStatement){extract_candidates(expr.body)}else if(expr instanceof AST_For&&expr.init){extract_candidates(expr.init)}}function get_lhs(expr){if(expr instanceof AST_VarDef){var def=expr.name.definition();if(def.orig.length>1||def.references.length==1&&(!def.global||compressor.toplevel(def))){return make_node(AST_SymbolRef,expr.name,expr.name)}}else{return expr[expr instanceof AST_Assign?"left":"expression"]}}function get_symbol(node){while(node instanceof AST_PropAccess)node=node.expression;return node}function get_lvalues(expr){var lvalues=Object.create(null);if(expr instanceof AST_Unary)return lvalues;var scope;var tw=new TreeWalker(function(node,descend){if(node instanceof AST_Scope){var save_scope=scope;descend();scope=save_scope;return true}if(node instanceof AST_SymbolRef||node instanceof AST_PropAccess){var sym=get_symbol(node);if(sym instanceof AST_SymbolRef){lvalues[sym.name]=lvalues[sym.name]||is_lhs(node,tw.parent())}}});expr[expr instanceof AST_Assign?"right":"value"].walk(tw);return lvalues}function lhs_or_def(node){if(node instanceof AST_VarDef)return node.value&&node.name;return is_lhs(node.left,node)}function remove_candidate(expr){var found=false;return statements[stat_index].transform(new TreeTransformer(function(node,descend,in_list){if(found)return node;if(node===expr){found=true;if(node instanceof AST_VarDef){remove(node.name.definition().orig,node.name)}return in_list?MAP.skip:null}},function(node){if(node instanceof AST_Sequence)switch(node.expressions.length){case 0:return null;case 1:return node.expressions[0]}if(node instanceof AST_Definitions&&node.definitions.length==0||node instanceof AST_SimpleStatement&&!node.body){return null}}))}function value_has_side_effects(expr){if(expr instanceof AST_Unary)return false;return expr[expr instanceof AST_Assign?"right":"value"].has_side_effects(compressor)}function references_in_scope(def){if(def.orig.length==1&&def.orig[0]instanceof AST_SymbolDefun)return true;if(def.scope!==scope)return false;return def.references.every(function(ref){return ref.scope===scope})}}function eliminate_spurious_blocks(statements){var seen_dirs=[];return statements.reduce(function(a,stat){if(stat instanceof AST_BlockStatement){CHANGED=true;a.push.apply(a,eliminate_spurious_blocks(stat.body))}else if(stat instanceof AST_EmptyStatement){CHANGED=true}else if(stat instanceof AST_Directive){if(seen_dirs.indexOf(stat.value)<0){a.push(stat);seen_dirs.push(stat.value)}else{CHANGED=true}}else{a.push(stat)}return a},[])}function handle_if_return(statements,compressor){var self=compressor.self();var multiple_if_returns=has_multiple_if_returns(statements);var in_lambda=self instanceof AST_Lambda;var ret=[];loop:for(var i=statements.length;--i>=0;){var stat=statements[i];switch(true){case in_lambda&&stat instanceof AST_Return&&!stat.value&&ret.length==0:CHANGED=true;continue loop;case stat instanceof AST_If:if(stat.body instanceof AST_Return){if((in_lambda&&ret.length==0||ret[0]instanceof AST_Return&&!ret[0].value)&&!stat.body.value&&!stat.alternative){CHANGED=true;var cond=make_node(AST_SimpleStatement,stat.condition,{body:stat.condition});ret.unshift(cond);continue loop}if(ret[0]instanceof AST_Return&&stat.body.value&&ret[0].value&&!stat.alternative){CHANGED=true;stat=stat.clone();stat.alternative=ret[0];ret[0]=stat.transform(compressor);continue loop}if(multiple_if_returns&&(ret.length==0||ret[0]instanceof AST_Return)&&stat.body.value&&!stat.alternative&&in_lambda){CHANGED=true;stat=stat.clone();stat.alternative=ret[0]||make_node(AST_Return,stat,{value:null});ret[0]=stat.transform(compressor);continue loop}if(!stat.body.value&&in_lambda){CHANGED=true;stat=stat.clone();stat.condition=stat.condition.negate(compressor);var body=as_statement_array(stat.alternative).concat(ret);var funs=extract_functions_from_statement_array(body);stat.body=make_node(AST_BlockStatement,stat,{body:body});stat.alternative=null;ret=funs.concat([stat.transform(compressor)]);continue loop}if(compressor.option("sequences")&&i>0&&statements[i-1]instanceof AST_If&&statements[i-1].body instanceof AST_Return&&ret.length==1&&in_lambda&&ret[0]instanceof AST_SimpleStatement&&!stat.alternative){CHANGED=true;ret.push(make_node(AST_Return,ret[0],{value:null}).transform(compressor));ret.unshift(stat);continue loop}}var ab=aborts(stat.body);var lct=ab instanceof AST_LoopControl?compressor.loopcontrol_target(ab):null;if(ab&&(ab instanceof AST_Return&&!ab.value&&in_lambda||ab instanceof AST_Continue&&self===loop_body(lct)||ab instanceof AST_Break&&lct instanceof AST_BlockStatement&&self===lct)){if(ab.label){remove(ab.label.thedef.references,ab)}CHANGED=true;var body=as_statement_array(stat.body).slice(0,-1);stat=stat.clone();stat.condition=stat.condition.negate(compressor);stat.body=make_node(AST_BlockStatement,stat,{body:as_statement_array(stat.alternative).concat(ret)});stat.alternative=make_node(AST_BlockStatement,stat,{body:body});ret=[stat.transform(compressor)];continue loop}var ab=aborts(stat.alternative);var lct=ab instanceof AST_LoopControl?compressor.loopcontrol_target(ab):null;if(ab&&(ab instanceof AST_Return&&!ab.value&&in_lambda||ab instanceof AST_Continue&&self===loop_body(lct)||ab instanceof AST_Break&&lct instanceof AST_BlockStatement&&self===lct)){if(ab.label){remove(ab.label.thedef.references,ab)}CHANGED=true;stat=stat.clone();stat.body=make_node(AST_BlockStatement,stat.body,{body:as_statement_array(stat.body).concat(ret)});stat.alternative=make_node(AST_BlockStatement,stat.alternative,{body:as_statement_array(stat.alternative).slice(0,-1)});ret=[stat.transform(compressor)];continue loop}ret.unshift(stat);break;default:ret.unshift(stat);break}}return ret;function has_multiple_if_returns(statements){var n=0;for(var i=statements.length;--i>=0;){var stat=statements[i];if(stat instanceof AST_If&&stat.body instanceof AST_Return){if(++n>1)return true}}return false}}function eliminate_dead_code(statements,compressor){var has_quit=false;var orig=statements.length;var self=compressor.self();statements=statements.reduce(function(a,stat){if(has_quit){extract_declarations_from_unreachable_code(compressor,stat,a)}else{if(stat instanceof AST_LoopControl){var lct=compressor.loopcontrol_target(stat);if(stat instanceof AST_Break&&!(lct instanceof AST_IterationStatement)&&loop_body(lct)===self||stat instanceof AST_Continue&&loop_body(lct)===self){if(stat.label){remove(stat.label.thedef.references,stat)}}else{a.push(stat)}}else{a.push(stat)}if(aborts(stat))has_quit=true}return a},[]);CHANGED=statements.length!=orig;return statements}function sequencesize(statements,compressor){if(statements.length<2)return statements;var seq=[],ret=[];function push_seq(){if(!seq.length)return;var body=make_sequence(seq[0],seq);ret.push(make_node(AST_SimpleStatement,body,{body:body}));seq=[]}statements.forEach(function(stat){if(stat instanceof AST_SimpleStatement){if(seq.length>=compressor.sequences_limit)push_seq();var body=stat.body;if(seq.length>0)body=body.drop_side_effect_free(compressor);if(body)merge_sequence(seq,body)}else{push_seq();ret.push(stat)}});push_seq();ret=sequencesize_2(ret,compressor);CHANGED=ret.length!=statements.length;return ret}function sequencesize_2(statements,compressor){function cons_seq(right){ret.pop();var left=prev.body;if(!(left instanceof AST_Sequence)){left=make_node(AST_Sequence,left,{expressions:[left]})}merge_sequence(left.expressions,right);return left.transform(compressor)}var ret=[],prev=null;statements.forEach(function(stat){if(prev){if(stat instanceof AST_For){try{prev.body.walk(new TreeWalker(function(node){if(node instanceof AST_Binary&&node.operator=="in")throw cons_seq}));if(stat.init&&!(stat.init instanceof AST_Definitions)){stat.init=cons_seq(stat.init)}else if(!stat.init){stat.init=prev.body.drop_side_effect_free(compressor);ret.pop()}}catch(ex){if(ex!==cons_seq)throw ex}}else if(stat instanceof AST_If){stat.condition=cons_seq(stat.condition)}else if(stat instanceof AST_With){stat.expression=cons_seq(stat.expression)}else if(stat instanceof AST_Exit&&stat.value){stat.value=cons_seq(stat.value)}else if(stat instanceof AST_Exit){stat.value=cons_seq(make_node(AST_Undefined,stat).transform(compressor))}else if(stat instanceof AST_Switch){stat.expression=cons_seq(stat.expression)}}ret.push(stat);prev=stat instanceof AST_SimpleStatement?stat:null});return ret}function join_consecutive_vars(statements,compressor){var prev=null;return statements.reduce(function(a,stat){if(stat instanceof AST_Definitions&&prev&&prev.TYPE==stat.TYPE){prev.definitions=prev.definitions.concat(stat.definitions);CHANGED=true}else if(stat instanceof AST_For&&prev instanceof AST_Var&&(!stat.init||stat.init.TYPE==prev.TYPE)){CHANGED=true;a.pop();if(stat.init){stat.init.definitions=prev.definitions.concat(stat.init.definitions)}else{stat.init=prev}a.push(stat);prev=stat}else{prev=stat;a.push(stat)}return a},[])}}function extract_functions_from_statement_array(statements){var funs=[];for(var i=statements.length-1;i>=0;--i){var stat=statements[i];if(stat instanceof AST_Defun){statements.splice(i,1);funs.unshift(stat)}}return funs}function extract_declarations_from_unreachable_code(compressor,stat,target){if(!(stat instanceof AST_Defun)){compressor.warn("Dropping unreachable code [{file}:{line},{col}]",stat.start)}stat.walk(new TreeWalker(function(node){if(node instanceof AST_Definitions){compressor.warn("Declarations in unreachable code! [{file}:{line},{col}]",node.start);node.remove_initializers();target.push(node);return true}if(node instanceof AST_Defun){target.push(node);return true}if(node instanceof AST_Scope){return true}}))}function is_undefined(node,compressor){return node.is_undefined||node instanceof AST_Undefined||node instanceof AST_UnaryPrefix&&node.operator=="void"&&!node.expression.has_side_effects(compressor)}(function(def){AST_Node.DEFMETHOD("may_throw_on_access",function(compressor){var pure_getters=compressor.option("pure_getters");return!pure_getters||this._throw_on_access(pure_getters)});function is_strict(pure_getters){return/strict/.test(pure_getters)}def(AST_Node,is_strict);def(AST_Null,return_true);def(AST_Undefined,return_true);def(AST_Constant,return_false);def(AST_Array,return_false);def(AST_Object,function(pure_getters){if(!is_strict(pure_getters))return false;for(var i=this.properties.length;--i>=0;)if(this.properties[i].value instanceof AST_Accessor)return true;return false});def(AST_Function,return_false);def(AST_UnaryPostfix,return_false);def(AST_UnaryPrefix,function(){return this.operator=="void"});def(AST_Binary,function(pure_getters){switch(this.operator){case"&&":return this.left._throw_on_access(pure_getters);case"||":return this.left._throw_on_access(pure_getters)&&this.right._throw_on_access(pure_getters);default:return false}});def(AST_Assign,function(pure_getters){return this.operator=="="&&this.right._throw_on_access(pure_getters)});def(AST_Conditional,function(pure_getters){return this.consequent._throw_on_access(pure_getters)||this.alternative._throw_on_access(pure_getters)});def(AST_Sequence,function(pure_getters){return this.expressions[this.expressions.length-1]._throw_on_access(pure_getters)});def(AST_SymbolRef,function(pure_getters){if(this.is_undefined)return true;if(!is_strict(pure_getters))return false;var fixed=this.fixed_value();return!fixed||fixed._throw_on_access(pure_getters)})})(function(node,func){node.DEFMETHOD("_throw_on_access",func)});(function(def){var unary_bool=["!","delete"];var binary_bool=["in","instanceof","==","!=","===","!==","<","<=",">=",">"];def(AST_Node,return_false);def(AST_UnaryPrefix,function(){return member(this.operator,unary_bool)});def(AST_Binary,function(){return member(this.operator,binary_bool)||(this.operator=="&&"||this.operator=="||")&&this.left.is_boolean()&&this.right.is_boolean()});def(AST_Conditional,function(){return this.consequent.is_boolean()&&this.alternative.is_boolean()});def(AST_Assign,function(){return this.operator=="="&&this.right.is_boolean()});def(AST_Sequence,function(){return this.expressions[this.expressions.length-1].is_boolean()});def(AST_True,return_true);def(AST_False,return_true)})(function(node,func){node.DEFMETHOD("is_boolean",func)});(function(def){def(AST_Node,return_false);def(AST_Number,return_true);var unary=makePredicate("+ - ~ ++ --");def(AST_Unary,function(){return unary(this.operator)});var binary=makePredicate("- * / % & | ^ << >> >>>");def(AST_Binary,function(compressor){return binary(this.operator)||this.operator=="+"&&this.left.is_number(compressor)&&this.right.is_number(compressor)});def(AST_Assign,function(compressor){return binary(this.operator.slice(0,-1))||this.operator=="="&&this.right.is_number(compressor)});def(AST_Sequence,function(compressor){return this.expressions[this.expressions.length-1].is_number(compressor)});def(AST_Conditional,function(compressor){return this.consequent.is_number(compressor)&&this.alternative.is_number(compressor)})})(function(node,func){node.DEFMETHOD("is_number",func)});(function(def){def(AST_Node,return_false);def(AST_String,return_true);def(AST_UnaryPrefix,function(){return this.operator=="typeof"});def(AST_Binary,function(compressor){return this.operator=="+"&&(this.left.is_string(compressor)||this.right.is_string(compressor))});def(AST_Assign,function(compressor){return(this.operator=="="||this.operator=="+=")&&this.right.is_string(compressor)});def(AST_Sequence,function(compressor){return this.expressions[this.expressions.length-1].is_string(compressor)});def(AST_Conditional,function(compressor){return this.consequent.is_string(compressor)&&this.alternative.is_string(compressor)})})(function(node,func){node.DEFMETHOD("is_string",func)});var unary_side_effects=makePredicate("delete ++ --");function is_lhs(node,parent){if(parent instanceof AST_Unary&&unary_side_effects(parent.operator))return parent.expression;if(parent instanceof AST_Assign&&parent.left===node)return node}(function(def){AST_Node.DEFMETHOD("resolve_defines",function(compressor){if(!compressor.option("global_defs"))return;var def=this._find_defs(compressor,"");if(def){var node,parent=this,level=0;do{node=parent;parent=compressor.parent(level++)}while(parent instanceof AST_PropAccess&&parent.expression===node);if(is_lhs(node,parent)){compressor.warn("global_defs "+this.print_to_string()+" redefined [{file}:{line},{col}]",this.start)}else{return def}}});function to_node(value,orig){if(value instanceof AST_Node)return make_node(value.CTOR,orig,value);if(Array.isArray(value))return make_node(AST_Array,orig,{elements:value.map(function(value){return to_node(value,orig)})});if(value&&typeof value=="object"){var props=[];for(var key in value){props.push(make_node(AST_ObjectKeyVal,orig,{key:key,value:to_node(value[key],orig)}))}return make_node(AST_Object,orig,{properties:props})}return make_node_from_constant(value,orig)}def(AST_Node,noop);def(AST_Dot,function(compressor,suffix){return this.expression._find_defs(compressor,"."+this.property+suffix)});def(AST_SymbolRef,function(compressor,suffix){if(!this.global())return;var name;var defines=compressor.option("global_defs");if(defines&&HOP(defines,name=this.name+suffix)){var node=to_node(defines[name],this);var top=compressor.find_parent(AST_Toplevel);node.walk(new TreeWalker(function(node){if(node instanceof AST_SymbolRef){node.scope=top;node.thedef=top.def_global(node)}}));return node}})})(function(node,func){node.DEFMETHOD("_find_defs",func)});function best_of_expression(ast1,ast2){return ast1.print_to_string().length>ast2.print_to_string().length?ast2:ast1}function best_of_statement(ast1,ast2){return best_of_expression(make_node(AST_SimpleStatement,ast1,{body:ast1}),make_node(AST_SimpleStatement,ast2,{body:ast2})).body}function best_of(compressor,ast1,ast2){return(first_in_statement(compressor)?best_of_statement:best_of_expression)(ast1,ast2)}(function(def){AST_Node.DEFMETHOD("evaluate",function(compressor){if(!compressor.option("evaluate"))return this;try{var val=this._eval(compressor);return!val||val instanceof RegExp||typeof val!="object"?val:this}catch(ex){if(ex!==def)throw ex;return this}});var unaryPrefix=makePredicate("! ~ - + void");AST_Node.DEFMETHOD("is_constant",function(){if(this instanceof AST_Constant){return!(this instanceof AST_RegExp)}else{return this instanceof AST_UnaryPrefix&&this.expression instanceof AST_Constant&&unaryPrefix(this.operator)}});AST_Node.DEFMETHOD("constant_value",function(compressor){if(this instanceof AST_Constant&&!(this instanceof AST_RegExp)){return this.value}if(this instanceof AST_UnaryPrefix&&this.expression instanceof AST_Constant)switch(this.operator){case"!":return!this.expression.value;case"~":return~this.expression.value;case"-":return-this.expression.value;case"+":return+this.expression.value;default:throw new Error(string_template("Cannot evaluate unary expression {value}",{value:this.print_to_string()}))}var result=this.evaluate(compressor);if(result!==this){return result}throw new Error(string_template("Cannot evaluate constant [{file}:{line},{col}]",this.start))});def(AST_Statement,function(){throw new Error(string_template("Cannot evaluate a statement [{file}:{line},{col}]",this.start))});def(AST_Lambda,function(){throw def});function ev(node,compressor){if(!compressor)throw new Error("Compressor must be passed");return node._eval(compressor)}def(AST_Node,function(){throw def});def(AST_Constant,function(){return this.getValue()});def(AST_Array,function(compressor){if(compressor.option("unsafe")){return this.elements.map(function(element){return ev(element,compressor)})}throw def});def(AST_Object,function(compressor){if(compressor.option("unsafe")){var val={};for(var i=0,len=this.properties.length;i<len;i++){var prop=this.properties[i];var key=prop.key;if(key instanceof AST_Symbol){key=key.name}else if(key instanceof AST_Node){key=ev(key,compressor)}if(typeof Object.prototype[key]==="function"){throw def}val[key]=ev(prop.value,compressor)}return val}throw def});def(AST_UnaryPrefix,function(compressor){var e=this.expression;switch(this.operator){case"!":return!ev(e,compressor);case"typeof":if(e instanceof AST_Function)return typeof function(){};e=ev(e,compressor);if(e instanceof RegExp)throw def;return typeof e;case"void":return void ev(e,compressor);case"~":return~ev(e,compressor);case"-":return-ev(e,compressor);case"+":return+ev(e,compressor)}throw def});def(AST_Binary,function(c){var left=this.left,right=this.right,result;switch(this.operator){case"&&":result=ev(left,c)&&ev(right,c);break;case"||":result=ev(left,c)||ev(right,c);break;case"|":result=ev(left,c)|ev(right,c);break;case"&":result=ev(left,c)&ev(right,c);break;case"^":result=ev(left,c)^ev(right,c);break;case"+":result=ev(left,c)+ev(right,c);break;case"*":result=ev(left,c)*ev(right,c);break;case"/":result=ev(left,c)/ev(right,c);break;case"%":result=ev(left,c)%ev(right,c);break;case"-":result=ev(left,c)-ev(right,c);break;case"<<":result=ev(left,c)<<ev(right,c);break;case">>":result=ev(left,c)>>ev(right,c);break;case">>>":result=ev(left,c)>>>ev(right,c);break;case"==":result=ev(left,c)==ev(right,c);break;case"===":result=ev(left,c)===ev(right,c);break;case"!=":result=ev(left,c)!=ev(right,c);break;case"!==":result=ev(left,c)!==ev(right,c);break;case"<":result=ev(left,c)<ev(right,c);break;case"<=":result=ev(left,c)<=ev(right,c);break;case">":result=ev(left,c)>ev(right,c);break;case">=":result=ev(left,c)>=ev(right,c);break;default:throw def}if(isNaN(result)&&c.find_parent(AST_With)){throw def}return result});def(AST_Conditional,function(compressor){return ev(this.condition,compressor)?ev(this.consequent,compressor):ev(this.alternative,compressor)});def(AST_SymbolRef,function(compressor){if(!compressor.option("reduce_vars")||this._evaluating)throw def;this._evaluating=true;try{var fixed=this.fixed_value();if(!fixed)throw def;var value=ev(fixed,compressor);if(!HOP(fixed,"_eval"))fixed._eval=function(){return value};if(value&&typeof value=="object"&&this.definition().escaped)throw def;return value}finally{this._evaluating=false}});def(AST_PropAccess,function(compressor){if(compressor.option("unsafe")){var key=this.property;if(key instanceof AST_Node){key=ev(key,compressor)}var val=ev(this.expression,compressor);if(val&&HOP(val,key)){return val[key]}}throw def})})(function(node,func){node.DEFMETHOD("_eval",func)});(function(def){function basic_negation(exp){return make_node(AST_UnaryPrefix,exp,{operator:"!",expression:exp})}function best(orig,alt,first_in_statement){var negated=basic_negation(orig);if(first_in_statement){var stat=make_node(AST_SimpleStatement,alt,{body:alt});return best_of_expression(negated,stat)===stat?alt:negated}return best_of_expression(negated,alt)}def(AST_Node,function(){return basic_negation(this)});def(AST_Statement,function(){throw new Error("Cannot negate a statement")});def(AST_Function,function(){return basic_negation(this)});def(AST_UnaryPrefix,function(){if(this.operator=="!")return this.expression;return basic_negation(this)});def(AST_Sequence,function(compressor){var expressions=this.expressions.slice();expressions.push(expressions.pop().negate(compressor));return make_sequence(this,expressions)});def(AST_Conditional,function(compressor,first_in_statement){var self=this.clone();self.consequent=self.consequent.negate(compressor);self.alternative=self.alternative.negate(compressor);return best(this,self,first_in_statement)});def(AST_Binary,function(compressor,first_in_statement){var self=this.clone(),op=this.operator;if(compressor.option("unsafe_comps")){switch(op){case"<=":self.operator=">";return self;case"<":self.operator=">=";return self;case">=":self.operator="<";return self;case">":self.operator="<=";return self}}switch(op){case"==":self.operator="!=";return self;case"!=":self.operator="==";return self;case"===":self.operator="!==";return self;case"!==":self.operator="===";return self;case"&&":self.operator="||";self.left=self.left.negate(compressor,first_in_statement);self.right=self.right.negate(compressor);return best(this,self,first_in_statement);case"||":self.operator="&&";self.left=self.left.negate(compressor,first_in_statement);self.right=self.right.negate(compressor);return best(this,self,first_in_statement)}return basic_negation(this)})})(function(node,func){node.DEFMETHOD("negate",function(compressor,first_in_statement){return func.call(this,compressor,first_in_statement)})});AST_Call.DEFMETHOD("has_pure_annotation",function(compressor){if(!compressor.option("side_effects"))return false;if(this.pure!==undefined)return this.pure;var pure=false;var comments,last_comment;if(this.start&&(comments=this.start.comments_before)&&comments.length&&/[@#]__PURE__/.test((last_comment=comments[comments.length-1]).value)){pure=last_comment}return this.pure=pure});(function(def){def(AST_Node,return_true);def(AST_EmptyStatement,return_false);def(AST_Constant,return_false);def(AST_This,return_false);def(AST_Call,function(compressor){if(!this.has_pure_annotation(compressor)&&compressor.pure_funcs(this))return true;for(var i=this.args.length;--i>=0;){if(this.args[i].has_side_effects(compressor))return true}return false});function any(list,compressor){for(var i=list.length;--i>=0;)if(list[i].has_side_effects(compressor))return true;return false}def(AST_Block,function(compressor){return any(this.body,compressor)});def(AST_Switch,function(compressor){return this.expression.has_side_effects(compressor)||any(this.body,compressor)});def(AST_Case,function(compressor){return this.expression.has_side_effects(compressor)||any(this.body,compressor)});def(AST_Try,function(compressor){return any(this.body,compressor)||this.bcatch&&this.bcatch.has_side_effects(compressor)||this.bfinally&&this.bfinally.has_side_effects(compressor)});def(AST_If,function(compressor){return this.condition.has_side_effects(compressor)||this.body&&this.body.has_side_effects(compressor)||this.alternative&&this.alternative.has_side_effects(compressor)});def(AST_LabeledStatement,function(compressor){return this.body.has_side_effects(compressor)});def(AST_SimpleStatement,function(compressor){return this.body.has_side_effects(compressor)});def(AST_Defun,return_true);def(AST_Function,return_false);def(AST_Binary,function(compressor){return this.left.has_side_effects(compressor)||this.right.has_side_effects(compressor)});def(AST_Assign,return_true);def(AST_Conditional,function(compressor){return this.condition.has_side_effects(compressor)||this.consequent.has_side_effects(compressor)||this.alternative.has_side_effects(compressor)});def(AST_Unary,function(compressor){return unary_side_effects(this.operator)||this.expression.has_side_effects(compressor)});def(AST_SymbolRef,function(compressor){return this.undeclared()});def(AST_SymbolDeclaration,return_false);def(AST_Object,function(compressor){return any(this.properties,compressor)});def(AST_ObjectProperty,function(compressor){return this.value.has_side_effects(compressor)});def(AST_Array,function(compressor){return any(this.elements,compressor)});def(AST_Dot,function(compressor){return this.expression.may_throw_on_access(compressor)||this.expression.has_side_effects(compressor)});def(AST_Sub,function(compressor){return this.expression.may_throw_on_access(compressor)||this.expression.has_side_effects(compressor)||this.property.has_side_effects(compressor)});def(AST_Sequence,function(compressor){return this.expressions.some(function(expression,index){return expression.has_side_effects(compressor)})})})(function(node,func){node.DEFMETHOD("has_side_effects",func)});(function(def){function all(list){for(var i=list.length;--i>=0;)if(!list[i].is_constant_expression())return false;return true}def(AST_Node,return_false);def(AST_Constant,return_true);def(AST_Unary,function(){return this.expression.is_constant_expression()});def(AST_Binary,function(){return this.left.is_constant_expression()&&this.right.is_constant_expression()});def(AST_Array,function(){return all(this.elements)});def(AST_Object,function(){return all(this.properties)});def(AST_ObjectProperty,function(){return this.value.is_constant_expression()})})(function(node,func){node.DEFMETHOD("is_constant_expression",func)});function aborts(thing){return thing&&thing.aborts()}(function(def){def(AST_Statement,return_null);def(AST_Jump,return_this);function block_aborts(){var n=this.body.length;return n>0&&aborts(this.body[n-1])}def(AST_BlockStatement,block_aborts);def(AST_SwitchBranch,block_aborts);def(AST_If,function(){return this.alternative&&aborts(this.body)&&aborts(this.alternative)&&this})})(function(node,func){node.DEFMETHOD("aborts",func)});OPT(AST_Directive,function(self,compressor){if(compressor.has_directive(self.value)!==self){return make_node(AST_EmptyStatement,self)}return self});OPT(AST_Debugger,function(self,compressor){if(compressor.option("drop_debugger"))return make_node(AST_EmptyStatement,self);return self});OPT(AST_LabeledStatement,function(self,compressor){if(self.body instanceof AST_Break&&compressor.loopcontrol_target(self.body)===self.body){return make_node(AST_EmptyStatement,self)}return self.label.references.length==0?self.body:self});OPT(AST_Block,function(self,compressor){self.body=tighten_body(self.body,compressor);return self});OPT(AST_BlockStatement,function(self,compressor){self.body=tighten_body(self.body,compressor);switch(self.body.length){case 1:return self.body[0];case 0:return make_node(AST_EmptyStatement,self)}return self});AST_Scope.DEFMETHOD("drop_unused",function(compressor){if(!compressor.option("unused"))return;if(compressor.has_directive("use asm"))return;var self=this;if(self.uses_eval||self.uses_with)return;var drop_funcs=!(self instanceof AST_Toplevel)||compressor.toplevel.funcs;var drop_vars=!(self instanceof AST_Toplevel)||compressor.toplevel.vars;if(!drop_funcs&&!drop_vars)return;var assign_as_unused=!/keep_assign/.test(compressor.option("unused"));var in_use=[];var in_use_ids=Object.create(null);if(self instanceof AST_Toplevel&&compressor.top_retain){self.variables.each(function(def){if(compressor.top_retain(def)&&!(def.id in in_use_ids)){in_use_ids[def.id]=true;in_use.push(def)}})}var var_defs_by_id=new Dictionary;var initializations=new Dictionary;var scope=this;var tw=new TreeWalker(function(node,descend){if(node!==self){if(node instanceof AST_Defun){if(!drop_funcs&&scope===self){var node_def=node.name.definition();if(!(node_def.id in in_use_ids)){in_use_ids[node_def.id]=true;in_use.push(node_def)}}initializations.add(node.name.name,node);return true}if(node instanceof AST_Definitions&&scope===self){node.definitions.forEach(function(def){var node_def=def.name.definition();if(def.name instanceof AST_SymbolVar){var_defs_by_id.add(node_def.id,def)}if(!drop_vars){if(!(node_def.id in in_use_ids)){in_use_ids[node_def.id]=true;in_use.push(node_def)}}if(def.value){initializations.add(def.name.name,def.value);if(def.value.has_side_effects(compressor)){def.value.walk(tw)}}});return true}if(assign_as_unused&&node instanceof AST_Assign&&node.operator=="="&&node.left instanceof AST_SymbolRef&&scope===self){node.right.walk(tw);return true}if(node instanceof AST_SymbolRef){var node_def=node.definition();if(!(node_def.id in in_use_ids)){in_use_ids[node_def.id]=true;in_use.push(node_def)}return true}if(node instanceof AST_Scope){var save_scope=scope;scope=node;descend();scope=save_scope;return true}}});self.walk(tw);for(var i=0;i<in_use.length;++i){in_use[i].orig.forEach(function(decl){var init=initializations.get(decl.name);if(init)init.forEach(function(init){var tw=new TreeWalker(function(node){if(node instanceof AST_SymbolRef){var node_def=node.definition();if(!(node_def.id in in_use_ids)){in_use_ids[node_def.id]=true;in_use.push(node_def)}}});init.walk(tw)})})}var tt=new TreeTransformer(function before(node,descend,in_list){if(node instanceof AST_Function&&node.name&&!compressor.option("keep_fnames")){var def=node.name.definition();if(!(def.id in in_use_ids)||def.orig.length>1)node.name=null}if(node instanceof AST_Lambda&&!(node instanceof AST_Accessor)){var trim=!compressor.option("keep_fargs");for(var a=node.argnames,i=a.length;--i>=0;){var sym=a[i];if(!(sym.definition().id in in_use_ids)){sym.__unused=true;if(trim){a.pop();compressor[sym.unreferenced()?"warn":"info"]("Dropping unused function argument {name} [{file}:{line},{col}]",template(sym))}}else{trim=false}}}if(drop_funcs&&node instanceof AST_Defun&&node!==self){if(!(node.name.definition().id in in_use_ids)){compressor[node.name.unreferenced()?"warn":"info"]("Dropping unused function {name} [{file}:{line},{col}]",template(node.name));return make_node(AST_EmptyStatement,node)}return node}if(drop_vars&&node instanceof AST_Definitions&&!(tt.parent()instanceof AST_ForIn&&tt.parent().init===node)){var body=[],head=[],tail=[];var side_effects=[];node.definitions.forEach(function(def){if(def.value)def.value=def.value.transform(tt);var sym=def.name.definition();if(sym.id in in_use_ids){if(def.name instanceof AST_SymbolVar){var var_defs=var_defs_by_id.get(sym.id);if(var_defs.length>1&&!def.value){compressor.warn("Dropping duplicated definition of variable {name} [{file}:{line},{col}]",template(def.name));remove(var_defs,def);remove(sym.orig,def.name);return}}if(def.value){if(side_effects.length>0){if(tail.length>0){merge_sequence(side_effects,def.value);def.value=make_sequence(def.value,side_effects)}else{body.push(make_node(AST_SimpleStatement,node,{body:make_sequence(node,side_effects)}))}side_effects=[]}tail.push(def)}else{head.push(def)}}else if(sym.orig[0]instanceof AST_SymbolCatch){var value=def.value&&def.value.drop_side_effect_free(compressor);if(value)merge_sequence(side_effects,value);def.value=null;head.push(def)}else{var value=def.value&&def.value.drop_side_effect_free(compressor);if(value){compressor.warn("Side effects in initialization of unused variable {name} [{file}:{line},{col}]",template(def.name));merge_sequence(side_effects,value)}else{compressor[def.name.unreferenced()?"warn":"info"]("Dropping unused variable {name} [{file}:{line},{col}]",template(def.name))}remove(sym.orig,def.name)}});if(head.length==0&&tail.length==1&&tail[0].name instanceof AST_SymbolVar){var var_defs=var_defs_by_id.get(tail[0].name.definition().id);if(var_defs.length>1){var def=tail.pop();compressor.warn("Converting duplicated definition of variable {name} to assignment [{file}:{line},{col}]",template(def.name));remove(var_defs,def);remove(def.name.definition().orig,def.name);side_effects.unshift(make_node(AST_Assign,def,{operator:"=",left:make_node(AST_SymbolRef,def.name,def.name),right:def.value}))}}if(head.length>0||tail.length>0){node.definitions=head.concat(tail);body.push(node)}if(side_effects.length>0){body.push(make_node(AST_SimpleStatement,node,{body:make_sequence(node,side_effects)}))}switch(body.length){case 0:return in_list?MAP.skip:make_node(AST_EmptyStatement,node);case 1:return body[0];default:return in_list?MAP.splice(body):make_node(AST_BlockStatement,node,{body:body})}}if(drop_vars&&assign_as_unused&&node instanceof AST_Assign&&node.operator=="="&&node.left instanceof AST_SymbolRef){var def=node.left.definition();if(!(def.id in in_use_ids)&&self.variables.get(def.name)===def){return maintain_this_binding(tt.parent(),node,node.right.transform(tt))}}if(node instanceof AST_For){descend(node,this);if(node.init instanceof AST_BlockStatement){var block=node.init;node.init=block.body.pop();block.body.push(node);return in_list?MAP.splice(block.body):block}else if(node.init instanceof AST_SimpleStatement){node.init=node.init.body}else if(is_empty(node.init)){node.init=null}return node}if(node instanceof AST_LabeledStatement&&node.body instanceof AST_For){descend(node,this);if(node.body instanceof AST_BlockStatement){var block=node.body;node.body=block.body.pop();block.body.push(node);return in_list?MAP.splice(block.body):block}return node}if(node instanceof AST_Scope&&node!==self)return node;function template(sym){return{name:sym.name,file:sym.start.file,line:sym.start.line,col:sym.start.col}}});self.transform(tt)});AST_Scope.DEFMETHOD("hoist_declarations",function(compressor){var self=this;if(compressor.has_directive("use asm"))return self;var hoist_funs=compressor.option("hoist_funs");var hoist_vars=compressor.option("hoist_vars");if(hoist_funs||hoist_vars){var dirs=[];var hoisted=[];var vars=new Dictionary,vars_found=0,var_decl=0;self.walk(new TreeWalker(function(node){if(node instanceof AST_Scope&&node!==self)return true;if(node instanceof AST_Var){++var_decl;return true}}));hoist_vars=hoist_vars&&var_decl>1;var tt=new TreeTransformer(function before(node){if(node!==self){if(node instanceof AST_Directive){dirs.push(node);return make_node(AST_EmptyStatement,node)}if(node instanceof AST_Defun&&hoist_funs){hoisted.push(node);return make_node(AST_EmptyStatement,node)}if(node instanceof AST_Var&&hoist_vars){node.definitions.forEach(function(def){vars.set(def.name.name,def);++vars_found});var seq=node.to_assignments(compressor);var p=tt.parent();if(p instanceof AST_ForIn&&p.init===node){if(seq==null){var def=node.definitions[0].name;return make_node(AST_SymbolRef,def,def)}return seq}if(p instanceof AST_For&&p.init===node){return seq}if(!seq)return make_node(AST_EmptyStatement,node);return make_node(AST_SimpleStatement,node,{body:seq})}if(node instanceof AST_Scope)return node}});self=self.transform(tt);if(vars_found>0){var defs=[];vars.each(function(def,name){if(self instanceof AST_Lambda&&find_if(function(x){return x.name==def.name.name},self.argnames)){vars.del(name)}else{def=def.clone();def.value=null;defs.push(def);vars.set(name,def)}});if(defs.length>0){for(var i=0;i<self.body.length;){if(self.body[i]instanceof AST_SimpleStatement){var expr=self.body[i].body,sym,assign;if(expr instanceof AST_Assign&&expr.operator=="="&&(sym=expr.left)instanceof AST_Symbol&&vars.has(sym.name)){var def=vars.get(sym.name);if(def.value)break;def.value=expr.right;remove(defs,def);defs.push(def);self.body.splice(i,1);continue}if(expr instanceof AST_Sequence&&(assign=expr.expressions[0])instanceof AST_Assign&&assign.operator=="="&&(sym=assign.left)instanceof AST_Symbol&&vars.has(sym.name)){var def=vars.get(sym.name);if(def.value)break;def.value=assign.right;remove(defs,def);defs.push(def);self.body[i].body=make_sequence(expr,expr.expressions.slice(1));continue}}if(self.body[i]instanceof AST_EmptyStatement){self.body.splice(i,1);continue}if(self.body[i]instanceof AST_BlockStatement){var tmp=[i,1].concat(self.body[i].body);self.body.splice.apply(self.body,tmp);continue}break}defs=make_node(AST_Var,self,{definitions:defs});hoisted.push(defs)}}self.body=dirs.concat(hoisted,self.body)}return self});(function(def){function trim(nodes,compressor,first_in_statement){var len=nodes.length;if(!len)return null;var ret=[],changed=false;for(var i=0;i<len;i++){var node=nodes[i].drop_side_effect_free(compressor,first_in_statement);changed|=node!==nodes[i];if(node){merge_sequence(ret,node);first_in_statement=false}}return changed?ret.length?ret:null:nodes}def(AST_Node,return_this);def(AST_Constant,return_null);def(AST_This,return_null);def(AST_Call,function(compressor,first_in_statement){if(!this.has_pure_annotation(compressor)&&compressor.pure_funcs(this)){if(this.expression instanceof AST_Function&&(!this.expression.name||!this.expression.name.definition().references.length)){var node=this.clone();node.expression.process_expression(false,compressor);return node}return this}if(this.pure){compressor.warn("Dropping __PURE__ call [{file}:{line},{col}]",this.start);this.pure.value=this.pure.value.replace(/[@#]__PURE__/g," ")}var args=trim(this.args,compressor,first_in_statement);return args&&make_sequence(this,args)});def(AST_Accessor,return_null);def(AST_Function,return_null);def(AST_Binary,function(compressor,first_in_statement){var right=this.right.drop_side_effect_free(compressor);if(!right)return this.left.drop_side_effect_free(compressor,first_in_statement);switch(this.operator){case"&&":case"||":if(right===this.right)return this;var node=this.clone();node.right=right;return node;default:var left=this.left.drop_side_effect_free(compressor,first_in_statement);if(!left)return this.right.drop_side_effect_free(compressor,first_in_statement);return make_sequence(this,[left,right])}});def(AST_Assign,return_this);def(AST_Conditional,function(compressor){var consequent=this.consequent.drop_side_effect_free(compressor);var alternative=this.alternative.drop_side_effect_free(compressor);if(consequent===this.consequent&&alternative===this.alternative)return this;if(!consequent)return alternative?make_node(AST_Binary,this,{operator:"||",left:this.condition,right:alternative}):this.condition.drop_side_effect_free(compressor);if(!alternative)return make_node(AST_Binary,this,{operator:"&&",left:this.condition,right:consequent});var node=this.clone();node.consequent=consequent;node.alternative=alternative;return node});def(AST_Unary,function(compressor,first_in_statement){if(unary_side_effects(this.operator))return this;if(this.operator=="typeof"&&this.expression instanceof AST_SymbolRef)return null;var expression=this.expression.drop_side_effect_free(compressor,first_in_statement);if(first_in_statement&&this instanceof AST_UnaryPrefix&&is_iife_call(expression)){if(expression===this.expression&&this.operator.length===1)return this;return make_node(AST_UnaryPrefix,this,{operator:this.operator.length===1?this.operator:"!",expression:expression})}return expression});def(AST_SymbolRef,function(){return this.undeclared()?this:null});def(AST_Object,function(compressor,first_in_statement){var values=trim(this.properties,compressor,first_in_statement);return values&&make_sequence(this,values)});def(AST_ObjectProperty,function(compressor,first_in_statement){return this.value.drop_side_effect_free(compressor,first_in_statement)});def(AST_Array,function(compressor,first_in_statement){var values=trim(this.elements,compressor,first_in_statement);return values&&make_sequence(this,values)});def(AST_Dot,function(compressor,first_in_statement){if(this.expression.may_throw_on_access(compressor))return this;return this.expression.drop_side_effect_free(compressor,first_in_statement)});def(AST_Sub,function(compressor,first_in_statement){if(this.expression.may_throw_on_access(compressor))return this;var expression=this.expression.drop_side_effect_free(compressor,first_in_statement);if(!expression)return this.property.drop_side_effect_free(compressor,first_in_statement);var property=this.property.drop_side_effect_free(compressor);if(!property)return expression;return make_sequence(this,[expression,property])});def(AST_Sequence,function(compressor){var last=this.expressions[this.expressions.length-1];var expr=last.drop_side_effect_free(compressor);if(expr===last)return this;var expressions=this.expressions.slice(0,-1);if(expr)merge_sequence(expressions,expr);return make_sequence(this,expressions)})})(function(node,func){node.DEFMETHOD("drop_side_effect_free",func)});OPT(AST_SimpleStatement,function(self,compressor){if(compressor.option("side_effects")){var body=self.body;var node=body.drop_side_effect_free(compressor,true);if(!node){compressor.warn("Dropping side-effect-free statement [{file}:{line},{col}]",self.start);return make_node(AST_EmptyStatement,self)}if(node!==body){return make_node(AST_SimpleStatement,self,{body:node})}}return self});OPT(AST_DWLoop,function(self,compressor){if(!compressor.option("loops"))return self;var cond=self.condition.evaluate(compressor);if(cond!==self.condition){if(cond){return make_node(AST_For,self,{body:self.body})}if(compressor.option("dead_code")&&self instanceof AST_While){var a=[];extract_declarations_from_unreachable_code(compressor,self.body,a);return make_node(AST_BlockStatement,self,{body:a}).optimize(compressor)}if(self instanceof AST_Do){var has_loop_control=false;var tw=new TreeWalker(function(node){if(node instanceof AST_Scope||has_loop_control)return true;if(node instanceof AST_LoopControl&&tw.loopcontrol_target(node)===self)return has_loop_control=true});var parent=compressor.parent();(parent instanceof AST_LabeledStatement?parent:self).walk(tw);if(!has_loop_control)return self.body}}if(self instanceof AST_While){return make_node(AST_For,self,self).optimize(compressor)}return self});function if_break_in_loop(self,compressor){function drop_it(rest){rest=as_statement_array(rest);if(self.body instanceof AST_BlockStatement){self.body=self.body.clone();self.body.body=rest.concat(self.body.body.slice(1));self.body=self.body.transform(compressor)}else{self.body=make_node(AST_BlockStatement,self.body,{body:rest}).transform(compressor)}if_break_in_loop(self,compressor)}var first=self.body instanceof AST_BlockStatement?self.body.body[0]:self.body;if(first instanceof AST_If){if(first.body instanceof AST_Break&&compressor.loopcontrol_target(first.body)===compressor.self()){if(self.condition){self.condition=make_node(AST_Binary,self.condition,{left:self.condition,operator:"&&",right:first.condition.negate(compressor)})}else{self.condition=first.condition.negate(compressor)}drop_it(first.alternative)}else if(first.alternative instanceof AST_Break&&compressor.loopcontrol_target(first.alternative)===compressor.self()){if(self.condition){self.condition=make_node(AST_Binary,self.condition,{left:self.condition,operator:"&&",right:first.condition})}else{self.condition=first.condition}drop_it(first.body)}}}OPT(AST_For,function(self,compressor){if(!compressor.option("loops"))return self;if(self.condition){var cond=self.condition.evaluate(compressor);if(compressor.option("dead_code")&&!cond){var a=[];if(self.init instanceof AST_Statement){a.push(self.init)}else if(self.init){a.push(make_node(AST_SimpleStatement,self.init,{body:self.init}))}extract_declarations_from_unreachable_code(compressor,self.body,a);return make_node(AST_BlockStatement,self,{body:a}).optimize(compressor)}if(cond!==self.condition){cond=make_node_from_constant(cond,self.condition).transform(compressor);self.condition=best_of_expression(cond,self.condition)}}if_break_in_loop(self,compressor);return self});OPT(AST_If,function(self,compressor){if(is_empty(self.alternative))self.alternative=null;if(!compressor.option("conditionals"))return self;var cond=self.condition.evaluate(compressor);if(cond!==self.condition){if(cond){compressor.warn("Condition always true [{file}:{line},{col}]",self.condition.start);if(compressor.option("dead_code")){var a=[];if(self.alternative){extract_declarations_from_unreachable_code(compressor,self.alternative,a)}a.push(self.body);return make_node(AST_BlockStatement,self,{body:a}).optimize(compressor)}}else{compressor.warn("Condition always false [{file}:{line},{col}]",self.condition.start);if(compressor.option("dead_code")){var a=[];extract_declarations_from_unreachable_code(compressor,self.body,a);if(self.alternative)a.push(self.alternative);return make_node(AST_BlockStatement,self,{body:a}).optimize(compressor)}}cond=make_node_from_constant(cond,self.condition).transform(compressor);self.condition=best_of_expression(cond,self.condition)}var negated=self.condition.negate(compressor);var self_condition_length=self.condition.print_to_string().length;var negated_length=negated.print_to_string().length;var negated_is_best=negated_length<self_condition_length;if(self.alternative&&negated_is_best){negated_is_best=false;self.condition=negated;var tmp=self.body;self.body=self.alternative||make_node(AST_EmptyStatement,self);self.alternative=tmp}if(is_empty(self.body)&&is_empty(self.alternative)){return make_node(AST_SimpleStatement,self.condition,{body:self.condition.clone()}).optimize(compressor)}if(self.body instanceof AST_SimpleStatement&&self.alternative instanceof AST_SimpleStatement){return make_node(AST_SimpleStatement,self,{body:make_node(AST_Conditional,self,{condition:self.condition,consequent:self.body.body,alternative:self.alternative.body})}).optimize(compressor)}if(is_empty(self.alternative)&&self.body instanceof AST_SimpleStatement){if(self_condition_length===negated_length&&!negated_is_best&&self.condition instanceof AST_Binary&&self.condition.operator=="||"){negated_is_best=true}if(negated_is_best)return make_node(AST_SimpleStatement,self,{body:make_node(AST_Binary,self,{operator:"||",left:negated,right:self.body.body})}).optimize(compressor);return make_node(AST_SimpleStatement,self,{body:make_node(AST_Binary,self,{operator:"&&",left:self.condition,right:self.body.body})}).optimize(compressor)}if(self.body instanceof AST_EmptyStatement&&self.alternative instanceof AST_SimpleStatement){return make_node(AST_SimpleStatement,self,{body:make_node(AST_Binary,self,{operator:"||",left:self.condition,right:self.alternative.body})}).optimize(compressor)}if(self.body instanceof AST_Exit&&self.alternative instanceof AST_Exit&&self.body.TYPE==self.alternative.TYPE){return make_node(self.body.CTOR,self,{value:make_node(AST_Conditional,self,{condition:self.condition,consequent:self.body.value||make_node(AST_Undefined,self.body),alternative:self.alternative.value||make_node(AST_Undefined,self.alternative)}).transform(compressor)}).optimize(compressor)}if(self.body instanceof AST_If&&!self.body.alternative&&!self.alternative){self=make_node(AST_If,self,{condition:make_node(AST_Binary,self.condition,{operator:"&&",left:self.condition,right:self.body.condition}),body:self.body.body,alternative:null})}if(aborts(self.body)){if(self.alternative){var alt=self.alternative;self.alternative=null;return make_node(AST_BlockStatement,self,{body:[self,alt]}).optimize(compressor)}}if(aborts(self.alternative)){var body=self.body;self.body=self.alternative;self.condition=negated_is_best?negated:self.condition.negate(compressor);self.alternative=null;return make_node(AST_BlockStatement,self,{body:[self,body]}).optimize(compressor)}return self});OPT(AST_Switch,function(self,compressor){if(!compressor.option("switches"))return self;var branch;var value=self.expression.evaluate(compressor);if(value!==self.expression){var expression=make_node_from_constant(value,self.expression).transform(compressor);self.expression=best_of_expression(expression,self.expression)}if(!compressor.option("dead_code"))return self;var decl=[];var body=[];var default_branch;var exact_match;for(var i=0,len=self.body.length;i<len&&!exact_match;i++){branch=self.body[i];if(branch instanceof AST_Default){if(!default_branch){default_branch=branch}else{eliminate_branch(branch,body[body.length-1])}}else if(value!==self.expression){var exp=branch.expression.evaluate(compressor);if(exp===value){exact_match=branch;if(default_branch){var default_index=body.indexOf(default_branch);body.splice(default_index,1);eliminate_branch(default_branch,body[default_index-1]);default_branch=null}}else if(exp!==branch.expression){eliminate_branch(branch,body[body.length-1]);continue}}if(aborts(branch)){var prev=body[body.length-1];if(aborts(prev)&&prev.body.length==branch.body.length&&make_node(AST_BlockStatement,prev,prev).equivalent_to(make_node(AST_BlockStatement,branch,branch))){prev.body=[]}}body.push(branch)}while(i<len)eliminate_branch(self.body[i++],body[body.length-1]);if(body.length>0){body[0].body=decl.concat(body[0].body)}self.body=body;while(branch=body[body.length-1]){var stat=branch.body[branch.body.length-1];if(stat instanceof AST_Break&&compressor.loopcontrol_target(stat)===self)branch.body.pop();if(branch.body.length||branch instanceof AST_Case&&(default_branch||branch.expression.has_side_effects(compressor)))break;if(body.pop()===default_branch)default_branch=null}if(body.length==0){return make_node(AST_BlockStatement,self,{body:decl.concat(make_node(AST_SimpleStatement,self.expression,{body:self.expression}))}).optimize(compressor)}if(body.length==1&&(body[0]===exact_match||body[0]===default_branch)){var has_break=false;var tw=new TreeWalker(function(node){if(has_break||node instanceof AST_Lambda||node instanceof AST_SimpleStatement)return true;if(node instanceof AST_Break&&tw.loopcontrol_target(node)===self)has_break=true});self.walk(tw);if(!has_break){body=body[0].body.slice();body.unshift(make_node(AST_SimpleStatement,self.expression,{body:self.expression}));return make_node(AST_BlockStatement,self,{body:body}).optimize(compressor)}}return self;function eliminate_branch(branch,prev){if(prev&&!aborts(prev)){prev.body=prev.body.concat(branch.body)}else{extract_declarations_from_unreachable_code(compressor,branch,decl)}}});OPT(AST_Try,function(self,compressor){self.body=tighten_body(self.body,compressor);if(self.bcatch&&self.bfinally&&all(self.bfinally.body,is_empty))self.bfinally=null;if(all(self.body,is_empty)){var body=[];if(self.bcatch)extract_declarations_from_unreachable_code(compressor,self.bcatch,body);if(self.bfinally)body=body.concat(self.bfinally.body);return make_node(AST_BlockStatement,self,{body:body}).optimize(compressor)}return self});AST_Definitions.DEFMETHOD("remove_initializers",function(){this.definitions.forEach(function(def){def.value=null})});AST_Definitions.DEFMETHOD("to_assignments",function(compressor){var reduce_vars=compressor.option("reduce_vars");var assignments=this.definitions.reduce(function(a,def){if(def.value){var name=make_node(AST_SymbolRef,def.name,def.name);a.push(make_node(AST_Assign,def,{operator:"=",left:name,right:def.value}));if(reduce_vars)name.definition().fixed=false}return a},[]);if(assignments.length==0)return null;return make_sequence(this,assignments)});OPT(AST_Definitions,function(self,compressor){if(self.definitions.length==0)return make_node(AST_EmptyStatement,self);return self});OPT(AST_Call,function(self,compressor){var exp=self.expression;if(compressor.option("reduce_vars")&&exp instanceof AST_SymbolRef){var def=exp.definition();var fixed=exp.fixed_value();if(fixed instanceof AST_Defun){def.fixed=fixed=make_node(AST_Function,fixed,fixed).clone(true)}if(fixed instanceof AST_Function){exp=fixed;if(compressor.option("unused")&&def.references.length==1&&!(def.scope.uses_arguments&&def.orig[0]instanceof AST_SymbolFunarg)&&!def.scope.uses_eval&&compressor.find_parent(AST_Scope)===def.scope){self.expression=exp}}}if(compressor.option("unused")&&exp instanceof AST_Function&&!exp.uses_arguments&&!exp.uses_eval){var pos=0,last=0;for(var i=0,len=self.args.length;i<len;i++){var trim=i>=exp.argnames.length;if(trim||exp.argnames[i].__unused){var node=self.args[i].drop_side_effect_free(compressor);if(node){self.args[pos++]=node}else if(!trim){self.args[pos++]=make_node(AST_Number,self.args[i],{value:0});continue}}else{self.args[pos++]=self.args[i]}last=pos}self.args.length=last}if(compressor.option("unsafe")){if(exp instanceof AST_SymbolRef&&exp.undeclared()){switch(exp.name){case"Array":if(self.args.length!=1){return make_node(AST_Array,self,{elements:self.args}).optimize(compressor)}break;case"Object":if(self.args.length==0){return make_node(AST_Object,self,{properties:[]})}break;case"String":if(self.args.length==0)return make_node(AST_String,self,{value:""});if(self.args.length<=1)return make_node(AST_Binary,self,{left:self.args[0],operator:"+",right:make_node(AST_String,self,{value:""})}).optimize(compressor);break;case"Number":if(self.args.length==0)return make_node(AST_Number,self,{value:0});if(self.args.length==1)return make_node(AST_UnaryPrefix,self,{expression:self.args[0],operator:"+"}).optimize(compressor);case"Boolean":if(self.args.length==0)return make_node(AST_False,self);if(self.args.length==1)return make_node(AST_UnaryPrefix,self,{expression:make_node(AST_UnaryPrefix,self,{expression:self.args[0],operator:"!"}),operator:"!"}).optimize(compressor);break;case"Function":if(self.args.length==0)return make_node(AST_Function,self,{argnames:[],body:[]});if(all(self.args,function(x){return x instanceof AST_String})){try{var code="(function("+self.args.slice(0,-1).map(function(arg){return arg.value}).join(",")+"){"+self.args[self.args.length-1].value+"})()";var ast=parse(code);var mangle={ie8:compressor.option("ie8")};ast.figure_out_scope(mangle);var comp=new Compressor(compressor.options);ast=ast.transform(comp);ast.figure_out_scope(mangle);ast.mangle_names();var fun;try{ast.walk(new TreeWalker(function(node){if(node instanceof AST_Lambda){fun=node;throw ast}}))}catch(ex){if(ex!==ast)throw ex}if(!fun)return self;var args=fun.argnames.map(function(arg,i){return make_node(AST_String,self.args[i],{value:arg.print_to_string()})});var code=OutputStream();AST_BlockStatement.prototype._codegen.call(fun,fun,code);code=code.toString().replace(/^\{|\}$/g,"");args.push(make_node(AST_String,self.args[self.args.length-1],{value:code}));self.args=args;return self}catch(ex){if(ex instanceof JS_Parse_Error){compressor.warn("Error parsing code passed to new Function [{file}:{line},{col}]",self.args[self.args.length-1].start);compressor.warn(ex.toString())}else{console.log(ex);throw ex}}}break}}else if(exp instanceof AST_Dot&&exp.property=="toString"&&self.args.length==0){return make_node(AST_Binary,self,{left:make_node(AST_String,self,{value:""}),operator:"+",right:exp.expression}).optimize(compressor)}else if(exp instanceof AST_Dot&&exp.expression instanceof AST_Array&&exp.property=="join")EXIT:{var separator;if(self.args.length>0){separator=self.args[0].evaluate(compressor);if(separator===self.args[0])break EXIT}var elements=[];var consts=[];exp.expression.elements.forEach(function(el){var value=el.evaluate(compressor);if(value!==el){consts.push(value)}else{if(consts.length>0){elements.push(make_node(AST_String,self,{value:consts.join(separator)}));consts.length=0}elements.push(el)}});if(consts.length>0){elements.push(make_node(AST_String,self,{value:consts.join(separator)}))}if(elements.length==0)return make_node(AST_String,self,{value:""});if(elements.length==1){if(elements[0].is_string(compressor)){return elements[0]}return make_node(AST_Binary,elements[0],{operator:"+",left:make_node(AST_String,self,{value:""}),right:elements[0]})}if(separator==""){var first;if(elements[0].is_string(compressor)||elements[1].is_string(compressor)){first=elements.shift()}else{first=make_node(AST_String,self,{value:""})}return elements.reduce(function(prev,el){return make_node(AST_Binary,el,{operator:"+",left:prev,right:el})},first).optimize(compressor)}var node=self.clone();node.expression=node.expression.clone();node.expression.expression=node.expression.expression.clone();node.expression.expression.elements=elements;return best_of(compressor,self,node)}else if(exp instanceof AST_Dot&&exp.expression.is_string(compressor)&&exp.property=="charAt"){var arg=self.args[0];var index=arg?arg.evaluate(compressor):0;if(index!==arg){return make_node(AST_Sub,exp,{expression:exp.expression,property:make_node_from_constant(index|0,arg||exp)}).optimize(compressor)}}}if(exp instanceof AST_Function){if(exp.body[0]instanceof AST_Return){var value=exp.body[0].value;if(!value||value.is_constant_expression()){var args=self.args.concat(value||make_node(AST_Undefined,self));return make_sequence(self,args).transform(compressor)}}if(compressor.option("side_effects")&&all(exp.body,is_empty)){var args=self.args.concat(make_node(AST_Undefined,self));return make_sequence(self,args).transform(compressor)}}if(compressor.option("drop_console")){if(exp instanceof AST_PropAccess){var name=exp.expression;while(name.expression){name=name.expression}if(name instanceof AST_SymbolRef&&name.name=="console"&&name.undeclared()){return make_node(AST_Undefined,self).optimize(compressor)}}}if(compressor.option("negate_iife")&&compressor.parent()instanceof AST_SimpleStatement&&is_iife_call(self)){return self.negate(compressor,true)}return self});OPT(AST_New,function(self,compressor){if(compressor.option("unsafe")){var exp=self.expression;if(exp instanceof AST_SymbolRef&&exp.undeclared()){switch(exp.name){case"Object":case"RegExp":case"Function":case"Error":case"Array":return make_node(AST_Call,self,self).transform(compressor)}}}return self});OPT(AST_Sequence,function(self,compressor){if(!compressor.option("side_effects"))return self;var expressions=[];filter_for_side_effects();var end=expressions.length-1;trim_right_for_undefined();if(end>0&&compressor.option("cascade"))trim_left_for_assignment();if(end==0){self=maintain_this_binding(compressor.parent(),self,expressions[0]);if(!(self instanceof AST_Sequence))self=self.optimize(compressor);return self}self.expressions=expressions;return self;function filter_for_side_effects(){var first=first_in_statement(compressor);var last=self.expressions.length-1;self.expressions.forEach(function(expr,index){if(index<last)expr=expr.drop_side_effect_free(compressor,first);if(expr){merge_sequence(expressions,expr);first=false}})}function trim_right_for_undefined(){while(end>0&&is_undefined(expressions[end],compressor))end--;if(end<expressions.length-1){expressions[end]=make_node(AST_UnaryPrefix,self,{operator:"void",expression:expressions[end]});expressions.length=end+1}}function trim_left_for_assignment(){for(var i=0,j=1;j<=end;j++){var left=expressions[i];var cdr=expressions[j];if(left instanceof AST_Assign&&!left.left.has_side_effects(compressor)){left=left.left}else if(left instanceof AST_Unary&&(left.operator=="++"||left.operator=="--")){left=left.expression}else left=null;if(!left||is_lhs_read_only(left)){expressions[++i]=cdr;continue}var parent=null,field;while(true){if(cdr.equivalent_to(left)){var car=expressions[i];if(car instanceof AST_UnaryPostfix){car=make_node(AST_UnaryPrefix,car,{operator:car.operator,expression:left})}if(parent){parent[field]=car;expressions[i]=expressions[j]}else{expressions[i]=car}break}if(cdr instanceof AST_Binary&&!(cdr instanceof AST_Assign)){if(cdr.left.is_constant()){if(cdr.operator=="||"||cdr.operator=="&&"){expressions[++i]=expressions[j];break}field="right"}else{field="left"}}else if(cdr instanceof AST_Call||cdr instanceof AST_PropAccess||cdr instanceof AST_Unary&&!unary_side_effects(cdr.operator)){field="expression"}else{expressions[++i]=expressions[j];break}parent=cdr;cdr=cdr[field]}}end=i;expressions.length=end+1}});AST_Unary.DEFMETHOD("lift_sequences",function(compressor){if(compressor.option("sequences")){if(this.expression instanceof AST_Sequence){var x=this.expression.expressions.slice();var e=this.clone();e.expression=x.pop();x.push(e);return make_sequence(this,x).optimize(compressor)}}return this});OPT(AST_UnaryPostfix,function(self,compressor){return self.lift_sequences(compressor)});OPT(AST_UnaryPrefix,function(self,compressor){var e=self.expression;if(self.operator=="delete"&&!(e instanceof AST_SymbolRef||e instanceof AST_PropAccess||e instanceof AST_NaN||e instanceof AST_Infinity||e instanceof AST_Undefined)){if(e instanceof AST_Sequence){e=e.expressions.slice();e.push(make_node(AST_True,self));return make_sequence(self,e).optimize(compressor)}return make_sequence(self,[e,make_node(AST_True,self)]).optimize(compressor)}var seq=self.lift_sequences(compressor);if(seq!==self){return seq}if(compressor.option("side_effects")&&self.operator=="void"){e=e.drop_side_effect_free(compressor);if(e){self.expression=e;return self}else{return make_node(AST_Undefined,self).optimize(compressor)}}if(compressor.option("booleans")&&compressor.in_boolean_context()){switch(self.operator){case"!":if(e instanceof AST_UnaryPrefix&&e.operator=="!"){return e.expression}if(e instanceof AST_Binary){self=best_of(compressor,self,e.negate(compressor,first_in_statement(compressor)))}break;case"typeof":compressor.warn("Boolean expression always true [{file}:{line},{col}]",self.start);return(e instanceof AST_SymbolRef?make_node(AST_True,self):make_sequence(self,[e,make_node(AST_True,self)])).optimize(compressor)}}if(self.operator=="-"&&e instanceof AST_Infinity){e=e.transform(compressor)}if(e instanceof AST_Binary&&(self.operator=="+"||self.operator=="-")&&(e.operator=="*"||e.operator=="/"||e.operator=="%")){return make_node(AST_Binary,self,{operator:e.operator,left:make_node(AST_UnaryPrefix,e.left,{operator:self.operator,expression:e.left}),right:e.right})}if(self.operator!="-"||!(e instanceof AST_Number||e instanceof AST_Infinity)){var ev=self.evaluate(compressor);if(ev!==self){ev=make_node_from_constant(ev,self).optimize(compressor);return best_of(compressor,ev,self)}}return self});AST_Binary.DEFMETHOD("lift_sequences",function(compressor){if(compressor.option("sequences")){if(this.left instanceof AST_Sequence){var x=this.left.expressions.slice();var e=this.clone();e.left=x.pop();x.push(e);return make_sequence(this,x).optimize(compressor)}if(this.right instanceof AST_Sequence&&!this.left.has_side_effects(compressor)){var assign=this.operator=="="&&this.left instanceof AST_SymbolRef;var x=this.right.expressions;var last=x.length-1;for(var i=0;i<last;i++){if(!assign&&x[i].has_side_effects(compressor))break}if(i==last){x=x.slice();var e=this.clone();e.right=x.pop();x.push(e);return make_sequence(this,x).optimize(compressor)}else if(i>0){var e=this.clone();e.right=make_sequence(this.right,x.slice(i));x=x.slice(0,i);x.push(e);return make_sequence(this,x).optimize(compressor)}}}return this});var commutativeOperators=makePredicate("== === != !== * & | ^");OPT(AST_Binary,function(self,compressor){function reversible(){return self.left.is_constant()||self.right.is_constant()||!self.left.has_side_effects(compressor)&&!self.right.has_side_effects(compressor)}function reverse(op){if(reversible()){if(op)self.operator=op;var tmp=self.left;self.left=self.right;self.right=tmp}}if(commutativeOperators(self.operator)){if(self.right.is_constant()&&!self.left.is_constant()){if(!(self.left instanceof AST_Binary&&PRECEDENCE[self.left.operator]>=PRECEDENCE[self.operator])){reverse()}}}self=self.lift_sequences(compressor);if(compressor.option("comparisons"))switch(self.operator){case"===":case"!==":if(self.left.is_string(compressor)&&self.right.is_string(compressor)||self.left.is_number(compressor)&&self.right.is_number(compressor)||self.left.is_boolean()&&self.right.is_boolean()){self.operator=self.operator.substr(0,2)}case"==":case"!=":if(self.left instanceof AST_String&&self.left.value=="undefined"&&self.right instanceof AST_UnaryPrefix&&self.right.operator=="typeof"){var expr=self.right.expression;if(expr instanceof AST_SymbolRef?!expr.undeclared():!(expr instanceof AST_PropAccess&&compressor.option("ie8"))){self.right=expr;self.left=make_node(AST_Undefined,self.left).optimize(compressor);if(self.operator.length==2)self.operator+="="}}break}if(compressor.option("booleans")&&self.operator=="+"&&compressor.in_boolean_context()){var ll=self.left.evaluate(compressor);var rr=self.right.evaluate(compressor);if(ll&&typeof ll=="string"){compressor.warn("+ in boolean context always true [{file}:{line},{col}]",self.start);return make_sequence(self,[self.right,make_node(AST_True,self)]).optimize(compressor)}if(rr&&typeof rr=="string"){compressor.warn("+ in boolean context always true [{file}:{line},{col}]",self.start);return make_sequence(self,[self.left,make_node(AST_True,self)]).optimize(compressor)}}if(compressor.option("comparisons")&&self.is_boolean()){if(!(compressor.parent()instanceof AST_Binary)||compressor.parent()instanceof AST_Assign){var negated=make_node(AST_UnaryPrefix,self,{operator:"!",expression:self.negate(compressor,first_in_statement(compressor))});self=best_of(compressor,self,negated)}if(compressor.option("unsafe_comps")){switch(self.operator){case"<":reverse(">");break;case"<=":reverse(">=");break}}}if(self.operator=="+"){if(self.right instanceof AST_String&&self.right.getValue()==""&&self.left.is_string(compressor)){return self.left}if(self.left instanceof AST_String&&self.left.getValue()==""&&self.right.is_string(compressor)){return self.right}if(self.left instanceof AST_Binary&&self.left.operator=="+"&&self.left.left instanceof AST_String&&self.left.left.getValue()==""&&self.right.is_string(compressor)){self.left=self.left.right;return self.transform(compressor)}}if(compressor.option("evaluate")){switch(self.operator){case"&&":var ll=self.left.evaluate(compressor);if(!ll){compressor.warn("Condition left of && always false [{file}:{line},{col}]",self.start);return maintain_this_binding(compressor.parent(),self,self.left).optimize(compressor)}else if(ll!==self.left){compressor.warn("Condition left of && always true [{file}:{line},{col}]",self.start);return maintain_this_binding(compressor.parent(),self,self.right).optimize(compressor)}if(compressor.option("booleans")&&compressor.in_boolean_context()){var rr=self.right.evaluate(compressor);if(!rr){compressor.warn("Boolean && always false [{file}:{line},{col}]",self.start);return make_sequence(self,[self.left,make_node(AST_False,self)]).optimize(compressor)}else if(rr!==self.right){compressor.warn("Dropping side-effect-free && in boolean context [{file}:{line},{col}]",self.start);return self.left.optimize(compressor)}}break;case"||":var ll=self.left.evaluate(compressor);if(!ll){compressor.warn("Condition left of || always false [{file}:{line},{col}]",self.start);return maintain_this_binding(compressor.parent(),self,self.right).optimize(compressor)}else if(ll!==self.left){compressor.warn("Condition left of || always true [{file}:{line},{col}]",self.start);return maintain_this_binding(compressor.parent(),self,self.left).optimize(compressor)}if(compressor.option("booleans")&&compressor.in_boolean_context()){var rr=self.right.evaluate(compressor);if(!rr){compressor.warn("Dropping side-effect-free || in boolean context [{file}:{line},{col}]",self.start);return self.left.optimize(compressor)}else if(rr!==self.right){compressor.warn("Boolean || always true [{file}:{line},{col}]",self.start);return make_sequence(self,[self.left,make_node(AST_True,self)]).optimize(compressor)}}break}var associative=true;switch(self.operator){case"+":if(self.left instanceof AST_Constant&&self.right instanceof AST_Binary&&self.right.operator=="+"&&self.right.left instanceof AST_Constant&&self.right.is_string(compressor)){self=make_node(AST_Binary,self,{operator:"+",left:make_node(AST_String,self.left,{value:""+self.left.getValue()+self.right.left.getValue(),start:self.left.start,end:self.right.left.end}),right:self.right.right})}if(self.right instanceof AST_Constant&&self.left instanceof AST_Binary&&self.left.operator=="+"&&self.left.right instanceof AST_Constant&&self.left.is_string(compressor)){self=make_node(AST_Binary,self,{operator:"+",left:self.left.left,right:make_node(AST_String,self.right,{value:""+self.left.right.getValue()+self.right.getValue(),start:self.left.right.start,end:self.right.end})})}if(self.left instanceof AST_Binary&&self.left.operator=="+"&&self.left.is_string(compressor)&&self.left.right instanceof AST_Constant&&self.right instanceof AST_Binary&&self.right.operator=="+"&&self.right.left instanceof AST_Constant&&self.right.is_string(compressor)){self=make_node(AST_Binary,self,{operator:"+",left:make_node(AST_Binary,self.left,{operator:"+",left:self.left.left,right:make_node(AST_String,self.left.right,{value:""+self.left.right.getValue()+self.right.left.getValue(),start:self.left.right.start,end:self.right.left.end})}),right:self.right.right})}if(self.right instanceof AST_UnaryPrefix&&self.right.operator=="-"&&self.left.is_number(compressor)){self=make_node(AST_Binary,self,{operator:"-",left:self.left,right:self.right.expression});break}if(self.left instanceof AST_UnaryPrefix&&self.left.operator=="-"&&reversible()&&self.right.is_number(compressor)){self=make_node(AST_Binary,self,{operator:"-",left:self.right,right:self.left.expression});break}case"*":associative=compressor.option("unsafe_math");case"&":case"|":case"^":if(self.left.is_number(compressor)&&self.right.is_number(compressor)&&reversible()&&!(self.left instanceof AST_Binary&&self.left.operator!=self.operator&&PRECEDENCE[self.left.operator]>=PRECEDENCE[self.operator])){var reversed=make_node(AST_Binary,self,{operator:self.operator,left:self.right,right:self.left});if(self.right instanceof AST_Constant&&!(self.left instanceof AST_Constant)){self=best_of(compressor,reversed,self)}else{self=best_of(compressor,self,reversed)}}if(associative&&self.is_number(compressor)){if(self.right instanceof AST_Binary&&self.right.operator==self.operator){self=make_node(AST_Binary,self,{operator:self.operator,left:make_node(AST_Binary,self.left,{operator:self.operator,left:self.left,right:self.right.left,start:self.left.start,end:self.right.left.end}),right:self.right.right})}if(self.right instanceof AST_Constant&&self.left instanceof AST_Binary&&self.left.operator==self.operator){if(self.left.left instanceof AST_Constant){self=make_node(AST_Binary,self,{operator:self.operator,left:make_node(AST_Binary,self.left,{operator:self.operator,left:self.left.left,right:self.right,start:self.left.left.start,end:self.right.end}),right:self.left.right})}else if(self.left.right instanceof AST_Constant){self=make_node(AST_Binary,self,{operator:self.operator,left:make_node(AST_Binary,self.left,{operator:self.operator,left:self.left.right,right:self.right,start:self.left.right.start,end:self.right.end}),right:self.left.left})}}if(self.left instanceof AST_Binary&&self.left.operator==self.operator&&self.left.right instanceof AST_Constant&&self.right instanceof AST_Binary&&self.right.operator==self.operator&&self.right.left instanceof AST_Constant){self=make_node(AST_Binary,self,{operator:self.operator,left:make_node(AST_Binary,self.left,{operator:self.operator,left:make_node(AST_Binary,self.left.left,{operator:self.operator,left:self.left.right,right:self.right.left,start:self.left.right.start,end:self.right.left.end}),right:self.left.left}),right:self.right.right})}}}}if(self.right instanceof AST_Binary&&self.right.operator==self.operator&&(self.operator=="&&"||self.operator=="||"||self.operator=="+"&&(self.right.left.is_string(compressor)||self.left.is_string(compressor)&&self.right.right.is_string(compressor)))){self.left=make_node(AST_Binary,self.left,{operator:self.operator,left:self.left,right:self.right.left});self.right=self.right.right;return self.transform(compressor)}var ev=self.evaluate(compressor);if(ev!==self){ev=make_node_from_constant(ev,self).optimize(compressor);return best_of(compressor,ev,self)}return self});OPT(AST_SymbolRef,function(self,compressor){var def=self.resolve_defines(compressor);if(def){return def.optimize(compressor)}if(!compressor.option("ie8")&&self.undeclared()&&(!self.scope.uses_with||!compressor.find_parent(AST_With))){switch(self.name){case"undefined":return make_node(AST_Undefined,self).optimize(compressor);case"NaN":return make_node(AST_NaN,self).optimize(compressor);case"Infinity":return make_node(AST_Infinity,self).optimize(compressor)}}if(compressor.option("evaluate")&&compressor.option("reduce_vars")&&is_lhs(self,compressor.parent())!==self){var d=self.definition();var fixed=self.fixed_value();if(fixed){if(d.should_replace===undefined){var init=fixed.evaluate(compressor);if(init!==fixed){init=make_node_from_constant(init,fixed);var value_length=init.optimize(compressor).print_to_string().length;var fn;if(has_symbol_ref(fixed)){fn=function(){var result=init.optimize(compressor);return result===init?result.clone(true):result}}else{value_length=Math.min(value_length,fixed.print_to_string().length);fn=function(){var result=best_of_expression(init.optimize(compressor),fixed);return result===init||result===fixed?result.clone(true):result}}var name_length=d.name.length;var overhead=0;if(compressor.option("unused")&&(!d.global||compressor.toplevel(d))){overhead=(name_length+2+value_length)/d.references.length}d.should_replace=value_length<=name_length+overhead?fn:false}else{d.should_replace=false}}if(d.should_replace){return d.should_replace()}}}return self;function has_symbol_ref(value){var found;value.walk(new TreeWalker(function(node){if(node instanceof AST_SymbolRef)found=true;if(found)return true}));return found}});function is_atomic(lhs,self){return lhs instanceof AST_SymbolRef||lhs.TYPE===self.TYPE}OPT(AST_Undefined,function(self,compressor){if(compressor.option("unsafe")){var undef=find_variable(compressor,"undefined");if(undef){var ref=make_node(AST_SymbolRef,self,{name:"undefined",scope:undef.scope,thedef:undef});ref.is_undefined=true;return ref}}var lhs=is_lhs(compressor.self(),compressor.parent());if(lhs&&is_atomic(lhs,self))return self;return make_node(AST_UnaryPrefix,self,{operator:"void",expression:make_node(AST_Number,self,{value:0})})});OPT(AST_Infinity,function(self,compressor){var lhs=is_lhs(compressor.self(),compressor.parent());if(lhs&&is_atomic(lhs,self))return self;if(compressor.option("keep_infinity")&&!(lhs&&!is_atomic(lhs,self))&&!find_variable(compressor,"Infinity"))return self;return make_node(AST_Binary,self,{operator:"/",left:make_node(AST_Number,self,{value:1}),right:make_node(AST_Number,self,{value:0})})});OPT(AST_NaN,function(self,compressor){var lhs=is_lhs(compressor.self(),compressor.parent());if(lhs&&!is_atomic(lhs,self)||find_variable(compressor,"NaN")){return make_node(AST_Binary,self,{operator:"/",left:make_node(AST_Number,self,{value:0}),right:make_node(AST_Number,self,{value:0})})}return self});var ASSIGN_OPS=["+","-","/","*","%",">>","<<",">>>","|","^","&"];var ASSIGN_OPS_COMMUTATIVE=["*","|","^","&"];OPT(AST_Assign,function(self,compressor){self=self.lift_sequences(compressor);if(self.operator=="="&&self.left instanceof AST_SymbolRef&&self.right instanceof AST_Binary){if(self.right.left instanceof AST_SymbolRef&&self.right.left.name==self.left.name&&member(self.right.operator,ASSIGN_OPS)){self.operator=self.right.operator+"=";self.right=self.right.right}else if(self.right.right instanceof AST_SymbolRef&&self.right.right.name==self.left.name&&member(self.right.operator,ASSIGN_OPS_COMMUTATIVE)&&!self.right.left.has_side_effects(compressor)){self.operator=self.right.operator+"=";self.right=self.right.left}}return self});OPT(AST_Conditional,function(self,compressor){if(!compressor.option("conditionals"))return self;if(self.condition instanceof AST_Sequence){var expressions=self.condition.expressions.slice();self.condition=expressions.pop();expressions.push(self);return make_sequence(self,expressions)}var cond=self.condition.evaluate(compressor);if(cond!==self.condition){if(cond){compressor.warn("Condition always true [{file}:{line},{col}]",self.start);return maintain_this_binding(compressor.parent(),self,self.consequent)}else{compressor.warn("Condition always false [{file}:{line},{col}]",self.start);return maintain_this_binding(compressor.parent(),self,self.alternative)}}var negated=cond.negate(compressor,first_in_statement(compressor));if(best_of(compressor,cond,negated)===negated){self=make_node(AST_Conditional,self,{condition:negated,consequent:self.alternative,alternative:self.consequent})}var condition=self.condition;var consequent=self.consequent;var alternative=self.alternative;if(condition instanceof AST_SymbolRef&&consequent instanceof AST_SymbolRef&&condition.definition()===consequent.definition()){return make_node(AST_Binary,self,{operator:"||",left:condition,right:alternative})}if(consequent instanceof AST_Assign&&alternative instanceof AST_Assign&&consequent.operator==alternative.operator&&consequent.left.equivalent_to(alternative.left)&&(!self.condition.has_side_effects(compressor)||consequent.operator=="="&&!consequent.left.has_side_effects(compressor))){return make_node(AST_Assign,self,{operator:consequent.operator,left:consequent.left,right:make_node(AST_Conditional,self,{condition:self.condition,consequent:consequent.right,alternative:alternative.right})})}if(consequent instanceof AST_Call&&alternative.TYPE===consequent.TYPE&&consequent.args.length==1&&alternative.args.length==1&&consequent.expression.equivalent_to(alternative.expression)&&!consequent.expression.has_side_effects(compressor)){consequent.args[0]=make_node(AST_Conditional,self,{condition:self.condition,consequent:consequent.args[0],alternative:alternative.args[0]});return consequent}if(consequent instanceof AST_Conditional&&consequent.alternative.equivalent_to(alternative)){return make_node(AST_Conditional,self,{condition:make_node(AST_Binary,self,{left:self.condition,operator:"&&",right:consequent.condition}),consequent:consequent.consequent,alternative:alternative})}if(consequent.equivalent_to(alternative)){return make_sequence(self,[self.condition,consequent]).optimize(compressor)}if(is_true(self.consequent)){if(is_false(self.alternative)){return booleanize(self.condition)}return make_node(AST_Binary,self,{operator:"||",left:booleanize(self.condition),right:self.alternative})}if(is_false(self.consequent)){if(is_true(self.alternative)){return booleanize(self.condition.negate(compressor))}return make_node(AST_Binary,self,{operator:"&&",left:booleanize(self.condition.negate(compressor)),right:self.alternative})}if(is_true(self.alternative)){return make_node(AST_Binary,self,{operator:"||",left:booleanize(self.condition.negate(compressor)),right:self.consequent})}if(is_false(self.alternative)){return make_node(AST_Binary,self,{operator:"&&",left:booleanize(self.condition),right:self.consequent})}return self;function booleanize(node){if(node.is_boolean())return node;return make_node(AST_UnaryPrefix,node,{operator:"!",expression:node.negate(compressor)})}function is_true(node){return node instanceof AST_True||node instanceof AST_UnaryPrefix&&node.operator=="!"&&node.expression instanceof AST_Constant&&!node.expression.value}function is_false(node){return node instanceof AST_False||node instanceof AST_UnaryPrefix&&node.operator=="!"&&node.expression instanceof AST_Constant&&!!node.expression.value}});OPT(AST_Boolean,function(self,compressor){if(compressor.option("booleans")){var p=compressor.parent();if(p instanceof AST_Binary&&(p.operator=="=="||p.operator=="!=")){compressor.warn("Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]",{operator:p.operator,value:self.value,file:p.start.file,line:p.start.line,col:p.start.col});return make_node(AST_Number,self,{value:+self.value})}return make_node(AST_UnaryPrefix,self,{operator:"!",expression:make_node(AST_Number,self,{value:1-self.value})})}return self});OPT(AST_Sub,function(self,compressor){var prop=self.property;if(prop instanceof AST_String&&compressor.option("properties")){prop=prop.getValue();if(RESERVED_WORDS(prop)?!compressor.option("ie8"):is_identifier_string(prop)){return make_node(AST_Dot,self,{expression:self.expression,property:prop}).optimize(compressor)}var v=parseFloat(prop);if(!isNaN(v)&&v.toString()==prop){self.property=make_node(AST_Number,self.property,{value:v})}}var ev=self.evaluate(compressor);if(ev!==self){ev=make_node_from_constant(ev,self).optimize(compressor);return best_of(compressor,ev,self)}return self});OPT(AST_Dot,function(self,compressor){var def=self.resolve_defines(compressor);if(def){return def.optimize(compressor)}var prop=self.property;if(RESERVED_WORDS(prop)&&compressor.option("ie8")){return make_node(AST_Sub,self,{expression:self.expression,property:make_node(AST_String,self,{value:prop})}).optimize(compressor)}if(compressor.option("unsafe_proto")&&self.expression instanceof AST_Dot&&self.expression.property=="prototype"){var exp=self.expression.expression;if(exp instanceof AST_SymbolRef&&exp.undeclared())switch(exp.name){case"Array":self.expression=make_node(AST_Array,self.expression,{elements:[]});break;case"Object":self.expression=make_node(AST_Object,self.expression,{properties:[]});break;case"String":self.expression=make_node(AST_String,self.expression,{value:""});break}}var ev=self.evaluate(compressor);if(ev!==self){ev=make_node_from_constant(ev,self).optimize(compressor);return best_of(compressor,ev,self)}return self});function literals_in_boolean_context(self,compressor){if(compressor.option("booleans")&&compressor.in_boolean_context()){return best_of(compressor,self,make_sequence(self,[self,make_node(AST_True,self)]).optimize(compressor))}return self}OPT(AST_Array,literals_in_boolean_context);OPT(AST_Object,literals_in_boolean_context);OPT(AST_RegExp,literals_in_boolean_context);OPT(AST_Return,function(self,compressor){if(self.value&&is_undefined(self.value,compressor)){self.value=null}return self});OPT(AST_VarDef,function(self,compressor){var defines=compressor.option("global_defs");if(defines&&HOP(defines,self.name.name)){compressor.warn("global_defs "+self.name.name+" redefined [{file}:{line},{col}]",self.start)}return self})})();"use strict";function SourceMap(options){options=defaults(options,{file:null,root:null,orig:null,orig_line_diff:0,dest_line_diff:0});var generator=new MOZ_SourceMap.SourceMapGenerator({file:options.file,sourceRoot:options.root});var orig_map=options.orig&&new MOZ_SourceMap.SourceMapConsumer(options.orig);if(orig_map&&Array.isArray(options.orig.sources)){orig_map._sources.toArray().forEach(function(source){var sourceContent=orig_map.sourceContentFor(source,true);if(sourceContent){generator.setSourceContent(source,sourceContent)}})}function add(source,gen_line,gen_col,orig_line,orig_col,name){if(orig_map){var info=orig_map.originalPositionFor({line:orig_line,column:orig_col});if(info.source===null){return}source=info.source;orig_line=info.line;orig_col=info.column;name=info.name||name}generator.addMapping({generated:{line:gen_line+options.dest_line_diff,column:gen_col},original:{line:orig_line+options.orig_line_diff,column:orig_col},source:source,name:name})}return{add:add,get:function(){return generator},toString:function(){return JSON.stringify(generator.toJSON())}}}"use strict";(function(){var normalize_directives=function(body){var in_directive=true;for(var i=0;i<body.length;i++){if(in_directive&&body[i]instanceof AST_Statement&&body[i].body instanceof AST_String){body[i]=new AST_Directive({start:body[i].start,end:body[i].end,value:body[i].body.value})}else if(in_directive&&!(body[i]instanceof AST_Statement&&body[i].body instanceof AST_String)){in_directive=false}}return body};var MOZ_TO_ME={Program:function(M){return new AST_Toplevel({start:my_start_token(M),end:my_end_token(M),body:normalize_directives(M.body.map(from_moz))})},FunctionDeclaration:function(M){return new AST_Defun({start:my_start_token(M),end:my_end_token(M),name:from_moz(M.id),argnames:M.params.map(from_moz),body:normalize_directives(from_moz(M.body).body)})},FunctionExpression:function(M){return new AST_Function({start:my_start_token(M),end:my_end_token(M),name:from_moz(M.id),argnames:M.params.map(from_moz),body:normalize_directives(from_moz(M.body).body)})},ExpressionStatement:function(M){return new AST_SimpleStatement({start:my_start_token(M),end:my_end_token(M),body:from_moz(M.expression)})},TryStatement:function(M){var handlers=M.handlers||[M.handler];if(handlers.length>1||M.guardedHandlers&&M.guardedHandlers.length){throw new Error("Multiple catch clauses are not supported.")}return new AST_Try({start:my_start_token(M),end:my_end_token(M),body:from_moz(M.block).body,bcatch:from_moz(handlers[0]),bfinally:M.finalizer?new AST_Finally(from_moz(M.finalizer)):null})},Property:function(M){var key=M.key;var args={start:my_start_token(key),end:my_end_token(M.value),key:key.type=="Identifier"?key.name:key.value,value:from_moz(M.value)};if(M.kind=="init")return new AST_ObjectKeyVal(args);args.key=new AST_SymbolAccessor({name:args.key});args.value=new AST_Accessor(args.value);if(M.kind=="get")return new AST_ObjectGetter(args);if(M.kind=="set")return new AST_ObjectSetter(args)},ArrayExpression:function(M){return new AST_Array({start:my_start_token(M),end:my_end_token(M),elements:M.elements.map(function(elem){return elem===null?new AST_Hole:from_moz(elem)})})},ObjectExpression:function(M){return new AST_Object({start:my_start_token(M),end:my_end_token(M),properties:M.properties.map(function(prop){prop.type="Property";return from_moz(prop)})})},SequenceExpression:function(M){return new AST_Sequence({start:my_start_token(M),end:my_end_token(M),expressions:M.expressions.map(from_moz)})},MemberExpression:function(M){return new(M.computed?AST_Sub:AST_Dot)({start:my_start_token(M),end:my_end_token(M),property:M.computed?from_moz(M.property):M.property.name,expression:from_moz(M.object)})},SwitchCase:function(M){return new(M.test?AST_Case:AST_Default)({start:my_start_token(M),end:my_end_token(M),expression:from_moz(M.test),body:M.consequent.map(from_moz)})},VariableDeclaration:function(M){return new AST_Var({start:my_start_token(M),end:my_end_token(M),definitions:M.declarations.map(from_moz)})},Literal:function(M){var val=M.value,args={start:my_start_token(M),end:my_end_token(M)};if(val===null)return new AST_Null(args);switch(typeof val){case"string":args.value=val;return new AST_String(args);case"number":args.value=val;return new AST_Number(args);case"boolean":return new(val?AST_True:AST_False)(args);default:var rx=M.regex;if(rx&&rx.pattern){args.value=new RegExp(rx.pattern,rx.flags).toString()}else{args.value=M.regex&&M.raw?M.raw:val}return new AST_RegExp(args)}},Identifier:function(M){var p=FROM_MOZ_STACK[FROM_MOZ_STACK.length-2];return new(p.type=="LabeledStatement"?AST_Label:p.type=="VariableDeclarator"&&p.id===M?AST_SymbolVar:p.type=="FunctionExpression"?p.id===M?AST_SymbolLambda:AST_SymbolFunarg:p.type=="FunctionDeclaration"?p.id===M?AST_SymbolDefun:AST_SymbolFunarg:p.type=="CatchClause"?AST_SymbolCatch:p.type=="BreakStatement"||p.type=="ContinueStatement"?AST_LabelRef:AST_SymbolRef)({start:my_start_token(M),end:my_end_token(M),name:M.name})}};MOZ_TO_ME.UpdateExpression=MOZ_TO_ME.UnaryExpression=function To_Moz_Unary(M){var prefix="prefix"in M?M.prefix:M.type=="UnaryExpression"?true:false;return new(prefix?AST_UnaryPrefix:AST_UnaryPostfix)({start:my_start_token(M),end:my_end_token(M),operator:M.operator,expression:from_moz(M.argument)})};map("EmptyStatement",AST_EmptyStatement);map("BlockStatement",AST_BlockStatement,"body@body");map("IfStatement",AST_If,"test>condition, consequent>body, alternate>alternative");map("LabeledStatement",AST_LabeledStatement,"label>label, body>body");map("BreakStatement",AST_Break,"label>label");map("ContinueStatement",AST_Continue,"label>label");map("WithStatement",AST_With,"object>expression, body>body");map("SwitchStatement",AST_Switch,"discriminant>expression, cases@body");map("ReturnStatement",AST_Return,"argument>value");map("ThrowStatement",AST_Throw,"argument>value");map("WhileStatement",AST_While,"test>condition, body>body");map("DoWhileStatement",AST_Do,"test>condition, body>body");map("ForStatement",AST_For,"init>init, test>condition, update>step, body>body");map("ForInStatement",AST_ForIn,"left>init, right>object, body>body");map("DebuggerStatement",AST_Debugger);map("VariableDeclarator",AST_VarDef,"id>name, init>value");map("CatchClause",AST_Catch,"param>argname, body%body");map("ThisExpression",AST_This);map("BinaryExpression",AST_Binary,"operator=operator, left>left, right>right");map("LogicalExpression",AST_Binary,"operator=operator, left>left, right>right");map("AssignmentExpression",AST_Assign,"operator=operator, left>left, right>right");map("ConditionalExpression",AST_Conditional,"test>condition, consequent>consequent, alternate>alternative");map("NewExpression",AST_New,"callee>expression, arguments@args");map("CallExpression",AST_Call,"callee>expression, arguments@args");def_to_moz(AST_Toplevel,function To_Moz_Program(M){return to_moz_scope("Program",M)});def_to_moz(AST_Defun,function To_Moz_FunctionDeclaration(M){return{type:"FunctionDeclaration",id:to_moz(M.name),params:M.argnames.map(to_moz),body:to_moz_scope("BlockStatement",M)}});def_to_moz(AST_Function,function To_Moz_FunctionExpression(M){return{type:"FunctionExpression",id:to_moz(M.name),params:M.argnames.map(to_moz),body:to_moz_scope("BlockStatement",M)}});def_to_moz(AST_Directive,function To_Moz_Directive(M){return{type:"ExpressionStatement",expression:{type:"Literal",value:M.value}}});def_to_moz(AST_SimpleStatement,function To_Moz_ExpressionStatement(M){return{type:"ExpressionStatement",expression:to_moz(M.body)}});def_to_moz(AST_SwitchBranch,function To_Moz_SwitchCase(M){return{type:"SwitchCase",test:to_moz(M.expression),consequent:M.body.map(to_moz)}});def_to_moz(AST_Try,function To_Moz_TryStatement(M){return{type:"TryStatement",block:to_moz_block(M),handler:to_moz(M.bcatch),guardedHandlers:[],finalizer:to_moz(M.bfinally)}});def_to_moz(AST_Catch,function To_Moz_CatchClause(M){return{type:"CatchClause",param:to_moz(M.argname),guard:null,body:to_moz_block(M)}});def_to_moz(AST_Definitions,function To_Moz_VariableDeclaration(M){return{type:"VariableDeclaration",kind:"var",declarations:M.definitions.map(to_moz)}});def_to_moz(AST_Sequence,function To_Moz_SequenceExpression(M){return{type:"SequenceExpression",expressions:M.expressions.map(to_moz)}});def_to_moz(AST_PropAccess,function To_Moz_MemberExpression(M){var isComputed=M instanceof AST_Sub;return{type:"MemberExpression",object:to_moz(M.expression),computed:isComputed,property:isComputed?to_moz(M.property):{type:"Identifier",name:M.property}}});def_to_moz(AST_Unary,function To_Moz_Unary(M){return{type:M.operator=="++"||M.operator=="--"?"UpdateExpression":"UnaryExpression",operator:M.operator,prefix:M instanceof AST_UnaryPrefix,argument:to_moz(M.expression)}});def_to_moz(AST_Binary,function To_Moz_BinaryExpression(M){return{type:M.operator=="&&"||M.operator=="||"?"LogicalExpression":"BinaryExpression",left:to_moz(M.left),operator:M.operator,right:to_moz(M.right)}});def_to_moz(AST_Array,function To_Moz_ArrayExpression(M){return{type:"ArrayExpression",elements:M.elements.map(to_moz)}});def_to_moz(AST_Object,function To_Moz_ObjectExpression(M){return{type:"ObjectExpression",properties:M.properties.map(to_moz)}});def_to_moz(AST_ObjectProperty,function To_Moz_Property(M){var key={type:"Literal",value:M.key instanceof AST_SymbolAccessor?M.key.name:M.key};var kind;if(M instanceof AST_ObjectKeyVal){kind="init"}else if(M instanceof AST_ObjectGetter){kind="get"}else if(M instanceof AST_ObjectSetter){kind="set"}return{type:"Property",kind:kind,key:key,value:to_moz(M.value)}});def_to_moz(AST_Symbol,function To_Moz_Identifier(M){var def=M.definition();return{type:"Identifier",name:def?def.mangled_name||def.name:M.name}});def_to_moz(AST_RegExp,function To_Moz_RegExpLiteral(M){var value=M.value;return{type:"Literal",value:value,raw:value.toString(),regex:{pattern:value.source,flags:value.toString().match(/[gimuy]*$/)[0]}}});def_to_moz(AST_Constant,function To_Moz_Literal(M){var value=M.value;if(typeof value==="number"&&(value<0||value===0&&1/value<0)){return{type:"UnaryExpression",operator:"-",prefix:true,argument:{type:"Literal",value:-value,raw:M.start.raw}}}return{type:"Literal",value:value,raw:M.start.raw}});def_to_moz(AST_Atom,function To_Moz_Atom(M){return{type:"Identifier",name:String(M.value)}});AST_Boolean.DEFMETHOD("to_mozilla_ast",AST_Constant.prototype.to_mozilla_ast);AST_Null.DEFMETHOD("to_mozilla_ast",AST_Constant.prototype.to_mozilla_ast);AST_Hole.DEFMETHOD("to_mozilla_ast",function To_Moz_ArrayHole(){return null});AST_Block.DEFMETHOD("to_mozilla_ast",AST_BlockStatement.prototype.to_mozilla_ast);AST_Lambda.DEFMETHOD("to_mozilla_ast",AST_Function.prototype.to_mozilla_ast);function raw_token(moznode){if(moznode.type=="Literal"){return moznode.raw!=null?moznode.raw:moznode.value+""}}function my_start_token(moznode){var loc=moznode.loc,start=loc&&loc.start;var range=moznode.range;return new AST_Token({file:loc&&loc.source,line:start&&start.line,col:start&&start.column,pos:range?range[0]:moznode.start,endline:start&&start.line,endcol:start&&start.column,endpos:range?range[0]:moznode.start,raw:raw_token(moznode)})}function my_end_token(moznode){var loc=moznode.loc,end=loc&&loc.end;var range=moznode.range;return new AST_Token({file:loc&&loc.source,line:end&&end.line,col:end&&end.column,pos:range?range[1]:moznode.end,endline:end&&end.line,endcol:end&&end.column,endpos:range?range[1]:moznode.end,raw:raw_token(moznode)})}function map(moztype,mytype,propmap){var moz_to_me="function From_Moz_"+moztype+"(M){\n";moz_to_me+="return new U2."+mytype.name+"({\n"+"start: my_start_token(M),\n"+"end: my_end_token(M)";var me_to_moz="function To_Moz_"+moztype+"(M){\n";me_to_moz+="return {\n"+"type: "+JSON.stringify(moztype);if(propmap)propmap.split(/\s*,\s*/).forEach(function(prop){var m=/([a-z0-9$_]+)(=|@|>|%)([a-z0-9$_]+)/i.exec(prop);if(!m)throw new Error("Can't understand property map: "+prop);var moz=m[1],how=m[2],my=m[3];moz_to_me+=",\n"+my+": ";me_to_moz+=",\n"+moz+": ";switch(how){case"@":moz_to_me+="M."+moz+".map(from_moz)";me_to_moz+="M."+my+".map(to_moz)";break;case">":moz_to_me+="from_moz(M."+moz+")";me_to_moz+="to_moz(M."+my+")";break;case"=":moz_to_me+="M."+moz;me_to_moz+="M."+my;break;case"%":moz_to_me+="from_moz(M."+moz+").body";me_to_moz+="to_moz_block(M)";break;default:throw new Error("Can't understand operator in propmap: "+prop)}});moz_to_me+="\n})\n}";me_to_moz+="\n}\n}";moz_to_me=new Function("U2","my_start_token","my_end_token","from_moz","return("+moz_to_me+")")(exports,my_start_token,my_end_token,from_moz);me_to_moz=new Function("to_moz","to_moz_block","to_moz_scope","return("+me_to_moz+")")(to_moz,to_moz_block,to_moz_scope);MOZ_TO_ME[moztype]=moz_to_me;def_to_moz(mytype,me_to_moz)}var FROM_MOZ_STACK=null;function from_moz(node){FROM_MOZ_STACK.push(node);var ret=node!=null?MOZ_TO_ME[node.type](node):null;FROM_MOZ_STACK.pop();return ret}AST_Node.from_mozilla_ast=function(node){var save_stack=FROM_MOZ_STACK;FROM_MOZ_STACK=[];var ast=from_moz(node);FROM_MOZ_STACK=save_stack;return ast};function set_moz_loc(mynode,moznode,myparent){var start=mynode.start;var end=mynode.end;if(start.pos!=null&&end.endpos!=null){moznode.range=[start.pos,end.endpos]}if(start.line){moznode.loc={start:{line:start.line,column:start.col},end:end.endline?{line:end.endline,column:end.endcol}:null};if(start.file){moznode.loc.source=start.file}}return moznode}function def_to_moz(mytype,handler){mytype.DEFMETHOD("to_mozilla_ast",function(){return set_moz_loc(this,handler(this))})}function to_moz(node){return node!=null?node.to_mozilla_ast():null}function to_moz_block(node){return{type:"BlockStatement",body:node.body.map(to_moz)}}function to_moz_scope(type,node){var body=node.body.map(to_moz);if(node.body[0]instanceof AST_SimpleStatement&&node.body[0].body instanceof AST_String){body.unshift(to_moz(new AST_EmptyStatement(node.body[0])))}return{type:type,body:body}}})();"use strict";function find_builtins(reserved){["null","true","false","Infinity","-Infinity","undefined"].forEach(add);[Object,Array,Function,Number,String,Boolean,Error,Math,Date,RegExp].forEach(function(ctor){Object.getOwnPropertyNames(ctor).map(add);if(ctor.prototype){Object.getOwnPropertyNames(ctor.prototype).map(add)}});function add(name){push_uniq(reserved,name)}}function mangle_properties(ast,options){options=defaults(options,{builtins:false,cache:null,debug:false,keep_quoted:false,only_cache:false,regex:null,reserved:null});var reserved=options.reserved||[];if(!options.builtins)find_builtins(reserved);var cache=options.cache;if(cache==null){cache={cname:-1,props:new Dictionary}}var regex=options.regex;var keep_quoted=options.keep_quoted;var debug=options.debug!==false;var debug_name_suffix;if(debug){debug_name_suffix=options.debug===true?"":options.debug}var names_to_mangle=[];var unmangleable=[];var to_keep={};ast.walk(new TreeWalker(function(node){if(node instanceof AST_ObjectKeyVal){add(node.key,keep_quoted&&node.quote)}else if(node instanceof AST_ObjectProperty){add(node.key.name)}else if(node instanceof AST_Dot){add(node.property)}else if(node instanceof AST_Sub){addStrings(node.property,keep_quoted)}}));return ast.transform(new TreeTransformer(function(node){if(node instanceof AST_ObjectKeyVal){if(!(keep_quoted&&node.quote))node.key=mangle(node.key)}else if(node instanceof AST_ObjectProperty){node.key.name=mangle(node.key.name)}else if(node instanceof AST_Dot){node.property=mangle(node.property)}else if(node instanceof AST_Sub){if(!keep_quoted)node.property=mangleStrings(node.property)}}));function can_mangle(name){if(unmangleable.indexOf(name)>=0)return false;if(reserved.indexOf(name)>=0)return false;if(options.only_cache){return cache.props.has(name)}if(/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(name))return false;return true}function should_mangle(name){if(keep_quoted&&name in to_keep)return false;if(regex&&!regex.test(name))return false;if(reserved.indexOf(name)>=0)return false;return cache.props.has(name)||names_to_mangle.indexOf(name)>=0}function add(name,keep){if(keep){to_keep[name]=true;return}if(can_mangle(name))push_uniq(names_to_mangle,name);if(!should_mangle(name)){push_uniq(unmangleable,name)}}function mangle(name){if(!should_mangle(name)){return name}var mangled=cache.props.get(name);if(!mangled){if(debug){var debug_mangled="_$"+name+"$"+debug_name_suffix+"_";if(can_mangle(debug_mangled)&&!(keep_quoted&&debug_mangled in to_keep)){mangled=debug_mangled}}if(!mangled){do{mangled=base54(++cache.cname)}while(!can_mangle(mangled)||keep_quoted&&mangled in to_keep)}cache.props.set(name,mangled)}return mangled}function addStrings(node,keep){var out={};try{(function walk(node){node.walk(new TreeWalker(function(node){if(node instanceof AST_Sequence){walk(node.expressions[node.expressions.length-1]);return true}if(node instanceof AST_String){add(node.value,keep);return true}if(node instanceof AST_Conditional){walk(node.consequent);walk(node.alternative);return true}throw out}))})(node)}catch(ex){if(ex!==out)throw ex}}function mangleStrings(node){return node.transform(new TreeTransformer(function(node){if(node instanceof AST_Sequence){var last=node.expressions.length-1;node.expressions[last]=mangleStrings(node.expressions[last])}else if(node instanceof AST_String){node.value=mangle(node.value)}else if(node instanceof AST_Conditional){node.consequent=mangleStrings(node.consequent);node.alternative=mangleStrings(node.alternative)}return node}))}}"use strict";var to_ascii=typeof atob=="undefined"?function(b64){return new Buffer(b64,"base64").toString()}:atob;var to_base64=typeof btoa=="undefined"?function(str){return new Buffer(str).toString("base64")}:btoa;function read_source_map(code){var match=/\n\/\/# sourceMappingURL=data:application\/json(;.*?)?;base64,(.*)/.exec(code);if(!match){AST_Node.warn("inline source map not found");return null}return to_ascii(match[2])}function set_shorthand(name,options,keys){if(options[name]){keys.forEach(function(key){if(options[key]){if(typeof options[key]!="object")options[key]={};if(!(name in options[key]))options[key][name]=options[name]}})}}function minify(files,options){var warn_function=AST_Node.warn_function;try{if(typeof files=="string"){files=[files]}options=defaults(options,{compress:{},ie8:false,keep_fnames:false,mangle:{},output:{},parse:{},sourceMap:false,toplevel:false,warnings:false,wrap:false},true);set_shorthand("ie8",options,["compress","mangle","output"]);set_shorthand("keep_fnames",options,["compress","mangle"]);set_shorthand("toplevel",options,["compress","mangle"]);set_shorthand("warnings",options,["compress"]);if(options.mangle){options.mangle=defaults(options.mangle,{cache:null,eval:false,ie8:false,keep_fnames:false,properties:false,reserved:[],toplevel:false},true)}if(options.sourceMap){options.sourceMap=defaults(options.sourceMap,{content:null,filename:null,includeSources:false,root:null,url:null},true)}var warnings=[];if(options.warnings&&!AST_Node.warn_function){AST_Node.warn_function=function(warning){warnings.push(warning)}}var toplevel;if(files instanceof AST_Toplevel){toplevel=files}else{options.parse=options.parse||{};options.parse.toplevel=null;for(var name in files){options.parse.filename=name;options.parse.toplevel=parse(files[name],options.parse);if(options.sourceMap&&options.sourceMap.content=="inline"){if(Object.keys(files).length>1)throw new Error("inline source map only works with singular input");options.sourceMap.content=read_source_map(files[name])}}toplevel=options.parse.toplevel}if(options.wrap){toplevel=toplevel.wrap_commonjs(options.wrap)}if(options.compress){toplevel.figure_out_scope(options.mangle);toplevel=new Compressor(options.compress).compress(toplevel)}if(options.mangle){toplevel.figure_out_scope(options.mangle);base54.reset();toplevel.compute_char_frequency(options.mangle);toplevel.mangle_names(options.mangle);if(options.mangle.properties){toplevel=mangle_properties(toplevel,options.mangle.properties)}}var result={};if(options.output.ast){result.ast=toplevel}if(!HOP(options.output,"code")||options.output.code){if(options.sourceMap){if(typeof options.sourceMap.content=="string"){options.sourceMap.content=JSON.parse(options.sourceMap.content)}options.output.source_map=SourceMap({file:options.sourceMap.filename,orig:options.sourceMap.content,root:options.sourceMap.root});if(options.sourceMap.includeSources){for(var name in files){options.output.source_map.get().setSourceContent(name,files[name])}}}delete options.output.ast;delete options.output.code;var stream=OutputStream(options.output);toplevel.print(stream);result.code=stream.get();if(options.sourceMap){result.map=options.output.source_map.toString();if(options.sourceMap.url=="inline"){result.code+="\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,"+to_base64(result.map)}else if(options.sourceMap.url){result.code+="\n//# sourceMappingURL="+options.sourceMap.url}}}if(warnings.length){result.warnings=warnings}return result}catch(ex){return{error:ex}}finally{AST_Node.warn_function=warn_function}}exports["Dictionary"]=Dictionary;exports["TreeWalker"]=TreeWalker;exports["minify"]=minify;exports["_push_uniq"]=push_uniq})(typeof exports=="undefined"?exports={}:exports);
+}).call(this,require("buffer").Buffer)
+},{"buffer":5}]},{},["html-minifier"]);
index 4e134c9..1887e53 100644 (file)
@@ -1,22 +1,7 @@
 /*!
- * HTMLMinifier v3.4.4 (http://kangax.github.io/html-minifier/)
+ * HTMLMinifier v3.5.0 (http://kangax.github.io/html-minifier/)
  * Copyright 2010-2017 Juriy "kangax" Zaytsev
  * Licensed under the MIT license
  */
 
-require=function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){"use strict";function d(a){var b=a.length;if(b%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===a[b-2]?2:"="===a[b-1]?1:0}function e(a){return 3*a.length/4-d(a)}function f(a){var b,c,e,f,g,h,i=a.length;g=d(a),h=new l(3*i/4-g),e=g>0?i-4:i;var j=0;for(b=0,c=0;b<e;b+=4,c+=3)f=k[a.charCodeAt(b)]<<18|k[a.charCodeAt(b+1)]<<12|k[a.charCodeAt(b+2)]<<6|k[a.charCodeAt(b+3)],h[j++]=f>>16&255,h[j++]=f>>8&255,h[j++]=255&f;return 2===g?(f=k[a.charCodeAt(b)]<<2|k[a.charCodeAt(b+1)]>>4,h[j++]=255&f):1===g&&(f=k[a.charCodeAt(b)]<<10|k[a.charCodeAt(b+1)]<<4|k[a.charCodeAt(b+2)]>>2,h[j++]=f>>8&255,h[j++]=255&f),h}function g(a){return j[a>>18&63]+j[a>>12&63]+j[a>>6&63]+j[63&a]}function h(a,b,c){for(var d,e=[],f=b;f<c;f+=3)d=(a[f]<<16)+(a[f+1]<<8)+a[f+2],e.push(g(d));return e.join("")}function i(a){for(var b,c=a.length,d=c%3,e="",f=[],g=0,i=c-d;g<i;g+=16383)f.push(h(a,g,g+16383>i?i:g+16383));return 1===d?(b=a[c-1],e+=j[b>>2],e+=j[b<<4&63],e+="=="):2===d&&(b=(a[c-2]<<8)+a[c-1],e+=j[b>>10],e+=j[b>>4&63],e+=j[b<<2&63],e+="="),f.push(e),f.join("")}c.byteLength=e,c.toByteArray=f,c.fromByteArray=i;for(var j=[],k=[],l="undefined"!=typeof Uint8Array?Uint8Array:Array,m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n=0,o=m.length;n<o;++n)j[n]=m[n],k[m.charCodeAt(n)]=n;k["-".charCodeAt(0)]=62,k["_".charCodeAt(0)]=63},{}],2:[function(a,b,c){},{}],3:[function(a,b,c){arguments[4][2][0].apply(c,arguments)},{dup:2}],4:[function(a,b,c){(function(b){"use strict";var d=a("buffer"),e=d.Buffer,f=d.SlowBuffer,g=d.kMaxLength||2147483647;c.alloc=function(a,b,c){if("function"==typeof e.alloc)return e.alloc(a,b,c);if("number"==typeof c)throw new TypeError("encoding must not be number");if("number"!=typeof a)throw new TypeError("size must be a number");if(a>g)throw new RangeError("size is too large");var d=c,f=b;void 0===f&&(d=void 0,f=0);var h=new e(a);if("string"==typeof f)for(var i=new e(f,d),j=i.length,k=-1;++k<a;)h[k]=i[k%j];else h.fill(f);return h},c.allocUnsafe=function(a){if("function"==typeof e.allocUnsafe)return e.allocUnsafe(a);if("number"!=typeof a)throw new TypeError("size must be a number");if(a>g)throw new RangeError("size is too large");return new e(a)},c.from=function(a,c,d){if("function"==typeof e.from&&(!b.Uint8Array||Uint8Array.from!==e.from))return e.from(a,c,d);if("number"==typeof a)throw new TypeError('"value" argument must not be a number');if("string"==typeof a)return new e(a,c);if("undefined"!=typeof ArrayBuffer&&a instanceof ArrayBuffer){var f=c;if(1===arguments.length)return new e(a);void 0===f&&(f=0);var g=d;if(void 0===g&&(g=a.byteLength-f),f>=a.byteLength)throw new RangeError("'offset' is out of bounds");if(g>a.byteLength-f)throw new RangeError("'length' is out of bounds");return new e(a.slice(f,f+g))}if(e.isBuffer(a)){var h=new e(a.length);return a.copy(h,0,0,a.length),h}if(a){if(Array.isArray(a)||"undefined"!=typeof ArrayBuffer&&a.buffer instanceof ArrayBuffer||"length"in a)return new e(a);if("Buffer"===a.type&&Array.isArray(a.data))return new e(a.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")},c.allocUnsafeSlow=function(a){if("function"==typeof e.allocUnsafeSlow)return e.allocUnsafeSlow(a);if("number"!=typeof a)throw new TypeError("size must be a number");if(a>=g)throw new RangeError("size is too large");return new f(a)}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{buffer:5}],5:[function(a,b,c){(function(b){"use strict";function d(){return f.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function e(a,b){if(d()<b)throw new RangeError("Invalid typed array length");return f.TYPED_ARRAY_SUPPORT?(a=new Uint8Array(b),a.__proto__=f.prototype):(null===a&&(a=new f(b)),a.length=b),a}function f(a,b,c){if(!(f.TYPED_ARRAY_SUPPORT||this instanceof f))return new f(a,b,c);if("number"==typeof a){if("string"==typeof b)throw new Error("If encoding is specified then the first argument must be a string");return j(this,a)}return g(this,a,b,c)}function g(a,b,c,d){if("number"==typeof b)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&b instanceof ArrayBuffer?m(a,b,c,d):"string"==typeof b?k(a,b,c):n(a,b)}function h(a){if("number"!=typeof a)throw new TypeError('"size" argument must be a number');if(a<0)throw new RangeError('"size" argument must not be negative')}function i(a,b,c,d){return h(b),b<=0?e(a,b):void 0!==c?"string"==typeof d?e(a,b).fill(c,d):e(a,b).fill(c):e(a,b)}function j(a,b){if(h(b),a=e(a,b<0?0:0|o(b)),!f.TYPED_ARRAY_SUPPORT)for(var c=0;c<b;++c)a[c]=0;return a}function k(a,b,c){if("string"==typeof c&&""!==c||(c="utf8"),!f.isEncoding(c))throw new TypeError('"encoding" must be a valid string encoding');var d=0|q(b,c);a=e(a,d);var g=a.write(b,c);return g!==d&&(a=a.slice(0,g)),a}function l(a,b){var c=b.length<0?0:0|o(b.length);a=e(a,c);for(var d=0;d<c;d+=1)a[d]=255&b[d];return a}function m(a,b,c,d){if(b.byteLength,c<0||b.byteLength<c)throw new RangeError("'offset' is out of bounds");if(b.byteLength<c+(d||0))throw new RangeError("'length' is out of bounds");return b=void 0===c&&void 0===d?new Uint8Array(b):void 0===d?new Uint8Array(b,c):new Uint8Array(b,c,d),f.TYPED_ARRAY_SUPPORT?(a=b,a.__proto__=f.prototype):a=l(a,b),a}function n(a,b){if(f.isBuffer(b)){var c=0|o(b.length);return a=e(a,c),0===a.length?a:(b.copy(a,0,0,c),a)}if(b){if("undefined"!=typeof ArrayBuffer&&b.buffer instanceof ArrayBuffer||"length"in b)return"number"!=typeof b.length||X(b.length)?e(a,0):l(a,b);if("Buffer"===b.type&&$(b.data))return l(a,b.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function o(a){if(a>=d())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+d().toString(16)+" bytes");return 0|a}function p(a){return+a!=a&&(a=0),f.alloc(+a)}function q(a,b){if(f.isBuffer(a))return a.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(a)||a instanceof ArrayBuffer))return a.byteLength;"string"!=typeof a&&(a=""+a);var c=a.length;if(0===c)return 0;for(var d=!1;;)switch(b){case"ascii":case"latin1":case"binary":return c;case"utf8":case"utf-8":case void 0:return S(a).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*c;case"hex":return c>>>1;case"base64":return V(a).length;default:if(d)return S(a).length;b=(""+b).toLowerCase(),d=!0}}function r(a,b,c){var d=!1;if((void 0===b||b<0)&&(b=0),b>this.length)return"";if((void 0===c||c>this.length)&&(c=this.length),c<=0)return"";if(c>>>=0,b>>>=0,c<=b)return"";for(a||(a="utf8");;)switch(a){case"hex":return G(this,b,c);case"utf8":case"utf-8":return C(this,b,c);case"ascii":return E(this,b,c);case"latin1":case"binary":return F(this,b,c);case"base64":return B(this,b,c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return H(this,b,c);default:if(d)throw new TypeError("Unknown encoding: "+a);a=(a+"").toLowerCase(),d=!0}}function s(a,b,c){var d=a[b];a[b]=a[c],a[c]=d}function t(a,b,c,d,e){if(0===a.length)return-1;if("string"==typeof c?(d=c,c=0):c>2147483647?c=2147483647:c<-2147483648&&(c=-2147483648),c=+c,isNaN(c)&&(c=e?0:a.length-1),c<0&&(c=a.length+c),c>=a.length){if(e)return-1;c=a.length-1}else if(c<0){if(!e)return-1;c=0}if("string"==typeof b&&(b=f.from(b,d)),f.isBuffer(b))return 0===b.length?-1:u(a,b,c,d,e);if("number"==typeof b)return b&=255,f.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?e?Uint8Array.prototype.indexOf.call(a,b,c):Uint8Array.prototype.lastIndexOf.call(a,b,c):u(a,[b],c,d,e);throw new TypeError("val must be string, number or Buffer")}function u(a,b,c,d,e){function f(a,b){return 1===g?a[b]:a.readUInt16BE(b*g)}var g=1,h=a.length,i=b.length;if(void 0!==d&&("ucs2"===(d=String(d).toLowerCase())||"ucs-2"===d||"utf16le"===d||"utf-16le"===d)){if(a.length<2||b.length<2)return-1;g=2,h/=2,i/=2,c/=2}var j;if(e){var k=-1;for(j=c;j<h;j++)if(f(a,j)===f(b,-1===k?0:j-k)){if(-1===k&&(k=j),j-k+1===i)return k*g}else-1!==k&&(j-=j-k),k=-1}else for(c+i>h&&(c=h-i),j=c;j>=0;j--){for(var l=!0,m=0;m<i;m++)if(f(a,j+m)!==f(b,m)){l=!1;break}if(l)return j}return-1}function v(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d))>e&&(d=e):d=e;var f=b.length;if(f%2!=0)throw new TypeError("Invalid hex string");d>f/2&&(d=f/2);for(var g=0;g<d;++g){var h=parseInt(b.substr(2*g,2),16);if(isNaN(h))return g;a[c+g]=h}return g}function w(a,b,c,d){return W(S(b,a.length-c),a,c,d)}function x(a,b,c,d){return W(T(b),a,c,d)}function y(a,b,c,d){return x(a,b,c,d)}function z(a,b,c,d){return W(V(b),a,c,d)}function A(a,b,c,d){return W(U(b,a.length-c),a,c,d)}function B(a,b,c){return 0===b&&c===a.length?Y.fromByteArray(a):Y.fromByteArray(a.slice(b,c))}function C(a,b,c){c=Math.min(a.length,c);for(var d=[],e=b;e<c;){var f=a[e],g=null,h=f>239?4:f>223?3:f>191?2:1;if(e+h<=c){var i,j,k,l;switch(h){case 1:f<128&&(g=f);break;case 2:i=a[e+1],128==(192&i)&&(l=(31&f)<<6|63&i)>127&&(g=l);break;case 3:i=a[e+1],j=a[e+2],128==(192&i)&&128==(192&j)&&(l=(15&f)<<12|(63&i)<<6|63&j)>2047&&(l<55296||l>57343)&&(g=l);break;case 4:i=a[e+1],j=a[e+2],k=a[e+3],128==(192&i)&&128==(192&j)&&128==(192&k)&&(l=(15&f)<<18|(63&i)<<12|(63&j)<<6|63&k)>65535&&l<1114112&&(g=l)}}null===g?(g=65533,h=1):g>65535&&(g-=65536,d.push(g>>>10&1023|55296),g=56320|1023&g),d.push(g),e+=h}return D(d)}function D(a){var b=a.length;if(b<=_)return String.fromCharCode.apply(String,a);for(var c="",d=0;d<b;)c+=String.fromCharCode.apply(String,a.slice(d,d+=_));return c}function E(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;e<c;++e)d+=String.fromCharCode(127&a[e]);return d}function F(a,b,c){var d="";c=Math.min(a.length,c);for(var e=b;e<c;++e)d+=String.fromCharCode(a[e]);return d}function G(a,b,c){var d=a.length;(!b||b<0)&&(b=0),(!c||c<0||c>d)&&(c=d);for(var e="",f=b;f<c;++f)e+=R(a[f]);return e}function H(a,b,c){for(var d=a.slice(b,c),e="",f=0;f<d.length;f+=2)e+=String.fromCharCode(d[f]+256*d[f+1]);return e}function I(a,b,c){if(a%1!=0||a<0)throw new RangeError("offset is not uint");if(a+b>c)throw new RangeError("Trying to access beyond buffer length")}function J(a,b,c,d,e,g){if(!f.isBuffer(a))throw new TypeError('"buffer" argument must be a Buffer instance');if(b>e||b<g)throw new RangeError('"value" argument is out of bounds');if(c+d>a.length)throw new RangeError("Index out of range")}function K(a,b,c,d){b<0&&(b=65535+b+1);for(var e=0,f=Math.min(a.length-c,2);e<f;++e)a[c+e]=(b&255<<8*(d?e:1-e))>>>8*(d?e:1-e)}function L(a,b,c,d){b<0&&(b=4294967295+b+1);for(var e=0,f=Math.min(a.length-c,4);e<f;++e)a[c+e]=b>>>8*(d?e:3-e)&255}function M(a,b,c,d,e,f){if(c+d>a.length)throw new RangeError("Index out of range");if(c<0)throw new RangeError("Index out of range")}function N(a,b,c,d,e){return e||M(a,b,c,4,0xf.fffff(e+31),-0xf.fffff(e+31)),Z.write(a,b,c,d,23,4),c+4}function O(a,b,c,d,e){return e||M(a,b,c,8,1.7976931348623157e308,-1.7976931348623157e308),Z.write(a,b,c,d,52,8),c+8}function P(a){if(a=Q(a).replace(aa,""),a.length<2)return"";for(;a.length%4!=0;)a+="=";return a}function Q(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function R(a){return a<16?"0"+a.toString(16):a.toString(16)}function S(a,b){b=b||1/0;for(var c,d=a.length,e=null,f=[],g=0;g<d;++g){if((c=a.charCodeAt(g))>55295&&c<57344){if(!e){if(c>56319){(b-=3)>-1&&f.push(239,191,189);continue}if(g+1===d){(b-=3)>-1&&f.push(239,191,189);continue}e=c;continue}if(c<56320){(b-=3)>-1&&f.push(239,191,189),e=c;continue}c=65536+(e-55296<<10|c-56320)}else e&&(b-=3)>-1&&f.push(239,191,189);if(e=null,c<128){if((b-=1)<0)break;f.push(c)}else if(c<2048){if((b-=2)<0)break;f.push(c>>6|192,63&c|128)}else if(c<65536){if((b-=3)<0)break;f.push(c>>12|224,c>>6&63|128,63&c|128)}else{if(!(c<1114112))throw new Error("Invalid code point");if((b-=4)<0)break;f.push(c>>18|240,c>>12&63|128,c>>6&63|128,63&c|128)}}return f}function T(a){for(var b=[],c=0;c<a.length;++c)b.push(255&a.charCodeAt(c));return b}function U(a,b){for(var c,d,e,f=[],g=0;g<a.length&&!((b-=2)<0);++g)c=a.charCodeAt(g),d=c>>8,e=c%256,f.push(e),f.push(d);return f}function V(a){return Y.toByteArray(P(a))}function W(a,b,c,d){for(var e=0;e<d&&!(e+c>=b.length||e>=a.length);++e)b[e+c]=a[e];return e}function X(a){return a!==a}var Y=a("base64-js"),Z=a("ieee754"),$=a("isarray");c.Buffer=f,c.SlowBuffer=p,c.INSPECT_MAX_BYTES=50,f.TYPED_ARRAY_SUPPORT=void 0!==b.TYPED_ARRAY_SUPPORT?b.TYPED_ARRAY_SUPPORT:function(){try{var a=new Uint8Array(1);return a.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===a.foo()&&"function"==typeof a.subarray&&0===a.subarray(1,1).byteLength}catch(a){return!1}}(),c.kMaxLength=d(),f.poolSize=8192,f._augment=function(a){return a.__proto__=f.prototype,a},f.from=function(a,b,c){return g(null,a,b,c)},f.TYPED_ARRAY_SUPPORT&&(f.prototype.__proto__=Uint8Array.prototype,f.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&f[Symbol.species]===f&&Object.defineProperty(f,Symbol.species,{value:null,configurable:!0})),f.alloc=function(a,b,c){return i(null,a,b,c)},f.allocUnsafe=function(a){return j(null,a)},f.allocUnsafeSlow=function(a){return j(null,a)},f.isBuffer=function(a){return!(null==a||!a._isBuffer)},f.compare=function(a,b){if(!f.isBuffer(a)||!f.isBuffer(b))throw new TypeError("Arguments must be Buffers");if(a===b)return 0;for(var c=a.length,d=b.length,e=0,g=Math.min(c,d);e<g;++e)if(a[e]!==b[e]){c=a[e],d=b[e];break}return c<d?-1:d<c?1:0},f.isEncoding=function(a){switch(String(a).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},f.concat=function(a,b){if(!$(a))throw new TypeError('"list" argument must be an Array of Buffers');if(0===a.length)return f.alloc(0);var c;if(void 0===b)for(b=0,c=0;c<a.length;++c)b+=a[c].length;var d=f.allocUnsafe(b),e=0;for(c=0;c<a.length;++c){var g=a[c];if(!f.isBuffer(g))throw new TypeError('"list" argument must be an Array of Buffers');g.copy(d,e),e+=g.length}return d},f.byteLength=q,f.prototype._isBuffer=!0,f.prototype.swap16=function(){var a=this.length;if(a%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var b=0;b<a;b+=2)s(this,b,b+1);return this},f.prototype.swap32=function(){var a=this.length;if(a%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var b=0;b<a;b+=4)s(this,b,b+3),s(this,b+1,b+2);return this},f.prototype.swap64=function(){var a=this.length;if(a%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var b=0;b<a;b+=8)s(this,b,b+7),s(this,b+1,b+6),s(this,b+2,b+5),s(this,b+3,b+4);return this},f.prototype.toString=function(){var a=0|this.length;return 0===a?"":0===arguments.length?C(this,0,a):r.apply(this,arguments)},f.prototype.equals=function(a){if(!f.isBuffer(a))throw new TypeError("Argument must be a Buffer");return this===a||0===f.compare(this,a)},f.prototype.inspect=function(){var a="",b=c.INSPECT_MAX_BYTES;return this.length>0&&(a=this.toString("hex",0,b).match(/.{2}/g).join(" "),this.length>b&&(a+=" ... ")),"<Buffer "+a+">"},f.prototype.compare=function(a,b,c,d,e){if(!f.isBuffer(a))throw new TypeError("Argument must be a Buffer");if(void 0===b&&(b=0),void 0===c&&(c=a?a.length:0),void 0===d&&(d=0),void 0===e&&(e=this.length),b<0||c>a.length||d<0||e>this.length)throw new RangeError("out of range index");if(d>=e&&b>=c)return 0;if(d>=e)return-1;if(b>=c)return 1;if(b>>>=0,c>>>=0,d>>>=0,e>>>=0,this===a)return 0;for(var g=e-d,h=c-b,i=Math.min(g,h),j=this.slice(d,e),k=a.slice(b,c),l=0;l<i;++l)if(j[l]!==k[l]){g=j[l],h=k[l];break}return g<h?-1:h<g?1:0},f.prototype.includes=function(a,b,c){return-1!==this.indexOf(a,b,c)},f.prototype.indexOf=function(a,b,c){return t(this,a,b,c,!0)},f.prototype.lastIndexOf=function(a,b,c){return t(this,a,b,c,!1)},f.prototype.write=function(a,b,c,d){if(void 0===b)d="utf8",c=this.length,b=0;else if(void 0===c&&"string"==typeof b)d=b,c=this.length,b=0;else{if(!isFinite(b))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");b|=0,isFinite(c)?(c|=0,void 0===d&&(d="utf8")):(d=c,c=void 0)}var e=this.length-b;if((void 0===c||c>e)&&(c=e),a.length>0&&(c<0||b<0)||b>this.length)throw new RangeError("Attempt to write outside buffer bounds");d||(d="utf8");for(var f=!1;;)switch(d){case"hex":return v(this,a,b,c);case"utf8":case"utf-8":return w(this,a,b,c);case"ascii":return x(this,a,b,c);case"latin1":case"binary":return y(this,a,b,c);case"base64":return z(this,a,b,c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,a,b,c);default:if(f)throw new TypeError("Unknown encoding: "+d);d=(""+d).toLowerCase(),f=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var _=4096;f.prototype.slice=function(a,b){var c=this.length;a=~~a,b=void 0===b?c:~~b,a<0?(a+=c)<0&&(a=0):a>c&&(a=c),b<0?(b+=c)<0&&(b=0):b>c&&(b=c),b<a&&(b=a);var d;if(f.TYPED_ARRAY_SUPPORT)d=this.subarray(a,b),d.__proto__=f.prototype;else{var e=b-a;d=new f(e,void 0);for(var g=0;g<e;++g)d[g]=this[g+a]}return d},f.prototype.readUIntLE=function(a,b,c){a|=0,b|=0,c||I(a,b,this.length);for(var d=this[a],e=1,f=0;++f<b&&(e*=256);)d+=this[a+f]*e;return d},f.prototype.readUIntBE=function(a,b,c){a|=0,b|=0,c||I(a,b,this.length);for(var d=this[a+--b],e=1;b>0&&(e*=256);)d+=this[a+--b]*e;return d},f.prototype.readUInt8=function(a,b){return b||I(a,1,this.length),this[a]},f.prototype.readUInt16LE=function(a,b){return b||I(a,2,this.length),this[a]|this[a+1]<<8},f.prototype.readUInt16BE=function(a,b){return b||I(a,2,this.length),this[a]<<8|this[a+1]},f.prototype.readUInt32LE=function(a,b){return b||I(a,4,this.length),(this[a]|this[a+1]<<8|this[a+2]<<16)+16777216*this[a+3]},f.prototype.readUInt32BE=function(a,b){return b||I(a,4,this.length),16777216*this[a]+(this[a+1]<<16|this[a+2]<<8|this[a+3])},f.prototype.readIntLE=function(a,b,c){a|=0,b|=0,c||I(a,b,this.length);for(var d=this[a],e=1,f=0;++f<b&&(e*=256);)d+=this[a+f]*e;return e*=128,d>=e&&(d-=Math.pow(2,8*b)),d},f.prototype.readIntBE=function(a,b,c){a|=0,b|=0,c||I(a,b,this.length);for(var d=b,e=1,f=this[a+--d];d>0&&(e*=256);)f+=this[a+--d]*e;return e*=128,f>=e&&(f-=Math.pow(2,8*b)),f},f.prototype.readInt8=function(a,b){return b||I(a,1,this.length),128&this[a]?-1*(255-this[a]+1):this[a]},f.prototype.readInt16LE=function(a,b){b||I(a,2,this.length);var c=this[a]|this[a+1]<<8;return 32768&c?4294901760|c:c},f.prototype.readInt16BE=function(a,b){b||I(a,2,this.length);var c=this[a+1]|this[a]<<8;return 32768&c?4294901760|c:c},f.prototype.readInt32LE=function(a,b){return b||I(a,4,this.length),this[a]|this[a+1]<<8|this[a+2]<<16|this[a+3]<<24},f.prototype.readInt32BE=function(a,b){return b||I(a,4,this.length),this[a]<<24|this[a+1]<<16|this[a+2]<<8|this[a+3]},f.prototype.readFloatLE=function(a,b){return b||I(a,4,this.length),Z.read(this,a,!0,23,4)},f.prototype.readFloatBE=function(a,b){return b||I(a,4,this.length),Z.read(this,a,!1,23,4)},f.prototype.readDoubleLE=function(a,b){return b||I(a,8,this.length),Z.read(this,a,!0,52,8)},f.prototype.readDoubleBE=function(a,b){return b||I(a,8,this.length),Z.read(this,a,!1,52,8)},f.prototype.writeUIntLE=function(a,b,c,d){if(a=+a,b|=0,c|=0,!d){J(this,a,b,c,Math.pow(2,8*c)-1,0)}var e=1,f=0;for(this[b]=255&a;++f<c&&(e*=256);)this[b+f]=a/e&255;return b+c},f.prototype.writeUIntBE=function(a,b,c,d){if(a=+a,b|=0,c|=0,!d){J(this,a,b,c,Math.pow(2,8*c)-1,0)}var e=c-1,f=1;for(this[b+e]=255&a;--e>=0&&(f*=256);)this[b+e]=a/f&255;return b+c},f.prototype.writeUInt8=function(a,b,c){return a=+a,b|=0,c||J(this,a,b,1,255,0),f.TYPED_ARRAY_SUPPORT||(a=Math.floor(a)),this[b]=255&a,b+1},f.prototype.writeUInt16LE=function(a,b,c){return a=+a,b|=0,c||J(this,a,b,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[b]=255&a,this[b+1]=a>>>8):K(this,a,b,!0),b+2},f.prototype.writeUInt16BE=function(a,b,c){return a=+a,b|=0,c||J(this,a,b,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[b]=a>>>8,this[b+1]=255&a):K(this,a,b,!1),b+2},f.prototype.writeUInt32LE=function(a,b,c){return a=+a,b|=0,c||J(this,a,b,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[b+3]=a>>>24,this[b+2]=a>>>16,this[b+1]=a>>>8,this[b]=255&a):L(this,a,b,!0),b+4},f.prototype.writeUInt32BE=function(a,b,c){return a=+a,b|=0,c||J(this,a,b,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[b]=a>>>24,this[b+1]=a>>>16,this[b+2]=a>>>8,this[b+3]=255&a):L(this,a,b,!1),b+4},f.prototype.writeIntLE=function(a,b,c,d){if(a=+a,b|=0,!d){var e=Math.pow(2,8*c-1);J(this,a,b,c,e-1,-e)}var f=0,g=1,h=0;for(this[b]=255&a;++f<c&&(g*=256);)a<0&&0===h&&0!==this[b+f-1]&&(h=1),this[b+f]=(a/g>>0)-h&255;return b+c},f.prototype.writeIntBE=function(a,b,c,d){if(a=+a,b|=0,!d){var e=Math.pow(2,8*c-1);J(this,a,b,c,e-1,-e)}var f=c-1,g=1,h=0;for(this[b+f]=255&a;--f>=0&&(g*=256);)a<0&&0===h&&0!==this[b+f+1]&&(h=1),this[b+f]=(a/g>>0)-h&255;return b+c},f.prototype.writeInt8=function(a,b,c){return a=+a,b|=0,c||J(this,a,b,1,127,-128),f.TYPED_ARRAY_SUPPORT||(a=Math.floor(a)),a<0&&(a=255+a+1),this[b]=255&a,b+1},f.prototype.writeInt16LE=function(a,b,c){return a=+a,b|=0,c||J(this,a,b,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[b]=255&a,this[b+1]=a>>>8):K(this,a,b,!0),b+2},f.prototype.writeInt16BE=function(a,b,c){return a=+a,b|=0,c||J(this,a,b,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[b]=a>>>8,this[b+1]=255&a):K(this,a,b,!1),b+2},f.prototype.writeInt32LE=function(a,b,c){return a=+a,b|=0,c||J(this,a,b,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[b]=255&a,this[b+1]=a>>>8,this[b+2]=a>>>16,this[b+3]=a>>>24):L(this,a,b,!0),b+4},f.prototype.writeInt32BE=function(a,b,c){return a=+a,b|=0,c||J(this,a,b,4,2147483647,-2147483648),a<0&&(a=4294967295+a+1),f.TYPED_ARRAY_SUPPORT?(this[b]=a>>>24,this[b+1]=a>>>16,this[b+2]=a>>>8,this[b+3]=255&a):L(this,a,b,!1),b+4},f.prototype.writeFloatLE=function(a,b,c){return N(this,a,b,!0,c)},f.prototype.writeFloatBE=function(a,b,c){return N(this,a,b,!1,c)},f.prototype.writeDoubleLE=function(a,b,c){return O(this,a,b,!0,c)},f.prototype.writeDoubleBE=function(a,b,c){return O(this,a,b,!1,c)},f.prototype.copy=function(a,b,c,d){if(c||(c=0),d||0===d||(d=this.length),b>=a.length&&(b=a.length),b||(b=0),d>0&&d<c&&(d=c),d===c)return 0;if(0===a.length||0===this.length)return 0;if(b<0)throw new RangeError("targetStart out of bounds");if(c<0||c>=this.length)throw new RangeError("sourceStart out of bounds");if(d<0)throw new RangeError("sourceEnd out of bounds");d>this.length&&(d=this.length),a.length-b<d-c&&(d=a.length-b+c);var e,g=d-c;if(this===a&&c<b&&b<d)for(e=g-1;e>=0;--e)a[e+b]=this[e+c];else if(g<1e3||!f.TYPED_ARRAY_SUPPORT)for(e=0;e<g;++e)a[e+b]=this[e+c];else Uint8Array.prototype.set.call(a,this.subarray(c,c+g),b);return g},f.prototype.fill=function(a,b,c,d){if("string"==typeof a){if("string"==typeof b?(d=b,b=0,c=this.length):"string"==typeof c&&(d=c,c=this.length),1===a.length){var e=a.charCodeAt(0);e<256&&(a=e)}if(void 0!==d&&"string"!=typeof d)throw new TypeError("encoding must be a string");if("string"==typeof d&&!f.isEncoding(d))throw new TypeError("Unknown encoding: "+d)}else"number"==typeof a&&(a&=255);if(b<0||this.length<b||this.length<c)throw new RangeError("Out of range index");if(c<=b)return this;b>>>=0,c=void 0===c?this.length:c>>>0,a||(a=0);var g;if("number"==typeof a)for(g=b;g<c;++g)this[g]=a;else{var h=f.isBuffer(a)?a:S(new f(a,d).toString()),i=h.length;for(g=0;g<c-b;++g)this[g+b]=h[g%i]}return this};var aa=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":1,ieee754:103,isarray:106}],6:[function(a,b,c){b.exports={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Unordered Collection",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"}},{}],7:[function(a,b,c){b.exports=a("./lib/clean")},{"./lib/clean":8}],8:[function(a,b,c){(function(c){function d(a,b,c,d){var h="function"!=typeof c?c:null,i="function"==typeof d?d:"function"==typeof c?c:null,j={stats:{efficiency:0,minifiedSize:0,originalSize:0,startedAt:Date.now(),timeSpent:0},cache:{specificity:{}},errors:[],inlinedStylesheets:[],inputSourceMapTracker:v(),localOnly:!i,options:b,source:null,sourcesContent:{},validator:l(b.compatibility),warnings:[]};return h&&j.inputSourceMapTracker.track(void 0,h),e(j.localOnly)(function(){return w(a,j,function(a){var b=j.options.sourceMap?y:x,c=f(a,j),d=b(c,j),e=g(d,j);return i?i(j.errors.length>0?j.errors:null,e):e})})}function e(a){return a?function(a){return a()}:c.nextTick}function f(a,b){var c;return c=i(a,b),c=r.One in b.options.level?j(a,b):a,c=r.Two in b.options.level?k(a,b,!0):c}function g(a,b){return a.stats=h(a.styles,b),a.errors=b.errors,a.inlinedStylesheets=b.inlinedStylesheets,a.warnings=b.warnings,a}function h(a,b){var c=Date.now(),d=c-b.stats.startedAt;return delete b.stats.startedAt,b.stats.timeSpent=d,b.stats.efficiency=1-a.length/b.stats.originalSize,b.stats.minifiedSize=a.length,b.stats}var i=a("./optimizer/level-0/optimize"),j=a("./optimizer/level-1/optimize"),k=a("./optimizer/level-2/optimize"),l=a("./optimizer/validator"),m=a("./options/compatibility"),n=a("./options/format").formatFrom,o=a("./options/inline"),p=a("./options/inline-request"),q=a("./options/inline-timeout"),r=a("./options/optimization-level").OptimizationLevel,s=a("./options/optimization-level").optimizationLevelFrom,t=a("./options/rebase"),u=a("./options/rebase-to"),v=a("./reader/input-source-map-tracker"),w=a("./reader/read-sources"),x=a("./writer/simple"),y=a("./writer/source-maps");(b.exports=function(a){a=a||{},this.options={compatibility:m(a.compatibility),format:n(a.format),inline:o(a.inline),inlineRequest:p(a.inlineRequest),inlineTimeout:q(a.inlineTimeout),level:s(a.level),rebase:t(a.rebase),rebaseTo:u(a.rebaseTo),returnPromise:!!a.returnPromise,sourceMap:!!a.sourceMap,sourceMapInlineSources:!!a.sourceMapInlineSources}}).prototype.minify=function(a,b,c){var e=this.options;return e.returnPromise?new Promise(function(c,f){d(a,e,b,function(a,b){return a?f(a):c(b)})}):d(a,e,b,c)}}).call(this,a("_process"))},{"./optimizer/level-0/optimize":10,"./optimizer/level-1/optimize":11,"./optimizer/level-2/optimize":30,"./optimizer/validator":56,"./options/compatibility":58,"./options/format":59,"./options/inline":62,"./options/inline-request":60,"./options/inline-timeout":61,"./options/optimization-level":63,"./options/rebase":65,"./options/rebase-to":64,"./reader/input-source-map-tracker":69,"./reader/read-sources":75,"./writer/simple":97,"./writer/source-maps":98,_process:111}],9:[function(a,b,c){var d={ASTERISK:"asterisk",BANG:"bang",BACKSLASH:"backslash",UNDERSCORE:"underscore"};b.exports=d},{}],10:[function(a,b,c){function d(a){return a}b.exports=d},{}],11:[function(a,b,c){function d(a){return a&&"-"==a[1][0]&&parseFloat(a[1])<0}function e(a){return ha.test(a)}function f(a){return ja.test(a)}function g(a){return a.replace(ja,"url(").replace(/\\?\n|\\?\r\n/g,"")}function h(a){var b=a.value;1==b.length&&"none"==b[0][1]&&(b[0][1]="0 0"),1==b.length&&"transparent"==b[0][1]&&(b[0][1]="0 0")}function i(a){var b,c=a.value;3==c.length&&"/"==c[1][1]&&c[0][1]==c[2][1]?b=1:5==c.length&&"/"==c[2][1]&&c[0][1]==c[3][1]&&c[1][1]==c[4][1]?b=2:7==c.length&&"/"==c[3][1]&&c[0][1]==c[4][1]&&c[1][1]==c[5][1]&&c[2][1]==c[6][1]?b=3:9==c.length&&"/"==c[4][1]&&c[0][1]==c[5][1]&&c[1][1]==c[6][1]&&c[2][1]==c[7][1]&&c[3][1]==c[8][1]&&(b=4),b&&(a.value.splice(b),a.dirty=!0)}function j(a,b,c){return-1===b.indexOf("#")&&-1==b.indexOf("rgb")&&-1==b.indexOf("hsl")?I(b):(b=b.replace(/rgb\((\-?\d+),(\-?\d+),(\-?\d+)\)/g,function(a,b,c,d){return K(b,c,d)}).replace(/hsl\((-?\d+),(-?\d+)%?,(-?\d+)%?\)/g,function(a,b,c,d){return J(b,c,d)}).replace(/(^|[^='"])#([0-9a-f]{6})/gi,function(a,b,c){return c[0]==c[1]&&c[2]==c[3]&&c[4]==c[5]?(b+"#"+c[0]+c[2]+c[4]).toLowerCase():(b+"#"+c).toLowerCase()}).replace(/(^|[^='"])#([0-9a-f]{3})/gi,function(a,b,c){return b+"#"+c.toLowerCase()}).replace(/(rgb|rgba|hsl|hsla)\(([^\)]+)\)/g,function(a,b,c){var d=c.split(",");return"hsl"==b&&3==d.length||"hsla"==b&&4==d.length||"rgb"==b&&3==d.length&&c.indexOf("%")>0||"rgba"==b&&4==d.length&&c.indexOf("%")>0?(-1==d[1].indexOf("%")&&(d[1]+="%"),-1==d[2].indexOf("%")&&(d[2]+="%"),b+"("+d.join(",")+")"):a}),c.colors.opacity&&-1==a.indexOf("background")&&(b=b.replace(/(?:rgba|hsla)\(0,0%?,0%?,0\)/g,function(a){return X(b,",").pop().indexOf("gradient(")>-1?a:"transparent"})),I(b))}function k(a){1==a.value.length&&(a.value[0][1]=a.value[0][1].replace(/progid:DXImageTransform\.Microsoft\.(Alpha|Chroma)(\W)/,function(a,b,c){return b.toLowerCase()+c})),a.value[0][1]=a.value[0][1].replace(/,(\S)/g,", $1").replace(/ ?= ?/g,"=")}function l(a,b){var c,d=a.value,e=aa.indexOf(d[0][1])>-1||d[1]&&aa.indexOf(d[1][1])>-1||d[2]&&aa.indexOf(d[2][1])>-1,f=b.level[T.One].optimizeFontWeight,g=0;f&&(e||d[1]&&"/"==d[1][1]||("normal"==d[0][1]&&g++,d[1]&&"normal"==d[1][1]&&g++,d[2]&&"normal"==d[2][1]&&g++,g>1||(ca.indexOf(d[0][1])>-1?c=0:d[1]&&ca.indexOf(d[1][1])>-1?c=1:d[2]&&ca.indexOf(d[2][1])>-1?c=2:ba.indexOf(d[0][1])>-1?c=0:d[1]&&ba.indexOf(d[1][1])>-1?c=1:d[2]&&ba.indexOf(d[2][1])>-1&&(c=2),void 0!==c&&f&&(m(a,c),a.dirty=!0))))}function m(a,b){var c=a.value[b][1];"normal"==c?c="400":"bold"==c&&(c="700"),a.value[b][1]=c}function n(a){var b,c=a.value;4==c.length&&"0"===c[0][1]&&"0"===c[1][1]&&"0"===c[2][1]&&"0"===c[3][1]&&(b=a.name.indexOf("box-shadow")>-1?2:1),b&&(a.value.splice(b),a.dirty=!0)}function o(a){var b=a.value;1==b.length&&"none"==b[0][1]&&(b[0][1]="0")}function p(a,b,c){return da.test(b)?b.replace(da,function(a,b){var d,e=parseInt(b);return 0===e?a:(c.properties.shorterLengthUnits&&c.units.pt&&3*e%4==0&&(d=3*e/4+"pt"),c.properties.shorterLengthUnits&&c.units.pc&&e%16==0&&(d=e/16+"pc"),c.properties.shorterLengthUnits&&c.units.in&&e%96==0&&(d=e/96+"in"),d&&(d=a.substring(0,a.indexOf(b))+d),d&&d.length<a.length?d:a)}):b}function q(a,b,c){return c.enabled&&-1!==b.indexOf(".")?b.replace(c.decimalPointMatcher,"$1$2$3").replace(c.zeroMatcher,function(a,b,d,e){var f=c.units[e].multiplier,g=parseInt(b),h=isNaN(g)?0:g,i=parseFloat(d);return Math.round((h+i)*f)/f+e}):b}function r(a,b){return ea.test(b)?b.replace(ea,function(a,b,c){var d;return"ms"==c?d=parseInt(b)/1e3+"s":"s"==c&&(d=1e3*parseFloat(b)+"ms"),d.length<a.length?d:a}):b}function s(a,b,c){
-return/^(?:\-moz\-calc|\-webkit\-calc|calc|rgb|hsl|rgba|hsla)\(/.test(b)?b:"flex"==a||"-ms-flex"==a||"-webkit-flex"==a||"flex-basis"==a||"-webkit-flex-basis"==a?b:b.indexOf("%")>0&&("height"==a||"max-height"==a)?b:b.replace(c,"$10$2").replace(c,"$10$2")}function t(a,b){return a.indexOf("filter")>-1||-1==b.indexOf(" ")||0===b.indexOf("expression")?b:b.indexOf(V.SINGLE_QUOTE)>-1||b.indexOf(V.DOUBLE_QUOTE)>-1?b:(b=b.replace(/\s+/g," "),b.indexOf("calc")>-1&&(b=b.replace(/\) ?\/ ?/g,")/ ")),b.replace(/(\(;?)\s+/g,"$1").replace(/\s+(;?\))/g,"$1").replace(/, /g,","))}function u(a,b){return-1==b.indexOf("0deg")?b:b.replace(/\(0deg\)/g,"(0)")}function v(a,b){return-1==b.indexOf("0")?b:(b.indexOf("-")>-1&&(b=b.replace(/([^\w\d\-]|^)\-0([^\.]|$)/g,"$10$2").replace(/([^\w\d\-]|^)\-0([^\.]|$)/g,"$10$2")),b.replace(/(^|\s)0+([1-9])/g,"$1$2").replace(/(^|\D)\.0+(\D|$)/g,"$10$2").replace(/(^|\D)\.0+(\D|$)/g,"$10$2").replace(/\.([1-9]*)0+(\D|$)/g,function(a,b,c){return(b.length>0?".":"")+b+c}).replace(/(^|\D)0\.(\d)/g,"$1.$2"))}function w(a,b){return"content"==a||a.indexOf("font-feature-settings")>-1||a.indexOf("grid-")>-1?b:ia.test(b)?b.substring(1,b.length-1):b}function x(a){return!/^url\(['"].+['"]\)$/.test(a)||/^url\(['"].*[\*\s\(\)'"].*['"]\)$/.test(a)||/^url\(['"]data:[^;]+;charset/.test(a)?a:a.replace(/["']/g,"")}function y(a,b,c){var d=c(a,b);return void 0===d?b:!1===d?Y:d}function z(a,b){var c,B,C,D,E,F,H=b.options,I=H.level[T.One],J=S(a,!0);a:for(var K=0,L=J.length;K<L;K++)if(c=J[K],B=c.name,fa.test(B)||(F=c.all[c.position],b.warnings.push("Invalid property name '"+B+"' at "+W(F[1][2][0])+". Ignoring."),c.unused=!0),0===c.value.length&&(F=c.all[c.position],b.warnings.push("Empty property '"+B+"' at "+W(F[1][2][0])+". Ignoring."),c.unused=!0),c.hack&&((c.hack[0]==P.ASTERISK||c.hack[0]==P.UNDERSCORE)&&!H.compatibility.properties.iePrefixHack||c.hack[0]==P.BACKSLASH&&!H.compatibility.properties.ieSuffixHack||c.hack[0]==P.BANG&&!H.compatibility.properties.ieBangHack)&&(c.unused=!0),I.removeNegativePaddings&&0===B.indexOf("padding")&&(d(c.value[0])||d(c.value[1])||d(c.value[2])||d(c.value[3]))&&(c.unused=!0),!H.compatibility.properties.ieFilters&&G(c)&&(c.unused=!0),!c.unused)if(c.block)z(c.value[0][1],b);else if(!ka.test(B)){for(var M=0,N=c.value.length;M<N;M++){if(C=c.value[M][0],D=c.value[M][1],E=f(D),C==U.PROPERTY_BLOCK){c.unused=!0,b.warnings.push("Invalid value token at "+W(D[0][1][2][0])+". Ignoring.");break}if(E&&!b.validator.isValidUrl(D)){c.unused=!0,b.warnings.push("Broken URL '"+D+"' at "+W(c.value[M][2][0])+". Ignoring.");break}if(E?(D=I.normalizeUrls?g(D):D,D=H.compatibility.properties.urlQuotes?D:x(D)):e(D)?D=I.removeQuotes?w(B,D):D:(D=I.removeWhitespace?t(B,D):D,D=q(B,D,H.precision),D=p(B,D,H.compatibility),D=I.replaceTimeUnits?r(B,D):D,D=I.replaceZeroUnits?v(B,D):D,H.compatibility.properties.zeroUnits&&(D=u(B,D),D=s(B,D,H.unitsRegexp)),H.compatibility.properties.colors&&(D=j(B,D,H.compatibility))),(D=y(B,D,I.transform))===Y){c.unused=!0;continue a}c.value[M][1]=D}I.replaceMultipleZeros&&n(c),"background"==B&&I.optimizeBackground?h(c):0===B.indexOf("border")&&B.indexOf("radius")>0&&I.optimizeBorderRadius?i(c):"filter"==B&&I.optimizeFilter&&H.compatibility.properties.ieFilters?k(c):"font"==B&&I.optimizeFont?l(c,H):"font-weight"==B&&I.optimizeFontWeight?m(c,0):"outline"==B&&I.optimizeOutline&&o(c)}R(J),Q(J),J.length!=a.length&&A(a,H)}function A(a,b){var c,d;for(d=0;d<a.length;d++)c=a[d],c[0]==U.COMMENT&&(B(c,b),0===c[1].length&&(a.splice(d,1),d--))}function B(a,b){if(a[1][2]==V.EXCLAMATION&&("all"==b.level[T.One].specialComments||b.commentsKept<b.level[T.One].specialComments))return void b.commentsKept++;a[1]=[]}function C(a){for(var b=!1,c=0,d=a.length;c<d;c++){var e=a[c];e[0]==U.AT_RULE&&($.test(e[1])&&(b||-1==e[1].indexOf(Z)?(a.splice(c,1),c--,d--):(b=!0,a.splice(c,1),a.unshift([U.AT_RULE,e[1].replace($,Z)]))))}}function D(a){var b=["px","em","ex","cm","mm","in","pt","pc","%"];return["ch","rem","vh","vm","vmax","vmin","vw"].forEach(function(c){a.compatibility.units[c]&&b.push(c)}),new RegExp("(^|\\s|\\(|,)0(?:"+b.join("|")+")(\\W|$)","g")}function E(a){var b,c,d={matcher:null,units:{}},e=[];for(b in a)(c=a[b])!=_&&(d.units[b]={},d.units[b].value=c,d.units[b].multiplier=Math.pow(10,c),e.push(b));return e.length>0&&(d.enabled=!0,d.decimalPointMatcher=new RegExp("(\\d)\\.($|"+e.join("|")+")($|W)","g"),d.zeroMatcher=new RegExp("(\\d*)(\\.\\d+)("+e.join("|")+")","g")),d}function F(a){return ga.test(a[1])}function G(a){var b;return("filter"==a.name||"-ms-filter"==a.name)&&(b=a.value[0][1],b.indexOf("progid")>-1||0===b.indexOf("alpha")||0===b.indexOf("chroma"))}function H(a,b){var c=b.options,d=c.level[T.One],e=c.compatibility.selectors.ie7Hack,f=c.compatibility.selectors.adjacentSpace,g=c.compatibility.properties.spaceAfterClosingBrace,h=c.format,i=!1,j=!1;c.unitsRegexp=c.unitsRegexp||D(c),c.precision=c.precision||E(d.roundingPrecision),c.commentsKept=c.commentsKept||0;for(var k=0,l=a.length;k<l;k++){var m=a[k];switch(m[0]){case U.AT_RULE:m[1]=F(m)&&j?"":m[1],m[1]=d.tidyAtRules?O(m[1]):m[1],i=!0;break;case U.AT_RULE_BLOCK:z(m[2],b),j=!0;break;case U.NESTED_BLOCK:m[1]=d.tidyBlockScopes?N(m[1],g):m[1],H(m[2],b),j=!0;break;case U.COMMENT:B(m,c);break;case U.RULE:m[1]=d.tidySelectors?M(m[1],!e,f,h,b.warnings):m[1],m[1]=m[1].length>1?L(m[1],d.selectorsSortingMethod):m[1],z(m[2],b),j=!0}(0===m[1].length||m[2]&&0===m[2].length)&&(a.splice(k,1),k--,l--)}return d.cleanupCharsets&&i&&C(a),a}var I=a("./shorten-hex"),J=a("./shorten-hsl"),K=a("./shorten-rgb"),L=a("./sort-selectors"),M=a("./tidy-rules"),N=a("./tidy-block"),O=a("./tidy-at-rule"),P=a("../hack"),Q=a("../remove-unused"),R=a("../restore-from-optimizing"),S=a("../wrap-for-optimizing").all,T=a("../../options/optimization-level").OptimizationLevel,U=a("../../tokenizer/token"),V=a("../../tokenizer/marker"),W=a("../../utils/format-position"),X=a("../../utils/split"),Y="ignore-property",Z="@charset",$=new RegExp("^"+Z,"i"),_=a("../../options/rounding-precision").DEFAULT,aa=["100","200","300","400","500","600","700","800","900"],ba=["normal","bold","bolder","lighter"],ca=["bold","bolder","lighter"],da=/(?:^|\s|\()(-?\d+)px/,ea=/^(\-?[\d\.]+)(m?s)$/,fa=/^(?:\-chrome\-|\-[\w\-]+\w|\w[\w\-]+\w|\-\-\S+)$/,ga=/^@import/i,ha=/^('.*'|".*")$/,ia=/^['"][a-zA-Z][a-zA-Z\d\-_]+['"]$/,ja=/^url\(/i,ka=/^--\S+$/;b.exports=H},{"../../options/optimization-level":63,"../../options/rounding-precision":66,"../../tokenizer/marker":81,"../../tokenizer/token":82,"../../utils/format-position":85,"../../utils/split":94,"../hack":9,"../remove-unused":54,"../restore-from-optimizing":55,"../wrap-for-optimizing":57,"./shorten-hex":12,"./shorten-hsl":13,"./shorten-rgb":14,"./sort-selectors":15,"./tidy-at-rule":16,"./tidy-block":17,"./tidy-rules":18}],12:[function(a,b,c){function d(a,b,c,d){return b+h[c.toLowerCase()]+d}function e(a,b,c){return i[b.toLowerCase()]+c}function f(a){var b=a.indexOf("#")>-1,c=a.replace(l,d);return c!=a&&(c=c.replace(l,d)),b?c.replace(m,e):c}var g={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#f0f",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#f00",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"},h={},i={};for(var j in g){var k=g[j];j.length<k.length?i[k]=j:h[j]=k}var l=new RegExp("(^| |,|\\))("+Object.keys(h).join("|")+")( |,|\\)|$)","ig"),m=new RegExp("("+Object.keys(i).join("|")+")([^a-f0-9]|$)","ig");b.exports=f},{}],13:[function(a,b,c){function d(a,b,c){var d,f,g;if(a%=360,a<0&&(a+=360),a=~~a/360,b<0?b=0:b>100&&(b=100),b=~~b/100,c<0?c=0:c>100&&(c=100),c=~~c/100,0===b)d=f=g=c;else{var h=c<.5?c*(1+b):c+b-c*b,i=2*c-h;d=e(i,h,a+1/3),f=e(i,h,a),g=e(i,h,a-1/3)}return[~~(255*d),~~(255*f),~~(255*g)]}function e(a,b,c){return c<0&&(c+=1),c>1&&(c-=1),c<1/6?a+6*(b-a)*c:c<.5?b:c<2/3?a+(b-a)*(2/3-c)*6:a}function f(a,b,c){var e=d(a,b,c),f=e[0].toString(16),g=e[1].toString(16),h=e[2].toString(16);return"#"+(1==f.length?"0":"")+f+(1==g.length?"0":"")+g+(1==h.length?"0":"")+h}b.exports=f},{}],14:[function(a,b,c){function d(a,b,c){return"#"+("00000"+(Math.max(0,Math.min(parseInt(a),255))<<16|Math.max(0,Math.min(parseInt(b),255))<<8|Math.max(0,Math.min(parseInt(c),255))).toString(16)).slice(-6)}b.exports=d},{}],15:[function(a,b,c){function d(a,b){return g(a[1],b[1])}function e(a,b){return a[1]>b[1]?1:-1}function f(a,b){var c;switch(b){case"natural":c=d;break;case"standard":c=e}return a.sort(c)}var g=a("../../utils/natural-compare");b.exports=f},{"../../utils/natural-compare":92}],16:[function(a,b,c){function d(a){return a.replace(/\s+/g," ").replace(/url\(\s+/g,"url(").replace(/\s+\)/g,")").trim()}b.exports=d},{}],17:[function(a,b,c){function d(a,b){var c,d;for(d=a.length-1;d>=0;d--)c=!b&&e.test(a[d][1]),a[d][1]=a[d][1].replace(/\n|\r\n/g," ").replace(/\s+/g," ").replace(/(,|:|\() /g,"$1").replace(/ \)/g,")").replace(/'([a-zA-Z][a-zA-Z\d\-_]+)'/,"$1").replace(/"([a-zA-Z][a-zA-Z\d\-_]+)"/,"$1").replace(c?/\) /g:null,")");return a}var e=/^@media\W/;b.exports=d},{}],18:[function(a,b,c){function d(a){var b,c,d,e,f=!1,g=!1;for(d=0,e=a.length;d<e;d++){if(c=a[d],b);else if(c==i.SINGLE_QUOTE||c==i.DOUBLE_QUOTE)g=!g;else{if(!(g||c!=i.CLOSE_CURLY_BRACKET&&c!=i.EXCLAMATION&&c!=v&&c!=i.SEMICOLON)){f=!0;break}if(!g&&0===d&&r.test(c)){f=!0;break}}b=c==i.BACK_SLASH}return f}function e(a,b){var c,d,e,f,g,j,m,n,o,p,q,t,u,v=[],w=0,x=!1,y=!1,z=k.test(a),A=b&&b.spaces[h.AroundSelectorRelation];for(t=0,u=a.length;t<u;t++){if(c=a[t],d=c==i.NEW_LINE_NIX,e=c==i.NEW_LINE_NIX&&a[t-1]==i.NEW_LINE_WIN,j=m||n,p=!f&&0===w&&r.test(c),q=s.test(c),g&&j&&e)v.pop(),v.pop();else if(f&&j&&d)v.pop();else if(f)v.push(c);else if(c!=i.OPEN_SQUARE_BRACKET||j)if(c!=i.CLOSE_SQUARE_BRACKET||j)if(c!=i.OPEN_ROUND_BRACKET||j)if(c!=i.CLOSE_ROUND_BRACKET||j)if(c!=i.SINGLE_QUOTE||j)if(c!=i.DOUBLE_QUOTE||j)if(c==i.SINGLE_QUOTE&&j)v.push(c),m=!1;else if(c==i.DOUBLE_QUOTE&&j)v.push(c),n=!1;else{if(q&&x&&!A)continue;!q&&x&&A?(v.push(i.SPACE),v.push(c)):q&&(o||w>0)&&!j||q&&y&&!j||(e||d)&&(o||w>0)&&j||(p&&y&&!A?(v.pop(),v.push(c)):p&&!y&&A?(v.push(i.SPACE),v.push(c)):q?v.push(i.SPACE):v.push(c))}else v.push(c),n=!0;else v.push(c),m=!0;else v.push(c),w--;else v.push(c),w++;else v.push(c),o=!1;else v.push(c),o=!0;g=f,f=c==i.BACK_SLASH,x=p,y=q}return z?v.join("").replace(l,"$1 $2]"):v.join("")}function f(a){return-1==a.indexOf("'")&&-1==a.indexOf('"')?a:a.replace(p,"=$1 $2").replace(q,"=$1$2").replace(m,"=$1 $2").replace(n,"=$1$2")}function g(a,b,c,g,h){function i(a,b){return h.push("HTML comment '"+b+"' at "+j(a[2][0])+". Removing."),""}for(var k=[],l=[],m=0,n=a.length;m<n;m++){var p=a[m],q=p[1];q=q.replace(o,i.bind(null,p)),d(q)?h.push("Invalid selector '"+p[1]+"' at "+j(p[2][0])+". Ignoring."):(q=e(q,g),q=f(q),c&&q.indexOf("nav")>0&&(q=q.replace(/\+nav(\S|$)/,"+ nav$1")),b&&q.indexOf(t)>-1||b&&q.indexOf(u)>-1||(q.indexOf("*")>-1&&(q=q.replace(/\*([:#\.\[])/g,"$1").replace(/^(\:first\-child)?\+html/,"*$1+html")),l.indexOf(q)>-1||(p[1]=q,l.push(q),k.push(p))))}return 1==k.length&&0===k[0][1].length&&(h.push("Empty selector '"+k[0][1]+"' at "+j(k[0][2][0])+". Ignoring."),k=[]),k}var h=a("../../options/format").Spaces,i=a("../../tokenizer/marker"),j=a("../../utils/format-position"),k=/[\s"'][iI]\s*\]/,l=/([\d\w])([iI])\]/g,m=/="([a-zA-Z][a-zA-Z\d\-_]+)"([iI])/g,n=/="([a-zA-Z][a-zA-Z\d\-_]+)"(\s|\])/g,o=/^(?:(?:<!--|-->)\s*)+/,p=/='([a-zA-Z][a-zA-Z\d\-_]+)'([iI])/g,q=/='([a-zA-Z][a-zA-Z\d\-_]+)'(\s|\])/g,r=/[>\+~]/,s=/\s/,t="*+html ",u="*:first-child+html ",v="<";b.exports=g},{"../../options/format":59,"../../tokenizer/marker":81,"../../utils/format-position":85}],19:[function(a,b,c){function d(a){return function(b){return"invert"==b[1]||a.isValidColor(b[1])||a.isValidVendorPrefixedValue(b[1])}}function e(a){return function(b){return"inherit"!=b[1]&&a.isValidStyle(b[1])&&!a.isValidColorValue(b[1])}}function f(a,b,c){var d=c[a];return o(d.doubleValues&&2==d.defaultValue.length?[p.PROPERTY,[p.PROPERTY_NAME,a],[p.PROPERTY_VALUE,d.defaultValue[0]],[p.PROPERTY_VALUE,d.defaultValue[1]]]:d.doubleValues&&1==d.defaultValue.length?[p.PROPERTY,[p.PROPERTY_NAME,a],[p.PROPERTY_VALUE,d.defaultValue[0]]]:[p.PROPERTY,[p.PROPERTY_NAME,a],[p.PROPERTY_VALUE,d.defaultValue]])}function g(a){return function(b){return"inherit"!=b[1]&&a.isValidWidth(b[1])&&!a.isValidStyle(b[1])&&!a.isValidColorValue(b[1])}}function h(a,b,c){var d=f("background-image",a,b),e=f("background-position",a,b),g=f("background-size",a,b),h=f("background-repeat",a,b),i=f("background-attachment",a,b),j=f("background-origin",a,b),k=f("background-clip",a,b),l=f("background-color",a,b),m=[d,e,g,h,i,j,k,l],o=a.value,p=!1,r=!1,s=!1,t=!1,u=!1;if(1==a.value.length&&"inherit"==a.value[0][1])return l.value=d.value=h.value=e.value=g.value=j.value=k.value=a.value,m;if(1==a.value.length&&"0 0"==a.value[0][1])return m;for(var v=o.length-1;v>=0;v--){var w=o[v];if(c.isValidBackgroundAttachment(w[1]))i.value=[w],u=!0;else if(c.isValidBackgroundClip(w[1])||c.isValidBackgroundOrigin(w[1]))r?(j.value=[w],s=!0):(k.value=[w],r=!0),u=!0;else if(c.isValidBackgroundRepeat(w[1]))t?h.value.unshift(w):(h.value=[w],t=!0),u=!0;else if(c.isValidBackgroundPositionPart(w[1])||c.isValidBackgroundSizePart(w[1])){if(v>0){var x=o[v-1];"/"==x[1]?g.value=[w]:v>1&&"/"==o[v-2][1]?(g.value=[x,w],v-=2):(p||(e.value=[]),e.value.unshift(w),p=!0)}else p||(e.value=[]),e.value.unshift(w),p=!0;u=!0}else l.value[0][1]!=b[l.name].defaultValue&&"none"!=l.value[0][1]||!c.isValidColor(w[1])&&!c.isValidVendorPrefixedValue(w[1])?(c.isValidUrl(w[1])||c.isValidFunction(w[1]))&&(d.value=[w],u=!0):(l.value=[w],u=!0)}if(r&&!s&&(j.value=k.value.slice(0)),!u)throw new n("Invalid background value at "+q(o[0][2][0])+". Ignoring.");return m}function i(a,b){for(var c=a.value,d=-1,e=0,g=c.length;e<g;e++)if("/"==c[e][1]){d=e;break}if(0===d||d===c.length-1)throw new n("Invalid border-radius value at "+q(c[0][2][0])+". Ignoring.");var h=f(a.name,a,b);h.value=d>-1?c.slice(0,d):c.slice(0),h.components=j(h,b);var i=f(a.name,a,b);i.value=d>-1?c.slice(d+1):c.slice(0),i.components=j(i,b);for(var k=0;k<4;k++)h.components[k].multiplex=!0,h.components[k].value=h.components[k].value.concat(i.components[k].value);return h.components}function j(a,b){var c=b[a.name].components,d=[],e=a.value;if(e.length<1)return[];e.length<2&&(e[1]=e[0].slice(0)),e.length<3&&(e[2]=e[0].slice(0)),e.length<4&&(e[3]=e[1].slice(0));for(var f=c.length-1;f>=0;f--){var g=o([p.PROPERTY,[p.PROPERTY_NAME,c[f]]]);g.value=[e[f]],d.unshift(g)}return d}function k(a){return function(b,c,d){var e,g,h,i,j=[],k=b.value;for(e=0,h=k.length;e<h;e++)","==k[e][1]&&j.push(e);if(0===j.length)return a(b,c,d);var l=[];for(e=0,h=j.length;e<=h;e++){var m=0===e?0:j[e-1]+1,n=e<h?j[e]:k.length,o=f(b.name,b,c);o.value=k.slice(m,n),l.push(a(o,c,d))}var q=l[0];for(e=0,h=q.length;e<h;e++)for(q[e].multiplex=!0,g=1,i=l.length;g<i;g++)q[e].value.push([p.PROPERTY_VALUE,r]),Array.prototype.push.apply(q[e].value,l[g][e].value);return q}}function l(a,b,c){var d=f("list-style-type",a,b),e=f("list-style-position",a,b),g=f("list-style-image",a,b),h=[d,e,g];if(1==a.value.length&&"inherit"==a.value[0][1])return d.value=e.value=g.value=[a.value[0]],h;var i=a.value.slice(0),j=i.length,k=0;for(k=0,j=i.length;k<j;k++)if(c.isValidUrl(i[k][1])||"0"==i[k][1]){g.value=[i[k]],i.splice(k,1);break}for(k=0,j=i.length;k<j;k++)if(c.isValidListStyleType(i[k][1])){d.value=[i[k]],i.splice(k,1);break}return i.length>0&&c.isValidListStylePosition(i[0][1])&&(e.value=[i[0]]),h}function m(a,b,c){for(var h,i,j,k=b[a.name],l=[f(k.components[0],a,b),f(k.components[1],a,b),f(k.components[2],a,b)],m=0;m<3;m++){var n=l[m];n.name.indexOf("color")>0?h=n:n.name.indexOf("style")>0?i=n:j=n}if(1==a.value.length&&"inherit"==a.value[0][1]||3==a.value.length&&"inherit"==a.value[0][1]&&"inherit"==a.value[1][1]&&"inherit"==a.value[2][1])return h.value=i.value=j.value=[a.value[0]],l;var o,p,q=a.value.slice(0);return q.length>0&&(p=q.filter(g(c)),(o=p.length>1&&("none"==p[0][1]||"auto"==p[0][1])?p[1]:p[0])&&(j.value=[o],q.splice(q.indexOf(o),1))),q.length>0&&(o=q.filter(e(c))[0])&&(i.value=[o],q.splice(q.indexOf(o),1)),q.length>0&&(o=q.filter(d(c))[0])&&(h.value=[o],q.splice(q.indexOf(o),1)),l}var n=a("./invalid-property-error"),o=a("../wrap-for-optimizing").single,p=a("../../tokenizer/token"),q=a("../../utils/format-position"),r=",";b.exports={background:h,border:m,borderRadius:i,fourValues:j,listStyle:l,multiplex:k,outline:m}},{"../../tokenizer/token":82,"../../utils/format-position":85,"../wrap-for-optimizing":57,"./invalid-property-error":24}],20:[function(a,b,c){function d(a,b,c){return!(!p(a,b,c,0,!0)&&!a.isValidKeywordValue("background-position",c,!0))&&(!(!a.isValidVariable(b)||!a.isValidVariable(c))||(!!a.isValidKeywordValue("background-position",c,!0)||m(a,b,c)))}function e(a,b,c){return!(!p(a,b,c,0,!0)&&!a.isValidKeywordValue("background-size",c,!0))&&(!(!a.isValidVariable(b)||!a.isValidVariable(c))||(!!a.isValidKeywordValue("background-size",c,!0)||m(a,b,c)))}function f(a,b,c){return!(!p(a,b,c,0,!0)&&!a.isValidColor(c))&&(!(!a.isValidVariable(b)||!a.isValidVariable(c))||!(!a.colorOpacity&&(a.isValidRgbaColor(b)||a.isValidHslaColor(b)))&&(!(!a.colorOpacity&&(a.isValidRgbaColor(c)||a.isValidHslaColor(c)))&&(!(!a.isValidColor(b)||!a.isValidColor(c))||k(a,b,c))))}function g(a){return function(b,c,d,e){return a[e](b,c,d)}}function h(a,b,c){return!(!p(a,b,c,0,!0)&&!a.isValidImage(c))&&(!(!a.isValidVariable(b)||!a.isValidVariable(c))||(!!a.isValidImage(c)||!a.isValidImage(b)&&k(a,b,c)))}function i(a){return function(b,c,d){return!(!p(b,c,d,0,!0)&&!b.isValidKeywordValue(a,d))&&(!(!b.isValidVariable(c)||!b.isValidVariable(d))||b.isValidKeywordValue(a,d,!1))}}function j(a){return function(b,c,d){return!(!p(b,c,d,0,!0)&&!b.isValidKeywordValue(a,d,!0))&&(!(!b.isValidVariable(c)||!b.isValidVariable(d))||b.isValidKeywordValue(a,d,!0))}}function k(a,b,c){return!!a.areSameFunction(b,c)||b===c}function l(a,b,c){return!(!p(a,b,c,0,!0)&&!a.isValidTextShadow(c))&&(!(!a.isValidVariable(b)||!a.isValidVariable(c))||a.isValidTextShadow(c))}function m(a,b,c){return!(!p(a,b,c,0,!0)&&!a.isValidUnitWithoutFunction(c))&&(!(!a.isValidVariable(b)||!a.isValidVariable(c))||!(a.isValidUnitWithoutFunction(b)&&!a.isValidUnitWithoutFunction(c))&&(!!a.isValidUnitWithoutFunction(c)||!a.isValidUnitWithoutFunction(b)&&(!(!a.isValidFunctionWithoutVendorPrefix(b)||!a.isValidFunctionWithoutVendorPrefix(c))||k(a,b,c))))}function n(a){var b=j(a);return function(a,c,d){return m(a,c,d)||b(a,c,d)}}function o(a,b,c){return!(!p(a,b,c,0,!0)&&!a.isValidZIndex(c))&&(!(!a.isValidVariable(b)||!a.isValidVariable(c))||a.isValidZIndex(c))}var p=a("./properties/understandable");b.exports={generic:{color:f,components:g,image:h,unit:m},property:{backgroundAttachment:i("background-attachment"),backgroundClip:j("background-clip"),backgroundOrigin:i("background-origin"),backgroundPosition:d,backgroundRepeat:i("background-repeat"),backgroundSize:e,bottom:n("bottom"),borderCollapse:i("border-collapse"),borderStyle:j("*-style"),clear:j("clear"),cursor:j("cursor"),display:j("display"),float:j("float"),fontStyle:j("font-style"),left:n("left"),fontWeight:j("font-weight"),listStyleType:j("list-style-type"),listStylePosition:j("list-style-position"),outlineStyle:j("*-style"),overflow:j("overflow"),position:j("position"),right:n("right"),textAlign:j("text-align"),textDecoration:j("text-decoration"),textOverflow:j("text-overflow"),textShadow:l,top:n("top"),transform:k,verticalAlign:n("vertical-align"),visibility:j("visibility"),whiteSpace:j("white-space"),zIndex:o}}},{"./properties/understandable":40}],21:[function(a,b,c){function d(a){for(var b=e(a),c=a.components.length-1;c>=0;c--){var d=e(a.components[c]);d.value=a.components[c].value.slice(0),b.components.unshift(d)}return b.dirty=!0,b.value=a.value.slice(0),b}function e(a){var b=f([g.PROPERTY,[g.PROPERTY_NAME,a.name]]);return b.important=a.important,b.hack=a.hack,b.unused=!1,b}var f=a("../wrap-for-optimizing").single,g=a("../../tokenizer/token");b.exports={deep:d,shallow:e}},{"../../tokenizer/token":82,"../wrap-for-optimizing":57}],22:[function(a,b,c){var d=a("./break-up"),e=a("./can-override"),f=a("./restore"),g=a("../../utils/override"),h={background:{canOverride:e.generic.components([e.generic.image,e.property.backgroundPosition,e.property.backgroundSize,e.property.backgroundRepeat,e.property.backgroundAttachment,e.property.backgroundOrigin,e.property.backgroundClip,e.generic.color]),components:["background-image","background-position","background-size","background-repeat","background-attachment","background-origin","background-clip","background-color"],breakUp:d.multiplex(d.background),defaultValue:"0 0",restore:f.multiplex(f.background),shortestValue:"0",shorthand:!0},"background-attachment":{canOverride:e.property.backgroundAttachment,componentOf:["background"],defaultValue:"scroll"},"background-clip":{canOverride:e.property.backgroundClip,componentOf:["background"],defaultValue:"border-box",shortestValue:"border-box"},"background-color":{canOverride:e.generic.color,componentOf:["background"],defaultValue:"transparent",multiplexLastOnly:!0,nonMergeableValue:"none",shortestValue:"red"},"background-image":{canOverride:e.generic.image,componentOf:["background"],defaultValue:"none"},"background-origin":{canOverride:e.property.backgroundOrigin,componentOf:["background"],defaultValue:"padding-box",shortestValue:"border-box"},"background-position":{canOverride:e.property.backgroundPosition,componentOf:["background"],defaultValue:["0","0"],doubleValues:!0,shortestValue:"0"},"background-repeat":{canOverride:e.property.backgroundRepeat,componentOf:["background"],defaultValue:["repeat"],doubleValues:!0},"background-size":{canOverride:e.property.backgroundSize,componentOf:["background"],defaultValue:["auto"],doubleValues:!0,shortestValue:"0 0"},bottom:{canOverride:e.property.bottom,defaultValue:"auto"},border:{breakUp:d.border,canOverride:e.generic.components([e.generic.unit,e.property.borderStyle,e.generic.color]),components:["border-width","border-style","border-color"],defaultValue:"none",overridesShorthands:["border-bottom","border-left","border-right","border-top"],restore:f.withoutDefaults,shorthand:!0,shorthandComponents:!0},"border-bottom":{breakUp:d.border,canOverride:e.generic.components([e.generic.unit,e.property.borderStyle,e.generic.color]),components:["border-bottom-width","border-bottom-style","border-bottom-color"],defaultValue:"none",restore:f.withoutDefaults,shorthand:!0},"border-bottom-color":{canOverride:e.generic.color,componentOf:["border-bottom","border-color"],defaultValue:"none"},"border-bottom-left-radius":{canOverride:e.generic.unit,componentOf:["border-radius"],defaultValue:"0",vendorPrefixes:["-moz-","-o-"]},"border-bottom-right-radius":{canOverride:e.generic.unit,componentOf:["border-radius"],defaultValue:"0",vendorPrefixes:["-moz-","-o-"]},"border-bottom-style":{canOverride:e.property.borderStyle,componentOf:["border-bottom","border-style"],defaultValue:"none"},"border-bottom-width":{canOverride:e.generic.unit,componentOf:["border-bottom","border-width"],defaultValue:"medium",shortestValue:"0"},"border-collapse":{canOverride:e.property.borderCollapse,defaultValue:"separate"},"border-color":{breakUp:d.fourValues,canOverride:e.generic.components([e.generic.color,e.generic.color,e.generic.color,e.generic.color]),componentOf:["border"],components:["border-top-color","border-right-color","border-bottom-color","border-left-color"],defaultValue:"none",restore:f.fourValues,shortestValue:"red",shorthand:!0},"border-left":{breakUp:d.border,canOverride:e.generic.components([e.generic.unit,e.property.borderStyle,e.generic.color]),components:["border-left-width","border-left-style","border-left-color"],defaultValue:"none",restore:f.withoutDefaults,shorthand:!0},"border-left-color":{canOverride:e.generic.color,componentOf:["border-color","border-left"],defaultValue:"none"},"border-left-style":{canOverride:e.property.borderStyle,componentOf:["border-left","border-style"],defaultValue:"none"},"border-left-width":{canOverride:e.generic.unit,componentOf:["border-left","border-width"],defaultValue:"medium",shortestValue:"0"},"border-radius":{breakUp:d.borderRadius,canOverride:e.generic.components([e.generic.unit,e.generic.unit,e.generic.unit,e.generic.unit]),components:["border-top-left-radius","border-top-right-radius","border-bottom-right-radius","border-bottom-left-radius"],defaultValue:"0",restore:f.borderRadius,shorthand:!0,vendorPrefixes:["-moz-","-o-"]},"border-right":{breakUp:d.border,canOverride:e.generic.components([e.generic.unit,e.property.borderStyle,e.generic.color]),components:["border-right-width","border-right-style","border-right-color"],defaultValue:"none",restore:f.withoutDefaults,shorthand:!0},"border-right-color":{canOverride:e.generic.color,componentOf:["border-color","border-right"],defaultValue:"none"},"border-right-style":{canOverride:e.property.borderStyle,componentOf:["border-right","border-style"],defaultValue:"none"},"border-right-width":{canOverride:e.generic.unit,componentOf:["border-right","border-width"],defaultValue:"medium",shortestValue:"0"},"border-style":{breakUp:d.fourValues,canOverride:e.generic.components([e.property.borderStyle,e.property.borderStyle,e.property.borderStyle,e.property.borderStyle]),componentOf:["border"],components:["border-top-style","border-right-style","border-bottom-style","border-left-style"],defaultValue:"none",restore:f.fourValues,shorthand:!0},"border-top":{breakUp:d.border,canOverride:e.generic.components([e.generic.unit,e.property.borderStyle,e.generic.color]),components:["border-top-width","border-top-style","border-top-color"],defaultValue:"none",restore:f.withoutDefaults,shorthand:!0},"border-top-color":{canOverride:e.generic.color,componentOf:["border-color","border-top"],defaultValue:"none"},"border-top-left-radius":{canOverride:e.generic.unit,componentOf:["border-radius"],defaultValue:"0",vendorPrefixes:["-moz-","-o-"]},"border-top-right-radius":{canOverride:e.generic.unit,componentOf:["border-radius"],defaultValue:"0",vendorPrefixes:["-moz-","-o-"]},"border-top-style":{canOverride:e.property.borderStyle,componentOf:["border-style","border-top"],defaultValue:"none"},"border-top-width":{canOverride:e.generic.unit,componentOf:["border-top","border-width"],defaultValue:"medium",shortestValue:"0"},"border-width":{breakUp:d.fourValues,canOverride:e.generic.components([e.generic.unit,e.generic.unit,e.generic.unit,e.generic.unit]),components:["border-top-width","border-right-width","border-bottom-width","border-left-width"],defaultValue:"medium",restore:f.fourValues,shortestValue:"0",shorthand:!0},clear:{canOverride:e.property.clear,defaultValue:"none"},color:{canOverride:e.generic.color,defaultValue:"transparent",shortestValue:"red"},cursor:{canOverride:e.property.cursor,defaultValue:"auto"},display:{canOverride:e.property.display},float:{canOverride:e.property.float,defaultValue:"none"},"font-size":{canOverride:e.generic.unit,defaultValue:"medium",shortestValue:"0"},"font-style":{canOverride:e.property.fontStyle,defaultValue:"normal"},"font-weight":{canOverride:e.property.fontWeight,defaultValue:"400",shortestValue:"400"},height:{canOverride:e.generic.unit,defaultValue:"auto",shortestValue:"0"},left:{canOverride:e.property.left,defaultValue:"auto"},"line-height":{canOverride:e.generic.unit,defaultValue:"normal",shortestValue:"0"},"list-style":{canOverride:e.generic.components([e.property.listStyleType,e.property.listStylePosition,e.property.listStyleImage]),components:["list-style-type","list-style-position","list-style-image"],breakUp:d.listStyle,restore:f.withoutDefaults,defaultValue:"outside",shortestValue:"none",shorthand:!0},"list-style-image":{canOverride:e.generic.image,componentOf:["list-style"],defaultValue:"none"},"list-style-position":{canOverride:e.property.listStylePosition,componentOf:["list-style"],defaultValue:"outside",shortestValue:"inside"},"list-style-type":{canOverride:e.property.listStyleType,componentOf:["list-style"],defaultValue:"decimal|disc",shortestValue:"none"},margin:{breakUp:d.fourValues,canOverride:e.generic.components([e.generic.unit,e.generic.unit,e.generic.unit,e.generic.unit]),components:["margin-top","margin-right","margin-bottom","margin-left"],defaultValue:"0",restore:f.fourValues,shorthand:!0},"margin-bottom":{canOverride:e.generic.unit,componentOf:["margin"],defaultValue:"0"},"margin-left":{canOverride:e.generic.unit,componentOf:["margin"],defaultValue:"0"},"margin-right":{canOverride:e.generic.unit,componentOf:["margin"],defaultValue:"0"},"margin-top":{canOverride:e.generic.unit,componentOf:["margin"],defaultValue:"0"},outline:{canOverride:e.generic.components([e.generic.color,e.property.outlineStyle,e.generic.unit]),components:["outline-color","outline-style","outline-width"],breakUp:d.outline,restore:f.withoutDefaults,defaultValue:"0",shorthand:!0},"outline-color":{canOverride:e.generic.color,componentOf:["outline"],defaultValue:"invert",shortestValue:"red"},"outline-style":{canOverride:e.property.outlineStyle,componentOf:["outline"],defaultValue:"none"},"outline-width":{canOverride:e.generic.unit,componentOf:["outline"],defaultValue:"medium",shortestValue:"0"},overflow:{canOverride:e.property.overflow,
-defaultValue:"visible"},"overflow-x":{canOverride:e.property.overflow,defaultValue:"visible"},"overflow-y":{canOverride:e.property.overflow,defaultValue:"visible"},padding:{breakUp:d.fourValues,canOverride:e.generic.components([e.generic.unit,e.generic.unit,e.generic.unit,e.generic.unit]),components:["padding-top","padding-right","padding-bottom","padding-left"],defaultValue:"0",restore:f.fourValues,shorthand:!0},"padding-bottom":{canOverride:e.generic.unit,componentOf:["padding"],defaultValue:"0"},"padding-left":{canOverride:e.generic.unit,componentOf:["padding"],defaultValue:"0"},"padding-right":{canOverride:e.generic.unit,componentOf:["padding"],defaultValue:"0"},"padding-top":{canOverride:e.generic.unit,componentOf:["padding"],defaultValue:"0"},position:{canOverride:e.property.position,defaultValue:"static"},right:{canOverride:e.property.right,defaultValue:"auto"},"text-align":{canOverride:e.property.textAlign,defaultValue:"left|right"},"text-decoration":{canOverride:e.property.textDecoration,defaultValue:"none"},"text-overflow":{canOverride:e.property.textOverflow,defaultValue:"none"},"text-shadow":{canOverride:e.property.textShadow,defaultValue:"none"},top:{canOverride:e.property.top,defaultValue:"auto"},transform:{canOverride:e.property.transform,vendorPrefixes:["-moz-","-ms-","-webkit-"]},"vertical-align":{canOverride:e.property.verticalAlign,defaultValue:"baseline"},visibility:{canOverride:e.property.visibility,defaultValue:"visible"},"white-space":{canOverride:e.property.whiteSpace,defaultValue:"normal"},width:{canOverride:e.generic.unit,defaultValue:"auto",shortestValue:"0"},"z-index":{canOverride:e.property.zIndex,defaultValue:"auto"}},i={};for(var j in h){var k=h[j];if("vendorPrefixes"in k){for(var l=0;l<k.vendorPrefixes.length;l++){var m=k.vendorPrefixes[l],n=function(a,b){var c=g(h[a],{});return"componentOf"in c&&(c.componentOf=c.componentOf.map(function(a){return b+a})),"components"in c&&(c.components=c.components.map(function(a){return b+a})),c}(j,m);delete n.vendorPrefixes,i[m+j]=n}delete k.vendorPrefixes}}b.exports=g(h,i)},{"../../utils/override":93,"./break-up":19,"./can-override":20,"./restore":48}],23:[function(a,b,c){function d(a){var b,c,i,j,k,l,m=[];if(a[0]==f.RULE)for(b=!/[\.\+>~]/.test(g(a[1])),k=0,l=a[2].length;k<l;k++)c=a[2][k],c[0]==f.PROPERTY&&(i=c[1][1],0!==i.length&&0!==i.indexOf("--")&&(j=h(c,k),m.push([i,j,e(i),a[2][k],i+":"+j,a[1],b])));else if(a[0]==f.NESTED_BLOCK)for(k=0,l=a[2].length;k<l;k++)m=m.concat(d(a[2][k]));return m}function e(a){return"list-style"==a?a:a.indexOf("-radius")>0?"border-radius":"border-collapse"==a||"border-spacing"==a||"border-image"==a?a:0===a.indexOf("border-")&&/^border\-\w+\-\w+$/.test(a)?a.match(/border\-\w+/)[0]:0===a.indexOf("border-")&&/^border\-\w+$/.test(a)?"border":0===a.indexOf("text-")?a:"-chrome-"==a?a:a.replace(/^\-\w+\-/,"").match(/([a-zA-Z]+)/)[0].toLowerCase()}var f=a("../../tokenizer/token"),g=a("../../writer/one-time").rules,h=a("../../writer/one-time").value;b.exports=d},{"../../tokenizer/token":82,"../../writer/one-time":96}],24:[function(a,b,c){function d(a){this.name="InvalidPropertyError",this.message=a,this.stack=(new Error).stack}d.prototype=Object.create(Error.prototype),d.prototype.constructor=d,b.exports=d},{}],25:[function(a,b,c){function d(a,b,c){var d,h,i,j=m(a,l.COMMA);for(h=0,i=j.length;h<i;h++)if(d=j[h],0===d.length||e(d)||d.indexOf(l.COLON)>-1&&!g(d,f(d),b,c))return!1;return!0}function e(a){return n.test(a)}function f(a){var b,c,d,e,f,g,h=[],i=[],j=s.ROOT,k=0,m=!1,n=!1;for(f=0,g=a.length;f<g;f++)b=a[f],e=!d&&r.test(b),c=j==s.DOUBLE_QUOTE||j==s.SINGLE_QUOTE,d?i.push(b):b==l.DOUBLE_QUOTE&&j==s.ROOT?(i.push(b),j=s.DOUBLE_QUOTE):b==l.DOUBLE_QUOTE&&j==s.DOUBLE_QUOTE?(i.push(b),j=s.ROOT):b==l.SINGLE_QUOTE&&j==s.ROOT?(i.push(b),j=s.SINGLE_QUOTE):b==l.SINGLE_QUOTE&&j==s.SINGLE_QUOTE?(i.push(b),j=s.ROOT):c?i.push(b):b==l.OPEN_ROUND_BRACKET?(i.push(b),k++):b==l.CLOSE_ROUND_BRACKET&&1==k&&m?(i.push(b),h.push(i.join("")),k--,i=[],m=!1):b==l.CLOSE_ROUND_BRACKET?(i.push(b),k--):b==l.COLON&&0===k&&m&&!n?(h.push(i.join("")),i=[],i.push(b)):b!=l.COLON||0!==k||n?b==l.SPACE&&0===k&&m?(h.push(i.join("")),i=[],m=!1):e&&0===k&&m?(h.push(i.join("")),i=[],m=!1):i.push(b):(i=[],i.push(b),m=!0),d=b==l.BACK_SLASH,n=b==l.COLON;return i.length>0&&m&&h.push(i.join("")),h}function g(a,b,c,d){return h(b,c,d)&&i(b)&&(b.length<2||!j(a,b))&&(b.length<2||!k(b))}function h(a,b,c){var d,e,f,g;for(f=0,g=a.length;f<g;f++)if(d=a[f],e=d.indexOf(l.OPEN_ROUND_BRACKET)>-1?d.substring(0,d.indexOf(l.OPEN_ROUND_BRACKET)):d,-1===b.indexOf(e)&&-1===c.indexOf(e))return!1;return!0}function i(a){var b,c,d,e,f,g;for(f=0,g=a.length;f<g;f++){if(b=a[f],d=b.indexOf(l.OPEN_ROUND_BRACKET),e=d>-1,c=e?b.substring(0,d):b,e&&-1==q.indexOf(c))return!1;if(!e&&q.indexOf(c)>-1)return!1}return!0}function j(a,b){var c,d,e,f,g,h,i,j,k=0;for(i=0,j=b.length;i<j&&(c=b[i],e=b[i+1]);i++)if(d=a.indexOf(c,k),f=a.indexOf(c,d+1),k=f,d+c.length==f&&(g=c.indexOf(l.OPEN_ROUND_BRACKET)>-1?c.substring(0,c.indexOf(l.OPEN_ROUND_BRACKET)):c,h=e.indexOf(l.OPEN_ROUND_BRACKET)>-1?e.substring(0,e.indexOf(l.OPEN_ROUND_BRACKET)):e,g!=p||h!=p))return!0;return!1}function k(a){var b,c,d,e=o.test(a[0]);for(c=0,d=a.length;c<d;c++)if(b=a[c],o.test(b)!=e)return!0;return!1}var l=a("../../tokenizer/marker"),m=a("../../utils/split"),n=/\/deep\//,o=/^::/,p=":not",q=[":dir",":lang",":not",":nth-child",":nth-last-child",":nth-last-of-type",":nth-of-type"],r=/[>\+~]/,s={DOUBLE_QUOTE:"double-quote",SINGLE_QUOTE:"single-quote",ROOT:"root"};b.exports=d},{"../../tokenizer/marker":81,"../../utils/split":94}],26:[function(a,b,c){function d(a,b){for(var c=[null,[],[]],d=b.options,m=d.compatibility.selectors.adjacentSpace,n=d.level[i.One].selectorsSortingMethod,o=d.compatibility.selectors.mergeablePseudoClasses,p=d.compatibility.selectors.mergeablePseudoElements,q=0,r=a.length;q<r;q++){var s=a[q];s[0]==l.RULE?c[0]==l.RULE&&k(s[1])==k(c[1])?(Array.prototype.push.apply(c[2],s[2]),f(c[2],!0,!0,b),s[2]=[]):c[0]==l.RULE&&j(s[2])==j(c[2])&&e(k(s[1]),o,p)&&e(k(c[1]),o,p)&&c[1].length<8191?(c[1]=h(c[1].concat(s[1]),!1,m,!1,b.warnings),c[1]=c.length>1?g(c[1],n):c[1],s[2]=[]):c=s:c=[null,[],[]]}}var e=a("./is-mergeable"),f=a("./properties/optimize"),g=a("../level-1/sort-selectors"),h=a("../level-1/tidy-rules"),i=a("../../options/optimization-level").OptimizationLevel,j=a("../../writer/one-time").body,k=a("../../writer/one-time").rules,l=a("../../tokenizer/token");b.exports=d},{"../../options/optimization-level":63,"../../tokenizer/token":82,"../../writer/one-time":96,"../level-1/sort-selectors":15,"../level-1/tidy-rules":18,"./is-mergeable":25,"./properties/optimize":36}],27:[function(a,b,c){function d(a,b){for(var c=b.options.level[k.Two].mergeSemantically,d=b.cache.specificity,g={},i=[],m=a.length-1;m>=0;m--){var n=a[m];if(n[0]==l.NESTED_BLOCK){var o=j(n[1]),p=g[o];p||(p=[],g[o]=p),p.push(m)}}for(var q in g){var r=g[q];a:for(var s=r.length-1;s>0;s--){var t=r[s],u=a[t],v=r[s-1],w=a[v];b:for(var x=1;x>=-1;x-=2){for(var y=1==x,z=y?t+1:v-1,A=y?v:t,B=y?1:-1,C=y?u:w,D=y?w:u,E=h(C);z!=A;){var F=h(a[z]);if(z+=B,!(c&&e(E,F,d)||f(E,F,d)))continue b}D[2]=y?C[2].concat(D[2]):D[2].concat(C[2]),C[2]=[],i.push(D);continue a}}}return i}function e(a,b,c){var d,e,f,h,j,k,l,m;for(j=0,k=a.length;j<k;j++)for(d=a[j],e=d[5],l=0,m=b.length;l<m;l++)if(f=b[l],h=f[5],i(e,h,!0)&&!g(d,f,c))return!1;return!0}var f=a("./reorderable").canReorder,g=a("./reorderable").canReorderSingle,h=a("./extract-properties"),i=a("./rules-overlap"),j=a("../../writer/one-time").rules,k=a("../../options/optimization-level").OptimizationLevel,l=a("../../tokenizer/token");b.exports=d},{"../../options/optimization-level":63,"../../tokenizer/token":82,"../../writer/one-time":96,"./extract-properties":23,"./reorderable":46,"./rules-overlap":50}],28:[function(a,b,c){function d(a){return/\.|\*| :/.test(a)}function e(a){var b=n(a[1]);return b.indexOf("__")>-1||b.indexOf("--")>-1}function f(a){return a.replace(/--[^ ,>\+~:]+/g,"")}function g(a,b){var c=f(n(a[1]));for(var d in b){var e=b[d],g=f(n(e[1]));(g.indexOf(c)>-1||c.indexOf(g)>-1)&&delete b[d]}}function h(a,b){for(var c=b.options,f=c.level[l.Two].mergeSemantically,h=c.compatibility.selectors.adjacentSpace,p=c.level[l.One].selectorsSortingMethod,q=c.compatibility.selectors.mergeablePseudoClasses,r=c.compatibility.selectors.mergeablePseudoElements,s={},t=a.length-1;t>=0;t--){var u=a[t];if(u[0]==o.RULE){u[2].length>0&&!f&&d(n(u[1]))&&(s={}),u[2].length>0&&f&&e(u)&&g(u,s);var v=m(u[2]),w=s[v];w&&i(n(u[1]),q,r)&&i(n(w[1]),q,r)&&(u[2].length>0?(u[1]=k(w[1].concat(u[1]),!1,h,!1,b.warnings),u[1]=u[1].length>1?j(u[1],p):u[1]):u[1]=w[1].concat(u[1]),w[2]=[],s[v]=null),s[m(u[2])]=u}}}var i=a("./is-mergeable"),j=a("../level-1/sort-selectors"),k=a("../level-1/tidy-rules"),l=a("../../options/optimization-level").OptimizationLevel,m=a("../../writer/one-time").body,n=a("../../writer/one-time").rules,o=a("../../tokenizer/token");b.exports=h},{"../../options/optimization-level":63,"../../tokenizer/token":82,"../../writer/one-time":96,"../level-1/sort-selectors":15,"../level-1/tidy-rules":18,"./is-mergeable":25}],29:[function(a,b,c){function d(a,b){var c,d=b.cache.specificity,j={},k=[];for(c=a.length-1;c>=0;c--)if(a[c][0]==i.RULE&&0!==a[c][2].length){var l=h(a[c][1]);j[l]=[c].concat(j[l]||[]),2==j[l].length&&k.push(l)}for(c=k.length-1;c>=0;c--){var m=j[k[c]];a:for(var n=m.length-1;n>0;n--){var o=m[n-1],p=a[o],q=m[n],r=a[q];b:for(var s=1;s>=-1;s-=2){for(var t=1==s,u=t?o+1:q-1,v=t?q:o,w=t?1:-1,x=t?p:r,y=t?r:p,z=f(x);u!=v;){var A=f(a[u]);u+=w;var B=t?e(z,A,d):e(A,z,d);if(!B&&!t)continue a;if(!B&&t)continue b}t?(Array.prototype.push.apply(x[2],y[2]),y[2]=x[2]):Array.prototype.push.apply(y[2],x[2]),g(y[2],!0,!0,b),x[2]=[]}}}}var e=a("./reorderable").canReorder,f=a("./extract-properties"),g=a("./properties/optimize"),h=a("../../writer/one-time").rules,i=a("../../tokenizer/token");b.exports=d},{"../../tokenizer/token":82,"../../writer/one-time":96,"./extract-properties":23,"./properties/optimize":36,"./reorderable":46}],30:[function(a,b,c){function d(a){for(var b=0,c=a.length;b<c;b++){var e=a[b],f=!1;switch(e[0]){case s.RULE:f=0===e[1].length||0===e[2].length;break;case s.NESTED_BLOCK:d(e[2]),f=0===e[2].length;break;case s.AT_RULE_BLOCK:f=0===e[2].length}f&&(a.splice(b,1),b--,c--)}}function e(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];if(e[0]==s.NESTED_BLOCK){var f=/@(-moz-|-o-|-webkit-)?keyframes/.test(e[1][0][1]);g(e[2],b,!f)}}}function f(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];switch(e[0]){case s.RULE:q(e[2],!0,!0,b);break;case s.NESTED_BLOCK:f(e[2],b)}}}function g(a,b,c){var q,s,t=b.options.level[r.Two];if(e(a,b),f(a,b),t.removeDuplicateRules&&o(a,b),t.mergeAdjacentRules&&h(a,b),t.reduceNonAdjacentRules&&l(a,b),t.mergeNonAdjacentRules&&"body"!=t.mergeNonAdjacentRules&&k(a,b),t.mergeNonAdjacentRules&&"selector"!=t.mergeNonAdjacentRules&&j(a,b),t.restructureRules&&t.mergeAdjacentRules&&c&&(p(a,b),h(a,b)),t.restructureRules&&!t.mergeAdjacentRules&&c&&p(a,b),t.removeDuplicateFontRules&&m(a,b),t.removeDuplicateMediaBlocks&&n(a,b),t.mergeMedia)for(q=i(a,b),s=q.length-1;s>=0;s--)g(q[s][2],b,!1);return d(a),a}var h=a("./merge-adjacent"),i=a("./merge-media-queries"),j=a("./merge-non-adjacent-by-body"),k=a("./merge-non-adjacent-by-selector"),l=a("./reduce-non-adjacent"),m=a("./remove-duplicate-font-at-rules"),n=a("./remove-duplicate-media-queries"),o=a("./remove-duplicates"),p=a("./restructure"),q=a("./properties/optimize"),r=a("../../options/optimization-level").OptimizationLevel,s=a("../../tokenizer/token");b.exports=g},{"../../options/optimization-level":63,"../../tokenizer/token":82,"./merge-adjacent":26,"./merge-media-queries":27,"./merge-non-adjacent-by-body":28,"./merge-non-adjacent-by-selector":29,"./properties/optimize":36,"./reduce-non-adjacent":42,"./remove-duplicate-font-at-rules":43,"./remove-duplicate-media-queries":44,"./remove-duplicates":45,"./restructure":49}],31:[function(a,b,c){function d(a,b,c){var d,f,g,h=b.value.length,i=c.value.length,j=Math.max(h,i),k=Math.min(h,i)-1;for(g=0;g<j;g++)if(d=b.value[g]&&b.value[g][1]||d,f=c.value[g]&&c.value[g][1]||f,d!=e.COMMA&&f!=e.COMMA&&!a(d,f,g,g<=k))return!1;return!0}var e=a("../../../tokenizer/marker");b.exports=d},{"../../../tokenizer/marker":81}],32:[function(a,b,c){function d(a,b){var c=e(b);return f(a,c)||g(a,c)}function e(a){return function(b){return a.name===b.name}}function f(a,b){return a.components.filter(b)[0]}function g(a,b){var c,d,e,g;if(h[a.name].shorthandComponents)for(e=0,g=a.components.length;e<g;e++)if(c=a.components[e],d=f(c,b))return d}var h=a("../compactable");b.exports=d},{"../compactable":22}],33:[function(a,b,c){function d(a){for(var b=a.value.length-1;b>=0;b--)if("inherit"==a.value[b][1])return!0;return!1}b.exports=d},{}],34:[function(a,b,c){function d(a,b,c){return e(a,b)||!c&&!!g[a.name].shorthandComponents&&f(a,b)}function e(a,b){var c=g[a.name];return"components"in c&&c.components.indexOf(b.name)>-1}function f(a,b){return a.components.some(function(a){return e(a,b)})}var g=a("../compactable");b.exports=d},{"../compactable":22}],35:[function(a,b,c){function d(a){var b;for(var c in a){if(void 0!==b&&a[c].important!=b)return!0;b=a[c].important}return!1}function e(a,b){var c,d,e,f,g=[];for(f in a)c=a[f],d=c.all[c.position],e=d[b][d[b].length-1],Array.prototype.push.apply(g,e);return g}function f(a,b,c,d){var f,g,h,p,q=l[c],r=[o.PROPERTY,[o.PROPERTY_NAME,c],[o.PROPERTY_VALUE,q.defaultValue]],s=n(r);s.shorthand=!0,s.dirty=!0,k([s],d,[]);for(var t=0,u=q.components.length;t<u;t++){var v=b[q.components[t]];if(j(v))return;if(h=l[v.name].canOverride,!i(h.bind(null,d),s.components[t],v))return;s.components[t]=m(v),s.important=v.important,p=v.all}for(var w in b)b[w].unused=!0;f=e(b,1),r[1].push(f),g=e(b,2),r[2].push(g),s.position=p.length,s.all=p,s.all.push(r),a.push(s)}function g(a,b,c,e){var g=a[b];for(var h in c)if(void 0===g||h!=g.name){var i=l[h],j=c[h];i.components.length>Object.keys(j).length?delete c[h]:d(j)||f(a,j,h,e)}}function h(a,b){var c,d,e,f,h,i,j,k={};if(!(a.length<3)){for(f=0,h=a.length;f<h;f++)if(e=a[f],!e.unused&&!e.hack&&!e.block&&(c=l[e.name])&&c.componentOf)if(e.shorthand)g(a,f,k,b);else for(i=0,j=c.componentOf.length;i<j;i++)d=c.componentOf[i],k[d]=k[d]||{},k[d][e.name]=e;g(a,f,k,b)}}var i=a("./every-values-pair"),j=a("./has-inherit"),k=a("./populate-components"),l=a("../compactable"),m=a("../clone").deep,n=a("../../wrap-for-optimizing").single,o=a("../../../tokenizer/token");b.exports=h},{"../../../tokenizer/token":82,"../../wrap-for-optimizing":57,"../clone":21,"../compactable":22,"./every-values-pair":31,"./has-inherit":33,"./populate-components":39}],36:[function(a,b,c){function d(a,b,c,m){var n,o,p,q=i(a,!1);for(g(q,m.validator,m.warnings),o=0,p=q.length;o<p;o++)n=q[o],n.block&&d(n.value[0][1],b,c,m);b&&m.options.level[l.Two].overrideProperties&&f(q,c,m.options.compatibility,m.validator),c&&m.options.level[l.Two].mergeIntoShorthands&&e(q,m.validator),k(q,h),j(q)}var e=a("./merge-into-shorthands"),f=a("./override-properties"),g=a("./populate-components"),h=a("../restore-with-components"),i=a("../../wrap-for-optimizing").all,j=a("../../remove-unused"),k=a("../../restore-from-optimizing"),l=a("../../../options/optimization-level").OptimizationLevel;b.exports=d},{"../../../options/optimization-level":63,"../../remove-unused":54,"../../restore-from-optimizing":55,"../../wrap-for-optimizing":57,"../restore-with-components":47,"./merge-into-shorthands":35,"./override-properties":37,"./populate-components":39}],37:[function(a,b,c){function d(a,b){for(var c=0;c<a.components.length;c++){var d=a.components[c],e=B[d.name],f=e&&e.canOverride||f.sameValue,g=E(d);if(g.value=[[G.PROPERTY_VALUE,e.defaultValue]],!w(f.bind(null,b),g,d))return!0}return!1}function e(a,b){b.unused=!0,j(b,k(a)),a.value=b.value}function f(a,b){b.unused=!0,a.multiplex=!0,a.value=b.value}function g(a,b){b.unused=!0,a.value=b.value}function h(a,b){b.multiplex?f(a,b):a.multiplex?e(a,b):g(a,b)}function i(a,b){b.unused=!0;for(var c=0,d=a.components.length;c<d;c++)h(a.components[c],b.components[c],a.multiplex)}function j(a,b){a.multiplex=!0;for(var c=0,d=a.components.length;c<d;c++){var e=a.components[c];if(!e.multiplex)for(var f=e.value.slice(0),g=1;g<b;g++)e.value.push([G.PROPERTY_VALUE,H.COMMA]),Array.prototype.push.apply(e.value,f)}}function k(a){for(var b=0,c=0,d=a.value.length;c<d;c++)a.value[c][1]==H.COMMA&&b++;return b+1}function l(a){var b=[G.PROPERTY,[G.PROPERTY_NAME,a.name]].concat(a.value);return I([b],0).length}function m(a,b,c){for(var d=0,e=b;e>=0&&(a[e].name!=c||a[e].unused||d++,!(d>1));e--);return d>1}function n(a,b){for(var c=0,d=a.components.length;c<d;c++)if(o(b.isValidFunction,a.components[c]))return!0;return!1}function o(a,b){for(var c=0,d=b.value.length;c<d;c++)if(b.value[c][1]!=H.COMMA&&a(b.value[c][1]))return!0;return!1}function p(a,b){if(!a.multiplex&&!b.multiplex||a.multiplex&&b.multiplex)return!1;var c,d=a.multiplex?a:b,g=a.multiplex?b:a,h=C(d);F([h],D);var i=C(g);F([i],D);var m=l(h)+1+l(i);return a.multiplex?(c=x(h,i),e(c,i)):(c=x(i,h),j(i,k(h)),f(c,h)),F([i],D),m<=l(i)}function q(a){return a.name in B}function r(a,b){return!a.multiplex&&("background"==a.name||"background-image"==a.name)&&b.multiplex&&("background"==b.name||"background-image"==b.name)&&s(b.value)}function s(a){for(var b=t(a),c=0,d=b.length;c<d;c++)if(1==b[c].length&&"none"==b[c][0][1])return!0;return!1}function t(a){for(var b=[],c=0,d=[],e=a.length;c<e;c++){var f=a[c];f[1]==H.COMMA?(b.push(d),d=[]):d.push(f)}return b.push(d),b}function u(a,b,c,e){var f,g,l,s,t,u,C,D,E,F,G;a:for(E=a.length-1;E>=0;E--)if(g=a[E],q(g)&&!g.block){f=B[g.name].canOverride;b:for(F=E-1;F>=0;F--)if(l=a[F],q(l)&&!l.block&&!l.unused&&!g.unused&&(!l.hack||g.hack||g.important)&&(l.hack||l.important||!g.hack)&&(l.important!=g.important||l.hack[0]==g.hack[0])&&!(l.important==g.important&&(l.hack[0]!=g.hack[0]||l.hack[1]&&l.hack[1]!=g.hack[1])||v(g)||r(l,g)))if(g.shorthand&&y(g,l)){if(!g.important&&l.important)continue;if(!A([l],g.components))continue;if(!o(e.isValidFunction,l)&&n(g,e))continue;s=x(g,l),f=B[l.name].canOverride,w(f.bind(null,e),l,s)&&(l.unused=!0)}else if(g.shorthand&&z(g,l)){if(!g.important&&l.important)continue;if(!A([l],g.components))continue;if(!o(e.isValidFunction,l)&&n(g,e))continue;for(t=l.shorthand?l.components:[l],G=t.length-1;G>=0;G--)if(u=t[G],C=x(g,u),f=B[u.name].canOverride,!w(f.bind(null,e),l,C))continue b;l.unused=!0}else if(b&&l.shorthand&&!g.shorthand&&y(l,g,!0)){if(g.important&&!l.important)continue;if(!g.important&&l.important){g.unused=!0;continue}if(m(a,E-1,l.name))continue;if(n(l,e))continue;if(s=x(l,g),w(f.bind(null,e),s,g)){var H=!c.properties.backgroundClipMerging&&s.name.indexOf("background-clip")>-1||!c.properties.backgroundOriginMerging&&s.name.indexOf("background-origin")>-1||!c.properties.backgroundSizeMerging&&s.name.indexOf("background-size")>-1,I=B[g.name].nonMergeableValue===g.value[0][1];if(H||I)continue;if(!c.properties.merging&&d(l,e))continue;if(s.value[0][1]!=g.value[0][1]&&(v(l)||v(g)))continue;if(p(l,g))continue;!l.multiplex&&g.multiplex&&j(l,k(g)),h(s,g),l.dirty=!0}}else if(b&&l.shorthand&&g.shorthand&&l.name==g.name){if(!l.multiplex&&g.multiplex)continue;if(!g.important&&l.important){g.unused=!0;continue a}if(g.important&&!l.important){l.unused=!0;continue}for(G=l.components.length-1;G>=0;G--){var J=l.components[G],K=g.components[G];if(f=B[J.name].canOverride,!w(f.bind(null,e),J,K))continue a}i(l,g),l.dirty=!0}else if(b&&l.shorthand&&g.shorthand&&y(l,g)){if(!l.important&&g.important)continue;if(s=x(l,g),f=B[g.name].canOverride,!w(f.bind(null,e),s,g))continue;if(l.important&&!g.important){g.unused=!0;continue}var L=B[g.name].restore(g,B);if(L.length>1)continue;s=x(l,g),h(s,g),g.dirty=!0}else if(l.name==g.name){if(D=!0,g.shorthand)for(G=g.components.length-1;G>=0&&D;G--)u=l.components[G],C=g.components[G],f=B[C.name].canOverride,D=D&&w(f.bind(null,e),u,C);else f=B[g.name].canOverride,D=w(f.bind(null,e),l,g);if(l.important&&!g.important&&D){g.unused=!0;continue}if(!l.important&&g.important&&D){l.unused=!0;continue}if(!D)continue;l.unused=!0}}}var v=a("./has-inherit"),w=a("./every-values-pair"),x=a("./find-component-in"),y=a("./is-component-of"),z=a("./overrides-non-component-shorthand"),A=a("./vendor-prefixes").same,B=a("../compactable"),C=a("../clone").deep,C=a("../clone").deep,D=a("../restore-with-components"),E=a("../clone").shallow,F=a("../../restore-from-optimizing"),G=a("../../../tokenizer/token"),H=a("../../../tokenizer/marker"),I=a("../../../writer/one-time").property;b.exports=u},{"../../../tokenizer/marker":81,"../../../tokenizer/token":82,"../../../writer/one-time":96,"../../restore-from-optimizing":55,"../clone":21,"../compactable":22,"../restore-with-components":47,"./every-values-pair":31,"./find-component-in":32,"./has-inherit":33,"./is-component-of":34,"./overrides-non-component-shorthand":38,"./vendor-prefixes":41}],38:[function(a,b,c){function d(a,b){return a.name in e&&"overridesShorthands"in e[a.name]&&e[a.name].overridesShorthands.indexOf(b.name)>-1}var e=a("../compactable");b.exports=d},{"../compactable":22}],39:[function(a,b,c){function d(a,b,c){for(var d,g,h,i=a.length-1;i>=0;i--){var j=a[i],k=e[j.name];if(k&&k.shorthand){j.shorthand=!0,j.dirty=!0;try{if(j.components=k.breakUp(j,e,b),k.shorthandComponents)for(g=0,h=j.components.length;g<h;g++)d=j.components[g],d.components=e[d.name].breakUp(d,e,b)}catch(a){if(!(a instanceof f))throw a;j.components=[],c.push(a.message)}j.components.length>0?j.multiplex=j.components[0].multiplex:j.unused=!0}}}var e=a("../compactable"),f=a("../invalid-property-error");b.exports=d},{"../compactable":22,"../invalid-property-error":24}],40:[function(a,b,c){function d(a,b,c,d,f){return!!e(b,c)&&(!f||a.isValidVariable(b)===a.isValidVariable(c))}var e=a("./vendor-prefixes").same;b.exports=d},{"./vendor-prefixes":41}],41:[function(a,b,c){function d(a){for(var b,c=[];null!==(b=f.exec(a));)-1==c.indexOf(b[0])&&c.push(b[0]);return c}function e(a,b){return d(a).sort().join(",")==d(b).sort().join(",")}var f=/(?:^|\W)(\-\w+\-)/g;b.exports={unique:d,same:e}},{}],42:[function(a,b,c){function d(a,b){for(var c=b.options,d=c.compatibility.selectors.mergeablePseudoClasses,h=c.compatibility.selectors.mergeablePseudoElements,j={},k=[],m=a.length-1;m>=0;m--){var o=a[m];if(o[0]==l.RULE&&0!==o[2].length)for(var p=n(o[1]),q=o[1].length>1&&i(p,d,h),r=e(o[1]),s=q?[p].concat(r):[p],t=0,u=s.length;t<u;t++){var v=s[t];j[v]?k.push(v):j[v]=[],j[v].push({where:m,list:r,isPartial:q&&t>0,isComplex:q&&0===t})}}f(a,k,j,c,b),g(a,j,c,b)}function e(a){for(var b=[],c=0;c<a.length;c++)b.push([a[c][1]]);return b}function f(a,b,c,d,e){function f(a,b){return l[a].isPartial&&0===b.length}function g(a,b,c,d){l[c-d-1].isPartial||(a[2]=b)}for(var i=0,j=b.length;i<j;i++){var k=b[i],l=c[k];h(a,l,{filterOut:f,callback:g},d,e)}}function g(a,b,c,d){function e(a){return k.data[a].where<k.intoPosition}function f(a,b,c,d){0===d&&k.reducedBodies.push(b)}var g=c.compatibility.selectors.mergeablePseudoClasses,j=c.compatibility.selectors.mergeablePseudoElements,k={};a:for(var l in b){var n=b[l];if(n[0].isComplex){var o=n[n.length-1].where,p=a[o],q=[],r=i(l,g,j)?n[0].list:[l];k.intoPosition=o,k.reducedBodies=q;for(var s=0,t=r.length;s<t;s++){var u=r[s],v=b[u];if(v.length<2)continue a;if(k.data=v,h(a,v,{filterOut:e,callback:f},c,d),m(q[q.length-1])!=m(q[0]))continue a}p[2]=q[0]}}}function h(a,b,c,d,e){for(var f=[],g=[],h=[],i=b.length-1;i>=0;i--)if(!c.filterOut(i,f)){var l=b[i].where,m=a[l],n=k(m[2]);f=f.concat(n),g.push(n),h.push(l)}j(f,!0,!1,e);for(var o=h.length,p=f.length-1,q=o-1;q>=0;)if((0===q||f[p]&&g[q].indexOf(f[p])>-1)&&p>-1)p--;else{var r=f.splice(p+1);c.callback(a[h[q]],r,o,q),q--}}var i=a("./is-mergeable"),j=a("./properties/optimize"),k=a("../../utils/clone-array"),l=a("../../tokenizer/token"),m=a("../../writer/one-time").body,n=a("../../writer/one-time").rules;b.exports=d},{"../../tokenizer/token":82,"../../utils/clone-array":84,"../../writer/one-time":96,"./is-mergeable":25,"./properties/optimize":36}],43:[function(a,b,c){function d(a){var b,c,d,h,i=[];for(d=0,h=a.length;d<h;d++)b=a[d],b[0]!=e.AT_RULE_BLOCK&&b[1][0][1]!=g||(c=f([b]),i.indexOf(c)>-1?b[2]=[]:i.push(c))}var e=a("../../tokenizer/token"),f=a("../../writer/one-time").all,g="@font-face";b.exports=d},{"../../tokenizer/token":82,"../../writer/one-time":96}],44:[function(a,b,c){function d(a){var b,c,d,h,i,j={};for(h=0,i=a.length;h<i;h++)c=a[h],c[0]==e.NESTED_BLOCK&&(d=g(c[1])+"%"+f(c[2]),b=j[d],b&&(b[2]=[]),j[d]=c)}var e=a("../../tokenizer/token"),f=a("../../writer/one-time").all,g=a("../../writer/one-time").rules;b.exports=d},{"../../tokenizer/token":82,"../../writer/one-time":96}],45:[function(a,b,c){function d(a){for(var b,c,d,h,i={},j=[],k=0,l=a.length;k<l;k++)c=a[k],c[0]==e.RULE&&(b=g(c[1]),i[b]&&1==i[b].length?j.push(b):i[b]=i[b]||[],i[b].push(k));for(k=0,l=j.length;k<l;k++){b=j[k],h=[];for(var m=i[b].length-1;m>=0;m--)c=a[i[b][m]],d=f(c[2]),h.indexOf(d)>-1?c[2]=[]:h.push(d)}}var e=a("../../tokenizer/token"),f=a("../../writer/one-time").body,g=a("../../writer/one-time").rules;b.exports=d},{"../../tokenizer/token":82,"../../writer/one-time":96}],46:[function(a,b,c){function d(a,b,c){for(var d=b.length-1;d>=0;d--)for(var f=a.length-1;f>=0;f--)if(!e(a[f],b[d],c))return!1;return!0}function e(a,b,c){var d=a[0],e=a[1],q=a[2],r=a[5],s=a[6],t=b[0],u=b[1],v=b[2],w=b[5],x=b[6];return!("font"==d&&"line-height"==t||"font"==t&&"line-height"==d)&&((!o.test(d)||!o.test(t))&&(!(q==v&&g(d)==g(t)&&f(d)^f(t))&&(("border"!=q||!p.test(v)||!("border"==d||d==v||e!=u&&h(d,t)))&&(("border"!=v||!p.test(q)||!("border"==t||t==q||e!=u&&h(d,t)))&&(("border"!=q||"border"!=v||d==t||!(i(d)&&j(t)||j(d)&&i(t)))&&(q!=v||(!(d!=t||q!=v||e!=u&&!k(e,u))||(d!=t&&q==v&&d!=q&&t!=v||(d!=t&&q==v&&e==u||(!(!x||!s||l(q)||l(v)||m(w,r,!1))||!n(r,w,c)))))))))))}function f(a){return/^\-(?:moz|webkit|ms|o)\-/.test(a)}function g(a){return a.replace(/^\-(?:moz|webkit|ms|o)\-/,"")}function h(a,b){return a.split("-").pop()==b.split("-").pop()}function i(a){return"border-top"==a||"border-right"==a||"border-bottom"==a||"border-left"==a}function j(a){return"border-color"==a||"border-style"==a||"border-width"==a}function k(a,b){return f(a)&&f(b)&&a.split("-")[1]!=b.split("-")[2]}function l(a){return"font"==a||"line-height"==a||"list-style"==a}var m=a("./rules-overlap"),n=a("./specificities-overlap"),o=/align\-items|box\-align|box\-pack|flex|justify/,p=/^border\-(top|right|bottom|left|color|style|width|radius)/;b.exports={canReorder:d,canReorderSingle:e}},{"./rules-overlap":50,"./specificities-overlap":51}],47:[function(a,b,c){function d(a){var b=e[a.name];return b&&b.shorthand?b.restore(a,e):a.value}var e=a("./compactable");b.exports=d},{"./compactable":22}],48:[function(a,b,c){function d(a){for(var b=0,c=a.length;b<c;b++){var d=a[b][1];if("inherit"!=d&&d!=l.COMMA&&d!=l.FORWARD_SLASH)return!1}return!0}function e(a,b,c){function e(a){Array.prototype.unshift.apply(j,a.value)}function f(a){var c=b[a.name];return c.doubleValues&&1==c.defaultValue.length?a.value[0][1]==c.defaultValue[0]&&(!a.value[1]||a.value[1][1]==c.defaultValue[0]):c.doubleValues&&1!=c.defaultValue.length?a.value[0][1]==c.defaultValue[0]&&(a.value[1]?a.value[1][1]:a.value[0][1])==c.defaultValue[1]:a.value[0][1]==c.defaultValue}for(var g,h,i=a.components,j=[],m=i.length-1;m>=0;m--){var n=i[m],o=f(n);if("background-clip"==n.name){var p=i[m-1],q=f(p);g=n.value[0][1]==p.value[0][1],h=!g&&(q&&!o||!q&&!o||!q&&o&&n.value[0][1]!=p.value[0][1]),g?e(p):h&&(e(n),e(p)),m--}else if("background-size"==n.name){var r=i[m-1],s=f(r);g=!s&&o,h=!g&&(s&&!o||!s&&!o),g?e(r):h?(e(n),j.unshift([k.PROPERTY_VALUE,l.FORWARD_SLASH]),e(r)):1==r.value.length&&e(r),m--}else{if(o||b[n.name].multiplexLastOnly&&!c)continue;e(n)}}return 0===j.length&&1==a.value.length&&"0"==a.value[0][1]&&j.push(a.value[0]),0===j.length&&j.push([k.PROPERTY_VALUE,b[a.name].defaultValue]),d(j)?[j[0]]:j}function f(a,b){if(a.multiplex){for(var c=j(a),d=j(a),e=0;e<4;e++){var f=a.components[e],h=j(a);h.value=[f.value[0]],c.components.push(h);var i=j(a);i.value=[f.value[1]||f.value[0]],d.components.push(i)}var m=g(c),n=g(d);return m.length!=n.length||m[0][1]!=n[0][1]||m.length>1&&m[1][1]!=n[1][1]||m.length>2&&m[2][1]!=n[2][1]||m.length>3&&m[3][1]!=n[3][1]?m.concat([[k.PROPERTY_VALUE,l.FORWARD_SLASH]]).concat(n):m}return g(a)}function g(a){var b=a.components,c=b[0].value[0],d=b[1].value[0],e=b[2].value[0],f=b[3].value[0];return c[1]==d[1]&&c[1]==e[1]&&c[1]==f[1]?[c]:c[1]==e[1]&&d[1]==f[1]?[c,d]:d[1]==f[1]?[c,d,e]:[c,d,e,f]}function h(a){return function(b,c){if(!b.multiplex)return a(b,c,!0);var d,e,f=0,g=[],h={};for(d=0,e=b.components[0].value.length;d<e;d++)b.components[0].value[d][1]==l.COMMA&&f++;for(d=0;d<=f;d++){for(var i=j(b),m=0,n=b.components.length;m<n;m++){var o=b.components[m],p=j(o);i.components.push(p);for(var q=h[p.name]||0,r=o.value.length;q<r;q++){if(o.value[q][1]==l.COMMA){h[p.name]=q+1;break}p.value.push(o.value[q])}}var s=d==f,t=a(i,c,s);Array.prototype.push.apply(g,t),d<f&&g.push([k.PROPERTY_VALUE,l.COMMA])}return g}}function i(a,b){for(var c=a.components,e=[],f=c.length-1;f>=0;f--){var g=c[f],h=b[g.name];g.value[0][1]!=h.defaultValue&&e.unshift(g.value[0])}return 0===e.length&&e.push([k.PROPERTY_VALUE,b[a.name].defaultValue]),d(e)?[e[0]]:e}var j=a("./clone").shallow,k=a("../../tokenizer/token"),l=a("../../tokenizer/marker");b.exports={background:e,borderRadius:f,fourValues:g,multiplex:h,withoutDefaults:i}},{"../../tokenizer/marker":81,"../../tokenizer/token":82,"./clone":21}],49:[function(a,b,c){function d(a,b){return a>b?1:-1}function e(a,b){var c=l(a);return c[5]=c[5].concat(b[5]),c}function f(a,b){function c(a,b,c){for(var d=c.length-1;d>=0;d--){var e=c[d][0],g=f(b,e);if(F[g].length>1&&y(a,F[g])){l(g);break}}}function f(a,b){var c=o(b);return F[c]=F[c]||[],F[c].push([a,b]),c}function l(a){var b,c=a.split(I),d=[];for(var e in F){var f=e.split(I);for(b=f.length-1;b>=0;b--)if(c.indexOf(f[b])>-1){d.push(e);break}}for(b=d.length-1;b>=0;b--)delete F[d[b]]}function o(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(n(a[c][1]));return b.join(I)}function p(a){for(var b=[],c=[],d=a.length-1;d>=0;d--)i(n(a[d][1]),A,B)&&(c.unshift(a[d]),a[d][2].length>0&&-1==b.indexOf(a[d])&&b.push(a[d]));return b.length>1?c:[]}function q(a,b){var d=b[0],e=b[1],f=b[4],g=d.length+e.length+1,h=[],i=[],k=p(D[f]);if(!(k.length<2)){var l=s(k,g,1),m=l[0];if(m[1]>0)return c(a,b,l);for(var n=m[0].length-1;n>=0;n--)h=m[0][n][1].concat(h),i.unshift(m[0][n]);h=j(h),v(a,[b],h,i)}}function r(a,b){return a[1]>b[1]?1:a[1]==b[1]?0:-1}function s(a,b,c){return t(a,b,c,H-1).sort(r)}function t(a,b,c,d){var e=[[a,u(a,b,c)]];if(a.length>2&&d>0)for(var f=a.length-1;f>=0;f--){var g=Array.prototype.slice.call(a,0);g.splice(f,1),e=e.concat(t(g,b,c,d-1))}return e}function u(a,b,c){for(var d=0,e=a.length-1;e>=0;e--)d+=a[e][2].length>c?n(a[e][1]).length:-1;return d-(a.length-1)*b+1}function v(b,c,d,e){var f,g,h,i,j=[];for(f=e.length-1;f>=0;f--){var l=e[f];for(g=l[2].length-1;g>=0;g--){var n=l[2][g];for(h=0,i=c.length;h<i;h++){var o=c[h],p=n[1][1],q=o[0],r=o[4];if(p==q&&m([n])==r){l[2].splice(g,1);break}}}}for(f=c.length-1;f>=0;f--)j.unshift(c[f][3]);var s=[k.RULE,d,j];a.splice(b,0,s)}function w(a,b){var c=b[4],d=D[c];d&&d.length>1&&(x(a,b)||q(a,b))}function x(a,b){var c,d,e=[],f=[],g=b[4],h=p(D[g]);if(!(h.length<2)){a:for(var i in D){var j=D[i];for(c=h.length-1;c>=0;c--)if(-1==j.indexOf(h[c]))continue a;e.push(i)}if(e.length<2)return!1;for(c=e.length-1;c>=0;c--)for(d=E.length-1;d>=0;d--)if(E[d][4]==e[c]){f.unshift([E[d],h]);break}return y(a,f)}}function y(a,b){for(var c,d=0,e=[],f=b.length-1;f>=0;f--){c=b[f][0];d+=c[4].length+(f>0?1:0),e.push(c)}var g=b[0][1],h=s(g,d,e.length)[0];if(h[1]>0)return!1;var i=[],k=[];for(f=h[0].length-1;f>=0;f--)i=h[0][f][1].concat(i),k.unshift(h[0][f]);for(i=j(i),v(a,e,i,k),f=e.length-1;f>=0;f--){c=e[f];var l=E.indexOf(c);delete D[c[4]],
-l>-1&&-1==G.indexOf(l)&&G.push(l)}return!0}for(var z=b.options,A=z.compatibility.selectors.mergeablePseudoClasses,B=z.compatibility.selectors.mergeablePseudoElements,C=b.cache.specificity,D={},E=[],F={},G=[],H=2,I="%",J=a.length-1;J>=0;J--){var K,L,M,N,O,P=a[J];if(P[0]==k.RULE)K=!0;else{if(P[0]!=k.NESTED_BLOCK)continue;K=!1}var Q=E.length,R=h(P);G=[];var S=[];for(L=R.length-1;L>=0;L--)for(M=L-1;M>=0;M--)if(!g(R[L],R[M],C)){S.push(L);break}for(L=R.length-1;L>=0;L--){var T=R[L],U=!1;for(M=0;M<Q;M++){var V=E[M];-1==G.indexOf(M)&&(!g(T,V,C)&&!function(a,b,c){if(a[0]!=b[0])return!1;var d=b[4],e=D[d];return e&&e.indexOf(c)>-1}(T,V,P)||D[V[4]]&&8191===D[V[4]].length)&&(w(J+1,V),-1==G.indexOf(M)&&(G.push(M),delete D[V[4]])),U||(U=T[0]==V[0]&&T[1]==V[1])&&(O=M)}if(K&&!(S.indexOf(L)>-1)){var W=T[4];U&&E[O][5].length+T[5].length>8191?(w(J+1,E[O]),E.splice(O,1),D[W]=[P],U=!1):(D[W]=D[W]||[],D[W].push(P)),U?E[O]=e(E[O],T):E.push(T)}}for(G=G.sort(d),L=0,N=G.length;L<N;L++){var X=G[L]-L;E.splice(X,1)}}for(var Y=a[0]&&a[0][0]==k.AT_RULE&&0===a[0][1].indexOf("@charset")?1:0;Y<a.length-1;Y++){var Z=a[Y][0]===k.AT_RULE&&0===a[Y][1].indexOf("@import"),$=a[Y][0]===k.COMMENT;if(!Z&&!$)break}for(J=0;J<E.length;J++)w(Y,E[J])}var g=a("./reorderable").canReorderSingle,h=a("./extract-properties"),i=a("./is-mergeable"),j=a("./tidy-rule-duplicates"),k=a("../../tokenizer/token"),l=a("../../utils/clone-array"),m=a("../../writer/one-time").body,n=a("../../writer/one-time").rules;b.exports=f},{"../../tokenizer/token":82,"../../utils/clone-array":84,"../../writer/one-time":96,"./extract-properties":23,"./is-mergeable":25,"./reorderable":46,"./tidy-rule-duplicates":53}],50:[function(a,b,c){function d(a,b,c){var d,f,g,h,i,j;for(g=0,h=a.length;g<h;g++)for(d=a[g][1],i=0,j=b.length;i<j;i++){if(f=b[i][1],d==f)return!0;if(c&&e(d)==e(f))return!0}return!1}function e(a){return a.replace(f,"")}var f=/\-\-.+$/;b.exports=d},{}],51:[function(a,b,c){function d(a,b,c){var d,f,g,h,i,j;for(g=0,h=a.length;g<h;g++)for(d=e(a[g][1],c),i=0,j=b.length;i<j;i++)if(f=e(b[i][1],c),d[0]===f[0]&&d[1]===f[1]&&d[2]===f[2])return!0;return!1}function e(a,b){var c;return a in b||(b[a]=c=f(a)),c||b[a]}var f=a("./specificity");b.exports=d},{"./specificity":52}],52:[function(a,b,c){function d(a){var b,c,d,i,k,l,m,n=[0,0,0],o=0,p=!1,q=!1;for(l=0,m=a.length;l<m;l++){if(b=a[l],c);else if(b!=f.SINGLE_QUOTE||i||d)if(b==f.SINGLE_QUOTE&&!i&&d)d=!1;else if(b!=f.DOUBLE_QUOTE||i||d)if(b==f.DOUBLE_QUOTE&&i&&!d)i=!1;else{if(d||i)continue;o>0&&!p||(b==f.OPEN_ROUND_BRACKET?o++:b==f.CLOSE_ROUND_BRACKET&&1==o?(o--,p=!1):b==f.CLOSE_ROUND_BRACKET?o--:b==g.HASH?n[0]++:b==g.DOT||b==f.OPEN_SQUARE_BRACKET?n[1]++:b!=g.PSEUDO||q||e(a,l)?b==g.PSEUDO?p=!0:(0===l||k)&&h.test(b)&&n[2]++:(n[1]++,p=!1))}else i=!0;else d=!0;c=b==f.BACK_SLASH,q=b==g.PSEUDO,k=!c&&j.test(b)}return n}function e(a,b){return a.indexOf(i,b)===b}var f=a("../../tokenizer/marker"),g={ADJACENT_SIBLING:"+",DESCENDANT:">",DOT:".",HASH:"#",NON_ADJACENT_SIBLING:"~",PSEUDO:":"},h=/[a-zA-Z]/,i=":not(",j=/[\s,\(>~\+]/;b.exports=d},{"../../tokenizer/marker":81}],53:[function(a,b,c){function d(a,b){return a[1]>b[1]?1:-1}function e(a){for(var b=[],c=[],e=0,f=a.length;e<f;e++){var g=a[e];-1==c.indexOf(g[1])&&(c.push(g[1]),b.push(g))}return b.sort(d)}b.exports=e},{}],54:[function(a,b,c){function d(a){for(var b=a.length-1;b>=0;b--){var c=a[b];c.unused&&c.all.splice(c.position,1)}}b.exports=d},{}],55:[function(a,b,c){function d(a,b){var c,d,g,h;for(h=a.length-1;h>=0;h--)c=a[h],c.unused||(c.dirty||c.important||c.hack)&&(b?(d=b(c),c.value=d):d=c.value,c.important&&e(c),c.hack&&f(c),"all"in c&&(g=c.all[c.position],g[1][1]=c.name,g.splice(2,g.length-1),Array.prototype.push.apply(g,d)))}function e(a){a.value[a.value.length-1][1]+=k}function f(a){a.hack[0]==g.UNDERSCORE?a.name=l+a.name:a.hack[0]==g.ASTERISK?a.name=i+a.name:a.hack[0]==g.BACKSLASH?a.value[a.value.length-1][1]+=j+a.hack[1]:a.hack[0]==g.BANG&&(a.value[a.value.length-1][1]+=h.SPACE+m)}var g=a("./hack"),h=a("../tokenizer/marker"),i="*",j="\\",k="!important",l="_",m="!ie";b.exports=d},{"../tokenizer/marker":81,"./hack":9}],56:[function(a,b,c){function d(a,b){return!(!o(a)||!o(b))&&a.substring(0,a.indexOf("("))===b.substring(0,b.indexOf("("))}function e(a){return Y.test(a)}function f(a){return X["background-attachment"].indexOf(a)>-1}function g(a){return X["background-clip"].indexOf(a)>-1}function h(a){return X["background-repeat"].indexOf(a)>-1}function i(a){return X["background-origin"].indexOf(a)>-1}function j(a){var b,c,d;if("inherit"===a)return!0;for(b=a.split(" "),c=0,d=b.length;c<d;c++)if(""!==b[c]&&!k(b[c]))return!1;return!0}function k(a){return X["background-position"].indexOf(a)>-1||U.test(a)}function l(a){return X["background-size"].indexOf(a)>-1||T.test(a)}function m(a){return x(a)||n(a)}function n(a){return r(a)||y(a)||s(a)}function o(a){return!V.test(a)&&S.test(a)}function p(a){return!V.test(a)&&Q.test(a)}function q(a){return W.indexOf(a)>-1}function r(a){return(4===a.length||7===a.length)&&"#"===a[0]}function s(a){return a.length>0&&0===a.indexOf("hsla(")&&a.indexOf(")")===a.length-1}function t(a){return"none"==a||"inherit"==a||D(a)}function u(a,b,c){return X[a].indexOf(b)>-1||c&&q(b)}function v(a){return X["list-style-type"].indexOf(a)>-1}function w(a){return X["list-style-position"].indexOf(a)>-1}function x(a){return"auto"!==a&&("transparent"===a||"inherit"===a||/^[a-zA-Z]+$/.test(a))}function y(a){return a.length>0&&0===a.indexOf("rgba(")&&a.indexOf(")")===a.length-1}function z(a){return X["*-style"].indexOf(a)>-1}function A(a,b){return C(a,b)||m(b)||q(b)}function B(a,b){return a.test(b)}function C(a,b){return a.test(b)}function D(a){return V.test(a)}function E(a){return R.test(a)}function F(a){return/^-([A-Za-z0-9]|-)*$/gi.test(a)}function G(a,b){return B(a,b)||X.width.indexOf(b)>-1}function H(a){return"auto"==a||q(a)||a.length>0&&a==""+parseInt(a)}function I(a){var b=J.slice(0).filter(function(b){return!(b in a.units)||!0===a.units[b]}),c="(\\-?\\.?\\d+\\.?\\d*("+b.join("|")+"|)|auto|inherit)",I=new RegExp("^"+c+"$","i"),K=new RegExp("^(none|"+X.width.join("|")+"|"+c+"|"+N+"|"+L+"|"+M+")$","i");return{areSameFunction:d,colorOpacity:a.colors.opacity,hasNoVendorPrefix:e,isValidBackgroundAttachment:f,isValidBackgroundClip:g,isValidBackgroundOrigin:i,isValidBackgroundPosition:j,isValidBackgroundPositionPart:k,isValidBackgroundRepeat:h,isValidBackgroundSizePart:l,isValidColor:m,isValidColorValue:n,isValidFunction:o,isValidFunctionWithoutVendorPrefix:p,isValidGlobalValue:q,isValidHexColor:r,isValidHslaColor:s,isValidImage:t,isValidKeywordValue:u,isValidListStylePosition:w,isValidListStyleType:v,isValidNamedColor:x,isValidRgbaColor:y,isValidStyle:z,isValidTextShadow:A.bind(null,I),isValidUnit:B.bind(null,K),isValidUnitWithoutFunction:C.bind(null,I),isValidUrl:D,isValidVariable:E,isValidVendorPrefixedValue:F,isValidWidth:G.bind(null,I),isValidZIndex:H}}var J=["%","ch","cm","em","ex","in","mm","pc","pt","px","rem","vh","vm","vmax","vmin","vw"],K="(\\-?\\.?\\d+\\.?\\d*("+J.join("|")+"|)|auto|inherit)",L="[A-Z]+(\\-|[A-Z]|[0-9])+\\(.*?\\)",M="\\-(\\-|[A-Z]|[0-9])+\\(.*?\\)",N="var\\(\\-\\-[^\\)]+\\)",O="("+N+"|"+L+"|"+M+")",P="("+K+"|(\\-moz\\-|\\-webkit\\-)?calc\\([^\\)]+\\))",Q=new RegExp("^"+L+"$","i"),R=new RegExp("^"+N+"$","i"),S=new RegExp("^"+O+"$","i"),T=new RegExp("^"+K+"$","i"),U=new RegExp("^"+P+"$","i"),V=/^url\([\s\S]+\)$/i,W=["inherit","initial","unset"],X={"*-style":["auto","dashed","dotted","double","groove","hidden","inset","none","outset","ridge","solid"],"background-attachment":["fixed","inherit","local","scroll"],"background-clip":["border-box","content-box","inherit","padding-box","text"],"background-origin":["border-box","content-box","inherit","padding-box"],"background-position":["bottom","center","left","right","top"],"background-repeat":["no-repeat","inherit","repeat","repeat-x","repeat-y","round","space"],"background-size":["auto","cover","contain"],"border-collapse":["collapse","inherit","separate"],bottom:["auto"],clear:["both","left","none","right"],cursor:["all-scroll","auto","col-resize","crosshair","default","e-resize","help","move","n-resize","ne-resize","no-drop","not-allowed","nw-resize","pointer","progress","row-resize","s-resize","se-resize","sw-resize","text","vertical-text","w-resize","wait"],display:["block","inline","inline-block","inline-table","list-item","none","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group"],float:["left","none","right"],left:["auto"],"font-style":["italic","normal","oblique"],"font-weight":["100","200","300","400","500","600","700","800","900","bold","bolder","lighter","normal"],"list-style-position":["inside","outside"],"list-style-type":["armenian","circle","decimal","decimal-leading-zero","disc","decimal|disc","georgian","lower-alpha","lower-greek","lower-latin","lower-roman","none","square","upper-alpha","upper-latin","upper-roman"],overflow:["auto","hidden","scroll","visible"],position:["absolute","fixed","relative","static"],right:["auto"],"text-align":["center","justify","left","left|right","right"],"text-decoration":["line-through","none","overline","underline"],"text-overflow":["clip","ellipsis"],top:["auto"],"vertical-align":["baseline","bottom","middle","sub","super","text-bottom","text-top","top"],visibility:["collapse","hidden","visible"],"white-space":["normal","nowrap","pre"],width:["inherit","initial","medium","thick","thin"]},Y=/(^|\W)-\w+\-/;b.exports=I},{}],57:[function(a,b,c){function d(a,b){var c,d,f,g=[];for(f=a.length-1;f>=0;f--)d=a[f],d[0]==p.PROPERTY&&(!b&&e(d)||(c=m(d),c.all=a,c.position=f,g.unshift(c)));return g}function e(a){var b,c,d;for(b=2,c=a.length;b<c;b++)if(d=a[b],d[0]==p.PROPERTY_VALUE&&f(d[1]))return!0;return!1}function f(a){return q.VARIABLE_REFERENCE_PATTERN.test(a)}function g(a){var b,c,d;for(c=3,d=a.length;c<d;c++)if(b=a[c],b[0]==p.PROPERTY_VALUE&&(b[1]==o.COMMA||b[1]==o.FORWARD_SLASH))return!0;return!1}function h(a){var b=!1,c=a[1][1],d=a[a.length-1];return c[0]==q.UNDERSCORE?b=[n.UNDERSCORE]:c[0]==q.ASTERISK?b=[n.ASTERISK]:d[1][0]!=q.BANG||d[1].match(q.IMPORTANT_WORD_PATTERN)?d[1].indexOf(q.BANG)>0&&!d[1].match(q.IMPORTANT_WORD_PATTERN)&&q.BANG_SUFFIX_PATTERN.test(d[1])?b=[n.BANG]:d[1].indexOf(q.BACKSLASH)>0&&d[1].indexOf(q.BACKSLASH)==d[1].length-q.BACKSLASH.length-1?b=[n.BACKSLASH,d[1].substring(d[1].indexOf(q.BACKSLASH)+1)]:0===d[1].indexOf(q.BACKSLASH)&&2==d[1].length&&(b=[n.BACKSLASH,d[1].substring(1)]):b=[n.BANG],b}function i(a){if(a.length<3)return!1;var b=a[a.length-1];return!!q.IMPORTANT_TOKEN_PATTERN.test(b[1])||!(!q.IMPORTANT_WORD_PATTERN.test(b[1])||!q.SUFFIX_BANG_PATTERN.test(a[a.length-2][1]))}function j(a){var b=a[a.length-1],c=a[a.length-2];q.IMPORTANT_TOKEN_PATTERN.test(b[1])?b[1]=b[1].replace(q.IMPORTANT_TOKEN_PATTERN,""):(b[1]=b[1].replace(q.IMPORTANT_WORD_PATTERN,""),c[1]=c[1].replace(q.SUFFIX_BANG_PATTERN,"")),0===b[1].length&&a.pop(),0===c[1].length&&a.pop()}function k(a){a[1][1]=a[1][1].substring(1)}function l(a,b){var c=a[a.length-1];c[1]=c[1].substring(0,c[1].indexOf(b[0]==n.BACKSLASH?q.BACKSLASH:q.BANG)).trim(),0===c[1].length&&a.pop()}function m(a){var b=i(a);b&&j(a);var c=h(a);return c[0]==n.ASTERISK||c[0]==n.UNDERSCORE?k(a):c[0]!=n.BACKSLASH&&c[0]!=n.BANG||l(a,c),{block:a[2]&&a[2][0]==p.PROPERTY_BLOCK,components:[],dirty:!1,hack:c,important:b,name:a[1][1],multiplex:a.length>3&&g(a),position:0,shorthand:!1,unused:!1,value:a.slice(2)}}var n=a("./hack"),o=a("../tokenizer/marker"),p=a("../tokenizer/token"),q={ASTERISK:"*",BACKSLASH:"\\",BANG:"!",BANG_SUFFIX_PATTERN:/!\w+$/,IMPORTANT_TOKEN:"!important",IMPORTANT_TOKEN_PATTERN:new RegExp("!important$","i"),IMPORTANT_WORD:"important",IMPORTANT_WORD_PATTERN:new RegExp("important$","i"),SUFFIX_BANG_PATTERN:/!$/,UNDERSCORE:"_",VARIABLE_REFERENCE_PATTERN:/var\(--.+\)$/};b.exports={all:d,single:m}},{"../tokenizer/marker":81,"../tokenizer/token":82,"./hack":9}],58:[function(a,b,c){function d(a){return e(g["*"],f(a))}function e(a,b){for(var c in a){var d=a[c];"object"!=typeof d||Array.isArray(d)?b[c]=c in b?b[c]:d:b[c]=e(d,b[c]||{})}return b}function f(a){if("object"==typeof a)return a;if(!/[,\+\-]/.test(a))return g[a]||g["*"];var b=a.split(","),c=b[0]in g?g[b.shift()]:g["*"];return a={},b.forEach(function(b){var c="+"==b[0],d=b.substring(1).split("."),e=d[0],f=d[1];a[e]=a[e]||{},a[e][f]=c}),e(c,a)}var g={"*":{colors:{opacity:!0},properties:{backgroundClipMerging:!0,backgroundOriginMerging:!0,backgroundSizeMerging:!0,colors:!0,ieBangHack:!1,ieFilters:!1,iePrefixHack:!1,ieSuffixHack:!1,merging:!0,shorterLengthUnits:!1,spaceAfterClosingBrace:!0,urlQuotes:!1,zeroUnits:!0},selectors:{adjacentSpace:!1,ie7Hack:!1,mergeablePseudoClasses:[":active",":after",":before",":empty",":checked",":disabled",":empty",":enabled",":first-child",":first-letter",":first-line",":first-of-type",":focus",":hover",":lang",":last-child",":last-of-type",":link",":not",":nth-child",":nth-last-child",":nth-last-of-type",":nth-of-type",":only-child",":only-of-type",":root",":target",":visited"],mergeablePseudoElements:["::after","::before","::first-letter","::first-line"]},units:{ch:!0,in:!0,pc:!0,pt:!0,rem:!0,vh:!0,vm:!0,vmax:!0,vmin:!0,vw:!0}}};g.ie11=g["*"],g.ie10=g["*"],g.ie9=e(g["*"],{properties:{ieFilters:!0,ieSuffixHack:!0}}),g.ie8=e(g.ie9,{colors:{opacity:!1},properties:{backgroundClipMerging:!1,backgroundOriginMerging:!1,backgroundSizeMerging:!1,iePrefixHack:!0,merging:!1},selectors:{mergeablePseudoClasses:[":after",":before",":first-child",":first-letter",":focus",":hover",":visited"],mergeablePseudoElements:[]},units:{ch:!1,rem:!1,vh:!1,vm:!1,vmax:!1,vmin:!1,vw:!1}}),g.ie7=e(g.ie8,{properties:{ieBangHack:!0},selectors:{ie7Hack:!0,mergeablePseudoClasses:[":first-child",":first-letter",":hover",":visited"]}}),b.exports=d},{}],59:[function(a,b,c){function d(a){var b={};return b[l.AfterAtRule]=a,b[l.AfterBlockBegins]=a,b[l.AfterBlockEnds]=a,b[l.AfterComment]=a,b[l.AfterProperty]=a,b[l.AfterRuleBegins]=a,b[l.AfterRuleEnds]=a,b[l.BeforeBlockEnds]=a,b[l.BetweenSelectors]=a,b}function e(a){var b={};return b[n.AroundSelectorRelation]=a,b[n.BeforeBlockBegins]=a,b[n.BeforeValue]=a,b}function f(a){return void 0!==a&&!1!==a&&("object"==typeof a&&"indentBy"in a&&(a=k(a,{indentBy:parseInt(a.indentBy)})),"object"==typeof a&&"indentWith"in a&&(a=k(a,{indentWith:j(a.indentWith)})),"object"==typeof a?k(o,a):"object"==typeof a?k(o,a):"string"==typeof a&&a==p?k(o,{breaks:d(!0),indentBy:2,spaces:e(!0)}):"string"==typeof a&&a==q?k(o,{breaks:{afterAtRule:!0,afterBlockBegins:!0,afterBlockEnds:!0,afterComment:!0,afterRuleEnds:!0,beforeBlockEnds:!0}}):"string"==typeof a?k(o,g(a)):o)}function g(a){return a.split(r).reduce(function(a,b){var c=b.split(s),d=c[0],e=c[1];return"breaks"==d||"spaces"==d?a[d]=h(e):"indentBy"==d||"wrapAt"==d?a[d]=parseInt(e):"indentWith"==d&&(a[d]=j(e)),a},{})}function h(a){return a.split(t).reduce(function(a,b){var c=b.split(u),d=c[0],e=c[1];return a[d]=i(e),a},{})}function i(a){switch(a){case v:case w:return!1;case x:case y:return!0;default:return a}}function j(a){switch(a){case"space":return m.Space;case"tab":return m.Tab;default:return a}}var k=a("../utils/override"),l={AfterAtRule:"afterAtRule",AfterBlockBegins:"afterBlockBegins",AfterBlockEnds:"afterBlockEnds",AfterComment:"afterComment",AfterProperty:"afterProperty",AfterRuleBegins:"afterRuleBegins",AfterRuleEnds:"afterRuleEnds",BeforeBlockEnds:"beforeBlockEnds",BetweenSelectors:"betweenSelectors"},m={Space:" ",Tab:"\t"},n={AroundSelectorRelation:"aroundSelectorRelation",BeforeBlockBegins:"beforeBlockBegins",BeforeValue:"beforeValue"},o={breaks:d(!1),indentBy:0,indentWith:m.Space,spaces:e(!1),wrapAt:!1},p="beautify",q="keep-breaks",r=";",s=":",t=",",u="=",v="false",w="off",x="true",y="on";b.exports={Breaks:l,Spaces:n,formatFrom:f}},{"../utils/override":93}],60:[function(a,b,c){(function(c){function d(a){return g(e(c.env.HTTP_PROXY||c.env.http_proxy),a||{})}function e(a){return a?{hostname:f.parse(a).hostname,port:parseInt(f.parse(a).port)}:{}}var f=a("url"),g=a("../utils/override");b.exports=d}).call(this,a("_process"))},{"../utils/override":93,_process:111,url:159}],61:[function(a,b,c){function d(a){return a||e}var e=5e3;b.exports=d},{}],62:[function(a,b,c){function d(a){return Array.isArray(a)?a:void 0===a?["local"]:a.split(",")}b.exports=d},{}],63:[function(a,b,c){function d(){}function e(a){var b=k(m,{}),c=l.Zero,d=l.One,e=l.Two;return void 0===a?(delete b[e],b):("string"==typeof a&&(a=parseInt(a)),"number"==typeof a&&a===parseInt(e)?b:"number"==typeof a&&a===parseInt(d)?(delete b[e],b):"number"==typeof a&&a===parseInt(c)?(delete b[e],delete b[d],b):("object"==typeof a&&(a=h(a)),d in a&&"roundingPrecision"in a[d]&&(a[d].roundingPrecision=j(a[d].roundingPrecision)),(c in a||d in a||e in a)&&(b[c]=k(b[c],a[c])),d in a&&n in a[d]&&(b[d]=k(b[d],f(d,g(a[d][n]))),delete a[d][n]),d in a&&o in a[d]&&(b[d]=k(b[d],f(d,g(a[d][o]))),delete a[d][o]),d in a||e in a?b[d]=k(b[d],a[d]):delete b[d],e in a&&n in a[e]&&(b[e]=k(b[e],f(e,g(a[e][n]))),delete a[e][n]),e in a&&o in a[e]&&(b[e]=k(b[e],f(e,g(a[e][o]))),delete a[e][o]),e in a?b[e]=k(b[e],a[e]):delete b[e],b))}function f(a,b){var c,d=k(m[a],{});for(c in d)"boolean"==typeof d[c]&&(d[c]=b);return d}function g(a){switch(a){case p:case q:return!1;case r:case s:return!0;default:return a}}function h(a){var b,c,d=k(a,{});for(c=0;c<=2;c++)b=""+c,b in d&&(void 0===d[b]||!1===d[b])&&delete d[b],b in d&&!0===d[b]&&(d[b]={}),b in d&&"string"==typeof d[b]&&(d[b]=i(d[b],b));return d}function i(a,b){return a.split(t).reduce(function(a,c){var d=c.split(u),e=d[0],h=d[1],i=g(h);return n==e||o==e?a=k(a,f(b,i)):a[e]=i,a},{})}var j=a("./rounding-precision").roundingPrecisionFrom,k=a("../utils/override"),l={Zero:"0",One:"1",Two:"2"},m={};m[l.Zero]={},m[l.One]={cleanupCharsets:!0,normalizeUrls:!0,optimizeBackground:!0,optimizeBorderRadius:!0,optimizeFilter:!0,optimizeFont:!0,optimizeFontWeight:!0,optimizeOutline:!0,removeNegativePaddings:!0,removeQuotes:!0,removeWhitespace:!0,replaceMultipleZeros:!0,replaceTimeUnits:!0,replaceZeroUnits:!0,roundingPrecision:j(void 0),selectorsSortingMethod:"standard",specialComments:"all",tidyAtRules:!0,tidyBlockScopes:!0,tidySelectors:!0,transform:d},m[l.Two]={mergeAdjacentRules:!0,mergeIntoShorthands:!0,mergeMedia:!0,mergeNonAdjacentRules:!0,mergeSemantically:!1,overrideProperties:!0,reduceNonAdjacentRules:!0,removeDuplicateFontRules:!0,removeDuplicateMediaBlocks:!0,removeDuplicateRules:!0,restructureRules:!1};var n="*",o="all",p="false",q="off",r="true",s="on",t=";",u=":";b.exports={OptimizationLevel:l,optimizationLevelFrom:e}},{"../utils/override":93,"./rounding-precision":66}],64:[function(a,b,c){(function(c){function d(a){return a?e.resolve(a):c.cwd()}var e=a("path");b.exports=d}).call(this,a("_process"))},{_process:111,path:109}],65:[function(a,b,c){function d(a){return void 0===a||!!a}b.exports=d},{}],66:[function(a,b,c){function d(a){return g(e(j),f(a))}function e(a){return{ch:a,cm:a,em:a,ex:a,in:a,mm:a,pc:a,pt:a,px:a,q:a,rem:a,vh:a,vmax:a,vmin:a,vw:a,"%":a}}function f(a){return null===a||void 0===a?{}:"boolean"==typeof a?{}:"number"==typeof a&&-1==a?e(j):"number"==typeof a?e(a):"string"==typeof a&&h.test(a)?e(parseInt(a)):"string"==typeof a&&a==j?e(j):"object"==typeof a?a:a.split(k).reduce(function(a,b){var c=b.split(l),d=c[0],f=parseInt(c[1]);return(isNaN(f)||-1==f)&&(f=j),i.indexOf(d)>-1?a=g(a,e(f)):a[d]=f,a},{})}var g=a("../utils/override"),h=/^\d+$/,i=["*","all"],j="off",k=",",l="=";b.exports={DEFAULT:j,roundingPrecisionFrom:d}},{"../utils/override":93}],67:[function(a,b,c){(function(c,d){function e(a,b,c){var d={callback:c,index:0,inline:b.options.inline,inlineRequest:b.options.inlineRequest,inlineTimeout:b.options.inlineTimeout,inputSourceMapTracker:b.inputSourceMapTracker,localOnly:b.localOnly,processedTokens:[],rebaseTo:b.options.rebaseTo,sourceTokens:a,warnings:b.warnings};return b.options.sourceMap&&a.length>0?f(d):c(a)}function f(a){var b,c,d,e=[],f=g(a.sourceTokens[0]);for(d=a.sourceTokens.length;a.index<d;a.index++)if(c=a.sourceTokens[a.index],b=g(c),b!=f&&(e=[],f=b),e.push(c),a.processedTokens.push(c),c[0]==v.COMMENT&&z.test(c[1]))return h(c[1],b,e,a);return a.callback(a.processedTokens)}function g(a){var b,c;return a[0]==v.AT_RULE||a[0]==v.COMMENT?c=a[2][0]:(b=a[1][0],c=b[2][0]),c[2]}function h(a,b,c,d){return i(a,d,function(a){return a&&(d.inputSourceMapTracker.track(b,a),m(c,d.inputSourceMapTracker)),d.index++,f(d)})}function i(a,b,c){var d,e,f,g=z.exec(a)[1];return x(g)?(e=j(g),c(e)):y(g)?k(g,b,function(a){var b;a?(b=JSON.parse(a),f=u(b,g),c(f)):c(null)}):(d=p.resolve(b.rebaseTo,g),e=l(d,b),e?(f=t(e,d,b.rebaseTo),c(f)):c(null))}function j(a){var b=s(a),e=b[2]?b[2].split(/[=;]/)[2]:"us-ascii",f=b[3]?b[3].split(";")[1]:"utf8",g="utf8"==f?c.unescape(b[4]):b[4],h=new d(g,f);return h.charset=e,JSON.parse(h.toString())}function k(a,b,c){var d=q(a,!0,b.inline),e=!w(a);return b.localOnly?(b.warnings.push('Cannot fetch remote resource from "'+a+'" as no callback given.'),c(null)):e?(b.warnings.push('Cannot fetch "'+a+'" as no protocol given.'),c(null)):d?void r(a,b.inlineRequest,b.inlineTimeout,function(d,e){if(d)return b.warnings.push('Missing source map at "'+a+'" - '+d),c(null);c(e)}):(b.warnings.push('Cannot fetch "'+a+'" as resource is not allowed.'),c(null))}function l(a,b){var c,d=q(a,!1,b.inline);return o.existsSync(a)&&o.statSync(a).isFile()?d?(c=o.readFileSync(a,"utf-8"),JSON.parse(c)):(b.warnings.push('Cannot fetch "'+a+'" as resource is not allowed.'),null):(b.warnings.push('Ignoring local source map at "'+a+'" as resource is missing.'),null)}function m(a,b){var c,d,e;for(d=0,e=a.length;d<e;d++)switch(c=a[d],c[0]){case v.AT_RULE:n(c,b);break;case v.AT_RULE_BLOCK:m(c[1],b),m(c[2],b);break;case v.AT_RULE_BLOCK_SCOPE:n(c,b);break;case v.NESTED_BLOCK:m(c[1],b),m(c[2],b);break;case v.NESTED_BLOCK_SCOPE:case v.COMMENT:n(c,b);break;case v.PROPERTY:m(c,b);break;case v.PROPERTY_BLOCK:m(c[1],b);break;case v.PROPERTY_NAME:case v.PROPERTY_VALUE:n(c,b);break;case v.RULE:m(c[1],b),m(c[2],b);break;case v.RULE_SCOPE:n(c,b)}return a}function n(a,b){var c,d,e=a[1],f=a[2],g=[];for(c=0,d=f.length;c<d;c++)g.push(b.originalPositionFor(f[c],e.length));a[2]=g}var o=a("fs"),p=a("path"),q=a("./is-allowed-resource"),r=a("./load-remote-resource"),s=a("./match-data-uri"),t=a("./rebase-local-map"),u=a("./rebase-remote-map"),v=a("../tokenizer/token"),w=a("../utils/has-protocol"),x=a("../utils/is-data-uri-resource"),y=a("../utils/is-remote-resource"),z=/^\/\*# sourceMappingURL=(\S+) \*\/$/;b.exports=e}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},a("buffer").Buffer)},{"../tokenizer/token":82,"../utils/has-protocol":86,"../utils/is-data-uri-resource":87,"../utils/is-remote-resource":91,"./is-allowed-resource":70,"./load-remote-resource":72,"./match-data-uri":73,"./rebase-local-map":76,"./rebase-remote-map":77,buffer:5,fs:3,path:109}],68:[function(a,b,c){function d(a){var b,c,d,m;return d=a.replace(h,"").trim().replace(k,"(").replace(l,")").replace(i,"").replace(j,""),m=e(d," "),b=m[0].replace(f,"").replace(g,""),c=m.slice(1).join(" "),[b,c]}var e=a("../utils/split"),f=/^\(/,g=/\)$/,h=/^@import/i,i=/['"]\s*/,j=/\s*['"]/,k=/^url\(\s*/i,l=/\s*\)/i;b.exports=d},{"../utils/split":94}],69:[function(a,b,c){function d(){var a={};return{all:e.bind(null,a),isTracking:f.bind(null,a),originalPositionFor:g.bind(null,a),track:i.bind(null,a)}}function e(a){return a}function f(a,b){return b in a}function g(a,b,c,d){for(var e,f=b[0],i=b[1],j=b[2],k={line:f,column:i+c};!e&&k.column>i;)k.column--,e=a[j].originalPositionFor(k);return null===e.line&&f>1&&d>0?g(a,[f-1,i,j],c,d-1):null!==e.line?h(e):b}function h(a){return[a.line,a.column,a.source]}function i(a,b,c){a[b]=new j(c)}var j=a("source-map").SourceMapConsumer;b.exports=d},{"source-map":152}],70:[function(a,b,c){function d(a,b,c){var h,k,l,m,n,o,p=!b;if(0===c.length)return!1;for(b&&!i(a)&&(a=j+a),h=b?g.parse(a).host:a,k=b?a:f.resolve(a),o=0;o<c.length;o++)l=c[o],m="!"==l[0],n=l.substring(1),p=m&&b&&e(n)?p&&!d(a,!0,[n]):!m||b||e(n)?m?p&&!0:"all"==l||(b&&"local"==l?p||!1:!(!b||"remote"!=l)||!(!b&&"remote"==l)&&(!b&&"local"==l||(l===h||(l===a||(!(!b||0!==k.indexOf(l))||(!b&&0===k.indexOf(f.resolve(l))||b!=e(n)&&(p&&!0))))))):p&&!d(a,!1,[n]);return p}function e(a){return h(a)||g.parse(j+"//"+a).host==a}var f=a("path"),g=a("url"),h=a("../utils/is-remote-resource"),i=a("../utils/has-protocol"),j="http:";b.exports=d},{"../utils/has-protocol":86,"../utils/is-remote-resource":91,path:109,url:159}],71:[function(a,b,c){function d(a,b){var c={callback:b,index:0,inline:a.options.inline,inlineRequest:a.options.inlineRequest,inlineTimeout:a.options.inlineTimeout,localOnly:a.localOnly,rebaseTo:a.options.rebaseTo,sourcesContent:a.sourcesContent,uriToSource:e(a.inputSourceMapTracker.all()),warnings:a.warnings};return a.options.sourceMap&&a.options.sourceMapInlineSources?f(c):b()}function e(a){var b,c,d,e,f,g={};for(d in a)for(b=a[d],e=0,f=b.sources.length;e<f;e++)c=b.sources[e],d=b.sourceContentFor(c,!0),g[c]=d;return g}function f(a){var b,c,d,e=Object.keys(a.uriToSource);for(d=e.length;a.index<d;a.index++){if(b=e[a.index],!(c=a.uriToSource[b]))return g(b,a);a.sourcesContent[b]=c}return a.callback()}function g(a,b){var c;return o(a)?h(a,b,function(c){return b.index++,b.sourcesContent[a]=c,f(b)}):(c=i(a,b),b.index++,b.sourcesContent[a]=c,f(b))}function h(a,b,c){var d=l(a,!0,b.inline),e=!n(a);return b.localOnly?(b.warnings.push('Cannot fetch remote resource from "'+a+'" as no callback given.'),c(null)):e?(b.warnings.push('Cannot fetch "'+a+'" as no protocol given.'),c(null)):d?void m(a,b.inlineRequest,b.inlineTimeout,function(d,e){d&&b.warnings.push('Missing original source at "'+a+'" - '+d),c(e)}):(b.warnings.push('Cannot fetch "'+a+'" as resource is not allowed.'),c(null))}function i(a,b){var c=l(a,!1,b.inline),d=k.resolve(b.rebaseTo,a);return j.existsSync(d)&&j.statSync(d).isFile()?c?j.readFileSync(d,"utf8"):(b.warnings.push('Cannot fetch "'+d+'" as resource is not allowed.'),null):(b.warnings.push('Ignoring local source map at "'+d+'" as resource is missing.'),null)}var j=a("fs"),k=a("path"),l=a("./is-allowed-resource"),m=a("./load-remote-resource"),n=a("../utils/has-protocol"),o=a("../utils/is-remote-resource");b.exports=d},{"../utils/has-protocol":86,"../utils/is-remote-resource":91,"./is-allowed-resource":70,"./load-remote-resource":72,fs:3,path:109}],72:[function(a,b,c){function d(a,b,c,l){var m,n,o=b.protocol||b.hostname,p=!1;m=j(g.parse(a),b||{}),void 0!==b.hostname&&(m.protocol=b.protocol||k,m.path=m.href),n=o&&!i(o)||h(a)?e.get:f.get,n(m,function(e){var f,h=[];if(!p){if(e.statusCode<200||e.statusCode>399)return l(e.statusCode,null);if(e.statusCode>299)return f=g.resolve(a,e.headers.location),d(f,b,c,l);e.on("data",function(a){h.push(a.toString())}),e.on("end",function(){var a=h.join("");l(null,a)})}}).on("error",function(a){p||(p=!0,l(a.message,null))}).on("timeout",function(){p||(p=!0,l("timeout",null))}).setTimeout(c)}var e=a("http"),f=a("https"),g=a("url"),h=a("../utils/is-http-resource"),i=a("../utils/is-https-resource"),j=a("../utils/override"),k="http:";b.exports=d},{"../utils/is-http-resource":88,"../utils/is-https-resource":89,"../utils/override":93,http:153,https:102,url:159}],73:[function(a,b,c){function d(a){return e.exec(a)}var e=/^data:(\S*?)?(;charset=[^;]+)?(;[^,]+?)?,(.+)/;b.exports=d},{}],74:[function(a,b,c){function d(a){return a.replace(f,e)}var e="/",f=/\\/g;b.exports=d},{}],75:[function(a,b,c){(function(c,d){function e(a,b,c){return f(a,b,function(a){return w(a,b,function(){return z(b,function(){return c(a)})})})}function f(a,b,d){return"string"==typeof a?g(a,b,d):c.isBuffer(a)?g(a.toString(),b,d):Array.isArray(a)?h(a,b,d):"object"==typeof a?i(a,b,d):void 0}function g(a,b,c){return b.source=void 0,b.sourcesContent[void 0]=a,b.stats.originalSize+=a.length,m(a,b,{inline:b.options.inline},c)}function h(a,b,c){return m(a.reduce(function(a,b){var c=j(b);return a.push(l(c)),a},[]).join(""),b,{inline:["all"]},c)}function i(a,b,c){var d,e,f,g=[];for(d in a)f=a[d],e=j(d),g.push(l(e)),b.sourcesContent[e]=f.styles,f.sourceMap&&k(f.sourceMap,e,b);return m(g.join(""),b,{inline:["all"]},c)}function j(a){var b,c,d=v.resolve("");return L(a)?a:(b=v.isAbsolute(a)?a:v.resolve(a),c=v.relative(d,b),B(c))}function k(a,b,c){var d="string"==typeof a?JSON.parse(a):a,e=L(b)?E(d,b):D(d,b||M,c.options.rebaseTo);c.inputSourceMapTracker.track(b,e)}function l(a){return F("url("+a+")","")+I.SEMICOLON}function m(a,b,c,d){var e,f={};return b.source?L(b.source)?(f.fromBase=b.source,f.toBase=b.source):v.isAbsolute(b.source)?(f.fromBase=v.dirname(b.source),f.toBase=b.options.rebaseTo):(f.fromBase=v.dirname(v.resolve(b.source)),f.toBase=b.options.rebaseTo):(f.fromBase=v.resolve(""),f.toBase=b.options.rebaseTo),e=G(a,b),e=C(e,b.options.rebase,b.validator,f),n(c.inline)?o(e,b,c,d):d(e)}function n(a){return!(1==a.length&&"none"==a[0])}function o(a,b,c,d){return p({afterContent:!1,callback:d,errors:b.errors,externalContext:b,inlinedStylesheets:c.inlinedStylesheets||b.inlinedStylesheets,inline:c.inline,inlineRequest:b.options.inlineRequest,inlineTimeout:b.options.inlineTimeout,isRemote:c.isRemote||!1,localOnly:b.localOnly,outputTokens:[],rebaseTo:b.options.rebaseTo,sourceTokens:a,warnings:b.warnings})}function p(a){var b,c,d;for(c=0,d=a.sourceTokens.length;c<d;c++){if(b=a.sourceTokens[c],b[0]==H.AT_RULE&&K(b[1]))return a.sourceTokens.splice(0,c),q(b,a);b[0]==H.AT_RULE||b[0]==H.COMMENT?a.outputTokens.push(b):(a.outputTokens.push(b),a.afterContent=!0)}return a.sourceTokens=[],a.callback(a.outputTokens)}function q(a,b){var c=x(a[1]),d=c[0],e=c[1],f=a[2];return L(d)?r(d,e,f,b):s(d,e,f,b)}function r(a,b,c,e){function f(f,g){return f?(e.errors.push('Broken @import declaration of "'+a+'" - '+f),d.nextTick(function(){e.outputTokens=e.outputTokens.concat(e.sourceTokens.slice(0,1)),e.sourceTokens=e.sourceTokens.slice(1),p(e)})):(e.inline=e.externalContext.options.inline,e.isRemote=!0,e.externalContext.source=h,e.externalContext.sourcesContent[a]=g,e.externalContext.stats.originalSize+=g.length,m(g,e.externalContext,e,function(a){return a=t(a,b,c),e.outputTokens=e.outputTokens.concat(a),e.sourceTokens=e.sourceTokens.slice(1),p(e)}))}var g=y(a,!0,e.inline),h=a,i=a in e.externalContext.sourcesContent,j=!J(a);return e.inlinedStylesheets.indexOf(a)>-1?(e.warnings.push('Ignoring remote @import of "'+a+'" as it has already been imported.'),e.sourceTokens=e.sourceTokens.slice(1),p(e)):e.localOnly&&e.afterContent?(e.warnings.push('Ignoring remote @import of "'+a+'" as no callback given and after other content.'),e.sourceTokens=e.sourceTokens.slice(1),p(e)):j?(e.warnings.push('Skipping remote @import of "'+a+'" as no protocol given.'),e.outputTokens=e.outputTokens.concat(e.sourceTokens.slice(0,1)),e.sourceTokens=e.sourceTokens.slice(1),p(e)):e.localOnly&&!i?(e.warnings.push('Skipping remote @import of "'+a+'" as no callback given.'),e.outputTokens=e.outputTokens.concat(e.sourceTokens.slice(0,1)),e.sourceTokens=e.sourceTokens.slice(1),p(e)):!g&&e.afterContent?(e.warnings.push('Ignoring remote @import of "'+a+'" as resource is not allowed and after other content.'),e.sourceTokens=e.sourceTokens.slice(1),p(e)):g?(e.inlinedStylesheets.push(a),i?f(null,e.externalContext.sourcesContent[a]):A(a,e.inlineRequest,e.inlineTimeout,f)):(e.warnings.push('Skipping remote @import of "'+a+'" as resource is not allowed.'),e.outputTokens=e.outputTokens.concat(e.sourceTokens.slice(0,1)),e.sourceTokens=e.sourceTokens.slice(1),p(e))}function s(a,b,c,d){var e,f,g=v.resolve(""),h=v.isAbsolute(a)?v.resolve(g,"/"==a[0]?a.substring(1):a):v.resolve(d.rebaseTo,a),i=v.relative(g,h),j=y(a,!1,d.inline),k=B(i),l=k in d.externalContext.sourcesContent
-;return d.inlinedStylesheets.indexOf(h)>-1?d.warnings.push('Ignoring local @import of "'+a+'" as it has already been imported.'):l||u.existsSync(h)&&u.statSync(h).isFile()?!j&&d.afterContent?d.warnings.push('Ignoring local @import of "'+a+'" as resource is not allowed and after other content.'):d.afterContent?d.warnings.push('Ignoring local @import of "'+a+'" as after other content.'):j?(e=l?d.externalContext.sourcesContent[k]:u.readFileSync(h,"utf-8"),d.inlinedStylesheets.push(h),d.inline=d.externalContext.options.inline,d.externalContext.source=k,d.externalContext.sourcesContent[k]=e,d.externalContext.stats.originalSize+=e.length,f=m(e,d.externalContext,d,function(a){return a}),f=t(f,b,c),d.outputTokens=d.outputTokens.concat(f)):(d.warnings.push('Skipping local @import of "'+a+'" as resource is not allowed.'),d.outputTokens=d.outputTokens.concat(d.sourceTokens.slice(0,1))):d.errors.push('Ignoring local @import of "'+a+'" as resource is missing.'),d.sourceTokens=d.sourceTokens.slice(1),p(d)}function t(a,b,c){return b?[[H.NESTED_BLOCK,[[H.NESTED_BLOCK_SCOPE,"@media "+b,c]],a]]:a}var u=a("fs"),v=a("path"),w=a("./apply-source-maps"),x=a("./extract-import-url-and-media"),y=a("./is-allowed-resource"),z=a("./load-original-sources"),A=a("./load-remote-resource"),B=a("./normalize-path"),C=a("./rebase"),D=a("./rebase-local-map"),E=a("./rebase-remote-map"),F=a("./restore-import"),G=a("../tokenizer/tokenize"),H=a("../tokenizer/token"),I=a("../tokenizer/marker"),J=a("../utils/has-protocol"),K=a("../utils/is-import"),L=a("../utils/is-remote-resource"),M="uri:unknown";b.exports=e}).call(this,{isBuffer:a("../../../is-buffer/index.js")},a("_process"))},{"../../../is-buffer/index.js":105,"../tokenizer/marker":81,"../tokenizer/token":82,"../tokenizer/tokenize":83,"../utils/has-protocol":86,"../utils/is-import":90,"../utils/is-remote-resource":91,"./apply-source-maps":67,"./extract-import-url-and-media":68,"./is-allowed-resource":70,"./load-original-sources":71,"./load-remote-resource":72,"./normalize-path":74,"./rebase":78,"./rebase-local-map":76,"./rebase-remote-map":77,"./restore-import":79,_process:111,fs:3,path:109}],76:[function(a,b,c){function d(a,b,c){var d=e.resolve(""),f=e.resolve(d,b),g=e.dirname(f);return a.sources=a.sources.map(function(a){return e.relative(c,e.resolve(g,a))}),a}var e=a("path");b.exports=d},{path:109}],77:[function(a,b,c){function d(a,b){var c=e.dirname(b);return a.sources=a.sources.map(function(a){return f.resolve(c,a)}),a}var e=a("path"),f=a("url");b.exports=d},{path:109,url:159}],78:[function(a,b,c){function d(a,b,c,d){return b?e(a,c,d):f(a,c,d)}function e(a,b,c){var d,f,j;for(f=0,j=a.length;f<j;f++)switch(d=a[f],d[0]){case m.AT_RULE:g(d,b,c);break;case m.AT_RULE_BLOCK:i(d[2],b,c);break;case m.COMMENT:h(d,c);break;case m.NESTED_BLOCK:e(d[2],b,c);break;case m.RULE:i(d[2],b,c)}return a}function f(a,b,c){var d,e,f;for(e=0,f=a.length;e<f;e++)switch(d=a[e],d[0]){case m.AT_RULE:g(d,b,c)}return a}function g(a,b,c){if(n(a[1])){var d=j(a[1]),e=l(d[0],c),f=d[1];a[1]=k(e,f)}}function h(a,b){var c=o.exec(a[1]);c&&-1===c[1].indexOf("data:")&&(a[1]=a[1].replace(c[1],l(c[1],b,!0)))}function i(a,b,c){var d,e,f,g,h,i;for(f=0,g=a.length;f<g;f++)for(d=a[f],h=2,i=d.length;h<i;h++)e=d[h][1],b.isValidUrl(e)&&(d[h][1]=l(e,c))}var j=a("./extract-import-url-and-media"),k=a("./restore-import"),l=a("./rewrite-url"),m=a("../tokenizer/token"),n=a("../utils/is-import"),o=/^\/\*# sourceMappingURL=(\S+) \*\/$/;b.exports=d},{"../tokenizer/token":82,"../utils/is-import":90,"./extract-import-url-and-media":68,"./restore-import":79,"./rewrite-url":80}],79:[function(a,b,c){function d(a,b){return("@import "+a+" "+b).trim()}b.exports=d},{}],80:[function(a,b,c){(function(c){function d(a,b){return b?e(a)&&!h(b.toBase)?a:h(a)||f(a)||g(a)?a:i(a)?"'"+a+"'":h(b.toBase)?r.resolve(b.toBase,a):l(b.absolute?j(a,b):k(a,b)):a}function e(a){return q.isAbsolute(a)}function f(a){return"#"==a[0]}function g(a){return/^\w+:\w+/.test(a)}function h(a){return/^[^:]+?:\/\//.test(a)||0===a.indexOf("//")}function i(a){return 0===a.indexOf("data:")}function j(a,b){return q.resolve(q.join(b.fromBase||"",a)).replace(b.toBase,"")}function k(a,b){return q.relative(b.toBase,q.join(b.fromBase||"",a))}function l(a){return C?a.replace(/\\/g,"/"):a}function m(a){return a.indexOf(t)>-1?s:a.indexOf(s)>-1?t:n(a)||o(a)?t:""}function n(a){return B.test(a)}function o(a){return y.test(a)}function p(a,b,c){var e=a.replace(z,"").replace(A,"").trim(),f=e.replace(w,"").replace(x,"").trim(),g=e[0]==t||e[0]==s?e[0]:m(f);return c?d(f,b):u+g+d(f,b)+g+v}var q=a("path"),r=a("url"),s='"',t="'",u="url(",v=")",w=/^["']/,x=/["']$/,y=/[\(\)]/,z=/^url\(/i,A=/\)$/,B=/\s/,C="win32"==c.platform;b.exports=p}).call(this,a("_process"))},{_process:111,path:109,url:159}],81:[function(a,b,c){var d={ASTERISK:"*",AT:"@",BACK_SLASH:"\\",CLOSE_CURLY_BRACKET:"}",CLOSE_ROUND_BRACKET:")",CLOSE_SQUARE_BRACKET:"]",COLON:":",COMMA:",",DOUBLE_QUOTE:'"',EXCLAMATION:"!",FORWARD_SLASH:"/",NEW_LINE_NIX:"\n",NEW_LINE_WIN:"\r",OPEN_CURLY_BRACKET:"{",OPEN_ROUND_BRACKET:"(",OPEN_SQUARE_BRACKET:"[",SEMICOLON:";",SINGLE_QUOTE:"'",SPACE:" ",TAB:"\t",UNDERSCORE:"_"};b.exports=d},{}],82:[function(a,b,c){var d={AT_RULE:"at-rule",AT_RULE_BLOCK:"at-rule-block",AT_RULE_BLOCK_SCOPE:"at-rule-block-scope",COMMENT:"comment",NESTED_BLOCK:"nested-block",NESTED_BLOCK_SCOPE:"nested-block-scope",PROPERTY:"property",PROPERTY_BLOCK:"property-block",PROPERTY_NAME:"property-name",PROPERTY_VALUE:"property-value",RULE:"rule",RULE_SCOPE:"rule-scope"};b.exports=d},{}],83:[function(a,b,c){function d(a,b){return e(a,b,{level:l.BLOCK,position:{source:b.source||void 0,line:1,column:0,index:0}},!1)}function e(a,b,c,d){for(var m,n,o,q,r,s,t,u,v,w,x,y,z=[],A=z,B=[],C=[],D=c.level,E=[],F=[],G=[],H=0,I=!1,J=!1,K=!1,L=!1,M=!1,N=c.position;N.index<a.length;N.index++){var O=a[N.index];if(s=D==l.SINGLE_QUOTE||D==l.DOUBLE_QUOTE,t=O==i.SPACE||O==i.TAB,u=O==i.NEW_LINE_NIX,v=O==i.NEW_LINE_NIX&&a[N.index-1]==i.NEW_LINE_WIN,w=!J&&D!=l.COMMENT&&!s&&O==i.ASTERISK&&a[N.index-1]==i.FORWARD_SLASH,x=!I&&D==l.COMMENT&&O==i.FORWARD_SLASH&&a[N.index-1]==i.ASTERISK,q=0===F.length?[N.line,N.column,N.source]:q,y)F.push(O);else if(x||D!=l.COMMENT)if(w&&(D==l.BLOCK||D==l.RULE)&&F.length>1)C.push(q),F.push(O),G.push(F.slice(0,F.length-2)),F=F.slice(F.length-2),q=[N.line,N.column-1,N.source],E.push(D),D=l.COMMENT;else if(w)E.push(D),D=l.COMMENT,F.push(O);else if(x)r=F.join("").trim()+O,m=[j.COMMENT,r,[f(q,r,b)]],A.push(m),D=E.pop(),q=C.pop()||null,F=G.pop()||[];else if(O!=i.SINGLE_QUOTE||s)if(O==i.SINGLE_QUOTE&&D==l.SINGLE_QUOTE)D=E.pop(),F.push(O);else if(O!=i.DOUBLE_QUOTE||s)if(O==i.DOUBLE_QUOTE&&D==l.DOUBLE_QUOTE)D=E.pop(),F.push(O);else if(!w&&!x&&O!=i.CLOSE_ROUND_BRACKET&&O!=i.OPEN_ROUND_BRACKET&&D!=l.COMMENT&&!s&&H>0)F.push(O);else if(O!=i.OPEN_ROUND_BRACKET||s||D==l.COMMENT||L)if(O!=i.CLOSE_ROUND_BRACKET||s||D==l.COMMENT||L)if(O==i.SEMICOLON&&D==l.BLOCK&&F[0]==i.AT)r=F.join("").trim(),z.push([j.AT_RULE,r,[f(q,r,b)]]),F=[];else if(O==i.COMMA&&D==l.BLOCK&&n)r=F.join("").trim(),n[1].push([h(n[0]),r,[f(q,r,b,n[1].length)]]),F=[];else if(O==i.COMMA&&D==l.BLOCK&&g(F)==j.AT_RULE)F.push(O);else if(O==i.COMMA&&D==l.BLOCK)n=[g(F),[],[]],r=F.join("").trim(),n[1].push([h(n[0]),r,[f(q,r,b,0)]]),F=[];else if(O==i.OPEN_CURLY_BRACKET&&D==l.BLOCK&&n&&n[0]==j.NESTED_BLOCK)r=F.join("").trim(),n[1].push([j.NESTED_BLOCK_SCOPE,r,[f(q,r,b)]]),z.push(n),E.push(D),N.column++,N.index++,F=[],n[2]=e(a,b,c,!0),n=null;else if(O==i.OPEN_CURLY_BRACKET&&D==l.BLOCK&&g(F)==j.NESTED_BLOCK)r=F.join("").trim(),n=n||[j.NESTED_BLOCK,[],[]],n[1].push([j.NESTED_BLOCK_SCOPE,r,[f(q,r,b)]]),z.push(n),E.push(D),N.column++,N.index++,F=[],n[2]=e(a,b,c,!0),n=null;else if(O==i.OPEN_CURLY_BRACKET&&D==l.BLOCK)r=F.join("").trim(),n=n||[g(F),[],[]],n[1].push([h(n[0]),r,[f(q,r,b,n[1].length)]]),A=n[2],z.push(n),E.push(D),D=l.RULE,F=[];else if(O==i.OPEN_CURLY_BRACKET&&D==l.RULE&&L)B.push(n),n=[j.PROPERTY_BLOCK,[]],o.push(n),A=n[1],E.push(D),D=l.RULE,L=!1;else if(O!=i.COLON||D!=l.RULE||L)if(O==i.SEMICOLON&&D==l.RULE&&o&&B.length>0&&F.length>0&&F[0]==i.AT)r=F.join("").trim(),n[1].push([j.AT_RULE,r,[f(q,r,b)]]),F=[];else if(O==i.SEMICOLON&&D==l.RULE&&o&&F.length>0)r=F.join("").trim(),o.push([j.PROPERTY_VALUE,r,[f(q,r,b)]]),o=null,L=!1,F=[];else if(O==i.SEMICOLON&&D==l.RULE&&o&&0===F.length)o=null,L=!1;else if(O==i.SEMICOLON&&D==l.RULE&&F.length>0&&F[0]==i.AT)r=F.join(""),A.push([j.AT_RULE,r,[f(q,r,b)]]),L=!1,F=[];else if(O==i.SEMICOLON&&D==l.RULE&&M)M=!1,F=[];else if(O==i.SEMICOLON&&D==l.RULE&&0===F.length);else if(O==i.CLOSE_CURLY_BRACKET&&D==l.RULE&&o&&L&&F.length>0&&B.length>0)r=F.join(""),o.push([j.PROPERTY_VALUE,r,[f(q,r,b)]]),o=null,n=B.pop(),A=n[2],D=E.pop(),L=!1,F=[];else if(O==i.CLOSE_CURLY_BRACKET&&D==l.RULE&&o&&F.length>0&&F[0]==i.AT&&B.length>0)r=F.join(""),n[1].push([j.AT_RULE,r,[f(q,r,b)]]),o=null,n=B.pop(),A=n[2],D=E.pop(),L=!1,F=[];else if(O==i.CLOSE_CURLY_BRACKET&&D==l.RULE&&o&&B.length>0)o=null,n=B.pop(),A=n[2],D=E.pop(),L=!1;else if(O==i.CLOSE_CURLY_BRACKET&&D==l.RULE&&o&&F.length>0)r=F.join(""),o.push([j.PROPERTY_VALUE,r,[f(q,r,b)]]),o=null,n=B.pop(),A=z,D=E.pop(),L=!1,F=[];else if(O==i.CLOSE_CURLY_BRACKET&&D==l.RULE&&F.length>0&&F[0]==i.AT)o=null,n=null,r=F.join("").trim(),A.push([j.AT_RULE,r,[f(q,r,b)]]),A=z,D=E.pop(),L=!1,F=[];else if(O==i.CLOSE_CURLY_BRACKET&&D==l.RULE&&E[E.length-1]==l.RULE)o=null,n=B.pop(),A=n[2],D=E.pop(),L=!1,M=!0,F=[];else if(O==i.CLOSE_CURLY_BRACKET&&D==l.RULE)o=null,n=null,A=z,D=E.pop(),L=!1;else if(O==i.CLOSE_CURLY_BRACKET&&D==l.BLOCK&&!d&&N.index<=a.length-1)b.warnings.push("Unexpected '}' at "+k([N.line,N.column,N.source])+"."),F.push(O);else{if(O==i.CLOSE_CURLY_BRACKET&&D==l.BLOCK)break;O==i.OPEN_ROUND_BRACKET&&D==l.RULE&&L?(F.push(O),H++):O==i.CLOSE_ROUND_BRACKET&&D==l.RULE&&L&&1==H?(F.push(O),r=F.join("").trim(),o.push([j.PROPERTY_VALUE,r,[f(q,r,b)]]),H--,F=[]):O==i.CLOSE_ROUND_BRACKET&&D==l.RULE&&L?(F.push(O),H--):O==i.FORWARD_SLASH&&a[N.index+1]!=i.ASTERISK&&D==l.RULE&&L&&F.length>0?(r=F.join("").trim(),o.push([j.PROPERTY_VALUE,r,[f(q,r,b)]]),o.push([j.PROPERTY_VALUE,O,[[N.line,N.column,N.source]]]),F=[]):O==i.FORWARD_SLASH&&a[N.index+1]!=i.ASTERISK&&D==l.RULE&&L?(o.push([j.PROPERTY_VALUE,O,[[N.line,N.column,N.source]]]),F=[]):O==i.COMMA&&D==l.RULE&&L&&F.length>0?(r=F.join("").trim(),o.push([j.PROPERTY_VALUE,r,[f(q,r,b)]]),o.push([j.PROPERTY_VALUE,O,[[N.line,N.column,N.source]]]),F=[]):O==i.COMMA&&D==l.RULE&&L?(o.push([j.PROPERTY_VALUE,O,[[N.line,N.column,N.source]]]),F=[]):(t||u&&!v)&&D==l.RULE&&L&&o&&F.length>0?(r=F.join("").trim(),o.push([j.PROPERTY_VALUE,r,[f(q,r,b)]]),F=[]):v&&D==l.RULE&&L&&o&&F.length>1?(r=F.join("").trim(),o.push([j.PROPERTY_VALUE,r,[f(q,r,b)]]),F=[]):v&&D==l.RULE&&L?F=[]:1==F.length&&v?F.pop():(F.length>0||!t&&!u&&!v)&&F.push(O)}else r=F.join("").trim(),o=[j.PROPERTY,[j.PROPERTY_NAME,r,[f(q,r,b)]]],A.push(o),L=!0,F=[];else F.push(O),H--;else F.push(O),H++;else E.push(D),D=l.DOUBLE_QUOTE,F.push(O);else E.push(D),D=l.SINGLE_QUOTE,F.push(O);else F.push(O);K=y,y=!K&&O==i.BACK_SLASH,I=w,J=x,N.line=v||u?N.line+1:N.line,N.column=v||u?0:N.column+1}return L&&b.warnings.push("Missing '}' at "+k([N.line,N.column,N.source])+"."),L&&F.length>0&&(r=F.join("").replace(p,""),o.push([j.PROPERTY_VALUE,r,[f(q,r,b)]]),F=[]),F.length>0&&b.warnings.push("Invalid character(s) '"+F.join("")+"' at "+k(q)+". Ignoring."),z}function f(a,b,c,d){var e=a[2];return c.inputSourceMapTracker.isTracking(e)?c.inputSourceMapTracker.originalPositionFor(a,b.length,d):a}function g(a){var b=a[0]==i.AT||a[0]==i.UNDERSCORE,c=a.join("").split(o)[0];return b&&n.indexOf(c)>-1?j.NESTED_BLOCK:b&&m.indexOf(c)>-1?j.AT_RULE:b?j.AT_RULE_BLOCK:j.RULE}function h(a){return a==j.RULE?j.RULE_SCOPE:a==j.NESTED_BLOCK?j.NESTED_BLOCK_SCOPE:a==j.AT_RULE_BLOCK?j.AT_RULE_BLOCK_SCOPE:void 0}var i=a("./marker"),j=a("./token"),k=a("../utils/format-position"),l={BLOCK:"block",COMMENT:"comment",DOUBLE_QUOTE:"double-quote",RULE:"rule",SINGLE_QUOTE:"single-quote"},m=["@charset","@import"],n=["@-moz-document","@document","@-moz-keyframes","@-ms-keyframes","@-o-keyframes","@-webkit-keyframes","@keyframes","@media","@supports"],o=/[\s\(]/,p=/[\s|\}]*$/;b.exports=d},{"../utils/format-position":85,"./marker":81,"./token":82}],84:[function(a,b,c){function d(a){for(var b=a.slice(0),c=0,e=b.length;c<e;c++)Array.isArray(b[c])&&(b[c]=d(b[c]));return b}b.exports=d},{}],85:[function(a,b,c){function d(a){var b=a[0],c=a[1],d=a[2];return d?d+":"+b+":"+c:b+":"+c}b.exports=d},{}],86:[function(a,b,c){function d(a){return!e.test(a)}var e=/^\/\//;b.exports=d},{}],87:[function(a,b,c){function d(a){return e.test(a)}var e=/^data:(\S*?)?(;charset=[^;]+)?(;[^,]+?)?,(.+)/;b.exports=d},{}],88:[function(a,b,c){function d(a){return e.test(a)}var e=/^http:\/\//;b.exports=d},{}],89:[function(a,b,c){function d(a){return e.test(a)}var e=/^https:\/\//;b.exports=d},{}],90:[function(a,b,c){function d(a){return e.test(a)}var e=/^@import/i;b.exports=d},{}],91:[function(a,b,c){function d(a){return e.test(a)}var e=/^(\w+:\/\/|\/\/)/;b.exports=d},{}],92:[function(a,b,c){function d(a,b){var c,d,g,h,i=(""+a).split(f).map(e),j=(""+b).split(f).map(e),k=Math.min(i.length,j.length);for(g=0,h=k;g<h;g++)if(c=i[g],d=j[g],c!=d)return c>d?1:-1;return i.length>j.length?1:i.length==j.length?0:-1}function e(a){return""+parseInt(a)==a?parseInt(a):a}var f=/([0-9]+)/;b.exports=d},{}],93:[function(a,b,c){function d(a,b){var c,e,f,g={};for(c in a)f=a[c],Array.isArray(f)?g[c]=f.slice(0):g[c]="object"==typeof f&&null!==f?d(f,{}):f;for(e in b)f=b[e],e in g&&Array.isArray(f)?g[e]=f.slice(0):g[e]=e in g&&"object"==typeof f&&null!==f?d(g[e],f):f;return g}b.exports=d},{}],94:[function(a,b,c){function d(a,b){var c,d,f=e.OPEN_ROUND_BRACKET,g=e.CLOSE_ROUND_BRACKET,h=0,i=0,j=0,k=a.length,l=[];if(-1==a.indexOf(b))return[a];if(-1==a.indexOf(f))return a.split(b);for(;i<k;)a[i]==f?h++:a[i]==g&&h--,0===h&&i>0&&i+1<k&&a[i]==b&&(l.push(a.substring(j,i)),j=i+1),i++;return j<i+1&&(c=a.substring(j),d=c[c.length-1],d==b&&(c=c.substring(0,c.length-1)),l.push(c)),l}var e=a("../tokenizer/marker");b.exports=d},{"../tokenizer/marker":81}],95:[function(a,b,c){function d(a){return"background"==a[1][1]||"transform"==a[1][1]||"src"==a[1][1]}function e(a,b){return a[b][1][a[b][1].length-1]==C.CLOSE_ROUND_BRACKET}function f(a,b){return a[b][1]==C.COMMA}function g(a,b){return a[b][1]==C.FORWARD_SLASH}function h(a,b){return a[b+1]&&a[b+1][1]==C.COMMA}function i(a,b){return a[b+1]&&a[b+1][1]==C.FORWARD_SLASH}function j(a){return"filter"==a[1][1]||"-ms-filter"==a[1][1]}function k(a,b,c){return!a.spaceAfterClosingBrace&&d(b)&&e(b,c)||i(b,c)||g(b,c)||h(b,c)||f(b,c)}function l(a,b){for(var c=a.store,d=0,e=b.length;d<e;d++)c(a,b[d]),d<e-1&&c(a,w(a))}function m(a,b){for(var c=n(b),d=0,e=b.length;d<e;d++)o(a,b,d,c)}function n(a){for(var b=a.length-1;b>=0&&a[b][0]==D.COMMENT;b--);return b}function o(a,b,c,d){var e=a.store,f=b[c],g=f[2][0]==D.PROPERTY_BLOCK,h=c<d||g,i=c===d;switch(f[0]){case D.AT_RULE:e(a,f),e(a,c<d?v(a,A.AfterProperty,!1):z);break;case D.COMMENT:e(a,f);break;case D.PROPERTY:e(a,f[1]),e(a,u(a)),p(a,f),e(a,h?v(a,A.AfterProperty,i):z)}}function p(a,b){var c,d,e=a.store;if(b[2][0]==D.PROPERTY_BLOCK)e(a,s(a,A.AfterBlockBegins,!1)),m(a,b[2][1]),e(a,t(a,A.AfterBlockEnds,!1,!0));else for(c=2,d=b.length;c<d;c++)e(a,b[c]),c<d-1&&(j(b)||!k(a,b,c))&&e(a,C.SPACE)}function q(a,b){return a.format&&a.format.breaks[b]}function r(a,b){return a.format&&a.format.spaces[b]}function s(a,b,c){return a.format?(a.indentBy+=a.format.indentBy,a.indentWith=a.format.indentWith.repeat(a.indentBy),(c&&r(a,B.BeforeBlockBegins)?C.SPACE:z)+C.OPEN_CURLY_BRACKET+(q(a,b)?y:z)+a.indentWith):C.OPEN_CURLY_BRACKET}function t(a,b,c,d){return a.format?(a.indentBy-=a.format.indentBy,a.indentWith=a.format.indentWith.repeat(a.indentBy),(q(a,A.AfterProperty)||c&&q(a,A.BeforeBlockEnds)?y:z)+a.indentWith+C.CLOSE_CURLY_BRACKET+(d?z:(q(a,b)?y:z)+a.indentWith)):C.CLOSE_CURLY_BRACKET}function u(a){return a.format?C.COLON+(r(a,B.BeforeValue)?C.SPACE:z):C.COLON}function v(a,b,c){return a.format?C.SEMICOLON+(c||!q(a,b)?z:y+a.indentWith):C.SEMICOLON}function w(a){return a.format?C.COMMA+(q(a,A.BetweenSelectors)?y:z)+a.indentWith:C.COMMA}function x(a,b){var c,d,e,f,g=a.store;for(e=0,f=b.length;e<f;e++)switch(c=b[e],d=e==f-1,c[0]){case D.AT_RULE:g(a,c),g(a,v(a,A.AfterAtRule,d));break;case D.AT_RULE_BLOCK:l(a,c[1]),g(a,s(a,A.AfterRuleBegins,!0)),m(a,c[2]),g(a,t(a,A.AfterRuleEnds,!1,d));break;case D.NESTED_BLOCK:l(a,c[1]),g(a,s(a,A.AfterBlockBegins,!0)),x(a,c[2]),g(a,t(a,A.AfterBlockEnds,!0,d));break;case D.COMMENT:g(a,c),g(a,q(a,A.AfterComment)?y:z);break;case D.RULE:l(a,c[1]),g(a,s(a,A.AfterRuleBegins,!0)),m(a,c[2]),g(a,t(a,A.AfterRuleEnds,!1,d))}}var y=a("os").EOL,z="",A=a("../options/format").Breaks,B=a("../options/format").Spaces,C=a("../tokenizer/marker"),D=a("../tokenizer/token");b.exports={all:x,body:m,property:o,rules:l,value:p}},{"../options/format":59,"../tokenizer/marker":81,"../tokenizer/token":82,os:108}],96:[function(a,b,c){function d(a,b){a.output.push("string"==typeof b?b:b[1])}function e(){return{output:[],store:d}}function f(a){var b=e();return k.all(b,a),b.output.join("")}function g(a){var b=e();return k.body(b,a),b.output.join("")}function h(a,b){var c=e();return k.property(c,a,b,!0),c.output.join("")}function i(a){var b=e();return k.rules(b,a),b.output.join("")}function j(a){var b=e();return k.value(b,a),b.output.join("")}var k=a("./helpers");b.exports={all:f,body:g,property:h,rules:i,value:j}},{"./helpers":95}],97:[function(a,b,c){function d(a,b){var c="string"==typeof b?b:b[1];(0,a.wrap)(a,c),f(a,c),a.output.push(c)}function e(a,b){a.column+b.length>a.format.wrapAt&&(f(a,i),a.output.push(i))}function f(a,b){var c=b.split("\n");a.line+=c.length-1,a.column=c.length>1?0:a.column+c.pop().length}function g(a,b){var c={column:0,format:b.options.format,indentBy:0,indentWith:"",line:1,output:[],spaceAfterClosingBrace:b.options.compatibility.properties.spaceAfterClosingBrace,store:d,wrap:b.options.format.wrapAt?e:function(){}};return h(c,a),{styles:c.output.join("")}}var h=a("./helpers").all,i=a("os").EOL;b.exports=g},{"./helpers":95,os:108}],98:[function(a,b,c){(function(c){function d(a,b){var c="string"==typeof b,d=c?b:b[1],e=c?null:b[2];(0,a.wrap)(a,d),f(a,d,e),a.output.push(d)}function e(a,b){a.column+b.length>a.format.wrapAt&&(f(a,l,!1),a.output.push(l))}function f(a,b,c){var d=b.split("\n");c&&g(a,c),a.line+=d.length-1,a.column=d.length>1?0:a.column+d.pop().length}function g(a,b){for(var c=0,d=b.length;c<d;c++)h(a,b[c])}function h(a,b){var c=b[0],d=b[1],e=b[2],f=e,g=f||p;n&&f&&!m(f)&&(g=f.replace(o,q)),a.outputMap.addMapping({generated:{line:a.line,column:a.column},source:g,original:{line:c,column:d}}),a.inlineSources&&e in a.sourcesContent&&a.outputMap.setSourceContent(g,a.sourcesContent[e])}function i(a,b){var c={column:0,format:b.options.format,indentBy:0,indentWith:"",inlineSources:b.options.sourceMapInlineSources,line:1,output:[],outputMap:new j,sourcesContent:b.sourcesContent,spaceAfterClosingBrace:b.options.compatibility.properties.spaceAfterClosingBrace,store:d,wrap:b.options.format.wrapAt?e:function(){}};return k(c,a),{sourceMap:c.outputMap,styles:c.output.join("")}}var j=a("source-map").SourceMapGenerator,k=a("./helpers").all,l=a("os").EOL,m=a("../utils/is-remote-resource"),n="win32"==c.platform,o=/\//g,p="$stdin",q="\\";b.exports=i}).call(this,a("_process"))},{"../utils/is-remote-resource":91,"./helpers":95,_process:111,os:108,"source-map":152}],99:[function(a,b,c){(function(a){function b(a){return Array.isArray?Array.isArray(a):"[object Array]"===q(a)}function d(a){return"boolean"==typeof a}function e(a){return null===a}function f(a){return null==a}function g(a){return"number"==typeof a}function h(a){return"string"==typeof a}function i(a){return"symbol"==typeof a}function j(a){return void 0===a}function k(a){return"[object RegExp]"===q(a)}function l(a){return"object"==typeof a&&null!==a}function m(a){return"[object Date]"===q(a)}function n(a){return"[object Error]"===q(a)||a instanceof Error}function o(a){return"function"==typeof a}function p(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||void 0===a}function q(a){return Object.prototype.toString.call(a)}c.isArray=b,c.isBoolean=d,c.isNull=e,c.isNullOrUndefined=f,c.isNumber=g,c.isString=h,c.isSymbol=i,c.isUndefined=j,c.isRegExp=k,c.isObject=l,c.isDate=m,c.isError=n,c.isFunction=o,c.isPrimitive=p,c.isBuffer=a.isBuffer}).call(this,{isBuffer:a("../../is-buffer/index.js")})},{"../../is-buffer/index.js":105}],100:[function(a,b,c){function d(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function e(a){return"function"==typeof a}function f(a){return"number"==typeof a}function g(a){return"object"==typeof a&&null!==a}function h(a){return void 0===a}b.exports=d,d.EventEmitter=d,d.prototype._events=void 0,d.prototype._maxListeners=void 0,d.defaultMaxListeners=10,d.prototype.setMaxListeners=function(a){if(!f(a)||a<0||isNaN(a))throw TypeError("n must be a positive number");return this._maxListeners=a,this},d.prototype.emit=function(a){var b,c,d,f,i,j;if(this._events||(this._events={}),"error"===a&&(!this._events.error||g(this._events.error)&&!this._events.error.length)){if((b=arguments[1])instanceof Error)throw b;var k=new Error('Uncaught, unspecified "error" event. ('+b+")");throw k.context=b,k}if(c=this._events[a],h(c))return!1;if(e(c))switch(arguments.length){case 1:c.call(this);break;case 2:c.call(this,arguments[1]);break;case 3:c.call(this,arguments[1],arguments[2]);break;default:f=Array.prototype.slice.call(arguments,1),c.apply(this,f)}else if(g(c))for(f=Array.prototype.slice.call(arguments,1),j=c.slice(),d=j.length,i=0;i<d;i++)j[i].apply(this,f);return!0},d.prototype.addListener=function(a,b){var c;if(!e(b))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",a,e(b.listener)?b.listener:b),this._events[a]?g(this._events[a])?this._events[a].push(b):this._events[a]=[this._events[a],b]:this._events[a]=b,g(this._events[a])&&!this._events[a].warned&&(c=h(this._maxListeners)?d.defaultMaxListeners:this._maxListeners)&&c>0&&this._events[a].length>c&&(this._events[a].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[a].length),"function"==typeof console.trace&&console.trace()),this},d.prototype.on=d.prototype.addListener,d.prototype.once=function(a,b){function c(){this.removeListener(a,c),d||(d=!0,b.apply(this,arguments))}if(!e(b))throw TypeError("listener must be a function");var d=!1;return c.listener=b,this.on(a,c),this},d.prototype.removeListener=function(a,b){var c,d,f,h;if(!e(b))throw TypeError("listener must be a function");if(!this._events||!this._events[a])return this;if(c=this._events[a],f=c.length,d=-1,c===b||e(c.listener)&&c.listener===b)delete this._events[a],this._events.removeListener&&this.emit("removeListener",a,b);else if(g(c)){for(h=f;h-- >0;)if(c[h]===b||c[h].listener&&c[h].listener===b){d=h;break}if(d<0)return this;1===c.length?(c.length=0,delete this._events[a]):c.splice(d,1),this._events.removeListener&&this.emit("removeListener",a,b)}return this},d.prototype.removeAllListeners=function(a){var b,c;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[a]&&delete this._events[a],this;if(0===arguments.length){for(b in this._events)"removeListener"!==b&&this.removeAllListeners(b);return this.removeAllListeners("removeListener"),this._events={},this}if(c=this._events[a],e(c))this.removeListener(a,c);else if(c)for(;c.length;)this.removeListener(a,c[c.length-1]);return delete this._events[a],this},d.prototype.listeners=function(a){return this._events&&this._events[a]?e(this._events[a])?[this._events[a]]:this._events[a].slice():[]},d.prototype.listenerCount=function(a){if(this._events){var b=this._events[a];if(e(b))return 1;if(b)return b.length}return 0},d.listenerCount=function(a,b){return a.listenerCount(b)}},{}],101:[function(a,b,c){(function(a){!function(d){var e="object"==typeof c&&c,f="object"==typeof b&&b&&b.exports==e&&b,g="object"==typeof a&&a;g.global!==g&&g.window!==g||(d=g);var h=/<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g,i={"­":"shy","‌":"zwnj","‍":"zwj","‎":"lrm","⁣":"ic","⁢":"it","⁡":"af","‏":"rlm","​":"ZeroWidthSpace","⁠":"NoBreak","̑":"DownBreve","⃛":"tdot","⃜":"DotDot","\t":"Tab","\n":"NewLine"," ":"puncsp"," ":"MediumSpace"," ":"thinsp"," ":"hairsp"," ":"emsp13"," ":"ensp"," ":"emsp14"," ":"emsp"," ":"numsp"," ":"nbsp","  ":"ThickSpace","‾":"oline",_:"lowbar","‐":"dash","–":"ndash","—":"mdash","―":"horbar",",":"comma",";":"semi","⁏":"bsemi",":":"colon","⩴":"Colone","!":"excl","¡":"iexcl","?":"quest","¿":"iquest",".":"period","‥":"nldr","…":"mldr","·":"middot","'":"apos","‘":"lsquo","’":"rsquo","‚":"sbquo","‹":"lsaquo","›":"rsaquo",'"':"quot","“":"ldquo","”":"rdquo","„":"bdquo","«":"laquo","»":"raquo","(":"lpar",")":"rpar","[":"lsqb","]":"rsqb","{":"lcub","}":"rcub","⌈":"lceil","⌉":"rceil","⌊":"lfloor","⌋":"rfloor","⦅":"lopar","⦆":"ropar","⦋":"lbrke","⦌":"rbrke","⦍":"lbrkslu","⦎":"rbrksld","⦏":"lbrksld","⦐":"rbrkslu","⦑":"langd","⦒":"rangd","⦓":"lparlt","⦔":"rpargt","⦕":"gtlPar","⦖":"ltrPar","⟦":"lobrk","⟧":"robrk","⟨":"lang","⟩":"rang","⟪":"Lang","⟫":"Rang","⟬":"loang","⟭":"roang","❲":"lbbrk","❳":"rbbrk","‖":"Vert","§":"sect","¶":"para","@":"commat","*":"ast","/":"sol",undefined:null,"&":"amp","#":"num","%":"percnt","‰":"permil","‱":"pertenk","†":"dagger","‡":"Dagger","•":"bull","⁃":"hybull","′":"prime","″":"Prime","‴":"tprime","⁗":"qprime","‵":"bprime","⁁":"caret","`":"grave","´":"acute","˜":"tilde","^":"Hat","¯":"macr","˘":"breve","˙":"dot","¨":"die","˚":"ring","˝":"dblac","¸":"cedil","˛":"ogon","ˆ":"circ","ˇ":"caron","°":"deg","©":"copy","®":"reg","℗":"copysr","℘":"wp","℞":"rx","℧":"mho","℩":"iiota","←":"larr","↚":"nlarr","→":"rarr","↛":"nrarr","↑":"uarr","↓":"darr","↔":"harr","↮":"nharr","↕":"varr","↖":"nwarr","↗":"nearr","↘":"searr","↙":"swarr","↝":"rarrw","↝̸":"nrarrw","↞":"Larr","↟":"Uarr","↠":"Rarr","↡":"Darr","↢":"larrtl","↣":"rarrtl","↤":"mapstoleft","↥":"mapstoup","↦":"map","↧":"mapstodown","↩":"larrhk","↪":"rarrhk","↫":"larrlp","↬":"rarrlp","↭":"harrw","↰":"lsh","↱":"rsh","↲":"ldsh","↳":"rdsh","↵":"crarr","↶":"cularr","↷":"curarr","↺":"olarr","↻":"orarr","↼":"lharu","↽":"lhard","↾":"uharr","↿":"uharl","⇀":"rharu","⇁":"rhard","⇂":"dharr","⇃":"dharl","⇄":"rlarr","⇅":"udarr","⇆":"lrarr","⇇":"llarr","⇈":"uuarr","⇉":"rrarr","⇊":"ddarr","⇋":"lrhar","⇌":"rlhar","⇐":"lArr","⇍":"nlArr","⇑":"uArr","⇒":"rArr","⇏":"nrArr","⇓":"dArr","⇔":"iff","⇎":"nhArr","⇕":"vArr","⇖":"nwArr","⇗":"neArr","⇘":"seArr","⇙":"swArr","⇚":"lAarr","⇛":"rAarr","⇝":"zigrarr","⇤":"larrb","⇥":"rarrb","⇵":"duarr","⇽":"loarr","⇾":"roarr","⇿":"hoarr","∀":"forall","∁":"comp","∂":"part","∂̸":"npart","∃":"exist","∄":"nexist","∅":"empty","∇":"Del","∈":"in","∉":"notin","∋":"ni","∌":"notni","϶":"bepsi","∏":"prod","∐":"coprod","∑":"sum","+":"plus","±":"pm","÷":"div","×":"times","<":"lt","≮":"nlt","<⃒":"nvlt","=":"equals","≠":"ne","=⃥":"bne","⩵":"Equal",">":"gt","≯":"ngt",">⃒":"nvgt","¬":"not","|":"vert","¦":"brvbar","−":"minus","∓":"mp","∔":"plusdo","⁄":"frasl","∖":"setmn","∗":"lowast","∘":"compfn","√":"Sqrt","∝":"prop","∞":"infin","∟":"angrt","∠":"ang","∠⃒":"nang","∡":"angmsd","∢":"angsph","∣":"mid","∤":"nmid","∥":"par","∦":"npar","∧":"and","∨":"or","∩":"cap","∩︀":"caps","∪":"cup","∪︀":"cups","∫":"int","∬":"Int","∭":"tint","⨌":"qint","∮":"oint","∯":"Conint","∰":"Cconint","∱":"cwint","∲":"cwconint","∳":"awconint","∴":"there4","∵":"becaus","∶":"ratio","∷":"Colon","∸":"minusd","∺":"mDDot","∻":"homtht","∼":"sim","≁":"nsim","∼⃒":"nvsim","∽":"bsim","∽̱":"race","∾":"ac","∾̳":"acE","∿":"acd","≀":"wr","≂":"esim","≂̸":"nesim","≃":"sime","≄":"nsime","≅":"cong","≇":"ncong","≆":"simne","≈":"ap","≉":"nap","≊":"ape","≋":"apid","≋̸":"napid","≌":"bcong","≍":"CupCap","≭":"NotCupCap","≍⃒":"nvap","≎":"bump","≎̸":"nbump","≏":"bumpe","≏̸":"nbumpe","≐":"doteq","≐̸":"nedot","≑":"eDot","≒":"efDot","≓":"erDot","≔":"colone","≕":"ecolon","≖":"ecir","≗":"cire","≙":"wedgeq","≚":"veeeq","≜":"trie","≟":"equest","≡":"equiv","≢":"nequiv","≡⃥":"bnequiv","≤":"le","≰":"nle","≤⃒":"nvle","≥":"ge","≱":"nge","≥⃒":"nvge","≦":"lE","≦̸":"nlE","≧":"gE","≧̸":"ngE","≨︀":"lvnE","≨":"lnE","≩":"gnE","≩︀":"gvnE","≪":"ll","≪̸":"nLtv","≪⃒":"nLt","≫":"gg","≫̸":"nGtv","≫⃒":"nGt","≬":"twixt","≲":"lsim","≴":"nlsim","≳":"gsim","≵":"ngsim","≶":"lg","≸":"ntlg","≷":"gl","≹":"ntgl","≺":"pr","⊀":"npr","≻":"sc","⊁":"nsc","≼":"prcue","⋠":"nprcue","≽":"sccue","⋡":"nsccue","≾":"prsim","≿":"scsim","≿̸":"NotSucceedsTilde","⊂":"sub","⊄":"nsub","⊂⃒":"vnsub","⊃":"sup","⊅":"nsup","⊃⃒":"vnsup","⊆":"sube","⊈":"nsube","⊇":"supe","⊉":"nsupe",
-"⊊︀":"vsubne","⊊":"subne","⊋︀":"vsupne","⊋":"supne","⊍":"cupdot","⊎":"uplus","⊏":"sqsub","⊏̸":"NotSquareSubset","⊐":"sqsup","⊐̸":"NotSquareSuperset","⊑":"sqsube","⋢":"nsqsube","⊒":"sqsupe","⋣":"nsqsupe","⊓":"sqcap","⊓︀":"sqcaps","⊔":"sqcup","⊔︀":"sqcups","⊕":"oplus","⊖":"ominus","⊗":"otimes","⊘":"osol","⊙":"odot","⊚":"ocir","⊛":"oast","⊝":"odash","⊞":"plusb","⊟":"minusb","⊠":"timesb","⊡":"sdotb","⊢":"vdash","⊬":"nvdash","⊣":"dashv","⊤":"top","⊥":"bot","⊧":"models","⊨":"vDash","⊭":"nvDash","⊩":"Vdash","⊮":"nVdash","⊪":"Vvdash","⊫":"VDash","⊯":"nVDash","⊰":"prurel","⊲":"vltri","⋪":"nltri","⊳":"vrtri","⋫":"nrtri","⊴":"ltrie","⋬":"nltrie","⊴⃒":"nvltrie","⊵":"rtrie","⋭":"nrtrie","⊵⃒":"nvrtrie","⊶":"origof","⊷":"imof","⊸":"mumap","⊹":"hercon","⊺":"intcal","⊻":"veebar","⊽":"barvee","⊾":"angrtvb","⊿":"lrtri","⋀":"Wedge","⋁":"Vee","⋂":"xcap","⋃":"xcup","⋄":"diam","⋅":"sdot","⋆":"Star","⋇":"divonx","⋈":"bowtie","⋉":"ltimes","⋊":"rtimes","⋋":"lthree","⋌":"rthree","⋍":"bsime","⋎":"cuvee","⋏":"cuwed","⋐":"Sub","⋑":"Sup","⋒":"Cap","⋓":"Cup","⋔":"fork","⋕":"epar","⋖":"ltdot","⋗":"gtdot","⋘":"Ll","⋘̸":"nLl","⋙":"Gg","⋙̸":"nGg","⋚︀":"lesg","⋚":"leg","⋛":"gel","⋛︀":"gesl","⋞":"cuepr","⋟":"cuesc","⋦":"lnsim","⋧":"gnsim","⋨":"prnsim","⋩":"scnsim","⋮":"vellip","⋯":"ctdot","⋰":"utdot","⋱":"dtdot","⋲":"disin","⋳":"isinsv","⋴":"isins","⋵":"isindot","⋵̸":"notindot","⋶":"notinvc","⋷":"notinvb","⋹":"isinE","⋹̸":"notinE","⋺":"nisd","⋻":"xnis","⋼":"nis","⋽":"notnivc","⋾":"notnivb","⌅":"barwed","⌆":"Barwed","⌌":"drcrop","⌍":"dlcrop","⌎":"urcrop","⌏":"ulcrop","⌐":"bnot","⌒":"profline","⌓":"profsurf","⌕":"telrec","⌖":"target","⌜":"ulcorn","⌝":"urcorn","⌞":"dlcorn","⌟":"drcorn","⌢":"frown","⌣":"smile","⌭":"cylcty","⌮":"profalar","⌶":"topbot","⌽":"ovbar","⌿":"solbar","⍼":"angzarr","⎰":"lmoust","⎱":"rmoust","⎴":"tbrk","⎵":"bbrk","⎶":"bbrktbrk","⏜":"OverParenthesis","⏝":"UnderParenthesis","⏞":"OverBrace","⏟":"UnderBrace","⏢":"trpezium","⏧":"elinters","␣":"blank","─":"boxh","│":"boxv","┌":"boxdr","┐":"boxdl","└":"boxur","┘":"boxul","├":"boxvr","┤":"boxvl","┬":"boxhd","┴":"boxhu","┼":"boxvh","═":"boxH","║":"boxV","╒":"boxdR","╓":"boxDr","╔":"boxDR","╕":"boxdL","╖":"boxDl","╗":"boxDL","╘":"boxuR","╙":"boxUr","╚":"boxUR","╛":"boxuL","╜":"boxUl","╝":"boxUL","╞":"boxvR","╟":"boxVr","╠":"boxVR","╡":"boxvL","╢":"boxVl","╣":"boxVL","╤":"boxHd","╥":"boxhD","╦":"boxHD","╧":"boxHu","╨":"boxhU","╩":"boxHU","╪":"boxvH","╫":"boxVh","╬":"boxVH","▀":"uhblk","▄":"lhblk","█":"block","░":"blk14","▒":"blk12","▓":"blk34","□":"squ","▪":"squf","▫":"EmptyVerySmallSquare","▭":"rect","▮":"marker","▱":"fltns","△":"xutri","▴":"utrif","▵":"utri","▸":"rtrif","▹":"rtri","▽":"xdtri","▾":"dtrif","▿":"dtri","◂":"ltrif","◃":"ltri","◊":"loz","○":"cir","◬":"tridot","◯":"xcirc","◸":"ultri","◹":"urtri","◺":"lltri","◻":"EmptySmallSquare","◼":"FilledSmallSquare","★":"starf","☆":"star","☎":"phone","♀":"female","♂":"male","♠":"spades","♣":"clubs","♥":"hearts","♦":"diams","♪":"sung","✓":"check","✗":"cross","✠":"malt","✶":"sext","❘":"VerticalSeparator","⟈":"bsolhsub","⟉":"suphsol","⟵":"xlarr","⟶":"xrarr","⟷":"xharr","⟸":"xlArr","⟹":"xrArr","⟺":"xhArr","⟼":"xmap","⟿":"dzigrarr","⤂":"nvlArr","⤃":"nvrArr","⤄":"nvHarr","⤅":"Map","⤌":"lbarr","⤍":"rbarr","⤎":"lBarr","⤏":"rBarr","⤐":"RBarr","⤑":"DDotrahd","⤒":"UpArrowBar","⤓":"DownArrowBar","⤖":"Rarrtl","⤙":"latail","⤚":"ratail","⤛":"lAtail","⤜":"rAtail","⤝":"larrfs","⤞":"rarrfs","⤟":"larrbfs","⤠":"rarrbfs","⤣":"nwarhk","⤤":"nearhk","⤥":"searhk","⤦":"swarhk","⤧":"nwnear","⤨":"toea","⤩":"tosa","⤪":"swnwar","⤳":"rarrc","⤳̸":"nrarrc","⤵":"cudarrr","⤶":"ldca","⤷":"rdca","⤸":"cudarrl","⤹":"larrpl","⤼":"curarrm","⤽":"cularrp","⥅":"rarrpl","⥈":"harrcir","⥉":"Uarrocir","⥊":"lurdshar","⥋":"ldrushar","⥎":"LeftRightVector","⥏":"RightUpDownVector","⥐":"DownLeftRightVector","⥑":"LeftUpDownVector","⥒":"LeftVectorBar","⥓":"RightVectorBar","⥔":"RightUpVectorBar","⥕":"RightDownVectorBar","⥖":"DownLeftVectorBar","⥗":"DownRightVectorBar","⥘":"LeftUpVectorBar","⥙":"LeftDownVectorBar","⥚":"LeftTeeVector","⥛":"RightTeeVector","⥜":"RightUpTeeVector","⥝":"RightDownTeeVector","⥞":"DownLeftTeeVector","⥟":"DownRightTeeVector","⥠":"LeftUpTeeVector","⥡":"LeftDownTeeVector","⥢":"lHar","⥣":"uHar","⥤":"rHar","⥥":"dHar","⥦":"luruhar","⥧":"ldrdhar","⥨":"ruluhar","⥩":"rdldhar","⥪":"lharul","⥫":"llhard","⥬":"rharul","⥭":"lrhard","⥮":"udhar","⥯":"duhar","⥰":"RoundImplies","⥱":"erarr","⥲":"simrarr","⥳":"larrsim","⥴":"rarrsim","⥵":"rarrap","⥶":"ltlarr","⥸":"gtrarr","⥹":"subrarr","⥻":"suplarr","⥼":"lfisht","⥽":"rfisht","⥾":"ufisht","⥿":"dfisht","⦚":"vzigzag","⦜":"vangrt","⦝":"angrtvbd","⦤":"ange","⦥":"range","⦦":"dwangle","⦧":"uwangle","⦨":"angmsdaa","⦩":"angmsdab","⦪":"angmsdac","⦫":"angmsdad","⦬":"angmsdae","⦭":"angmsdaf","⦮":"angmsdag","⦯":"angmsdah","⦰":"bemptyv","⦱":"demptyv","⦲":"cemptyv","⦳":"raemptyv","⦴":"laemptyv","⦵":"ohbar","⦶":"omid","⦷":"opar","⦹":"operp","⦻":"olcross","⦼":"odsold","⦾":"olcir","⦿":"ofcir","⧀":"olt","⧁":"ogt","⧂":"cirscir","⧃":"cirE","⧄":"solb","⧅":"bsolb","⧉":"boxbox","⧍":"trisb","⧎":"rtriltri","⧏":"LeftTriangleBar","⧏̸":"NotLeftTriangleBar","⧐":"RightTriangleBar","⧐̸":"NotRightTriangleBar","⧜":"iinfin","⧝":"infintie","⧞":"nvinfin","⧣":"eparsl","⧤":"smeparsl","⧥":"eqvparsl","⧫":"lozf","⧴":"RuleDelayed","⧶":"dsol","⨀":"xodot","⨁":"xoplus","⨂":"xotime","⨄":"xuplus","⨆":"xsqcup","⨍":"fpartint","⨐":"cirfnint","⨑":"awint","⨒":"rppolint","⨓":"scpolint","⨔":"npolint","⨕":"pointint","⨖":"quatint","⨗":"intlarhk","⨢":"pluscir","⨣":"plusacir","⨤":"simplus","⨥":"plusdu","⨦":"plussim","⨧":"plustwo","⨩":"mcomma","⨪":"minusdu","⨭":"loplus","⨮":"roplus","⨯":"Cross","⨰":"timesd","⨱":"timesbar","⨳":"smashp","⨴":"lotimes","⨵":"rotimes","⨶":"otimesas","⨷":"Otimes","⨸":"odiv","⨹":"triplus","⨺":"triminus","⨻":"tritime","⨼":"iprod","⨿":"amalg","⩀":"capdot","⩂":"ncup","⩃":"ncap","⩄":"capand","⩅":"cupor","⩆":"cupcap","⩇":"capcup","⩈":"cupbrcap","⩉":"capbrcup","⩊":"cupcup","⩋":"capcap","⩌":"ccups","⩍":"ccaps","⩐":"ccupssm","⩓":"And","⩔":"Or","⩕":"andand","⩖":"oror","⩗":"orslope","⩘":"andslope","⩚":"andv","⩛":"orv","⩜":"andd","⩝":"ord","⩟":"wedbar","⩦":"sdote","⩪":"simdot","⩭":"congdot","⩭̸":"ncongdot","⩮":"easter","⩯":"apacir","⩰":"apE","⩰̸":"napE","⩱":"eplus","⩲":"pluse","⩳":"Esim","⩷":"eDDot","⩸":"equivDD","⩹":"ltcir","⩺":"gtcir","⩻":"ltquest","⩼":"gtquest","⩽":"les","⩽̸":"nles","⩾":"ges","⩾̸":"nges","⩿":"lesdot","⪀":"gesdot","⪁":"lesdoto","⪂":"gesdoto","⪃":"lesdotor","⪄":"gesdotol","⪅":"lap","⪆":"gap","⪇":"lne","⪈":"gne","⪉":"lnap","⪊":"gnap","⪋":"lEg","⪌":"gEl","⪍":"lsime","⪎":"gsime","⪏":"lsimg","⪐":"gsiml","⪑":"lgE","⪒":"glE","⪓":"lesges","⪔":"gesles","⪕":"els","⪖":"egs","⪗":"elsdot","⪘":"egsdot","⪙":"el","⪚":"eg","⪝":"siml","⪞":"simg","⪟":"simlE","⪠":"simgE","⪡":"LessLess","⪡̸":"NotNestedLessLess","⪢":"GreaterGreater","⪢̸":"NotNestedGreaterGreater","⪤":"glj","⪥":"gla","⪦":"ltcc","⪧":"gtcc","⪨":"lescc","⪩":"gescc","⪪":"smt","⪫":"lat","⪬":"smte","⪬︀":"smtes","⪭":"late","⪭︀":"lates","⪮":"bumpE","⪯":"pre","⪯̸":"npre","⪰":"sce","⪰̸":"nsce","⪳":"prE","⪴":"scE","⪵":"prnE","⪶":"scnE","⪷":"prap","⪸":"scap","⪹":"prnap","⪺":"scnap","⪻":"Pr","⪼":"Sc","⪽":"subdot","⪾":"supdot","⪿":"subplus","⫀":"supplus","⫁":"submult","⫂":"supmult","⫃":"subedot","⫄":"supedot","⫅":"subE","⫅̸":"nsubE","⫆":"supE","⫆̸":"nsupE","⫇":"subsim","⫈":"supsim","⫋︀":"vsubnE","⫋":"subnE","⫌︀":"vsupnE","⫌":"supnE","⫏":"csub","⫐":"csup","⫑":"csube","⫒":"csupe","⫓":"subsup","⫔":"supsub","⫕":"subsub","⫖":"supsup","⫗":"suphsub","⫘":"supdsub","⫙":"forkv","⫚":"topfork","⫛":"mlcp","⫤":"Dashv","⫦":"Vdashl","⫧":"Barv","⫨":"vBar","⫩":"vBarv","⫫":"Vbar","⫬":"Not","⫭":"bNot","⫮":"rnmid","⫯":"cirmid","⫰":"midcir","⫱":"topcir","⫲":"nhpar","⫳":"parsim","⫽":"parsl","⫽⃥":"nparsl","♭":"flat","♮":"natur","♯":"sharp","¤":"curren","¢":"cent",$:"dollar","£":"pound","¥":"yen","€":"euro","¹":"sup1","½":"half","⅓":"frac13","¼":"frac14","⅕":"frac15","⅙":"frac16","⅛":"frac18","²":"sup2","⅔":"frac23","⅖":"frac25","³":"sup3","¾":"frac34","⅗":"frac35","⅜":"frac38","⅘":"frac45","⅚":"frac56","⅝":"frac58","⅞":"frac78","𝒶":"ascr","𝕒":"aopf","𝔞":"afr","𝔸":"Aopf","𝔄":"Afr","𝒜":"Ascr","ª":"ordf","á":"aacute","Á":"Aacute","à":"agrave","À":"Agrave","ă":"abreve","Ă":"Abreve","â":"acirc","Â":"Acirc","å":"aring","Å":"angst","ä":"auml","Ä":"Auml","ã":"atilde","Ã":"Atilde","ą":"aogon","Ą":"Aogon","ā":"amacr","Ā":"Amacr","æ":"aelig","Æ":"AElig","𝒷":"bscr","𝕓":"bopf","𝔟":"bfr","𝔹":"Bopf","ℬ":"Bscr","𝔅":"Bfr","𝔠":"cfr","𝒸":"cscr","𝕔":"copf","ℭ":"Cfr","𝒞":"Cscr","ℂ":"Copf","ć":"cacute","Ć":"Cacute","ĉ":"ccirc","Ĉ":"Ccirc","č":"ccaron","Č":"Ccaron","ċ":"cdot","Ċ":"Cdot","ç":"ccedil","Ç":"Ccedil","℅":"incare","𝔡":"dfr","ⅆ":"dd","𝕕":"dopf","𝒹":"dscr","𝒟":"Dscr","𝔇":"Dfr","ⅅ":"DD","𝔻":"Dopf","ď":"dcaron","Ď":"Dcaron","đ":"dstrok","Đ":"Dstrok","ð":"eth","Ð":"ETH","ⅇ":"ee","ℯ":"escr","𝔢":"efr","𝕖":"eopf","ℰ":"Escr","𝔈":"Efr","𝔼":"Eopf","é":"eacute","É":"Eacute","è":"egrave","È":"Egrave","ê":"ecirc","Ê":"Ecirc","ě":"ecaron","Ě":"Ecaron","ë":"euml","Ë":"Euml","ė":"edot","Ė":"Edot","ę":"eogon","Ę":"Eogon","ē":"emacr","Ē":"Emacr","𝔣":"ffr","𝕗":"fopf","𝒻":"fscr","𝔉":"Ffr","𝔽":"Fopf","ℱ":"Fscr","ff":"fflig","ffi":"ffilig","ffl":"ffllig","fi":"filig",fj:"fjlig","fl":"fllig","ƒ":"fnof","ℊ":"gscr","𝕘":"gopf","𝔤":"gfr","𝒢":"Gscr","𝔾":"Gopf","𝔊":"Gfr","ǵ":"gacute","ğ":"gbreve","Ğ":"Gbreve","ĝ":"gcirc","Ĝ":"Gcirc","ġ":"gdot","Ġ":"Gdot","Ģ":"Gcedil","𝔥":"hfr","ℎ":"planckh","𝒽":"hscr","𝕙":"hopf","ℋ":"Hscr","ℌ":"Hfr","ℍ":"Hopf","ĥ":"hcirc","Ĥ":"Hcirc","ℏ":"hbar","ħ":"hstrok","Ħ":"Hstrok","𝕚":"iopf","𝔦":"ifr","𝒾":"iscr","ⅈ":"ii","𝕀":"Iopf","ℐ":"Iscr","ℑ":"Im","í":"iacute","Í":"Iacute","ì":"igrave","Ì":"Igrave","î":"icirc","Î":"Icirc","ï":"iuml","Ï":"Iuml","ĩ":"itilde","Ĩ":"Itilde","İ":"Idot","į":"iogon","Į":"Iogon","ī":"imacr","Ī":"Imacr","ij":"ijlig","IJ":"IJlig","ı":"imath","𝒿":"jscr","𝕛":"jopf","𝔧":"jfr","𝒥":"Jscr","𝔍":"Jfr","𝕁":"Jopf","ĵ":"jcirc","Ĵ":"Jcirc","ȷ":"jmath","𝕜":"kopf","𝓀":"kscr","𝔨":"kfr","𝒦":"Kscr","𝕂":"Kopf","𝔎":"Kfr","ķ":"kcedil","Ķ":"Kcedil","𝔩":"lfr","𝓁":"lscr","ℓ":"ell","𝕝":"lopf","ℒ":"Lscr","𝔏":"Lfr","𝕃":"Lopf","ĺ":"lacute","Ĺ":"Lacute","ľ":"lcaron","Ľ":"Lcaron","ļ":"lcedil","Ļ":"Lcedil","ł":"lstrok","Ł":"Lstrok","ŀ":"lmidot","Ŀ":"Lmidot","𝔪":"mfr","𝕞":"mopf","𝓂":"mscr","𝔐":"Mfr","𝕄":"Mopf","ℳ":"Mscr","𝔫":"nfr","𝕟":"nopf","𝓃":"nscr","ℕ":"Nopf","𝒩":"Nscr","𝔑":"Nfr","ń":"nacute","Ń":"Nacute","ň":"ncaron","Ň":"Ncaron","ñ":"ntilde","Ñ":"Ntilde","ņ":"ncedil","Ņ":"Ncedil","№":"numero","ŋ":"eng","Ŋ":"ENG","𝕠":"oopf","𝔬":"ofr","ℴ":"oscr","𝒪":"Oscr","𝔒":"Ofr","𝕆":"Oopf","º":"ordm","ó":"oacute","Ó":"Oacute","ò":"ograve","Ò":"Ograve","ô":"ocirc","Ô":"Ocirc","ö":"ouml","Ö":"Ouml","ő":"odblac","Ő":"Odblac","õ":"otilde","Õ":"Otilde","ø":"oslash","Ø":"Oslash","ō":"omacr","Ō":"Omacr","œ":"oelig","Œ":"OElig","𝔭":"pfr","𝓅":"pscr","𝕡":"popf","ℙ":"Popf","𝔓":"Pfr","𝒫":"Pscr","𝕢":"qopf","𝔮":"qfr","𝓆":"qscr","𝒬":"Qscr","𝔔":"Qfr","ℚ":"Qopf","ĸ":"kgreen","𝔯":"rfr","𝕣":"ropf","𝓇":"rscr","ℛ":"Rscr","ℜ":"Re","ℝ":"Ropf","ŕ":"racute","Ŕ":"Racute","ř":"rcaron","Ř":"Rcaron","ŗ":"rcedil","Ŗ":"Rcedil","𝕤":"sopf","𝓈":"sscr","𝔰":"sfr","𝕊":"Sopf","𝔖":"Sfr","𝒮":"Sscr","Ⓢ":"oS","ś":"sacute","Ś":"Sacute","ŝ":"scirc","Ŝ":"Scirc","š":"scaron","Š":"Scaron","ş":"scedil","Ş":"Scedil","ß":"szlig","𝔱":"tfr","𝓉":"tscr","𝕥":"topf","𝒯":"Tscr","𝔗":"Tfr","𝕋":"Topf","ť":"tcaron","Ť":"Tcaron","ţ":"tcedil","Ţ":"Tcedil","™":"trade","ŧ":"tstrok","Ŧ":"Tstrok","𝓊":"uscr","𝕦":"uopf","𝔲":"ufr","𝕌":"Uopf","𝔘":"Ufr","𝒰":"Uscr","ú":"uacute","Ú":"Uacute","ù":"ugrave","Ù":"Ugrave","ŭ":"ubreve","Ŭ":"Ubreve","û":"ucirc","Û":"Ucirc","ů":"uring","Ů":"Uring","ü":"uuml","Ü":"Uuml","ű":"udblac","Ű":"Udblac","ũ":"utilde","Ũ":"Utilde","ų":"uogon","Ų":"Uogon","ū":"umacr","Ū":"Umacr","𝔳":"vfr","𝕧":"vopf","𝓋":"vscr","𝔙":"Vfr","𝕍":"Vopf","𝒱":"Vscr","𝕨":"wopf","𝓌":"wscr","𝔴":"wfr","𝒲":"Wscr","𝕎":"Wopf","𝔚":"Wfr","ŵ":"wcirc","Ŵ":"Wcirc","𝔵":"xfr","𝓍":"xscr","𝕩":"xopf","𝕏":"Xopf","𝔛":"Xfr","𝒳":"Xscr","𝔶":"yfr","𝓎":"yscr","𝕪":"yopf","𝒴":"Yscr","𝔜":"Yfr","𝕐":"Yopf","ý":"yacute","Ý":"Yacute","ŷ":"ycirc","Ŷ":"Ycirc","ÿ":"yuml","Ÿ":"Yuml","𝓏":"zscr","𝔷":"zfr","𝕫":"zopf","ℨ":"Zfr","ℤ":"Zopf","𝒵":"Zscr","ź":"zacute","Ź":"Zacute","ž":"zcaron","Ž":"Zcaron","ż":"zdot","Ż":"Zdot","Ƶ":"imped","þ":"thorn","Þ":"THORN","ʼn":"napos","α":"alpha","Α":"Alpha","β":"beta","Β":"Beta","γ":"gamma","Γ":"Gamma","δ":"delta","Δ":"Delta","ε":"epsi","ϵ":"epsiv","Ε":"Epsilon","ϝ":"gammad","Ϝ":"Gammad","ζ":"zeta","Ζ":"Zeta","η":"eta","Η":"Eta","θ":"theta","ϑ":"thetav","Θ":"Theta","ι":"iota","Ι":"Iota","κ":"kappa","ϰ":"kappav","Κ":"Kappa","λ":"lambda","Λ":"Lambda","μ":"mu","µ":"micro","Μ":"Mu","ν":"nu","Ν":"Nu","ξ":"xi","Ξ":"Xi","ο":"omicron","Ο":"Omicron","π":"pi","ϖ":"piv","Π":"Pi","ρ":"rho","ϱ":"rhov","Ρ":"Rho","σ":"sigma","Σ":"Sigma","ς":"sigmaf","τ":"tau","Τ":"Tau","υ":"upsi","Υ":"Upsilon","ϒ":"Upsi","φ":"phi","ϕ":"phiv","Φ":"Phi","χ":"chi","Χ":"Chi","ψ":"psi","Ψ":"Psi","ω":"omega","Ω":"ohm","а":"acy","А":"Acy","б":"bcy","Б":"Bcy","в":"vcy","В":"Vcy","г":"gcy","Г":"Gcy","ѓ":"gjcy","Ѓ":"GJcy","д":"dcy","Д":"Dcy","ђ":"djcy","Ђ":"DJcy","е":"iecy","Е":"IEcy","ё":"iocy","Ё":"IOcy","є":"jukcy","Є":"Jukcy","ж":"zhcy","Ж":"ZHcy","з":"zcy","З":"Zcy","ѕ":"dscy","Ѕ":"DScy","и":"icy","И":"Icy","і":"iukcy","І":"Iukcy","ї":"yicy","Ї":"YIcy","й":"jcy","Й":"Jcy","ј":"jsercy","Ј":"Jsercy","к":"kcy","К":"Kcy","ќ":"kjcy","Ќ":"KJcy","л":"lcy","Л":"Lcy","љ":"ljcy","Љ":"LJcy","м":"mcy","М":"Mcy","н":"ncy","Н":"Ncy","њ":"njcy","Њ":"NJcy","о":"ocy","О":"Ocy","п":"pcy","П":"Pcy","р":"rcy","Р":"Rcy","с":"scy","С":"Scy","т":"tcy","Т":"Tcy","ћ":"tshcy","Ћ":"TSHcy","у":"ucy","У":"Ucy","ў":"ubrcy","Ў":"Ubrcy","ф":"fcy","Ф":"Fcy","х":"khcy","Х":"KHcy","ц":"tscy","Ц":"TScy","ч":"chcy","Ч":"CHcy","џ":"dzcy","Џ":"DZcy","ш":"shcy","Ш":"SHcy","щ":"shchcy","Щ":"SHCHcy","ъ":"hardcy","Ъ":"HARDcy","ы":"ycy","Ы":"Ycy","ь":"softcy","Ь":"SOFTcy","э":"ecy","Э":"Ecy","ю":"yucy","Ю":"YUcy","я":"yacy","Я":"YAcy","ℵ":"aleph","ℶ":"beth","ℷ":"gimel","ℸ":"daleth"},j={'"':"&quot;","&":"&amp;","'":"&#x27;","<":"&lt;",">":"&gt;","`":"&#x60;"},k=/&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/,l=/[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,m={aacute:"á",Aacute:"Á",abreve:"ă",Abreve:"Ă",ac:"∾",acd:"∿",acE:"∾̳",acirc:"â",Acirc:"Â",acute:"´",acy:"а",Acy:"А",aelig:"æ",AElig:"Æ",af:"⁡",afr:"𝔞",Afr:"𝔄",agrave:"à",Agrave:"À",alefsym:"ℵ",aleph:"ℵ",alpha:"α",Alpha:"Α",amacr:"ā",Amacr:"Ā",amalg:"⨿",amp:"&",AMP:"&",and:"∧",And:"⩓",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",aogon:"ą",Aogon:"Ą",aopf:"𝕒",Aopf:"𝔸",ap:"≈",apacir:"⩯",ape:"≊",apE:"⩰",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",aring:"å",Aring:"Å",ascr:"𝒶",Ascr:"𝒜",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",atilde:"ã",Atilde:"Ã",auml:"ä",Auml:"Ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",bcy:"б",Bcy:"Б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",beta:"β",Beta:"Β",beth:"ℶ",between:"≬",bfr:"𝔟",Bfr:"𝔅",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bnot:"⌐",bNot:"⫭",bopf:"𝕓",Bopf:"𝔹",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxhD:"╥",boxHd:"╤",boxHD:"╦",boxhu:"┴",boxhU:"╨",boxHu:"╧",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpe:"≏",bumpE:"⪮",bumpeq:"≏",Bumpeq:"≎",cacute:"ć",Cacute:"Ć",cap:"∩",Cap:"⋒",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",ccaron:"č",Ccaron:"Č",ccedil:"ç",Ccedil:"Ç",ccirc:"ĉ",Ccirc:"Ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",cdot:"ċ",Cdot:"Ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",chcy:"ч",CHcy:"Ч",check:"✓",checkmark:"✓",chi:"χ",Chi:"Χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cire:"≗",cirE:"⧃",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",colone:"≔",Colone:"⩴",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",cscr:"𝒸",Cscr:"𝒞",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cup:"∪",Cup:"⋓",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",dArr:"⇓",Darr:"↡",dash:"‐",dashv:"⊣",Dashv:"⫤",dbkarow:"⤏",dblac:"˝",dcaron:"ď",Dcaron:"Ď",dcy:"д",Dcy:"Д",dd:"ⅆ",DD:"ⅅ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",delta:"δ",Delta:"Δ",demptyv:"⦱",dfisht:"⥿",dfr:"𝔡",Dfr:"𝔇",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",djcy:"ђ",DJcy:"Ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",dopf:"𝕕",Dopf:"𝔻",dot:"˙",Dot:"¨",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",downarrow:"↓",Downarrow:"⇓",DownArrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",dscr:"𝒹",Dscr:"𝒟",dscy:"ѕ",DScy:"Ѕ",dsol:"⧶",dstrok:"đ",Dstrok:"Đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",dzcy:"џ",DZcy:"Џ",dzigrarr:"⟿",eacute:"é",Eacute:"É",easter:"⩮",ecaron:"ě",Ecaron:"Ě",ecir:"≖",ecirc:"ê",Ecirc:"Ê",ecolon:"≕",ecy:"э",Ecy:"Э",eDDot:"⩷",edot:"ė",eDot:"≑",Edot:"Ė",ee:"ⅇ",efDot:"≒",efr:"𝔢",Efr:"𝔈",eg:"⪚",egrave:"è",Egrave:"È",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",emacr:"ē",Emacr:"Ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",eng:"ŋ",ENG:"Ŋ",ensp:" ",eogon:"ę",Eogon:"Ę",eopf:"𝕖",Eopf:"𝔼",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",epsilon:"ε",Epsilon:"Ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",esim:"≂",Esim:"⩳",eta:"η",Eta:"Η",eth:"ð",ETH:"Ð",euml:"ë",Euml:"Ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",fcy:"ф",Fcy:"Ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",ffr:"𝔣",Ffr:"𝔉",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",fopf:"𝕗",Fopf:"𝔽",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",gamma:"γ",Gamma:"Γ",gammad:"ϝ",Gammad:"Ϝ",gap:"⪆",gbreve:"ğ",Gbreve:"Ğ",Gcedil:"Ģ",gcirc:"ĝ",Gcirc:"Ĝ",gcy:"г",Gcy:"Г",gdot:"ġ",Gdot:"Ġ",ge:"≥",gE:"≧",gel:"⋛",gEl:"⪌",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",gfr:"𝔤",Gfr:"𝔊",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",gjcy:"ѓ",GJcy:"Ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",gopf:"𝕘",Gopf:"𝔾",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",gscr:"ℊ",Gscr:"𝒢",gsim:"≳",gsime:"⪎",gsiml:"⪐",gt:">",Gt:"≫",GT:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",hardcy:"ъ",HARDcy:"Ъ",harr:"↔",hArr:"⇔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",hcirc:"ĥ",Hcirc:"Ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",hstrok:"ħ",Hstrok:"Ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",iacute:"í",Iacute:"Í",ic:"⁣",icirc:"î",Icirc:"Î",icy:"и",Icy:"И",Idot:"İ",iecy:"е",IEcy:"Е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",igrave:"ì",Igrave:"Ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",ijlig:"ij",IJlig:"IJ",Im:"ℑ",imacr:"ī",Imacr:"Ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",int:"∫",Int:"∬",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",iocy:"ё",IOcy:"Ё",iogon:"į",Iogon:"Į",iopf:"𝕚",Iopf:"𝕀",iota:"ι",Iota:"Ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",itilde:"ĩ",Itilde:"Ĩ",iukcy:"і",Iukcy:"І",iuml:"ï",Iuml:"Ï",jcirc:"ĵ",Jcirc:"Ĵ",jcy:"й",Jcy:"Й",jfr:"𝔧",Jfr:"𝔍",jmath:"ȷ",jopf:"𝕛",Jopf:"𝕁",jscr:"𝒿",Jscr:"𝒥",jsercy:"ј",Jsercy:"Ј",jukcy:"є",Jukcy:"Є",kappa:"κ",Kappa:"Κ",kappav:"ϰ",kcedil:"ķ",Kcedil:"Ķ",kcy:"к",Kcy:"К",kfr:"𝔨",Kfr:"𝔎",kgreen:"ĸ",khcy:"х",KHcy:"Х",kjcy:"ќ",KJcy:"Ќ",kopf:"𝕜",Kopf:"𝕂",kscr:"𝓀",Kscr:"𝒦",lAarr:"⇚",lacute:"ĺ",Lacute:"Ĺ",laemptyv:"⦴",lagran:"ℒ",lambda:"λ",Lambda:"Λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larr:"←",lArr:"⇐",Larr:"↞",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",latail:"⤙",lAtail:"⤛",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",lcaron:"ľ",Lcaron:"Ľ",lcedil:"ļ",Lcedil:"Ļ",lceil:"⌈",lcub:"{",lcy:"л",Lcy:"Л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",leftarrow:"←",Leftarrow:"⇐",LeftArrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",Leftrightarrow:"⇔",LeftRightArrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",leg:"⋚",lEg:"⪋",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",lfr:"𝔩",Lfr:"𝔏",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",ljcy:"љ",LJcy:"Љ",ll:"≪",Ll:"⋘",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",lmidot:"ŀ",Lmidot:"Ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",Longleftarrow:"⟸",LongLeftArrow:"⟵",longleftrightarrow:"⟷",Longleftrightarrow:"⟺",LongLeftRightArrow:"⟷",longmapsto:"⟼",longrightarrow:"⟶",Longrightarrow:"⟹",LongRightArrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",lopf:"𝕝",Lopf:"𝕃",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",lstrok:"ł",Lstrok:"Ł",lt:"<",Lt:"≪",LT:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",map:"↦",Map:"⤅",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",mcy:"м",Mcy:"М",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",mfr:"𝔪",Mfr:"𝔐",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",mopf:"𝕞",Mopf:"𝕄",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",mu:"μ",Mu:"Μ",multimap:"⊸",mumap:"⊸",nabla:"∇",nacute:"ń",Nacute:"Ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",ncaron:"ň",Ncaron:"Ň",ncedil:"ņ",Ncedil:"Ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",ncy:"н",Ncy:"Н",ndash:"–",ne:"≠",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",nfr:"𝔫",Nfr:"𝔑",nge:"≱",ngE:"≧̸",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",ngt:"≯",nGt:"≫⃒",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",njcy:"њ",NJcy:"Њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nle:"≰",nlE:"≦̸",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nlt:"≮",nLt:"≪⃒",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",not:"¬",Not:"⫬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrarr:"↛",nrArr:"⇏",nrarrc:"⤳̸",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",nscr:"𝓃",Nscr:"𝒩",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsube:"⊈",nsubE:"⫅̸",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupe:"⊉",nsupE:"⫆̸",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",ntilde:"ñ",Ntilde:"Ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",nu:"ν",Nu:"Ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",oacute:"ó",Oacute:"Ó",oast:"⊛",ocir:"⊚",ocirc:"ô",Ocirc:"Ô",ocy:"о",Ocy:"О",odash:"⊝",odblac:"ő",Odblac:"Ő",odiv:"⨸",odot:"⊙",odsold:"⦼",oelig:"œ",OElig:"Œ",ofcir:"⦿",ofr:"𝔬",Ofr:"𝔒",ogon:"˛",ograve:"ò",Ograve:"Ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",omacr:"ō",Omacr:"Ō",omega:"ω",Omega:"Ω",omicron:"ο",Omicron:"Ο",omid:"⦶",ominus:"⊖",oopf:"𝕠",Oopf:"𝕆",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",or:"∨",Or:"⩔",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",oscr:"ℴ",Oscr:"𝒪",oslash:"ø",Oslash:"Ø",osol:"⊘",otilde:"õ",Otilde:"Õ",otimes:"⊗",Otimes:"⨷",otimesas:"⨶",ouml:"ö",Ouml:"Ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",pcy:"п",Pcy:"П",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",pfr:"𝔭",Pfr:"𝔓",phi:"φ",Phi:"Φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",pi:"π",Pi:"Π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",pr:"≺",Pr:"⪻",prap:"⪷",prcue:"≼",pre:"⪯",prE:"⪳",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",pscr:"𝓅",Pscr:"𝒫",psi:"ψ",Psi:"Ψ",puncsp:" ",qfr:"𝔮",Qfr:"𝔔",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",qscr:"𝓆",Qscr:"𝒬",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",racute:"ŕ",Racute:"Ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarr:"→",rArr:"⇒",Rarr:"↠",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",
-rarrpl:"⥅",rarrsim:"⥴",rarrtl:"↣",Rarrtl:"⤖",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",rcaron:"ř",Rcaron:"Ř",rcedil:"ŗ",Rcedil:"Ŗ",rceil:"⌉",rcub:"}",rcy:"р",Rcy:"Р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",rho:"ρ",Rho:"Ρ",rhov:"ϱ",RightAngleBracket:"⟩",rightarrow:"→",Rightarrow:"⇒",RightArrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",sacute:"ś",Sacute:"Ś",sbquo:"‚",sc:"≻",Sc:"⪼",scap:"⪸",scaron:"š",Scaron:"Š",sccue:"≽",sce:"⪰",scE:"⪴",scedil:"ş",Scedil:"Ş",scirc:"ŝ",Scirc:"Ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",scy:"с",Scy:"С",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",sfr:"𝔰",Sfr:"𝔖",sfrown:"⌢",sharp:"♯",shchcy:"щ",SHCHcy:"Щ",shcy:"ш",SHcy:"Ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",sigma:"σ",Sigma:"Σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",softcy:"ь",SOFTcy:"Ь",sol:"/",solb:"⧄",solbar:"⌿",sopf:"𝕤",Sopf:"𝕊",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",sscr:"𝓈",Sscr:"𝒮",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",star:"☆",Star:"⋆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",sube:"⊆",subE:"⫅",subedot:"⫃",submult:"⫁",subne:"⊊",subnE:"⫋",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup:"⊃",Sup:"⋑",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supe:"⊇",supE:"⫆",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supne:"⊋",supnE:"⫌",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",tau:"τ",Tau:"Τ",tbrk:"⎴",tcaron:"ť",Tcaron:"Ť",tcedil:"ţ",Tcedil:"Ţ",tcy:"т",Tcy:"Т",tdot:"⃛",telrec:"⌕",tfr:"𝔱",Tfr:"𝔗",there4:"∴",therefore:"∴",Therefore:"∴",theta:"θ",Theta:"Θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",thorn:"þ",THORN:"Þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",topf:"𝕥",Topf:"𝕋",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",tscr:"𝓉",Tscr:"𝒯",tscy:"ц",TScy:"Ц",tshcy:"ћ",TSHcy:"Ћ",tstrok:"ŧ",Tstrok:"Ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",uacute:"ú",Uacute:"Ú",uarr:"↑",uArr:"⇑",Uarr:"↟",Uarrocir:"⥉",ubrcy:"ў",Ubrcy:"Ў",ubreve:"ŭ",Ubreve:"Ŭ",ucirc:"û",Ucirc:"Û",ucy:"у",Ucy:"У",udarr:"⇅",udblac:"ű",Udblac:"Ű",udhar:"⥮",ufisht:"⥾",ufr:"𝔲",Ufr:"𝔘",ugrave:"ù",Ugrave:"Ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",umacr:"ū",Umacr:"Ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",uogon:"ų",Uogon:"Ų",uopf:"𝕦",Uopf:"𝕌",uparrow:"↑",Uparrow:"⇑",UpArrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",updownarrow:"↕",Updownarrow:"⇕",UpDownArrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",upsilon:"υ",Upsilon:"Υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",uring:"ů",Uring:"Ů",urtri:"◹",uscr:"𝓊",Uscr:"𝒰",utdot:"⋰",utilde:"ũ",Utilde:"Ũ",utri:"▵",utrif:"▴",uuarr:"⇈",uuml:"ü",Uuml:"Ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",vcy:"в",Vcy:"В",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",vee:"∨",Vee:"⋁",veebar:"⊻",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",vfr:"𝔳",Vfr:"𝔙",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",vopf:"𝕧",Vopf:"𝕍",vprop:"∝",vrtri:"⊳",vscr:"𝓋",Vscr:"𝒱",vsubne:"⊊︀",vsubnE:"⫋︀",vsupne:"⊋︀",vsupnE:"⫌︀",Vvdash:"⊪",vzigzag:"⦚",wcirc:"ŵ",Wcirc:"Ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",wfr:"𝔴",Wfr:"𝔚",wopf:"𝕨",Wopf:"𝕎",wp:"℘",wr:"≀",wreath:"≀",wscr:"𝓌",Wscr:"𝒲",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",xfr:"𝔵",Xfr:"𝔛",xharr:"⟷",xhArr:"⟺",xi:"ξ",Xi:"Ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",xopf:"𝕩",Xopf:"𝕏",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",xscr:"𝓍",Xscr:"𝒳",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",yacute:"ý",Yacute:"Ý",yacy:"я",YAcy:"Я",ycirc:"ŷ",Ycirc:"Ŷ",ycy:"ы",Ycy:"Ы",yen:"¥",yfr:"𝔶",Yfr:"𝔜",yicy:"ї",YIcy:"Ї",yopf:"𝕪",Yopf:"𝕐",yscr:"𝓎",Yscr:"𝒴",yucy:"ю",YUcy:"Ю",yuml:"ÿ",Yuml:"Ÿ",zacute:"ź",Zacute:"Ź",zcaron:"ž",Zcaron:"Ž",zcy:"з",Zcy:"З",zdot:"ż",Zdot:"Ż",zeetrf:"ℨ",ZeroWidthSpace:"​",zeta:"ζ",Zeta:"Ζ",zfr:"𝔷",Zfr:"ℨ",zhcy:"ж",ZHcy:"Ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",zscr:"𝓏",Zscr:"𝒵",zwj:"‍",zwnj:"‌"},n={aacute:"á",Aacute:"Á",acirc:"â",Acirc:"Â",acute:"´",aelig:"æ",AElig:"Æ",agrave:"à",Agrave:"À",amp:"&",AMP:"&",aring:"å",Aring:"Å",atilde:"ã",Atilde:"Ã",auml:"ä",Auml:"Ä",brvbar:"¦",ccedil:"ç",Ccedil:"Ç",cedil:"¸",cent:"¢",copy:"©",COPY:"©",curren:"¤",deg:"°",divide:"÷",eacute:"é",Eacute:"É",ecirc:"ê",Ecirc:"Ê",egrave:"è",Egrave:"È",eth:"ð",ETH:"Ð",euml:"ë",Euml:"Ë",frac12:"½",frac14:"¼",frac34:"¾",gt:">",GT:">",iacute:"í",Iacute:"Í",icirc:"î",Icirc:"Î",iexcl:"¡",igrave:"ì",Igrave:"Ì",iquest:"¿",iuml:"ï",Iuml:"Ï",laquo:"«",lt:"<",LT:"<",macr:"¯",micro:"µ",middot:"·",nbsp:" ",not:"¬",ntilde:"ñ",Ntilde:"Ñ",oacute:"ó",Oacute:"Ó",ocirc:"ô",Ocirc:"Ô",ograve:"ò",Ograve:"Ò",ordf:"ª",ordm:"º",oslash:"ø",Oslash:"Ø",otilde:"õ",Otilde:"Õ",ouml:"ö",Ouml:"Ö",para:"¶",plusmn:"±",pound:"£",quot:'"',QUOT:'"',raquo:"»",reg:"®",REG:"®",sect:"§",shy:"­",sup1:"¹",sup2:"²",sup3:"³",szlig:"ß",thorn:"þ",THORN:"Þ",times:"×",uacute:"ú",Uacute:"Ú",ucirc:"û",Ucirc:"Û",ugrave:"ù",Ugrave:"Ù",uml:"¨",uuml:"ü",Uuml:"Ü",yacute:"ý",Yacute:"Ý",yen:"¥",yuml:"ÿ"},o={0:"�",128:"€",130:"‚",131:"ƒ",132:"„",133:"…",134:"†",135:"‡",136:"ˆ",137:"‰",138:"Š",139:"‹",140:"Œ",142:"Ž",145:"‘",146:"’",147:"“",148:"”",149:"•",150:"–",151:"—",152:"˜",153:"™",154:"š",155:"›",156:"œ",158:"ž",159:"Ÿ"},p=[1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65e3,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111],q=String.fromCharCode,r={},s=r.hasOwnProperty,t=function(a,b){return s.call(a,b)},u=function(a,b){for(var c=-1,d=a.length;++c<d;)if(a[c]==b)return!0;return!1},v=function(a,b){if(!a)return b;var c,d={};for(c in b)d[c]=t(a,c)?a[c]:b[c];return d},w=function(a,b){var c="";return a>=55296&&a<=57343||a>1114111?(b&&z("character reference outside the permissible Unicode range"),"�"):t(o,a)?(b&&z("disallowed character reference"),o[a]):(b&&u(p,a)&&z("disallowed character reference"),a>65535&&(a-=65536,c+=q(a>>>10&1023|55296),a=56320|1023&a),c+=q(a))},x=function(a){return"&#x"+a.toString(16).toUpperCase()+";"},y=function(a){return"&#"+a+";"},z=function(a){throw Error("Parse error: "+a)},A=function(a,b){b=v(b,A.options),b.strict&&l.test(a)&&z("forbidden code point");var c=b.encodeEverything,d=b.useNamedReferences,e=b.allowUnsafeSymbols,f=b.decimal?y:x,g=function(a){return f(a.charCodeAt(0))};return c?(a=a.replace(/[\x01-\x7F]/g,function(a){return d&&t(i,a)?"&"+i[a]+";":g(a)}),d&&(a=a.replace(/&gt;\u20D2/g,"&nvgt;").replace(/&lt;\u20D2/g,"&nvlt;").replace(/&#x66;&#x6A;/g,"&fjlig;")),d&&(a=a.replace(h,function(a){return"&"+i[a]+";"}))):d?(e||(a=a.replace(/["&'<>`]/g,function(a){return"&"+i[a]+";"})),a=a.replace(/&gt;\u20D2/g,"&nvgt;").replace(/&lt;\u20D2/g,"&nvlt;"),a=a.replace(h,function(a){return"&"+i[a]+";"})):e||(a=a.replace(/["&'<>`]/g,g)),a.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,function(a){var b=a.charCodeAt(0),c=a.charCodeAt(1);return f(1024*(b-55296)+c-56320+65536)}).replace(/[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,g)};A.options={allowUnsafeSymbols:!1,encodeEverything:!1,strict:!1,useNamedReferences:!1,decimal:!1};var B=function(a,b){b=v(b,B.options);var c=b.strict;return c&&k.test(a)&&z("malformed character reference"),a.replace(/&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)([=a-zA-Z0-9])?/g,function(a,d,e,f,g,h,i,j){var k,l,o,p,q,r;return d?(o=d,l=e,c&&!l&&z("character reference was not terminated by a semicolon"),k=parseInt(o,10),w(k,c)):f?(p=f,l=g,c&&!l&&z("character reference was not terminated by a semicolon"),k=parseInt(p,16),w(k,c)):h?(q=h,t(m,q)?m[q]:(c&&z("named character reference was not terminated by a semicolon"),a)):(q=i,r=j,r&&b.isAttributeValue?(c&&"="==r&&z("`&` did not start a character reference"),a):(c&&z("named character reference was not terminated by a semicolon"),n[q]+(r||"")))})};B.options={isAttributeValue:!1,strict:!1};var C=function(a){return a.replace(/["&'<>`]/g,function(a){return j[a]})},D={version:"1.1.1",encode:A,decode:B,escape:C,unescape:B};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return D});else if(e&&!e.nodeType)if(f)f.exports=D;else for(var E in D)t(D,E)&&(e[E]=D[E]);else d.he=D}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],102:[function(a,b,c){var d=a("http"),e=b.exports;for(var f in d)d.hasOwnProperty(f)&&(e[f]=d[f]);e.request=function(a,b){return a||(a={}),a.scheme="https",a.protocol="https:",d.request.call(this,a,b)}},{http:153}],103:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<<h)-1,j=i>>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?NaN:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<<j)-1,l=k>>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=b<0||0===b&&1/b<0?1:0;for(b=Math.abs(b),isNaN(b)||b===1/0?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<<e|h,j+=e;j>0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],104:[function(a,b,c){"function"==typeof Object.create?b.exports=function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:b.exports=function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],105:[function(a,b,c){function d(a){return!!a.constructor&&"function"==typeof a.constructor.isBuffer&&a.constructor.isBuffer(a)}function e(a){return"function"==typeof a.readFloatLE&&"function"==typeof a.slice&&d(a.slice(0,0))}b.exports=function(a){return null!=a&&(d(a)||e(a)||!!a._isBuffer)}},{}],106:[function(a,b,c){var d={}.toString;b.exports=Array.isArray||function(a){return"[object Array]"==d.call(a)}},{}],107:[function(a,b,c){"use strict";function d(a){return a.source.slice(1,-1)}var e=a("xml-char-classes");b.exports=new RegExp("^["+d(e.letter)+"_]["+d(e.letter)+d(e.digit)+"\\.\\-_"+d(e.combiningChar)+d(e.extender)+"]*$")},{"xml-char-classes":165}],108:[function(a,b,c){c.endianness=function(){return"LE"},c.hostname=function(){return"undefined"!=typeof location?location.hostname:""},c.loadavg=function(){return[]},c.uptime=function(){return 0},c.freemem=function(){return Number.MAX_VALUE},c.totalmem=function(){return Number.MAX_VALUE},c.cpus=function(){return[]},c.type=function(){return"Browser"},c.release=function(){return"undefined"!=typeof navigator?navigator.appVersion:""},c.networkInterfaces=c.getNetworkInterfaces=function(){return{}},c.arch=function(){return"javascript"},c.platform=function(){return"browser"},c.tmpdir=c.tmpDir=function(){return"/tmp"},c.EOL="\n"},{}],109:[function(a,b,c){(function(a){function b(a,b){for(var c=0,d=a.length-1;d>=0;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c--;c)a.unshift("..");return a}function d(a,b){if(a.filter)return a.filter(b);for(var c=[],d=0;d<a.length;d++)b(a[d],d,a)&&c.push(a[d]);return c}var e=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,f=function(a){return e.exec(a).slice(1)};c.resolve=function(){for(var c="",e=!1,f=arguments.length-1;f>=-1&&!e;f--){var g=f>=0?arguments[f]:a.cwd();if("string"!=typeof g)throw new TypeError("Arguments to path.resolve must be strings");g&&(c=g+"/"+c,e="/"===g.charAt(0))}return c=b(d(c.split("/"),function(a){return!!a}),!e).join("/"),(e?"/":"")+c||"."},c.normalize=function(a){var e=c.isAbsolute(a),f="/"===g(a,-1);return a=b(d(a.split("/"),function(a){return!!a}),!e).join("/"),a||e||(a="."),a&&f&&(a+="/"),(e?"/":"")+a},c.isAbsolute=function(a){return"/"===a.charAt(0)},c.join=function(){var a=Array.prototype.slice.call(arguments,0);return c.normalize(d(a,function(a,b){if("string"!=typeof a)throw new TypeError("Arguments to path.join must be strings");return a}).join("/"))},c.relative=function(a,b){function d(a){for(var b=0;b<a.length&&""===a[b];b++);for(var c=a.length-1;c>=0&&""===a[c];c--);return b>c?[]:a.slice(b,c-b+1)}a=c.resolve(a).substr(1),b=c.resolve(b).substr(1);for(var e=d(a.split("/")),f=d(b.split("/")),g=Math.min(e.length,f.length),h=g,i=0;i<g;i++)if(e[i]!==f[i]){h=i;break}for(var j=[],i=h;i<e.length;i++)j.push("..");return j=j.concat(f.slice(h)),j.join("/")},c.sep="/",c.delimiter=":",c.dirname=function(a){var b=f(a),c=b[0],d=b[1];return c||d?(d&&(d=d.substr(0,d.length-1)),c+d):"."},c.basename=function(a,b){var c=f(a)[2];return b&&c.substr(-1*b.length)===b&&(c=c.substr(0,c.length-b.length)),c},c.extname=function(a){return f(a)[3]};var g="b"==="ab".substr(-1)?function(a,b,c){return a.substr(b,c)}:function(a,b,c){return b<0&&(b=a.length+b),a.substr(b,c)}}).call(this,a("_process"))},{_process:111}],110:[function(a,b,c){(function(a){"use strict";function c(b,c,d,e){if("function"!=typeof b)throw new TypeError('"callback" argument must be a function');var f,g,h=arguments.length;switch(h){case 0:case 1:return a.nextTick(b);case 2:return a.nextTick(function(){b.call(null,c)});case 3:return a.nextTick(function(){b.call(null,c,d)});case 4:return a.nextTick(function(){b.call(null,c,d,e)});default:for(f=new Array(h-1),g=0;g<f.length;)f[g++]=arguments[g];return a.nextTick(function(){b.apply(null,f)})}}!a.version||0===a.version.indexOf("v0.")||0===a.version.indexOf("v1.")&&0!==a.version.indexOf("v1.8.")?b.exports=c:b.exports=a.nextTick}).call(this,a("_process"))},{_process:111}],111:[function(a,b,c){function d(){throw new Error("setTimeout has not been defined")}function e(){throw new Error("clearTimeout has not been defined")}function f(a){if(l===setTimeout)return setTimeout(a,0);if((l===d||!l)&&setTimeout)return l=setTimeout,setTimeout(a,0);try{return l(a,0)}catch(b){try{return l.call(null,a,0)}catch(b){return l.call(this,a,0)}}}function g(a){if(m===clearTimeout)return clearTimeout(a);if((m===e||!m)&&clearTimeout)return m=clearTimeout,clearTimeout(a);try{return m(a)}catch(b){try{return m.call(null,a)}catch(b){return m.call(this,a)}}}function h(){q&&o&&(q=!1,o.length?p=o.concat(p):r=-1,p.length&&i())}function i(){if(!q){var a=f(h);q=!0;for(var b=p.length;b;){for(o=p,p=[];++r<b;)o&&o[r].run();r=-1,b=p.length}o=null,q=!1,g(a)}}function j(a,b){this.fun=a,this.array=b}function k(){}var l,m,n=b.exports={};!function(){try{l="function"==typeof setTimeout?setTimeout:d}catch(a){l=d}try{m="function"==typeof clearTimeout?clearTimeout:e}catch(a){m=e}}();var o,p=[],q=!1,r=-1;n.nextTick=function(a){var b=new Array(arguments.length-1);if(arguments.length>1)for(var c=1;c<arguments.length;c++)b[c-1]=arguments[c];p.push(new j(a,b)),1!==p.length||q||f(i)},j.prototype.run=function(){this.fun.apply(null,this.array)},n.title="browser",n.browser=!0,n.env={},n.argv=[],n.version="",n.versions={},n.on=k,n.addListener=k,n.once=k,n.off=k,n.removeListener=k,n.removeAllListeners=k,n.emit=k,n.prependListener=k,n.prependOnceListener=k,n.listeners=function(a){return[]},n.binding=function(a){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(a){throw new Error("process.chdir is not supported")},n.umask=function(){return 0}},{}],112:[function(a,b,c){(function(a){!function(d){function e(a){throw new RangeError(H[a])}function f(a,b){for(var c=a.length,d=[];c--;)d[c]=b(a[c]);return d}function g(a,b){var c=a.split("@"),d="";return c.length>1&&(d=c[0]+"@",a=c[1]),a=a.replace(G,"."),d+f(a.split("."),b).join(".")}function h(a){for(var b,c,d=[],e=0,f=a.length;e<f;)b=a.charCodeAt(e++),b>=55296&&b<=56319&&e<f?(c=a.charCodeAt(e++),56320==(64512&c)?d.push(((1023&b)<<10)+(1023&c)+65536):(d.push(b),e--)):d.push(b);return d}function i(a){return f(a,function(a){var b="";return a>65535&&(a-=65536,b+=K(a>>>10&1023|55296),a=56320|1023&a),b+=K(a)}).join("")}function j(a){return a-48<10?a-22:a-65<26?a-65:a-97<26?a-97:w}function k(a,b){return a+22+75*(a<26)-((0!=b)<<5)}function l(a,b,c){var d=0;for(a=c?J(a/A):a>>1,a+=J(a/b);a>I*y>>1;d+=w)a=J(a/I);return J(d+(I+1)*a/(a+z))}function m(a){var b,c,d,f,g,h,k,m,n,o,p=[],q=a.length,r=0,s=C,t=B;for(c=a.lastIndexOf(D),c<0&&(c=0),d=0;d<c;++d)a.charCodeAt(d)>=128&&e("not-basic"),p.push(a.charCodeAt(d));for(f=c>0?c+1:0;f<q;){for(g=r,h=1,k=w;f>=q&&e("invalid-input"),m=j(a.charCodeAt(f++)),(m>=w||m>J((v-r)/h))&&e("overflow"),r+=m*h,n=k<=t?x:k>=t+y?y:k-t,!(m<n);k+=w)o=w-n,h>J(v/o)&&e("overflow"),h*=o;b=p.length+1,t=l(r-g,b,0==g),J(r/b)>v-s&&e("overflow"),s+=J(r/b),r%=b,p.splice(r++,0,s)}return i(p)}function n(a){var b,c,d,f,g,i,j,m,n,o,p,q,r,s,t,u=[];for(a=h(a),q=a.length,b=C,c=0,g=B,i=0;i<q;++i)(p=a[i])<128&&u.push(K(p));for(d=f=u.length,f&&u.push(D);d<q;){for(j=v,i=0;i<q;++i)(p=a[i])>=b&&p<j&&(j=p);for(r=d+1,j-b>J((v-c)/r)&&e("overflow"),c+=(j-b)*r,b=j,i=0;i<q;++i)if(p=a[i],p<b&&++c>v&&e("overflow"),p==b){for(m=c,n=w;o=n<=g?x:n>=g+y?y:n-g,!(m<o);n+=w)t=m-o,s=w-o,u.push(K(k(o+t%s,0))),m=J(t/s);u.push(K(k(m,0))),g=l(c,r,d==f),c=0,++d}++c,++b}return u.join("")}function o(a){return g(a,function(a){return E.test(a)?m(a.slice(4).toLowerCase()):a})}function p(a){return g(a,function(a){return F.test(a)?"xn--"+n(a):a})}var q="object"==typeof c&&c&&!c.nodeType&&c,r="object"==typeof b&&b&&!b.nodeType&&b,s="object"==typeof a&&a;s.global!==s&&s.window!==s&&s.self!==s||(d=s);var t,u,v=2147483647,w=36,x=1,y=26,z=38,A=700,B=72,C=128,D="-",E=/^xn--/,F=/[^\x20-\x7E]/,G=/[\x2E\u3002\uFF0E\uFF61]/g,H={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},I=w-x,J=Math.floor,K=String.fromCharCode;if(t={version:"1.4.1",ucs2:{decode:h,encode:i},decode:m,encode:n,toASCII:p,toUnicode:o},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define("punycode",function(){return t});else if(q&&r)if(b.exports==q)r.exports=t;else for(u in t)t.hasOwnProperty(u)&&(q[u]=t[u]);else d.punycode=t}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],113:[function(a,b,c){"use strict";function d(a,b){return Object.prototype.hasOwnProperty.call(a,b)}b.exports=function(a,b,c,f){b=b||"&",c=c||"=";var g={};if("string"!=typeof a||0===a.length)return g;a=a.split(b);var h=1e3;f&&"number"==typeof f.maxKeys&&(h=f.maxKeys);var i=a.length;h>0&&i>h&&(i=h);for(var j=0;j<i;++j){var k,l,m,n,o=a[j].replace(/\+/g,"%20"),p=o.indexOf(c);p>=0?(k=o.substr(0,p),l=o.substr(p+1)):(k=o,l=""),m=decodeURIComponent(k),n=decodeURIComponent(l),d(g,m)?e(g[m])?g[m].push(n):g[m]=[g[m],n]:g[m]=n}return g};var e=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)}},{}],114:[function(a,b,c){"use strict";function d(a,b){if(a.map)return a.map(b);for(var c=[],d=0;d<a.length;d++)c.push(b(a[d],d));return c}var e=function(a){switch(typeof a){case"string":return a;case"boolean":return a?"true":"false";case"number":return isFinite(a)?a:"";default:return""}};b.exports=function(a,b,c,h){return b=b||"&",c=c||"=",null===a&&(a=void 0),"object"==typeof a?d(g(a),function(g){var h=encodeURIComponent(e(g))+c;return f(a[g])?d(a[g],function(a){return h+encodeURIComponent(e(a))}).join(b):h+encodeURIComponent(e(a[g]))}).join(b):h?encodeURIComponent(e(h))+c+encodeURIComponent(e(a)):""};var f=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},g=Object.keys||function(a){var b=[];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.push(c);return b}},{}],115:[function(a,b,c){"use strict";c.decode=c.parse=a("./decode"),c.encode=c.stringify=a("./encode")},{"./decode":113,"./encode":114}],116:[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);j.call(this,a),k.call(this,a),a&&!1===a.readable&&(this.readable=!1),a&&!1===a.writable&&(this.writable=!1),this.allowHalfOpen=!0,a&&!1===a.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",e)}function e(){this.allowHalfOpen||this._writableState.ended||h(f,this)}function f(a){a.end()}var g=Object.keys||function(a){var b=[];for(var c in a)b.push(c);return b};b.exports=d;var h=a("process-nextick-args"),i=a("core-util-is");i.inherits=a("inherits");var j=a("./_stream_readable"),k=a("./_stream_writable");i.inherits(d,j);for(var l=g(k.prototype),m=0;m<l.length;m++){var n=l[m];d.prototype[n]||(d.prototype[n]=k.prototype[n])}},{"./_stream_readable":118,"./_stream_writable":120,"core-util-is":99,inherits:104,"process-nextick-args":110}],117:[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);e.call(this,a)}b.exports=d;var e=a("./_stream_transform"),f=a("core-util-is");f.inherits=a("inherits"),f.inherits(d,e),d.prototype._transform=function(a,b,c){c(null,a)}},{"./_stream_transform":119,"core-util-is":99,inherits:104}],118:[function(a,b,c){(function(c){"use strict";function d(a,b,c){if("function"==typeof a.prependListener)return a.prependListener(b,c);a._events&&a._events[b]?E(a._events[b])?a._events[b].unshift(c):a._events[b]=[c,a._events[b]]:a.on(b,c)}function e(b,c){C=C||a("./_stream_duplex"),b=b||{},this.objectMode=!!b.objectMode,c instanceof C&&(this.objectMode=this.objectMode||!!b.readableObjectMode);var d=b.highWaterMark,e=this.objectMode?16:16384;this.highWaterMark=d||0===d?d:e,this.highWaterMark=~~this.highWaterMark,this.buffer=new N,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=b.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,b.encoding&&(M||(M=a("string_decoder/").StringDecoder),this.decoder=new M(b.encoding),this.encoding=b.encoding)}function f(b){if(C=C||a("./_stream_duplex"),!(this instanceof f))return new f(b);this._readableState=new e(b,this),this.readable=!0,b&&"function"==typeof b.read&&(this._read=b.read),G.call(this)}function g(a,b,c,d,e){var f=k(b,c);if(f)a.emit("error",f);else if(null===c)b.reading=!1,l(a,b);else if(b.objectMode||c&&c.length>0)if(b.ended&&!e){var g=new Error("stream.push() after EOF");a.emit("error",g)}else if(b.endEmitted&&e){var i=new Error("stream.unshift() after end event");a.emit("error",i)}else{var j;!b.decoder||e||d||(c=b.decoder.write(c),j=!b.objectMode&&0===c.length),e||(b.reading=!1),j||(b.flowing&&0===b.length&&!b.sync?(a.emit("data",c),a.read(0)):(b.length+=b.objectMode?1:c.length,e?b.buffer.unshift(c):b.buffer.push(c),b.needReadable&&m(a))),o(a,b)}else e||(b.reading=!1);return h(b)}function h(a){return!a.ended&&(a.needReadable||a.length<a.highWaterMark||0===a.length)}function i(a){return a>=P?a=P:(a--,a|=a>>>1,a|=a>>>2,a|=a>>>4,a|=a>>>8,a|=a>>>16,a++),a}function j(a,b){return a<=0||0===b.length&&b.ended?0:b.objectMode?1:a!==a?b.flowing&&b.length?b.buffer.head.data.length:b.length:(a>b.highWaterMark&&(b.highWaterMark=i(a)),a<=b.length?a:b.ended?b.length:(b.needReadable=!0,0))}function k(a,b){var c=null;return H.isBuffer(b)||"string"==typeof b||null===b||void 0===b||a.objectMode||(c=new TypeError("Invalid non-string/buffer chunk")),c}function l(a,b){if(!b.ended){if(b.decoder){var c=b.decoder.end();c&&c.length&&(b.buffer.push(c),b.length+=b.objectMode?1:c.length)}b.ended=!0,m(a)}}function m(a){var b=a._readableState;b.needReadable=!1,b.emittedReadable||(L("emitReadable",b.flowing),b.emittedReadable=!0,b.sync?D(n,a):n(a))}function n(a){L("emit readable"),a.emit("readable"),u(a)}function o(a,b){b.readingMore||(b.readingMore=!0,D(p,a,b))}function p(a,b){for(var c=b.length;!b.reading&&!b.flowing&&!b.ended&&b.length<b.highWaterMark&&(L("maybeReadMore read 0"),a.read(0),c!==b.length);)c=b.length;b.readingMore=!1}function q(a){return function(){var b=a._readableState;L("pipeOnDrain",b.awaitDrain),b.awaitDrain&&b.awaitDrain--,0===b.awaitDrain&&F(a,"data")&&(b.flowing=!0,u(a))}}function r(a){L("readable nexttick read 0"),a.read(0)}function s(a,b){b.resumeScheduled||(b.resumeScheduled=!0,D(t,a,b))}function t(a,b){b.reading||(L("resume read 0"),a.read(0)),b.resumeScheduled=!1,b.awaitDrain=0,a.emit("resume"),u(a),b.flowing&&!b.reading&&a.read(0)}function u(a){var b=a._readableState;for(L("flow",b.flowing);b.flowing&&null!==a.read(););}function v(a,b){if(0===b.length)return null;var c;return b.objectMode?c=b.buffer.shift():!a||a>=b.length?(c=b.decoder?b.buffer.join(""):1===b.buffer.length?b.buffer.head.data:b.buffer.concat(b.length),b.buffer.clear()):c=w(a,b.buffer,b.decoder),c}function w(a,b,c){var d;return a<b.head.data.length?(d=b.head.data.slice(0,a),b.head.data=b.head.data.slice(a)):d=a===b.head.data.length?b.shift():c?x(a,b):y(a,b),d}function x(a,b){var c=b.head,d=1,e=c.data;for(a-=e.length;c=c.next;){var f=c.data,g=a>f.length?f.length:a;if(g===f.length?e+=f:e+=f.slice(0,a),0===(a-=g)){g===f.length?(++d,c.next?b.head=c.next:b.head=b.tail=null):(b.head=c,c.data=f.slice(g));break}++d}return b.length-=d,e}function y(a,b){var c=I.allocUnsafe(a),d=b.head,e=1;for(d.data.copy(c),a-=d.data.length;d=d.next;){var f=d.data,g=a>f.length?f.length:a;if(f.copy(c,c.length-a,0,g),0===(a-=g)){g===f.length?(++e,d.next?b.head=d.next:b.head=b.tail=null):(b.head=d,d.data=f.slice(g));break}++e}return b.length-=e,c}function z(a){var b=a._readableState;if(b.length>0)throw new Error('"endReadable()" called on non-empty stream');b.endEmitted||(b.ended=!0,D(A,b,a))}function A(a,b){a.endEmitted||0!==a.length||(a.endEmitted=!0,b.readable=!1,b.emit("end"))}function B(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}b.exports=f;var C,D=a("process-nextick-args"),E=a("isarray");f.ReadableState=e;var F=(a("events").EventEmitter,function(a,b){return a.listeners(b).length}),G=a("./internal/streams/stream"),H=a("buffer").Buffer,I=a("buffer-shims"),J=a("core-util-is");J.inherits=a("inherits");var K=a("util"),L=void 0;L=K&&K.debuglog?K.debuglog("stream"):function(){};var M,N=a("./internal/streams/BufferList");J.inherits(f,G);var O=["error","close","destroy","pause","resume"];f.prototype.push=function(a,b){var c=this._readableState;return c.objectMode||"string"!=typeof a||(b=b||c.defaultEncoding)!==c.encoding&&(a=I.from(a,b),b=""),g(this,c,a,b,!1)},f.prototype.unshift=function(a){return g(this,this._readableState,a,"",!0)},f.prototype.isPaused=function(){return!1===this._readableState.flowing},f.prototype.setEncoding=function(b){return M||(M=a("string_decoder/").StringDecoder),this._readableState.decoder=new M(b),this._readableState.encoding=b,this};var P=8388608;f.prototype.read=function(a){L("read",a),a=parseInt(a,10);var b=this._readableState,c=a;if(0!==a&&(b.emittedReadable=!1),0===a&&b.needReadable&&(b.length>=b.highWaterMark||b.ended))return L("read: emitReadable",b.length,b.ended),0===b.length&&b.ended?z(this):m(this),null;if(0===(a=j(a,b))&&b.ended)return 0===b.length&&z(this),null;var d=b.needReadable;L("need readable",d),(0===b.length||b.length-a<b.highWaterMark)&&(d=!0,L("length less than watermark",d)),b.ended||b.reading?(d=!1,L("reading or ended",d)):d&&(L("do read"),b.reading=!0,b.sync=!0,0===b.length&&(b.needReadable=!0),this._read(b.highWaterMark),b.sync=!1,b.reading||(a=j(c,b)));var e;return e=a>0?v(a,b):null,null===e?(b.needReadable=!0,a=0):b.length-=a,0===b.length&&(b.ended||(b.needReadable=!0),c!==a&&b.ended&&z(this)),null!==e&&this.emit("data",e),e},f.prototype._read=function(a){
-this.emit("error",new Error("_read() is not implemented"))},f.prototype.pipe=function(a,b){function e(a){L("onunpipe"),a===m&&g()}function f(){L("onend"),a.end()}function g(){L("cleanup"),a.removeListener("close",j),a.removeListener("finish",k),a.removeListener("drain",r),a.removeListener("error",i),a.removeListener("unpipe",e),m.removeListener("end",f),m.removeListener("end",g),m.removeListener("data",h),s=!0,!n.awaitDrain||a._writableState&&!a._writableState.needDrain||r()}function h(b){L("ondata"),t=!1,!1!==a.write(b)||t||((1===n.pipesCount&&n.pipes===a||n.pipesCount>1&&-1!==B(n.pipes,a))&&!s&&(L("false write response, pause",m._readableState.awaitDrain),m._readableState.awaitDrain++,t=!0),m.pause())}function i(b){L("onerror",b),l(),a.removeListener("error",i),0===F(a,"error")&&a.emit("error",b)}function j(){a.removeListener("finish",k),l()}function k(){L("onfinish"),a.removeListener("close",j),l()}function l(){L("unpipe"),m.unpipe(a)}var m=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=a;break;case 1:n.pipes=[n.pipes,a];break;default:n.pipes.push(a)}n.pipesCount+=1,L("pipe count=%d opts=%j",n.pipesCount,b);var o=(!b||!1!==b.end)&&a!==c.stdout&&a!==c.stderr,p=o?f:g;n.endEmitted?D(p):m.once("end",p),a.on("unpipe",e);var r=q(m);a.on("drain",r);var s=!1,t=!1;return m.on("data",h),d(a,"error",i),a.once("close",j),a.once("finish",k),a.emit("pipe",m),n.flowing||(L("pipe resume"),m.resume()),a},f.prototype.unpipe=function(a){var b=this._readableState;if(0===b.pipesCount)return this;if(1===b.pipesCount)return a&&a!==b.pipes?this:(a||(a=b.pipes),b.pipes=null,b.pipesCount=0,b.flowing=!1,a&&a.emit("unpipe",this),this);if(!a){var c=b.pipes,d=b.pipesCount;b.pipes=null,b.pipesCount=0,b.flowing=!1;for(var e=0;e<d;e++)c[e].emit("unpipe",this);return this}var f=B(b.pipes,a);return-1===f?this:(b.pipes.splice(f,1),b.pipesCount-=1,1===b.pipesCount&&(b.pipes=b.pipes[0]),a.emit("unpipe",this),this)},f.prototype.on=function(a,b){var c=G.prototype.on.call(this,a,b);if("data"===a)!1!==this._readableState.flowing&&this.resume();else if("readable"===a){var d=this._readableState;d.endEmitted||d.readableListening||(d.readableListening=d.needReadable=!0,d.emittedReadable=!1,d.reading?d.length&&m(this):D(r,this))}return c},f.prototype.addListener=f.prototype.on,f.prototype.resume=function(){var a=this._readableState;return a.flowing||(L("resume"),a.flowing=!0,s(this,a)),this},f.prototype.pause=function(){return L("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(L("pause"),this._readableState.flowing=!1,this.emit("pause")),this},f.prototype.wrap=function(a){var b=this._readableState,c=!1,d=this;a.on("end",function(){if(L("wrapped end"),b.decoder&&!b.ended){var a=b.decoder.end();a&&a.length&&d.push(a)}d.push(null)}),a.on("data",function(e){if(L("wrapped data"),b.decoder&&(e=b.decoder.write(e)),(!b.objectMode||null!==e&&void 0!==e)&&(b.objectMode||e&&e.length)){d.push(e)||(c=!0,a.pause())}});for(var e in a)void 0===this[e]&&"function"==typeof a[e]&&(this[e]=function(b){return function(){return a[b].apply(a,arguments)}}(e));for(var f=0;f<O.length;f++)a.on(O[f],d.emit.bind(d,O[f]));return d._read=function(b){L("wrapped _read",b),c&&(c=!1,a.resume())},d},f._fromList=v}).call(this,a("_process"))},{"./_stream_duplex":116,"./internal/streams/BufferList":121,"./internal/streams/stream":122,_process:111,buffer:5,"buffer-shims":4,"core-util-is":99,events:100,inherits:104,isarray:106,"process-nextick-args":110,"string_decoder/":123,util:2}],119:[function(a,b,c){"use strict";function d(a){this.afterTransform=function(b,c){return e(a,b,c)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function e(a,b,c){var d=a._transformState;d.transforming=!1;var e=d.writecb;if(!e)return a.emit("error",new Error("no writecb in Transform class"));d.writechunk=null,d.writecb=null,null!==c&&void 0!==c&&a.push(c),e(b);var f=a._readableState;f.reading=!1,(f.needReadable||f.length<f.highWaterMark)&&a._read(f.highWaterMark)}function f(a){if(!(this instanceof f))return new f(a);h.call(this,a),this._transformState=new d(this);var b=this;this._readableState.needReadable=!0,this._readableState.sync=!1,a&&("function"==typeof a.transform&&(this._transform=a.transform),"function"==typeof a.flush&&(this._flush=a.flush)),this.once("prefinish",function(){"function"==typeof this._flush?this._flush(function(a,c){g(b,a,c)}):g(b)})}function g(a,b,c){if(b)return a.emit("error",b);null!==c&&void 0!==c&&a.push(c);var d=a._writableState,e=a._transformState;if(d.length)throw new Error("Calling transform done when ws.length != 0");if(e.transforming)throw new Error("Calling transform done when still transforming");return a.push(null)}b.exports=f;var h=a("./_stream_duplex"),i=a("core-util-is");i.inherits=a("inherits"),i.inherits(f,h),f.prototype.push=function(a,b){return this._transformState.needTransform=!1,h.prototype.push.call(this,a,b)},f.prototype._transform=function(a,b,c){throw new Error("_transform() is not implemented")},f.prototype._write=function(a,b,c){var d=this._transformState;if(d.writecb=c,d.writechunk=a,d.writeencoding=b,!d.transforming){var e=this._readableState;(d.needTransform||e.needReadable||e.length<e.highWaterMark)&&this._read(e.highWaterMark)}},f.prototype._read=function(a){var b=this._transformState;null!==b.writechunk&&b.writecb&&!b.transforming?(b.transforming=!0,this._transform(b.writechunk,b.writeencoding,b.afterTransform)):b.needTransform=!0}},{"./_stream_duplex":116,"core-util-is":99,inherits:104}],120:[function(a,b,c){(function(c){"use strict";function d(){}function e(a,b,c){this.chunk=a,this.encoding=b,this.callback=c,this.next=null}function f(b,c){x=x||a("./_stream_duplex"),b=b||{},this.objectMode=!!b.objectMode,c instanceof x&&(this.objectMode=this.objectMode||!!b.writableObjectMode);var d=b.highWaterMark,e=this.objectMode?16:16384;this.highWaterMark=d||0===d?d:e,this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var f=!1===b.decodeStrings;this.decodeStrings=!f,this.defaultEncoding=b.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(a){o(c,a)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new w(this)}function g(b){if(x=x||a("./_stream_duplex"),!(F.call(g,this)||this instanceof x))return new g(b);this._writableState=new f(b,this),this.writable=!0,b&&("function"==typeof b.write&&(this._write=b.write),"function"==typeof b.writev&&(this._writev=b.writev)),C.call(this)}function h(a,b){var c=new Error("write after end");a.emit("error",c),y(b,c)}function i(a,b,c,d){var e=!0,f=!1;return null===c?f=new TypeError("May not write null values to stream"):"string"==typeof c||void 0===c||b.objectMode||(f=new TypeError("Invalid non-string/buffer chunk")),f&&(a.emit("error",f),y(d,f),e=!1),e}function j(a,b,c){return a.objectMode||!1===a.decodeStrings||"string"!=typeof b||(b=E.from(b,c)),b}function k(a,b,c,d,f,g){c||(d=j(b,d,f),D.isBuffer(d)&&(f="buffer"));var h=b.objectMode?1:d.length;b.length+=h;var i=b.length<b.highWaterMark;if(i||(b.needDrain=!0),b.writing||b.corked){var k=b.lastBufferedRequest;b.lastBufferedRequest=new e(d,f,g),k?k.next=b.lastBufferedRequest:b.bufferedRequest=b.lastBufferedRequest,b.bufferedRequestCount+=1}else l(a,b,!1,h,d,f,g);return i}function l(a,b,c,d,e,f,g){b.writelen=d,b.writecb=g,b.writing=!0,b.sync=!0,c?a._writev(e,b.onwrite):a._write(e,f,b.onwrite),b.sync=!1}function m(a,b,c,d,e){--b.pendingcb,c?y(e,d):e(d),a._writableState.errorEmitted=!0,a.emit("error",d)}function n(a){a.writing=!1,a.writecb=null,a.length-=a.writelen,a.writelen=0}function o(a,b){var c=a._writableState,d=c.sync,e=c.writecb;if(n(c),b)m(a,c,d,b,e);else{var f=s(c);f||c.corked||c.bufferProcessing||!c.bufferedRequest||r(a,c),d?z(p,a,c,f,e):p(a,c,f,e)}}function p(a,b,c,d){c||q(a,b),b.pendingcb--,d(),u(a,b)}function q(a,b){0===b.length&&b.needDrain&&(b.needDrain=!1,a.emit("drain"))}function r(a,b){b.bufferProcessing=!0;var c=b.bufferedRequest;if(a._writev&&c&&c.next){var d=b.bufferedRequestCount,e=new Array(d),f=b.corkedRequestsFree;f.entry=c;for(var g=0;c;)e[g]=c,c=c.next,g+=1;l(a,b,!0,b.length,e,"",f.finish),b.pendingcb++,b.lastBufferedRequest=null,f.next?(b.corkedRequestsFree=f.next,f.next=null):b.corkedRequestsFree=new w(b)}else{for(;c;){var h=c.chunk,i=c.encoding,j=c.callback;if(l(a,b,!1,b.objectMode?1:h.length,h,i,j),c=c.next,b.writing)break}null===c&&(b.lastBufferedRequest=null)}b.bufferedRequestCount=0,b.bufferedRequest=c,b.bufferProcessing=!1}function s(a){return a.ending&&0===a.length&&null===a.bufferedRequest&&!a.finished&&!a.writing}function t(a,b){b.prefinished||(b.prefinished=!0,a.emit("prefinish"))}function u(a,b){var c=s(b);return c&&(0===b.pendingcb?(t(a,b),b.finished=!0,a.emit("finish")):t(a,b)),c}function v(a,b,c){b.ending=!0,u(a,b),c&&(b.finished?y(c):a.once("finish",c)),b.ended=!0,a.writable=!1}function w(a){var b=this;this.next=null,this.entry=null,this.finish=function(c){var d=b.entry;for(b.entry=null;d;){var e=d.callback;a.pendingcb--,e(c),d=d.next}a.corkedRequestsFree?a.corkedRequestsFree.next=b:a.corkedRequestsFree=b}}b.exports=g;var x,y=a("process-nextick-args"),z=!c.browser&&["v0.10","v0.9."].indexOf(c.version.slice(0,5))>-1?setImmediate:y;g.WritableState=f;var A=a("core-util-is");A.inherits=a("inherits");var B={deprecate:a("util-deprecate")},C=a("./internal/streams/stream"),D=a("buffer").Buffer,E=a("buffer-shims");A.inherits(g,C),f.prototype.getBuffer=function(){for(var a=this.bufferedRequest,b=[];a;)b.push(a),a=a.next;return b},function(){try{Object.defineProperty(f.prototype,"buffer",{get:B.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")})}catch(a){}}();var F;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(F=Function.prototype[Symbol.hasInstance],Object.defineProperty(g,Symbol.hasInstance,{value:function(a){return!!F.call(this,a)||a&&a._writableState instanceof f}})):F=function(a){return a instanceof this},g.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},g.prototype.write=function(a,b,c){var e=this._writableState,f=!1,g=D.isBuffer(a);return"function"==typeof b&&(c=b,b=null),g?b="buffer":b||(b=e.defaultEncoding),"function"!=typeof c&&(c=d),e.ended?h(this,c):(g||i(this,e,a,c))&&(e.pendingcb++,f=k(this,e,g,a,b,c)),f},g.prototype.cork=function(){this._writableState.corked++},g.prototype.uncork=function(){var a=this._writableState;a.corked&&(a.corked--,a.writing||a.corked||a.finished||a.bufferProcessing||!a.bufferedRequest||r(this,a))},g.prototype.setDefaultEncoding=function(a){if("string"==typeof a&&(a=a.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((a+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+a);return this._writableState.defaultEncoding=a,this},g.prototype._write=function(a,b,c){c(new Error("_write() is not implemented"))},g.prototype._writev=null,g.prototype.end=function(a,b,c){var d=this._writableState;"function"==typeof a?(c=a,a=null,b=null):"function"==typeof b&&(c=b,b=null),null!==a&&void 0!==a&&this.write(a,b),d.corked&&(d.corked=1,this.uncork()),d.ending||d.finished||v(this,d,c)}}).call(this,a("_process"))},{"./_stream_duplex":116,"./internal/streams/stream":122,_process:111,buffer:5,"buffer-shims":4,"core-util-is":99,inherits:104,"process-nextick-args":110,"util-deprecate":161}],121:[function(a,b,c){"use strict";function d(){this.head=null,this.tail=null,this.length=0}var e=(a("buffer").Buffer,a("buffer-shims"));b.exports=d,d.prototype.push=function(a){var b={data:a,next:null};this.length>0?this.tail.next=b:this.head=b,this.tail=b,++this.length},d.prototype.unshift=function(a){var b={data:a,next:this.head};0===this.length&&(this.tail=b),this.head=b,++this.length},d.prototype.shift=function(){if(0!==this.length){var a=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,a}},d.prototype.clear=function(){this.head=this.tail=null,this.length=0},d.prototype.join=function(a){if(0===this.length)return"";for(var b=this.head,c=""+b.data;b=b.next;)c+=a+b.data;return c},d.prototype.concat=function(a){if(0===this.length)return e.alloc(0);if(1===this.length)return this.head.data;for(var b=e.allocUnsafe(a>>>0),c=this.head,d=0;c;)c.data.copy(b,d),d+=c.data.length,c=c.next;return b}},{buffer:5,"buffer-shims":4}],122:[function(a,b,c){b.exports=a("events").EventEmitter},{events:100}],123:[function(a,b,c){"use strict";function d(a){if(!a)return"utf8";for(var b;;)switch(a){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return a;default:if(b)return;a=(""+a).toLowerCase(),b=!0}}function e(a){var b=d(a);if("string"!=typeof b&&(s.isEncoding===u||!u(a)))throw new Error("Unknown encoding: "+a);return b||a}function f(a){this.encoding=e(a);var b;switch(this.encoding){case"utf16le":this.text=m,this.end=n,b=4;break;case"utf8":this.fillLast=j,b=4;break;case"base64":this.text=o,this.end=p,b=3;break;default:return this.write=q,void(this.end=r)}this.lastNeed=0,this.lastTotal=0,this.lastChar=t.allocUnsafe(b)}function g(a){return a<=127?0:a>>5==6?2:a>>4==14?3:a>>3==30?4:-1}function h(a,b,c){var d=b.length-1;if(d<c)return 0;var e=g(b[d]);return e>=0?(e>0&&(a.lastNeed=e-1),e):--d<c?0:(e=g(b[d]))>=0?(e>0&&(a.lastNeed=e-2),e):--d<c?0:(e=g(b[d]),e>=0?(e>0&&(2===e?e=0:a.lastNeed=e-3),e):0)}function i(a,b,c){if(128!=(192&b[0]))return a.lastNeed=0,"�".repeat(c);if(a.lastNeed>1&&b.length>1){if(128!=(192&b[1]))return a.lastNeed=1,"�".repeat(c+1);if(a.lastNeed>2&&b.length>2&&128!=(192&b[2]))return a.lastNeed=2,"�".repeat(c+2)}}function j(a){var b=this.lastTotal-this.lastNeed,c=i(this,a,b);return void 0!==c?c:this.lastNeed<=a.length?(a.copy(this.lastChar,b,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(a.copy(this.lastChar,b,0,a.length),void(this.lastNeed-=a.length))}function k(a,b){var c=h(this,a,b);if(!this.lastNeed)return a.toString("utf8",b);this.lastTotal=c;var d=a.length-(c-this.lastNeed);return a.copy(this.lastChar,0,d),a.toString("utf8",b,d)}function l(a){var b=a&&a.length?this.write(a):"";return this.lastNeed?b+"�".repeat(this.lastTotal-this.lastNeed):b}function m(a,b){if((a.length-b)%2==0){var c=a.toString("utf16le",b);if(c){var d=c.charCodeAt(c.length-1);if(d>=55296&&d<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=a[a.length-2],this.lastChar[1]=a[a.length-1],c.slice(0,-1)}return c}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=a[a.length-1],a.toString("utf16le",b,a.length-1)}function n(a){var b=a&&a.length?this.write(a):"";if(this.lastNeed){var c=this.lastTotal-this.lastNeed;return b+this.lastChar.toString("utf16le",0,c)}return b}function o(a,b){var c=(a.length-b)%3;return 0===c?a.toString("base64",b):(this.lastNeed=3-c,this.lastTotal=3,1===c?this.lastChar[0]=a[a.length-1]:(this.lastChar[0]=a[a.length-2],this.lastChar[1]=a[a.length-1]),a.toString("base64",b,a.length-c))}function p(a){var b=a&&a.length?this.write(a):"";return this.lastNeed?b+this.lastChar.toString("base64",0,3-this.lastNeed):b}function q(a){return a.toString(this.encoding)}function r(a){return a&&a.length?this.write(a):""}var s=a("buffer").Buffer,t=a("buffer-shims"),u=s.isEncoding||function(a){switch((a=""+a)&&a.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};c.StringDecoder=f,f.prototype.write=function(a){if(0===a.length)return"";var b,c;if(this.lastNeed){if(void 0===(b=this.fillLast(a)))return"";c=this.lastNeed,this.lastNeed=0}else c=0;return c<a.length?b?b+this.text(a,c):this.text(a,c):b||""},f.prototype.end=l,f.prototype.text=k,f.prototype.fillLast=function(a){if(this.lastNeed<=a.length)return a.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);a.copy(this.lastChar,this.lastTotal-this.lastNeed,0,a.length),this.lastNeed-=a.length}},{buffer:5,"buffer-shims":4}],124:[function(a,b,c){c=b.exports=a("./lib/_stream_readable.js"),c.Stream=c,c.Readable=c,c.Writable=a("./lib/_stream_writable.js"),c.Duplex=a("./lib/_stream_duplex.js"),c.Transform=a("./lib/_stream_transform.js"),c.PassThrough=a("./lib/_stream_passthrough.js")},{"./lib/_stream_duplex.js":116,"./lib/_stream_passthrough.js":117,"./lib/_stream_readable.js":118,"./lib/_stream_transform.js":119,"./lib/_stream_writable.js":120}],125:[function(a,b,c){"use strict";b.exports={ABSOLUTE:"absolute",PATH_RELATIVE:"pathRelative",ROOT_RELATIVE:"rootRelative",SHORTEST:"shortest"}},{}],126:[function(a,b,c){"use strict";function d(a,b){return!a.auth||b.removeAuth||!a.extra.relation.maximumHost&&b.output!==p.ABSOLUTE?"":a.auth+"@"}function e(a,b){return a.hash?a.hash:""}function f(a,b){return a.host.full&&(a.extra.relation.maximumAuth||b.output===p.ABSOLUTE)?a.host.full:""}function g(a,b){var c="",d=a.path.absolute.string,e=a.path.relative.string,f=o(a,b);if(a.extra.relation.maximumHost||b.output===p.ABSOLUTE||b.output===p.ROOT_RELATIVE)c=d;else if(e.length<=d.length&&b.output===p.SHORTEST||b.output===p.PATH_RELATIVE){if(""===(c=e)){var g=n(a,b)&&!!m(a,b);a.extra.relation.maximumPath&&!f?c="./":!a.extra.relation.overridesQuery||f||g||(c="./")}}else c=d;return"/"!==c||f||!b.removeRootTrailingSlash||a.extra.relation.minimumPort&&b.output!==p.ABSOLUTE||(c=""),c}function h(a,b){return a.port&&!a.extra.portIsDefault&&a.extra.relation.maximumHost?":"+a.port:""}function i(a,b){return n(a,b)?m(a,b):""}function j(a,b){return o(a,b)?a.resource:""}function k(a,b){var c="";return(a.extra.relation.maximumHost||b.output===p.ABSOLUTE)&&(a.extra.relation.minimumScheme&&b.schemeRelative&&b.output!==p.ABSOLUTE?c+="//":c+=a.scheme+"://"),c}function l(a,b){var c="";return c+=k(a,b),c+=d(a,b),c+=f(a,b),c+=h(a,b),c+=g(a,b),c+=j(a,b),c+=i(a,b),c+=e(a,b)}function m(a,b){var c=b.removeEmptyQueries&&a.extra.relation.minimumPort;return a.query.string[c?"stripped":"full"]}function n(a,b){return!a.extra.relation.minimumQuery||b.output===p.ABSOLUTE||b.output===p.ROOT_RELATIVE}function o(a,b){var c=b.removeDirectoryIndexes&&a.extra.resourceIsIndex,d=a.extra.relation.minimumResource&&b.output!==p.ABSOLUTE&&b.output!==p.ROOT_RELATIVE;return!!a.resource&&!d&&!c}var p=a("./constants");b.exports=l},{"./constants":125}],127:[function(a,b,c){"use strict";function d(a,b){this.options=g(b,{defaultPorts:{ftp:21,http:80,https:443},directoryIndexes:["index.html"],ignore_www:!1,output:d.SHORTEST,rejectedSchemes:["data","javascript","mailto"],removeAuth:!1,removeDirectoryIndexes:!0,removeEmptyQueries:!1,removeRootTrailingSlash:!0,schemeRelative:!0,site:void 0,slashesDenoteHost:!0}),this.from=i.from(a,this.options,null)}var e=a("./constants"),f=a("./format"),g=a("./options"),h=a("./util/object"),i=a("./parse"),j=a("./relate");d.prototype.relate=function(a,b,c){if(h.isPlainObject(b)?(c=b,b=a,a=null):b||(b=a,a=null),c=g(c,this.options),a=a||c.site,!(a=i.from(a,c,this.from))||!a.href)throw new Error("from value not defined.");if(a.extra.hrefInfo.minimumPathOnly)throw new Error("from value supplied is not absolute: "+a.href);return b=i.to(b,c),!1===b.valid?b.href:(b=j(a,b,c),b=f(b,c))},d.relate=function(a,b,c){return(new d).relate(a,b,c)},h.shallowMerge(d,e),b.exports=d},{"./constants":125,"./format":126,"./options":128,"./parse":131,"./relate":138,"./util/object":140}],128:[function(a,b,c){"use strict";function d(a,b){if(f.isPlainObject(a)){var c={};for(var d in b)b.hasOwnProperty(d)&&(void 0!==a[d]?c[d]=e(a[d],b[d]):c[d]=b[d]);return c}return b}function e(a,b){return b instanceof Object&&a instanceof Object?b instanceof Array&&a instanceof Array?b.concat(a):f.shallowMerge(a,b):a}var f=a("./util/object");b.exports=d},{"./util/object":140}],129:[function(a,b,c){"use strict";function d(a,b){if(b.ignore_www){var c=a.host.full;if(c){var d=c;0===c.indexOf("www.")&&(d=c.substr(4)),a.host.stripped=d}}}b.exports=d},{}],130:[function(a,b,c){"use strict";function d(a){var b=!(a.scheme||a.auth||a.host.full||a.port),c=b&&!a.path.absolute.string,d=c&&!a.resource,e=d&&!a.query.string.full.length,f=e&&!a.hash;a.extra.hrefInfo.minimumPathOnly=b,a.extra.hrefInfo.minimumResourceOnly=c,a.extra.hrefInfo.minimumQueryOnly=d,a.extra.hrefInfo.minimumHashOnly=e,a.extra.hrefInfo.empty=f}b.exports=d},{}],131:[function(a,b,c){"use strict";function d(a,b,c){if(a){var d=e(a,b),f=l.resolveDotSegments(d.path.absolute.array);return d.path.absolute.array=f,d.path.absolute.string="/"+l.join(f),d}return c}function e(a,b){var c=k(a,b);return!1===c.valid?c:(g(c,b),i(c,b),h(c,b),j(c,b),f(c),c)}var f=a("./hrefInfo"),g=a("./host"),h=a("./path"),i=a("./port"),j=a("./query"),k=a("./urlstring"),l=a("../util/path");b.exports={from:d,to:e}},{"../util/path":141,"./host":129,"./hrefInfo":130,"./path":132,"./port":133,"./query":134,"./urlstring":135}],132:[function(a,b,c){"use strict";function d(a,b){var c=!1;return b.directoryIndexes.every(function(b){return b!==a||(c=!0,!1)}),c}function e(a,b){var c=a.path.absolute.string;if(c){var e=c.lastIndexOf("/");if(e>-1){if(++e<c.length){var g=c.substr(e);"."!==g&&".."!==g?(a.resource=g,c=c.substr(0,e)):c+="/"}a.path.absolute.string=c,a.path.absolute.array=f(c)}else"."===c||".."===c?(c+="/",a.path.absolute.string=c,a.path.absolute.array=f(c)):(a.resource=c,a.path.absolute.string=null);a.extra.resourceIsIndex=d(a.resource,b)}}function f(a){if("/"!==a){var b=[];return a.split("/").forEach(function(a){""!==a&&b.push(a)}),b}return[]}b.exports=e},{}],133:[function(a,b,c){"use strict";function d(a,b){var c=-1;for(var d in b.defaultPorts)if(d===a.scheme&&b.defaultPorts.hasOwnProperty(d)){c=b.defaultPorts[d];break}c>-1&&(c=c.toString(),null===a.port&&(a.port=c),a.extra.portIsDefault=a.port===c)}b.exports=d},{}],134:[function(a,b,c){"use strict";function d(a,b){a.query.string.full=e(a.query.object,!1),b.removeEmptyQueries&&(a.query.string.stripped=e(a.query.object,!0))}function e(a,b){var c=0,d="";for(var e in a)if(""!==e&&!0===f.call(a,e)){var g=a[e];""===g&&b||(d+=1==++c?"?":"&",e=encodeURIComponent(e),d+=""!==g?e+"="+encodeURIComponent(g).replace(/%20/g,"+"):e)}return d}var f=Object.prototype.hasOwnProperty;b.exports=d},{}],135:[function(a,b,c){"use strict";function d(a){var b=a.protocol;return b&&b.indexOf(":")===b.length-1&&(b=b.substr(0,b.length-1)),a.host={full:a.hostname,stripped:null},a.path={absolute:{array:null,string:a.pathname},relative:{array:null,string:null}},a.query={object:a.query,string:{full:null,stripped:null}},a.extra={hrefInfo:{minimumPathOnly:null,minimumResourceOnly:null,minimumQueryOnly:null,minimumHashOnly:null,empty:null,separatorOnlyQuery:"?"===a.search},portIsDefault:null,relation:{maximumScheme:null,maximumAuth:null,maximumHost:null,maximumPort:null,maximumPath:null,maximumResource:null,maximumQuery:null,maximumHash:null,minimumScheme:null,minimumAuth:null,minimumHost:null,minimumPort:null,minimumPath:null,minimumResource:null,minimumQuery:null,minimumHash:null,overridesQuery:null},resourceIsIndex:null,slashes:a.slashes},a.resource=null,a.scheme=b,delete a.hostname,delete a.pathname,delete a.protocol,delete a.search,delete a.slashes,a}function e(a,b){var c=!0;return b.rejectedSchemes.every(function(b){return c=!(0===a.indexOf(b+":"))}),c}function f(a,b){return e(a,b)?d(g(a,!0,b.slashesDenoteHost)):{href:a,valid:!1}}var g=a("url").parse;b.exports=f},{url:159}],136:[function(a,b,c){"use strict";function d(a,b,c){h.upToPath(a,b,c),a.extra.relation.minimumScheme&&(a.scheme=b.scheme),a.extra.relation.minimumAuth&&(a.auth=b.auth),a.extra.relation.minimumHost&&(a.host=i.clone(b.host)),a.extra.relation.minimumPort&&f(a,b),a.extra.relation.minimumScheme&&e(a,b),h.pathOn(a,b,c),a.extra.relation.minimumResource&&g(a,b),a.extra.relation.minimumQuery&&(a.query=i.clone(b.query)),a.extra.relation.minimumHash&&(a.hash=b.hash)}function e(a,b){if(a.extra.relation.maximumHost||!a.extra.hrefInfo.minimumResourceOnly){var c=a.path.absolute.array,d="/";c?(a.extra.hrefInfo.minimumPathOnly&&0!==a.path.absolute.string.indexOf("/")&&(c=b.path.absolute.array.concat(c)),c=j.resolveDotSegments(c),d+=j.join(c)):c=[],a.path.absolute.array=c,a.path.absolute.string=d}else a.path=i.clone(b.path)}function f(a,b){a.port=b.port,a.extra.portIsDefault=b.extra.portIsDefault}function g(a,b){a.resource=b.resource,a.extra.resourceIsIndex=b.extra.resourceIsIndex}var h=a("./findRelation"),i=a("../util/object"),j=a("../util/path");b.exports=d},{"../util/object":140,"../util/path":141,"./findRelation":137}],137:[function(a,b,c){"use strict";function d(a,b,c){var d=a.extra.hrefInfo.minimumPathOnly,e=a.scheme===b.scheme||!a.scheme,f=e&&(a.auth===b.auth||c.removeAuth||d),g=c.ignore_www?"stripped":"full",h=f&&(a.host[g]===b.host[g]||d),i=h&&(a.port===b.port||d);a.extra.relation.minimumScheme=e,a.extra.relation.minimumAuth=f,a.extra.relation.minimumHost=h,a.extra.relation.minimumPort=i,a.extra.relation.maximumScheme=!e||e&&!f,a.extra.relation.maximumAuth=!e||e&&!h,a.extra.relation.maximumHost=!e||e&&!i}function e(a,b,c){var d=a.extra.hrefInfo.minimumQueryOnly,e=a.extra.hrefInfo.minimumHashOnly,f=a.extra.hrefInfo.empty,g=a.extra.relation.minimumPort,h=a.extra.relation.minimumScheme,i=g&&a.path.absolute.string===b.path.absolute.string,j=a.resource===b.resource||!a.resource&&b.extra.resourceIsIndex||c.removeDirectoryIndexes&&a.extra.resourceIsIndex&&!b.resource,k=i&&(j||d||e||f),l=c.removeEmptyQueries?"stripped":"full",m=a.query.string[l],n=b.query.string[l],o=k&&!!m&&m===n||(e||f)&&!a.extra.hrefInfo.separatorOnlyQuery,p=o&&a.hash===b.hash;a.extra.relation.minimumPath=i,a.extra.relation.minimumResource=k,a.extra.relation.minimumQuery=o,a.extra.relation.minimumHash=p,a.extra.relation.maximumPort=!h||h&&!i,a.extra.relation.maximumPath=!h||h&&!k,a.extra.relation.maximumResource=!h||h&&!o,a.extra.relation.maximumQuery=!h||h&&!p,a.extra.relation.maximumHash=!h||h&&!p,a.extra.relation.overridesQuery=i&&a.extra.relation.maximumResource&&!o&&!!n}b.exports={pathOn:e,upToPath:d}},{}],138:[function(a,b,c){"use strict";function d(a,b,c){return e(b,a,c),f(b,a,c),b}var e=a("./absolutize"),f=a("./relativize");b.exports=d},{"./absolutize":136,"./relativize":139}],139:[function(a,b,c){"use strict";function d(a,b){var c=[],d=!0,e=-1;return b.forEach(function(b,f){d&&(a[f]!==b?d=!1:e=f),d||c.push("..")}),a.forEach(function(a,b){b>e&&c.push(a)}),c}function e(a,b,c){if(a.extra.relation.minimumScheme){var e=d(a.path.absolute.array,b.path.absolute.array);a.path.relative.array=e,a.path.relative.string=f.join(e)}}var f=a("../util/path");b.exports=e},{"../util/path":141}],140:[function(a,b,c){"use strict";function d(a){if(a instanceof Object){var b=a instanceof Array?[]:{};for(var c in a)a.hasOwnProperty(c)&&(b[c]=d(a[c]));return b}return a}function e(a){return!!a&&"object"==typeof a&&a.constructor===Object}function f(a,b){if(a instanceof Object&&b instanceof Object)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}b.exports={clone:d,isPlainObject:e,shallowMerge:f}},{}],141:[function(a,b,c){"use strict";function d(a){return a.length>0?a.join("/")+"/":""}function e(a){var b=[];return a.forEach(function(a){".."!==a?"."!==a&&b.push(a):b.length>0&&b.splice(b.length-1,1)}),b}b.exports={join:d,resolveDotSegments:e}},{}],142:[function(a,b,c){function d(){this._array=[],this._set=Object.create(null)}var e=a("./util"),f=Object.prototype.hasOwnProperty;d.fromArray=function(a,b){for(var c=new d,e=0,f=a.length;e<f;e++)c.add(a[e],b);return c},d.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},d.prototype.add=function(a,b){var c=e.toSetString(a),d=f.call(this._set,c),g=this._array.length;d&&!b||this._array.push(a),d||(this._set[c]=g)},d.prototype.has=function(a){var b=e.toSetString(a);return f.call(this._set,b)},d.prototype.indexOf=function(a){var b=e.toSetString(a);if(f.call(this._set,b))return this._set[b];throw new Error('"'+a+'" is not in the set.')},d.prototype.at=function(a){if(a>=0&&a<this._array.length)return this._array[a];throw new Error("No element indexed by "+a)},d.prototype.toArray=function(){return this._array.slice()},c.ArraySet=d},{"./util":151}],143:[function(a,b,c){function d(a){return a<0?1+(-a<<1):0+(a<<1)}function e(a){var b=1==(1&a),c=a>>1;return b?-c:c}var f=a("./base64");c.encode=function(a){var b,c="",e=d(a);do{b=31&e,e>>>=5,e>0&&(b|=32),c+=f.encode(b)}while(e>0);return c},c.decode=function(a,b,c){var d,g,h=a.length,i=0,j=0;do{if(b>=h)throw new Error("Expected more digits in base 64 VLQ value.");if(-1===(g=f.decode(a.charCodeAt(b++))))throw new Error("Invalid base64 digit: "+a.charAt(b-1));d=!!(32&g),g&=31,i+=g<<j,j+=5}while(d);c.value=e(i),c.rest=b}},{"./base64":144}],144:[function(a,b,c){var d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");c.encode=function(a){if(0<=a&&a<d.length)return d[a];throw new TypeError("Must be between 0 and 63: "+a)},c.decode=function(a){return 65<=a&&a<=90?a-65:97<=a&&a<=122?a-97+26:48<=a&&a<=57?a-48+52:43==a?62:47==a?63:-1}},{}],145:[function(a,b,c){function d(a,b,e,f,g,h){var i=Math.floor((b-a)/2)+a,j=g(e,f[i],!0);return 0===j?i:j>0?b-i>1?d(i,b,e,f,g,h):h==c.LEAST_UPPER_BOUND?b<f.length?b:-1:i:i-a>1?d(a,i,e,f,g,h):h==c.LEAST_UPPER_BOUND?i:a<0?-1:a}c.GREATEST_LOWER_BOUND=1,c.LEAST_UPPER_BOUND=2,c.search=function(a,b,e,f){if(0===b.length)return-1;var g=d(-1,b.length,a,b,e,f||c.GREATEST_LOWER_BOUND);if(g<0)return-1;for(;g-1>=0&&0===e(b[g],b[g-1],!0);)--g;return g}},{}],146:[function(a,b,c){function d(a,b){var c=a.generatedLine,d=b.generatedLine,e=a.generatedColumn,g=b.generatedColumn;return d>c||d==c&&g>=e||f.compareByGeneratedPositionsInflated(a,b)<=0}function e(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var f=a("./util");e.prototype.unsortedForEach=function(a,b){this._array.forEach(a,b)},e.prototype.add=function(a){d(this._last,a)?(this._last=a,this._array.push(a)):(this._sorted=!1,this._array.push(a))},e.prototype.toArray=function(){return this._sorted||(this._array.sort(f.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},c.MappingList=e},{"./util":151}],147:[function(a,b,c){function d(a,b,c){var d=a[b];a[b]=a[c],a[c]=d}function e(a,b){return Math.round(a+Math.random()*(b-a))}function f(a,b,c,g){if(c<g){var h=e(c,g),i=c-1;d(a,h,g);for(var j=a[g],k=c;k<g;k++)b(a[k],j)<=0&&(i+=1,d(a,i,k));d(a,i+1,k);var l=i+1;f(a,b,c,l-1),f(a,b,l+1,g)}}c.quickSort=function(a,b){f(a,b,0,a.length-1)}},{}],148:[function(a,b,c){function d(a){var b=a;return"string"==typeof a&&(b=JSON.parse(a.replace(/^\)\]\}'/,""))),null!=b.sections?new g(b):new e(b)}function e(a){var b=a;"string"==typeof a&&(b=JSON.parse(a.replace(/^\)\]\}'/,"")));var c=h.getArg(b,"version"),d=h.getArg(b,"sources"),e=h.getArg(b,"names",[]),f=h.getArg(b,"sourceRoot",null),g=h.getArg(b,"sourcesContent",null),i=h.getArg(b,"mappings"),k=h.getArg(b,"file",null);if(c!=this._version)throw new Error("Unsupported version: "+c);d=d.map(String).map(h.normalize).map(function(a){return f&&h.isAbsolute(f)&&h.isAbsolute(a)?h.relative(f,a):a}),this._names=j.fromArray(e.map(String),!0),this._sources=j.fromArray(d,!0),this.sourceRoot=f,this.sourcesContent=g,this._mappings=i,this.file=k}function f(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function g(a){var b=a;"string"==typeof a&&(b=JSON.parse(a.replace(/^\)\]\}'/,"")));var c=h.getArg(b,"version"),e=h.getArg(b,"sections");if(c!=this._version)throw new Error("Unsupported version: "+c);this._sources=new j,this._names=new j;var f={line:-1,column:0}
-;this._sections=e.map(function(a){if(a.url)throw new Error("Support for url field in sections not implemented.");var b=h.getArg(a,"offset"),c=h.getArg(b,"line"),e=h.getArg(b,"column");if(c<f.line||c===f.line&&e<f.column)throw new Error("Section offsets must be ordered and non-overlapping.");return f=b,{generatedOffset:{generatedLine:c+1,generatedColumn:e+1},consumer:new d(h.getArg(a,"map"))}})}var h=a("./util"),i=a("./binary-search"),j=a("./array-set").ArraySet,k=a("./base64-vlq"),l=a("./quick-sort").quickSort;d.fromSourceMap=function(a){return e.fromSourceMap(a)},d.prototype._version=3,d.prototype.__generatedMappings=null,Object.defineProperty(d.prototype,"_generatedMappings",{get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),d.prototype.__originalMappings=null,Object.defineProperty(d.prototype,"_originalMappings",{get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),d.prototype._charIsMappingSeparator=function(a,b){var c=a.charAt(b);return";"===c||","===c},d.prototype._parseMappings=function(a,b){throw new Error("Subclasses must implement _parseMappings")},d.GENERATED_ORDER=1,d.ORIGINAL_ORDER=2,d.GREATEST_LOWER_BOUND=1,d.LEAST_UPPER_BOUND=2,d.prototype.eachMapping=function(a,b,c){var e,f=b||null,g=c||d.GENERATED_ORDER;switch(g){case d.GENERATED_ORDER:e=this._generatedMappings;break;case d.ORIGINAL_ORDER:e=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var i=this.sourceRoot;e.map(function(a){var b=null===a.source?null:this._sources.at(a.source);return null!=b&&null!=i&&(b=h.join(i,b)),{source:b,generatedLine:a.generatedLine,generatedColumn:a.generatedColumn,originalLine:a.originalLine,originalColumn:a.originalColumn,name:null===a.name?null:this._names.at(a.name)}},this).forEach(a,f)},d.prototype.allGeneratedPositionsFor=function(a){var b=h.getArg(a,"line"),c={source:h.getArg(a,"source"),originalLine:b,originalColumn:h.getArg(a,"column",0)};if(null!=this.sourceRoot&&(c.source=h.relative(this.sourceRoot,c.source)),!this._sources.has(c.source))return[];c.source=this._sources.indexOf(c.source);var d=[],e=this._findMapping(c,this._originalMappings,"originalLine","originalColumn",h.compareByOriginalPositions,i.LEAST_UPPER_BOUND);if(e>=0){var f=this._originalMappings[e];if(void 0===a.column)for(var g=f.originalLine;f&&f.originalLine===g;)d.push({line:h.getArg(f,"generatedLine",null),column:h.getArg(f,"generatedColumn",null),lastColumn:h.getArg(f,"lastGeneratedColumn",null)}),f=this._originalMappings[++e];else for(var j=f.originalColumn;f&&f.originalLine===b&&f.originalColumn==j;)d.push({line:h.getArg(f,"generatedLine",null),column:h.getArg(f,"generatedColumn",null),lastColumn:h.getArg(f,"lastGeneratedColumn",null)}),f=this._originalMappings[++e]}return d},c.SourceMapConsumer=d,e.prototype=Object.create(d.prototype),e.prototype.consumer=d,e.fromSourceMap=function(a){var b=Object.create(e.prototype),c=b._names=j.fromArray(a._names.toArray(),!0),d=b._sources=j.fromArray(a._sources.toArray(),!0);b.sourceRoot=a._sourceRoot,b.sourcesContent=a._generateSourcesContent(b._sources.toArray(),b.sourceRoot),b.file=a._file;for(var g=a._mappings.toArray().slice(),i=b.__generatedMappings=[],k=b.__originalMappings=[],m=0,n=g.length;m<n;m++){var o=g[m],p=new f;p.generatedLine=o.generatedLine,p.generatedColumn=o.generatedColumn,o.source&&(p.source=d.indexOf(o.source),p.originalLine=o.originalLine,p.originalColumn=o.originalColumn,o.name&&(p.name=c.indexOf(o.name)),k.push(p)),i.push(p)}return l(b.__originalMappings,h.compareByOriginalPositions),b},e.prototype._version=3,Object.defineProperty(e.prototype,"sources",{get:function(){return this._sources.toArray().map(function(a){return null!=this.sourceRoot?h.join(this.sourceRoot,a):a},this)}}),e.prototype._parseMappings=function(a,b){for(var c,d,e,g,i,j=1,m=0,n=0,o=0,p=0,q=0,r=a.length,s=0,t={},u={},v=[],w=[];s<r;)if(";"===a.charAt(s))j++,s++,m=0;else if(","===a.charAt(s))s++;else{for(c=new f,c.generatedLine=j,g=s;g<r&&!this._charIsMappingSeparator(a,g);g++);if(d=a.slice(s,g),e=t[d])s+=d.length;else{for(e=[];s<g;)k.decode(a,s,u),i=u.value,s=u.rest,e.push(i);if(2===e.length)throw new Error("Found a source, but no line and column");if(3===e.length)throw new Error("Found a source and line, but no column");t[d]=e}c.generatedColumn=m+e[0],m=c.generatedColumn,e.length>1&&(c.source=p+e[1],p+=e[1],c.originalLine=n+e[2],n=c.originalLine,c.originalLine+=1,c.originalColumn=o+e[3],o=c.originalColumn,e.length>4&&(c.name=q+e[4],q+=e[4])),w.push(c),"number"==typeof c.originalLine&&v.push(c)}l(w,h.compareByGeneratedPositionsDeflated),this.__generatedMappings=w,l(v,h.compareByOriginalPositions),this.__originalMappings=v},e.prototype._findMapping=function(a,b,c,d,e,f){if(a[c]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+a[c]);if(a[d]<0)throw new TypeError("Column must be greater than or equal to 0, got "+a[d]);return i.search(a,b,e,f)},e.prototype.computeColumnSpans=function(){for(var a=0;a<this._generatedMappings.length;++a){var b=this._generatedMappings[a];if(a+1<this._generatedMappings.length){var c=this._generatedMappings[a+1];if(b.generatedLine===c.generatedLine){b.lastGeneratedColumn=c.generatedColumn-1;continue}}b.lastGeneratedColumn=1/0}},e.prototype.originalPositionFor=function(a){var b={generatedLine:h.getArg(a,"line"),generatedColumn:h.getArg(a,"column")},c=this._findMapping(b,this._generatedMappings,"generatedLine","generatedColumn",h.compareByGeneratedPositionsDeflated,h.getArg(a,"bias",d.GREATEST_LOWER_BOUND));if(c>=0){var e=this._generatedMappings[c];if(e.generatedLine===b.generatedLine){var f=h.getArg(e,"source",null);null!==f&&(f=this._sources.at(f),null!=this.sourceRoot&&(f=h.join(this.sourceRoot,f)));var g=h.getArg(e,"name",null);return null!==g&&(g=this._names.at(g)),{source:f,line:h.getArg(e,"originalLine",null),column:h.getArg(e,"originalColumn",null),name:g}}}return{source:null,line:null,column:null,name:null}},e.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(a){return null==a}))},e.prototype.sourceContentFor=function(a,b){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(a=h.relative(this.sourceRoot,a)),this._sources.has(a))return this.sourcesContent[this._sources.indexOf(a)];var c;if(null!=this.sourceRoot&&(c=h.urlParse(this.sourceRoot))){var d=a.replace(/^file:\/\//,"");if("file"==c.scheme&&this._sources.has(d))return this.sourcesContent[this._sources.indexOf(d)];if((!c.path||"/"==c.path)&&this._sources.has("/"+a))return this.sourcesContent[this._sources.indexOf("/"+a)]}if(b)return null;throw new Error('"'+a+'" is not in the SourceMap.')},e.prototype.generatedPositionFor=function(a){var b=h.getArg(a,"source");if(null!=this.sourceRoot&&(b=h.relative(this.sourceRoot,b)),!this._sources.has(b))return{line:null,column:null,lastColumn:null};b=this._sources.indexOf(b);var c={source:b,originalLine:h.getArg(a,"line"),originalColumn:h.getArg(a,"column")},e=this._findMapping(c,this._originalMappings,"originalLine","originalColumn",h.compareByOriginalPositions,h.getArg(a,"bias",d.GREATEST_LOWER_BOUND));if(e>=0){var f=this._originalMappings[e];if(f.source===c.source)return{line:h.getArg(f,"generatedLine",null),column:h.getArg(f,"generatedColumn",null),lastColumn:h.getArg(f,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},c.BasicSourceMapConsumer=e,g.prototype=Object.create(d.prototype),g.prototype.constructor=d,g.prototype._version=3,Object.defineProperty(g.prototype,"sources",{get:function(){for(var a=[],b=0;b<this._sections.length;b++)for(var c=0;c<this._sections[b].consumer.sources.length;c++)a.push(this._sections[b].consumer.sources[c]);return a}}),g.prototype.originalPositionFor=function(a){var b={generatedLine:h.getArg(a,"line"),generatedColumn:h.getArg(a,"column")},c=i.search(b,this._sections,function(a,b){var c=a.generatedLine-b.generatedOffset.generatedLine;return c||a.generatedColumn-b.generatedOffset.generatedColumn}),d=this._sections[c];return d?d.consumer.originalPositionFor({line:b.generatedLine-(d.generatedOffset.generatedLine-1),column:b.generatedColumn-(d.generatedOffset.generatedLine===b.generatedLine?d.generatedOffset.generatedColumn-1:0),bias:a.bias}):{source:null,line:null,column:null,name:null}},g.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(a){return a.consumer.hasContentsOfAllSources()})},g.prototype.sourceContentFor=function(a,b){for(var c=0;c<this._sections.length;c++){var d=this._sections[c],e=d.consumer.sourceContentFor(a,!0);if(e)return e}if(b)return null;throw new Error('"'+a+'" is not in the SourceMap.')},g.prototype.generatedPositionFor=function(a){for(var b=0;b<this._sections.length;b++){var c=this._sections[b];if(-1!==c.consumer.sources.indexOf(h.getArg(a,"source"))){var d=c.consumer.generatedPositionFor(a);if(d){return{line:d.line+(c.generatedOffset.generatedLine-1),column:d.column+(c.generatedOffset.generatedLine===d.line?c.generatedOffset.generatedColumn-1:0)}}}}return{line:null,column:null}},g.prototype._parseMappings=function(a,b){this.__generatedMappings=[],this.__originalMappings=[];for(var c=0;c<this._sections.length;c++)for(var d=this._sections[c],e=d.consumer._generatedMappings,f=0;f<e.length;f++){var g=e[f],i=d.consumer._sources.at(g.source);null!==d.consumer.sourceRoot&&(i=h.join(d.consumer.sourceRoot,i)),this._sources.add(i),i=this._sources.indexOf(i);var j=d.consumer._names.at(g.name);this._names.add(j),j=this._names.indexOf(j);var k={source:i,generatedLine:g.generatedLine+(d.generatedOffset.generatedLine-1),generatedColumn:g.generatedColumn+(d.generatedOffset.generatedLine===g.generatedLine?d.generatedOffset.generatedColumn-1:0),originalLine:g.originalLine,originalColumn:g.originalColumn,name:j};this.__generatedMappings.push(k),"number"==typeof k.originalLine&&this.__originalMappings.push(k)}l(this.__generatedMappings,h.compareByGeneratedPositionsDeflated),l(this.__originalMappings,h.compareByOriginalPositions)},c.IndexedSourceMapConsumer=g},{"./array-set":142,"./base64-vlq":143,"./binary-search":145,"./quick-sort":147,"./util":151}],149:[function(a,b,c){function d(a){a||(a={}),this._file=f.getArg(a,"file",null),this._sourceRoot=f.getArg(a,"sourceRoot",null),this._skipValidation=f.getArg(a,"skipValidation",!1),this._sources=new g,this._names=new g,this._mappings=new h,this._sourcesContents=null}var e=a("./base64-vlq"),f=a("./util"),g=a("./array-set").ArraySet,h=a("./mapping-list").MappingList;d.prototype._version=3,d.fromSourceMap=function(a){var b=a.sourceRoot,c=new d({file:a.file,sourceRoot:b});return a.eachMapping(function(a){var d={generated:{line:a.generatedLine,column:a.generatedColumn}};null!=a.source&&(d.source=a.source,null!=b&&(d.source=f.relative(b,d.source)),d.original={line:a.originalLine,column:a.originalColumn},null!=a.name&&(d.name=a.name)),c.addMapping(d)}),a.sources.forEach(function(b){var d=a.sourceContentFor(b);null!=d&&c.setSourceContent(b,d)}),c},d.prototype.addMapping=function(a){var b=f.getArg(a,"generated"),c=f.getArg(a,"original",null),d=f.getArg(a,"source",null),e=f.getArg(a,"name",null);this._skipValidation||this._validateMapping(b,c,d,e),null!=d&&(d=String(d),this._sources.has(d)||this._sources.add(d)),null!=e&&(e=String(e),this._names.has(e)||this._names.add(e)),this._mappings.add({generatedLine:b.line,generatedColumn:b.column,originalLine:null!=c&&c.line,originalColumn:null!=c&&c.column,source:d,name:e})},d.prototype.setSourceContent=function(a,b){var c=a;null!=this._sourceRoot&&(c=f.relative(this._sourceRoot,c)),null!=b?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[f.toSetString(c)]=b):this._sourcesContents&&(delete this._sourcesContents[f.toSetString(c)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},d.prototype.applySourceMap=function(a,b,c){var d=b;if(null==b){if(null==a.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');d=a.file}var e=this._sourceRoot;null!=e&&(d=f.relative(e,d));var h=new g,i=new g;this._mappings.unsortedForEach(function(b){if(b.source===d&&null!=b.originalLine){var g=a.originalPositionFor({line:b.originalLine,column:b.originalColumn});null!=g.source&&(b.source=g.source,null!=c&&(b.source=f.join(c,b.source)),null!=e&&(b.source=f.relative(e,b.source)),b.originalLine=g.line,b.originalColumn=g.column,null!=g.name&&(b.name=g.name))}var j=b.source;null==j||h.has(j)||h.add(j);var k=b.name;null==k||i.has(k)||i.add(k)},this),this._sources=h,this._names=i,a.sources.forEach(function(b){var d=a.sourceContentFor(b);null!=d&&(null!=c&&(b=f.join(c,b)),null!=e&&(b=f.relative(e,b)),this.setSourceContent(b,d))},this)},d.prototype._validateMapping=function(a,b,c,d){if((!(a&&"line"in a&&"column"in a&&a.line>0&&a.column>=0)||b||c||d)&&!(a&&"line"in a&&"column"in a&&b&&"line"in b&&"column"in b&&a.line>0&&a.column>=0&&b.line>0&&b.column>=0&&c))throw new Error("Invalid mapping: "+JSON.stringify({generated:a,source:c,original:b,name:d}))},d.prototype._serializeMappings=function(){for(var a,b,c,d,g=0,h=1,i=0,j=0,k=0,l=0,m="",n=this._mappings.toArray(),o=0,p=n.length;o<p;o++){if(b=n[o],a="",b.generatedLine!==h)for(g=0;b.generatedLine!==h;)a+=";",h++;else if(o>0){if(!f.compareByGeneratedPositionsInflated(b,n[o-1]))continue;a+=","}a+=e.encode(b.generatedColumn-g),g=b.generatedColumn,null!=b.source&&(d=this._sources.indexOf(b.source),a+=e.encode(d-l),l=d,a+=e.encode(b.originalLine-1-j),j=b.originalLine-1,a+=e.encode(b.originalColumn-i),i=b.originalColumn,null!=b.name&&(c=this._names.indexOf(b.name),a+=e.encode(c-k),k=c)),m+=a}return m},d.prototype._generateSourcesContent=function(a,b){return a.map(function(a){if(!this._sourcesContents)return null;null!=b&&(a=f.relative(b,a));var c=f.toSetString(a);return Object.prototype.hasOwnProperty.call(this._sourcesContents,c)?this._sourcesContents[c]:null},this)},d.prototype.toJSON=function(){var a={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(a.file=this._file),null!=this._sourceRoot&&(a.sourceRoot=this._sourceRoot),this._sourcesContents&&(a.sourcesContent=this._generateSourcesContent(a.sources,a.sourceRoot)),a},d.prototype.toString=function(){return JSON.stringify(this.toJSON())},c.SourceMapGenerator=d},{"./array-set":142,"./base64-vlq":143,"./mapping-list":146,"./util":151}],150:[function(a,b,c){function d(a,b,c,d,e){this.children=[],this.sourceContents={},this.line=null==a?null:a,this.column=null==b?null:b,this.source=null==c?null:c,this.name=null==e?null:e,this[g]=!0,null!=d&&this.add(d)}var e=a("./source-map-generator").SourceMapGenerator,f=a("./util"),g="$$$isSourceNode$$$";d.fromStringWithSourceMap=function(a,b,c){function e(a,b){if(null===a||void 0===a.source)g.add(b);else{var e=c?f.join(c,a.source):a.source;g.add(new d(a.originalLine,a.originalColumn,e,b,a.name))}}var g=new d,h=a.split(/(\r?\n)/),i=function(){return h.shift()+(h.shift()||"")},j=1,k=0,l=null;return b.eachMapping(function(a){if(null!==l){if(!(j<a.generatedLine)){var b=h[0],c=b.substr(0,a.generatedColumn-k);return h[0]=b.substr(a.generatedColumn-k),k=a.generatedColumn,e(l,c),void(l=a)}e(l,i()),j++,k=0}for(;j<a.generatedLine;)g.add(i()),j++;if(k<a.generatedColumn){var b=h[0];g.add(b.substr(0,a.generatedColumn)),h[0]=b.substr(a.generatedColumn),k=a.generatedColumn}l=a},this),h.length>0&&(l&&e(l,i()),g.add(h.join(""))),b.sources.forEach(function(a){var d=b.sourceContentFor(a);null!=d&&(null!=c&&(a=f.join(c,a)),g.setSourceContent(a,d))}),g},d.prototype.add=function(a){if(Array.isArray(a))a.forEach(function(a){this.add(a)},this);else{if(!a[g]&&"string"!=typeof a)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+a);a&&this.children.push(a)}return this},d.prototype.prepend=function(a){if(Array.isArray(a))for(var b=a.length-1;b>=0;b--)this.prepend(a[b]);else{if(!a[g]&&"string"!=typeof a)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+a);this.children.unshift(a)}return this},d.prototype.walk=function(a){for(var b,c=0,d=this.children.length;c<d;c++)b=this.children[c],b[g]?b.walk(a):""!==b&&a(b,{source:this.source,line:this.line,column:this.column,name:this.name})},d.prototype.join=function(a){var b,c,d=this.children.length;if(d>0){for(b=[],c=0;c<d-1;c++)b.push(this.children[c]),b.push(a);b.push(this.children[c]),this.children=b}return this},d.prototype.replaceRight=function(a,b){var c=this.children[this.children.length-1];return c[g]?c.replaceRight(a,b):"string"==typeof c?this.children[this.children.length-1]=c.replace(a,b):this.children.push("".replace(a,b)),this},d.prototype.setSourceContent=function(a,b){this.sourceContents[f.toSetString(a)]=b},d.prototype.walkSourceContents=function(a){for(var b=0,c=this.children.length;b<c;b++)this.children[b][g]&&this.children[b].walkSourceContents(a);for(var d=Object.keys(this.sourceContents),b=0,c=d.length;b<c;b++)a(f.fromSetString(d[b]),this.sourceContents[d[b]])},d.prototype.toString=function(){var a="";return this.walk(function(b){a+=b}),a},d.prototype.toStringWithSourceMap=function(a){var b={code:"",line:1,column:0},c=new e(a),d=!1,f=null,g=null,h=null,i=null;return this.walk(function(a,e){b.code+=a,null!==e.source&&null!==e.line&&null!==e.column?(f===e.source&&g===e.line&&h===e.column&&i===e.name||c.addMapping({source:e.source,original:{line:e.line,column:e.column},generated:{line:b.line,column:b.column},name:e.name}),f=e.source,g=e.line,h=e.column,i=e.name,d=!0):d&&(c.addMapping({generated:{line:b.line,column:b.column}}),f=null,d=!1);for(var j=0,k=a.length;j<k;j++)10===a.charCodeAt(j)?(b.line++,b.column=0,j+1===k?(f=null,d=!1):d&&c.addMapping({source:e.source,original:{line:e.line,column:e.column},generated:{line:b.line,column:b.column},name:e.name})):b.column++}),this.walkSourceContents(function(a,b){c.setSourceContent(a,b)}),{code:b.code,map:c}},c.SourceNode=d},{"./source-map-generator":149,"./util":151}],151:[function(a,b,c){function d(a,b,c){if(b in a)return a[b];if(3===arguments.length)return c;throw new Error('"'+b+'" is a required argument.')}function e(a){var b=a.match(r);return b?{scheme:b[1],auth:b[2],host:b[3],port:b[4],path:b[5]}:null}function f(a){var b="";return a.scheme&&(b+=a.scheme+":"),b+="//",a.auth&&(b+=a.auth+"@"),a.host&&(b+=a.host),a.port&&(b+=":"+a.port),a.path&&(b+=a.path),b}function g(a){var b=a,d=e(a);if(d){if(!d.path)return a;b=d.path}for(var g,h=c.isAbsolute(b),i=b.split(/\/+/),j=0,k=i.length-1;k>=0;k--)g=i[k],"."===g?i.splice(k,1):".."===g?j++:j>0&&(""===g?(i.splice(k+1,j),j=0):(i.splice(k,2),j--));return b=i.join("/"),""===b&&(b=h?"/":"."),d?(d.path=b,f(d)):b}function h(a,b){""===a&&(a="."),""===b&&(b=".");var c=e(b),d=e(a);if(d&&(a=d.path||"/"),c&&!c.scheme)return d&&(c.scheme=d.scheme),f(c);if(c||b.match(s))return b;if(d&&!d.host&&!d.path)return d.host=b,f(d);var h="/"===b.charAt(0)?b:g(a.replace(/\/+$/,"")+"/"+b);return d?(d.path=h,f(d)):h}function i(a,b){""===a&&(a="."),a=a.replace(/\/$/,"");for(var c=0;0!==b.indexOf(a+"/");){var d=a.lastIndexOf("/");if(d<0)return b;if(a=a.slice(0,d),a.match(/^([^\/]+:\/)?\/*$/))return b;++c}return Array(c+1).join("../")+b.substr(a.length+1)}function j(a){return a}function k(a){return m(a)?"$"+a:a}function l(a){return m(a)?a.slice(1):a}function m(a){if(!a)return!1;var b=a.length;if(b<9)return!1;if(95!==a.charCodeAt(b-1)||95!==a.charCodeAt(b-2)||111!==a.charCodeAt(b-3)||116!==a.charCodeAt(b-4)||111!==a.charCodeAt(b-5)||114!==a.charCodeAt(b-6)||112!==a.charCodeAt(b-7)||95!==a.charCodeAt(b-8)||95!==a.charCodeAt(b-9))return!1;for(var c=b-10;c>=0;c--)if(36!==a.charCodeAt(c))return!1;return!0}function n(a,b,c){var d=a.source-b.source;return 0!==d?d:0!==(d=a.originalLine-b.originalLine)?d:0!==(d=a.originalColumn-b.originalColumn)||c?d:0!==(d=a.generatedColumn-b.generatedColumn)?d:(d=a.generatedLine-b.generatedLine,0!==d?d:a.name-b.name)}function o(a,b,c){var d=a.generatedLine-b.generatedLine;return 0!==d?d:0!==(d=a.generatedColumn-b.generatedColumn)||c?d:0!==(d=a.source-b.source)?d:0!==(d=a.originalLine-b.originalLine)?d:(d=a.originalColumn-b.originalColumn,0!==d?d:a.name-b.name)}function p(a,b){return a===b?0:a>b?1:-1}function q(a,b){var c=a.generatedLine-b.generatedLine;return 0!==c?c:0!==(c=a.generatedColumn-b.generatedColumn)?c:0!==(c=p(a.source,b.source))?c:0!==(c=a.originalLine-b.originalLine)?c:(c=a.originalColumn-b.originalColumn,0!==c?c:p(a.name,b.name))}c.getArg=d;var r=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,s=/^data:.+\,.+$/;c.urlParse=e,c.urlGenerate=f,c.normalize=g,c.join=h,c.isAbsolute=function(a){return"/"===a.charAt(0)||!!a.match(r)},c.relative=i;var t=function(){return!("__proto__"in Object.create(null))}();c.toSetString=t?j:k,c.fromSetString=t?j:l,c.compareByOriginalPositions=n,c.compareByGeneratedPositionsDeflated=o,c.compareByGeneratedPositionsInflated=q},{}],152:[function(a,b,c){c.SourceMapGenerator=a("./lib/source-map-generator").SourceMapGenerator,c.SourceMapConsumer=a("./lib/source-map-consumer").SourceMapConsumer,c.SourceNode=a("./lib/source-node").SourceNode},{"./lib/source-map-consumer":148,"./lib/source-map-generator":149,"./lib/source-node":150}],153:[function(a,b,c){(function(b){var d=a("./lib/request"),e=a("xtend"),f=a("builtin-status-codes"),g=a("url"),h=c;h.request=function(a,c){a="string"==typeof a?g.parse(a):e(a);var f=-1===b.location.protocol.search(/^https?:$/)?"http:":"",h=a.protocol||f,i=a.hostname||a.host,j=a.port,k=a.path||"/";i&&-1!==i.indexOf(":")&&(i="["+i+"]"),a.url=(i?h+"//"+i:"")+(j?":"+j:"")+k,a.method=(a.method||"GET").toUpperCase(),a.headers=a.headers||{};var l=new d(a);return c&&l.on("response",c),l},h.get=function(a,b){var c=h.request(a,b);return c.end(),c},h.Agent=function(){},h.Agent.defaultMaxSockets=4,h.STATUS_CODES=f,h.METHODS=["CHECKOUT","CONNECT","COPY","DELETE","GET","HEAD","LOCK","M-SEARCH","MERGE","MKACTIVITY","MKCOL","MOVE","NOTIFY","OPTIONS","PATCH","POST","PROPFIND","PROPPATCH","PURGE","PUT","REPORT","SEARCH","SUBSCRIBE","TRACE","UNLOCK","UNSUBSCRIBE"]}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./lib/request":155,"builtin-status-codes":6,url:159,xtend:166}],154:[function(a,b,c){(function(a){function b(){if(void 0!==f)return f;if(a.XMLHttpRequest){f=new a.XMLHttpRequest;try{f.open("GET",a.XDomainRequest?"/":"https://example.com")}catch(a){f=null}}else f=null;return f}function d(a){var c=b();if(!c)return!1;try{return c.responseType=a,c.responseType===a}catch(a){}return!1}function e(a){return"function"==typeof a}c.fetch=e(a.fetch)&&e(a.ReadableStream),c.blobConstructor=!1;try{new Blob([new ArrayBuffer(1)]),c.blobConstructor=!0}catch(a){}var f,g=void 0!==a.ArrayBuffer,h=g&&e(a.ArrayBuffer.prototype.slice);c.arraybuffer=c.fetch||g&&d("arraybuffer"),c.msstream=!c.fetch&&h&&d("ms-stream"),c.mozchunkedarraybuffer=!c.fetch&&g&&d("moz-chunked-arraybuffer"),c.overrideMimeType=c.fetch||!!b()&&e(b().overrideMimeType),c.vbArray=e(a.VBArray),f=null}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],155:[function(a,b,c){(function(c,d,e){function f(a,b){return h.fetch&&b?"fetch":h.mozchunkedarraybuffer?"moz-chunked-arraybuffer":h.msstream?"ms-stream":h.arraybuffer&&a?"arraybuffer":h.vbArray&&a?"text:vbarray":"text"}function g(a){try{var b=a.status;return null!==b&&0!==b}catch(a){return!1}}var h=a("./capability"),i=a("inherits"),j=a("./response"),k=a("readable-stream"),l=a("to-arraybuffer"),m=j.IncomingMessage,n=j.readyStates,o=b.exports=function(a){var b=this;k.Writable.call(b),b._opts=a,b._body=[],b._headers={},a.auth&&b.setHeader("Authorization","Basic "+new e(a.auth).toString("base64")),Object.keys(a.headers).forEach(function(c){b.setHeader(c,a.headers[c])});var c,d=!0;if("disable-fetch"===a.mode||"timeout"in a)d=!1,c=!0;else if("prefer-streaming"===a.mode)c=!1;else if("allow-wrong-content-type"===a.mode)c=!h.overrideMimeType;else{if(a.mode&&"default"!==a.mode&&"prefer-fast"!==a.mode)throw new Error("Invalid value for opts.mode");c=!0}b._mode=f(c,d),b.on("finish",function(){b._onFinish()})};i(o,k.Writable),o.prototype.setHeader=function(a,b){var c=this,d=a.toLowerCase();-1===p.indexOf(d)&&(c._headers[d]={name:a,value:b})},o.prototype.getHeader=function(a){return this._headers[a.toLowerCase()].value},o.prototype.removeHeader=function(a){delete this._headers[a.toLowerCase()]},o.prototype._onFinish=function(){var a=this;if(!a._destroyed){var b=a._opts,f=a._headers,g=null;"GET"!==b.method&&"HEAD"!==b.method&&(g=h.blobConstructor?new d.Blob(a._body.map(function(a){return l(a)}),{type:(f["content-type"]||{}).value||""}):e.concat(a._body).toString());var i=[];if(Object.keys(f).forEach(function(a){var b=f[a].name,c=f[a].value;Array.isArray(c)?c.forEach(function(a){i.push([b,a])}):i.push([b,c])}),"fetch"===a._mode)d.fetch(a._opts.url,{method:a._opts.method,headers:i,body:g||void 0,mode:"cors",credentials:b.withCredentials?"include":"same-origin"}).then(function(b){a._fetchResponse=b,a._connect()},function(b){a.emit("error",b)});else{var j=a._xhr=new d.XMLHttpRequest;try{j.open(a._opts.method,a._opts.url,!0)}catch(b){return void c.nextTick(function(){a.emit("error",b)})}"responseType"in j&&(j.responseType=a._mode.split(":")[0]),"withCredentials"in j&&(j.withCredentials=!!b.withCredentials),"text"===a._mode&&"overrideMimeType"in j&&j.overrideMimeType("text/plain; charset=x-user-defined"),"timeout"in b&&(j.timeout=b.timeout,j.ontimeout=function(){a.emit("timeout")}),i.forEach(function(a){j.setRequestHeader(a[0],a[1])}),a._response=null,j.onreadystatechange=function(){switch(j.readyState){case n.LOADING:case n.DONE:a._onXHRProgress()}},"moz-chunked-arraybuffer"===a._mode&&(j.onprogress=function(){a._onXHRProgress()}),j.onerror=function(){a._destroyed||a.emit("error",new Error("XHR error"))};try{j.send(g)}catch(b){return void c.nextTick(function(){a.emit("error",b)})}}}},o.prototype._onXHRProgress=function(){var a=this;g(a._xhr)&&!a._destroyed&&(a._response||a._connect(),a._response._onXHRProgress())},o.prototype._connect=function(){var a=this;a._destroyed||(a._response=new m(a._xhr,a._fetchResponse,a._mode),a._response.on("error",function(b){a.emit("error",b)}),a.emit("response",a._response))},o.prototype._write=function(a,b,c){this._body.push(a),c()},o.prototype.abort=o.prototype.destroy=function(){var a=this;a._destroyed=!0,a._response&&(a._response._destroyed=!0),a._xhr&&a._xhr.abort()},o.prototype.end=function(a,b,c){var d=this;"function"==typeof a&&(c=a,a=void 0),k.Writable.prototype.end.call(d,a,b,c)},o.prototype.flushHeaders=function(){},o.prototype.setTimeout=function(){},o.prototype.setNoDelay=function(){},o.prototype.setSocketKeepAlive=function(){};var p=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","date","dnt","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"]}).call(this,a("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},a("buffer").Buffer)},{"./capability":154,"./response":156,_process:111,buffer:5,inherits:104,"readable-stream":124,"to-arraybuffer":157}],156:[function(a,b,c){(function(b,d,e){var f=a("./capability"),g=a("inherits"),h=a("readable-stream"),i=c.readyStates={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},j=c.IncomingMessage=function(a,c,d){function g(){j.read().then(function(a){if(!i._destroyed){if(a.done)return void i.push(null);i.push(new e(a.value)),g()}}).catch(function(a){i.emit("error",a)})}var i=this;if(h.Readable.call(i),i._mode=d,i.headers={},i.rawHeaders=[],i.trailers={},i.rawTrailers=[],i.on("end",function(){b.nextTick(function(){i.emit("close")})}),"fetch"===d){i._fetchResponse=c,i.url=c.url,i.statusCode=c.status,i.statusMessage=c.statusText,c.headers.forEach(function(a,b){i.headers[b.toLowerCase()]=a,i.rawHeaders.push(b,a)});var j=c.body.getReader();g()}else{i._xhr=a,i._pos=0,i.url=a.responseURL,i.statusCode=a.status,i.statusMessage=a.statusText;if(a.getAllResponseHeaders().split(/\r?\n/).forEach(function(a){var b=a.match(/^([^:]+):\s*(.*)/);if(b){var c=b[1].toLowerCase();"set-cookie"===c?(void 0===i.headers[c]&&(i.headers[c]=[]),i.headers[c].push(b[2])):void 0!==i.headers[c]?i.headers[c]+=", "+b[2]:i.headers[c]=b[2],i.rawHeaders.push(b[1],b[2])}}),i._charset="x-user-defined",!f.overrideMimeType){var k=i.rawHeaders["mime-type"];if(k){var l=k.match(/;\s*charset=([^;])(;|$)/);l&&(i._charset=l[1].toLowerCase())}i._charset||(i._charset="utf-8")}}};g(j,h.Readable),j.prototype._read=function(){},j.prototype._onXHRProgress=function(){var a=this,b=a._xhr,c=null;switch(a._mode){case"text:vbarray":if(b.readyState!==i.DONE)break;try{c=new d.VBArray(b.responseBody).toArray()}catch(a){}if(null!==c){a.push(new e(c));break}case"text":try{c=b.responseText}catch(b){a._mode="text:vbarray";break}if(c.length>a._pos){var f=c.substr(a._pos);if("x-user-defined"===a._charset){for(var g=new e(f.length),h=0;h<f.length;h++)g[h]=255&f.charCodeAt(h);a.push(g)}else a.push(f,a._charset);a._pos=c.length}break;case"arraybuffer":if(b.readyState!==i.DONE||!b.response)break;c=b.response,a.push(new e(new Uint8Array(c)));break;case"moz-chunked-arraybuffer":if(c=b.response,b.readyState!==i.LOADING||!c)break;a.push(new e(new Uint8Array(c)));break;case"ms-stream":if(c=b.response,b.readyState!==i.LOADING)break;var j=new d.MSStreamReader;j.onprogress=function(){j.result.byteLength>a._pos&&(a.push(new e(new Uint8Array(j.result.slice(a._pos)))),a._pos=j.result.byteLength)},j.onload=function(){a.push(null)},j.readAsArrayBuffer(c)}a._xhr.readyState===i.DONE&&"ms-stream"!==a._mode&&a.push(null)}}).call(this,a("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},a("buffer").Buffer)},{"./capability":154,_process:111,buffer:5,inherits:104,"readable-stream":124}],157:[function(a,b,c){var d=a("buffer").Buffer;b.exports=function(a){if(a instanceof Uint8Array){if(0===a.byteOffset&&a.byteLength===a.buffer.byteLength)return a.buffer;if("function"==typeof a.buffer.slice)return a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength)}if(d.isBuffer(a)){for(var b=new Uint8Array(a.length),c=a.length,e=0;e<c;e++)b[e]=a[e];return b.buffer}throw new Error("Argument must be a Buffer")}},{buffer:5}],158:[function(a,b,c){(function(b){function d(a){for(var b=Object.create(null),c=0;c<a.length;++c)b[a[c]]=!0;return b}function e(a,b){return Array.prototype.slice.call(a,b||0)}function f(a){return a.split("")}function g(a,b){return b.indexOf(a)>=0}function h(a,b){for(var c=0,d=b.length;c<d;++c)if(a(b[c]))return b[c]}function i(a,b){if(b<=0)return"";if(1==b)return a;var c=i(a,b>>1);return c+=c,1&b&&(c+=a),c}function j(a){Object.defineProperty(a.prototype,"stack",{get:function(){var a=new Error(this.message);a.name=this.name;try{throw a}catch(a){return a.stack}}})}function k(a,b){this.message=a,this.defs=b}function l(a,b,c){!0===a&&(a={});var d=a||{};if(c)for(var e in d)B(d,e)&&!B(b,e)&&k.croak("`"+e+"` is not a supported option",b);for(var e in b)B(b,e)&&(d[e]=a&&B(a,e)?a[e]:b[e]);return d}function m(a,b){var c=0;for(var d in b)B(b,d)&&(a[d]=b[d],c++);return c}function n(){}function o(){return!1}function p(){return!0}function q(){return this}function r(){return null}function s(a,b){a.indexOf(b)<0&&a.push(b)}function t(a,b){return a.replace(/\{(.+?)\}/g,function(a,c){return b&&b[c]})}function u(a,b){for(var c=a.length;--c>=0;)a[c]===b&&a.splice(c,1)}function v(a,b){function c(a,c){
-for(var d=[],e=0,f=0,g=0;e<a.length&&f<c.length;)b(a[e],c[f])<=0?d[g++]=a[e++]:d[g++]=c[f++];return e<a.length&&d.push.apply(d,a.slice(e)),f<c.length&&d.push.apply(d,c.slice(f)),d}function d(a){if(a.length<=1)return a;var b=Math.floor(a.length/2),e=a.slice(0,b),f=a.slice(b);return e=d(e),f=d(f),c(e,f)}return a.length<2?a.slice():d(a)}function w(a,b){return a.filter(function(a){return b.indexOf(a)<0})}function x(a,b){return a.filter(function(a){return b.indexOf(a)>=0})}function y(a){function b(a){return JSON.stringify(a).replace(/[\u2028\u2029]/g,function(a){switch(a){case"\u2028":return"\\u2028";case"\u2029":return"\\u2029"}return a})}function c(a){if(1==a.length)return d+="return str === "+b(a[0])+";";d+="switch(str){";for(var c=0;c<a.length;++c)d+="case "+b(a[c])+":";d+="return true}return false;"}a instanceof Array||(a=a.split(" "));var d="",e=[];a:for(var f=0;f<a.length;++f){for(var g=0;g<e.length;++g)if(e[g][0].length==a[f].length){e[g].push(a[f]);continue a}e.push([a[f]])}if(e.length>3){e.sort(function(a,b){return b.length-a.length}),d+="switch(str.length){";for(var f=0;f<e.length;++f){var h=e[f];d+="case "+h[0].length+":",c(h)}d+="}"}else c(a);return new Function("str",d)}function z(a,b){for(var c=a.length;--c>=0;)if(!b(a[c]))return!1;return!0}function A(){this._values=Object.create(null),this._size=0}function B(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function C(a){for(var b,c=a.parent(-1),d=0;b=a.parent(d);d++){if(b instanceof ia&&b.body===c)return!0;if(!(b instanceof Za&&b.car===c||b instanceof Xa&&b.expression===c&&!(b instanceof Ya)||b instanceof _a&&b.expression===c||b instanceof ab&&b.expression===c||b instanceof fb&&b.condition===c||b instanceof eb&&b.left===c||b instanceof db&&b.expression===c))return!1;c=b}}function D(a,b,d,e){arguments.length<4&&(e=ha),b=b?b.split(/\s+/):[];var f=b;e&&e.PROPS&&(b=b.concat(e.PROPS));for(var g="return function AST_"+a+"(props){ if (props) { ",h=b.length;--h>=0;)g+="this."+b[h]+" = props."+b[h]+";";var i=e&&new e;(i&&i.initialize||d&&d.initialize)&&(g+="this.initialize();"),g+="}}";var j=new Function(g)();if(i&&(j.prototype=i,j.BASE=e),e&&e.SUBCLASSES.push(j),j.prototype.CTOR=j,j.PROPS=b||null,j.SELF_PROPS=f,j.SUBCLASSES=[],a&&(j.prototype.TYPE=j.TYPE=a),d)for(h in d)B(d,h)&&(/^\$/.test(h)?j[h.substr(1)]=d[h]:j.prototype[h]=d[h]);return j.DEFMETHOD=function(a,b){this.prototype[a]=b},void 0!==c&&(c["AST_"+a]=j),j}function E(a,b){var c=a.body;if(c instanceof ia)c._walk(b);else for(var d=0,e=c.length;d<e;d++)c[d]._walk(b)}function F(a){this.visit=a,this.stack=[],this.directives=Object.create(null)}function G(a){return a>=97&&a<=122||a>=65&&a<=90||a>=170&&$b.letter.test(String.fromCharCode(a))}function H(a){return a>=48&&a<=57}function I(a){return H(a)||G(a)}function J(a){return $b.digit.test(String.fromCharCode(a))}function K(a){return $b.non_spacing_mark.test(a)||$b.space_combining_mark.test(a)}function L(a){return $b.connector_punctuation.test(a)}function M(a){return!Pb(a)&&/^[a-z_$][a-z0-9_$]*$/i.test(a)}function N(a){return 36==a||95==a||G(a)}function O(a){var b=a.charCodeAt(0);return N(b)||H(b)||8204==b||8205==b||K(a)||L(a)||J(b)}function P(a){return/^[a-z_$][a-z0-9_$]*$/i.test(a)}function Q(a){if(Sb.test(a))return parseInt(a.substr(2),16);if(Tb.test(a))return parseInt(a.substr(1),8);var b=parseFloat(a);return b==a?b:void 0}function R(a,b,c,d,e){this.message=a,this.filename=b,this.line=c,this.col=d,this.pos=e}function S(a,b,c,d,e){throw new R(a,b,c,d,e)}function T(a,b,c){return a.type==b&&(null==c||a.value==c)}function U(a,b,c,d){function e(){return B.text.charAt(B.pos)}function f(a,b){var c=B.text.charAt(B.pos++);if(a&&!c)throw _b;return Wb(c)?(B.newline_before=B.newline_before||!b,++B.line,B.col=0,b||"\r"!=c||"\n"!=e()||(++B.pos,c="\n")):++B.col,c}function g(a){for(;a-- >0;)f()}function h(a){return B.text.substr(B.pos,a.length)==a}function i(){for(var a=B.text,b=B.pos,c=B.text.length;b<c;++b){var d=a[b];if(Wb(d))return b}return-1}function j(a,b){var c=B.text.indexOf(a,B.pos);if(b&&-1==c)throw _b;return c}function k(){B.tokline=B.line,B.tokcol=B.col,B.tokpos=B.pos}function l(c,d,e){B.regex_allowed="operator"==c&&!bc(d)||"keyword"==c&&Qb(d)||"punc"==c&&Xb(d),C="punc"==c&&"."==d;var f={type:c,value:d,line:B.tokline,col:B.tokcol,pos:B.tokpos,endline:B.line,endcol:B.col,endpos:B.pos,nlb:B.newline_before,file:b};if(/^(?:num|string|regexp)$/i.test(c)&&(f.raw=a.substring(f.pos,f.endpos)),!e){f.comments_before=B.comments_before,B.comments_before=[];for(var g=0,h=f.comments_before.length;g<h;g++)f.nlb=f.nlb||f.comments_before[g].nlb}return B.newline_before=!1,new ga(f)}function m(){for(;Vb(e());)f()}function n(a){for(var b,c="",d=0;(b=e())&&a(b,d++);)c+=f();return c}function o(a){S(a,b,B.tokline,B.tokcol,B.tokpos)}function p(a){var b=!1,c=!1,d=!1,e="."==a,f=n(function(f,g){var h=f.charCodeAt(0);switch(h){case 120:case 88:return!d&&(d=!0);case 101:case 69:return!!d||!b&&(b=c=!0);case 45:return c||0==g&&!a;case 43:return c;case c=!1,46:return!(e||d||b)&&(e=!0)}return I(h)});a&&(f=a+f),Tb.test(f)&&A.has_directive("use strict")&&o("Legacy octal literals are not allowed in strict mode");var g=Q(f);if(!isNaN(g))return l("num",g);o("Invalid syntax: "+f)}function q(a){var b=f(!0,a);switch(b.charCodeAt(0)){case 110:return"\n";case 114:return"\r";case 116:return"\t";case 98:return"\b";case 118:return"\v";case 102:return"\f";case 120:return String.fromCharCode(s(2));case 117:return String.fromCharCode(s(4));case 10:return"";case 13:if("\n"==e())return f(!0,a),""}return b>="0"&&b<="7"?r(b):b}function r(a){var b=e();return b>="0"&&b<="7"&&(a+=f(!0),a[0]<="3"&&(b=e())>="0"&&b<="7"&&(a+=f(!0))),"0"===a?"\0":(a.length>0&&A.has_directive("use strict")&&o("Legacy octal escape sequences are not allowed in strict mode"),String.fromCharCode(parseInt(a,8)))}function s(a){for(var b=0;a>0;--a){var c=parseInt(f(!0),16);isNaN(c)&&o("Invalid hex-character pattern in string"),b=b<<4|c}return b}function t(a){var b,c=B.regex_allowed,d=i();return-1==d?(b=B.text.substr(B.pos),B.pos=B.text.length):(b=B.text.substring(B.pos,d),B.pos=d),B.col=B.tokcol+(B.pos-B.tokpos),B.comments_before.push(l(a,b,!0)),B.regex_allowed=c,A}function u(){for(var a,b,c=!1,d="",g=!1;null!=(a=e());)if(c)"u"!=a&&o("Expecting UnicodeEscapeSequence -- uXXXX"),a=q(),O(a)||o("Unicode char: "+a.charCodeAt(0)+" is not valid in identifier"),d+=a,c=!1;else if("\\"==a)g=c=!0,f();else{if(!O(a))break;d+=f()}return Nb(d)&&g&&(b=d.charCodeAt(0).toString(16).toUpperCase(),d="\\u"+"0000".substr(b.length)+b+d.slice(1)),d}function v(a){function b(a){if(!e())return a;var c=a+e();return Ub(c)?(f(),b(c)):a}return l("operator",b(a||f()))}function w(){switch(f(),e()){case"/":return f(),t("comment1");case"*":return f(),E()}return B.regex_allowed?F(""):v("/")}function x(){return f(),H(e().charCodeAt(0))?p("."):l("punc",".")}function y(){var a=u();return C?l("name",a):Ob(a)?l("atom",a):Nb(a)?Ub(a)?l("operator",a):l("keyword",a):l("name",a)}function z(a,b){return function(c){try{return b(c)}catch(b){if(b!==_b)throw b;o(a)}}}function A(a){if(null!=a)return F(a);for(d&&0==B.pos&&h("#!")&&(k(),g(2),t("comment5"));;){if(m(),k(),c){if(h("\x3c!--")){g(4),t("comment3");continue}if(h("--\x3e")&&B.newline_before){g(3),t("comment4");continue}}var b=e();if(!b)return l("eof");var i=b.charCodeAt(0);switch(i){case 34:case 39:return D(b);case 46:return x();case 47:var j=w();if(j===A)continue;return j}if(H(i))return p();if(Yb(b))return l("punc",f());if(Rb(b))return v();if(92==i||N(i))return y();break}o("Unexpected character '"+b+"'")}var B={text:a,filename:b,pos:0,tokpos:0,line:1,tokline:0,col:0,tokcol:0,newline_before:!1,regex_allowed:!1,comments_before:[],directives:{},directive_stack:[]},C=!1,D=z("Unterminated string constant",function(a){for(var b=f(),c="";;){var d=f(!0,!0);if("\\"==d)d=q(!0);else if(Wb(d))o("Unterminated string constant");else if(d==b)break;c+=d}var e=l("string",c);return e.quote=a,e}),E=z("Unterminated multiline comment",function(){var a=B.regex_allowed,b=j("*/",!0),c=B.text.substring(B.pos,b).replace(/\r\n|\r|\u2028|\u2029/g,"\n");return g(c.length+2),B.comments_before.push(l("comment2",c,!0)),B.regex_allowed=a,A}),F=z("Unterminated regular expression",function(a){for(var b,c=!1,d=!1;b=f(!0);)if(Wb(b))o("Unexpected line terminator");else if(c)a+="\\"+b,c=!1;else if("["==b)d=!0,a+=b;else if("]"==b&&d)d=!1,a+=b;else{if("/"==b&&!d)break;"\\"==b?c=!0:a+=b}var e=u();try{return l("regexp",new RegExp(a,e))}catch(a){o(a.message)}});return A.context=function(a){return a&&(B=a),B},A.add_directive=function(a){B.directive_stack[B.directive_stack.length-1].push(a),void 0===B.directives[a]?B.directives[a]=1:B.directives[a]++},A.push_directives_stack=function(){B.directive_stack.push([])},A.pop_directives_stack=function(){for(var a=B.directive_stack[B.directive_stack.length-1],b=0;b<a.length;b++)B.directives[a[b]]--;B.directive_stack.pop()},A.has_directive=function(a){return void 0!==B.directives[a]&&B.directives[a]>0},A}function V(a,b){function c(a,b){return T(N.token,a,b)}function d(){return N.peeked||(N.peeked=N.input())}function e(){return N.prev=N.token,N.peeked?(N.token=N.peeked,N.peeked=null):N.token=N.input(),N.in_directives=N.in_directives&&("string"==N.token.type||c("punc",";")),N.token}function f(){return N.prev}function g(a,b,c,d){var e=N.input.context();S(a,e.filename,null!=b?b:e.tokline,null!=c?c:e.tokcol,null!=d?d:e.tokpos)}function i(a,b){g(b,a.line,a.col)}function j(a){null==a&&(a=N.token),i(a,"Unexpected token: "+a.type+" ("+a.value+")")}function k(a,b){if(c(a,b))return e();i(N.token,"Unexpected token "+N.token.type+" «"+N.token.value+"», expected "+a+" «"+b+"»")}function m(a){return k("punc",a)}function n(){return!b.strict&&(N.token.nlb||c("eof")||c("punc","}"))}function o(a){c("punc",";")?e():a||n()||j()}function p(){m("(");var a=ea(!0);return m(")"),a}function q(a){return function(){var b=N.token,c=a(),d=f();return c.start=b,c.end=d,c}}function r(){(c("operator","/")||c("operator","/="))&&(N.peeked=null,N.token=N.input(N.token.value.substr(1)))}function s(){var a=I(wb);h(function(b){return b.name==a.name},N.labels)&&g("Label "+a.name+" defined twice"),m(":"),N.labels.push(a);var b=O();return N.labels.pop(),b instanceof ra||a.references.forEach(function(b){b instanceof Ka&&(b=b.label.start,g("Continue label `"+a.name+"` refers to non-IterationStatement.",b.line,b.col,b.pos))}),new qa({body:b,label:a})}function t(a){return new la({body:(a=ea(!0),o(),a)})}function u(a){var b,c=null;n()||(c=I(yb,!0)),null!=c?(b=h(function(a){return a.name==c.name},N.labels),b||g("Undefined label "+c.name),c.thedef=b):0==N.in_loop&&g(a.TYPE+" not inside a loop or switch"),o();var d=new a({label:c});return b&&b.references.push(d),d}function v(){m("(");var a=null;return!c("punc",";")&&(a=c("keyword","var")?(e(),R(!0)):ea(!0,!0),c("operator","in"))?(a instanceof Ua&&a.definitions.length>1&&g("Only one variable declaration allowed in for..in loop"),e(),x(a)):w(a)}function w(a){m(";");var b=c("punc",";")?null:ea(!0);m(";");var d=c("punc",")")?null:ea(!0);return m(")"),new va({init:a,condition:b,step:d,body:M(O)})}function x(a){var b=a instanceof Ua?a.definitions[0].name:null,c=ea(!0);return m(")"),new wa({init:a,name:b,object:c,body:M(O)})}function y(){var a=p(),b=O(),d=null;return c("keyword","else")&&(e(),d=O()),new La({condition:a,body:b,alternative:d})}function z(){m("{");for(var a=[];!c("punc","}");)c("eof")&&j(),a.push(O());return e(),a}function A(){m("{");for(var a,b=[],d=null,g=null;!c("punc","}");)c("eof")&&j(),c("keyword","case")?(g&&(g.end=f()),d=[],g=new Pa({start:(a=N.token,e(),a),expression:ea(!0),body:d}),b.push(g),m(":")):c("keyword","default")?(g&&(g.end=f()),d=[],g=new Oa({start:(a=N.token,e(),m(":"),a),body:d}),b.push(g)):(d||j(),d.push(O()));return g&&(g.end=f()),e(),b}function B(){var a=z(),b=null,d=null;if(c("keyword","catch")){var h=N.token;e(),m("(");var i=I(vb);m(")"),b=new Ra({start:h,argname:i,body:z(),end:f()})}if(c("keyword","finally")){var h=N.token;e(),d=new Sa({start:h,body:z(),end:f()})}return b||d||g("Missing catch/finally blocks"),new Qa({body:a,bcatch:b,bfinally:d})}function C(a,b){for(var d=[];d.push(new Wa({start:N.token,name:I(b?rb:qb),value:c("operator","=")?(e(),ea(!1,a)):null,end:f()})),c("punc",",");)e();return d}function D(){var a,b=N.token;switch(b.type){case"name":case"keyword":a=H(xb);break;case"num":a=new Cb({start:b,end:b,value:b.value});break;case"string":a=new Bb({start:b,end:b,value:b.value,quote:b.quote});break;case"regexp":a=new Db({start:b,end:b,value:b.value});break;case"atom":switch(b.value){case"false":a=new Lb({start:b,end:b});break;case"true":a=new Mb({start:b,end:b});break;case"null":a=new Fb({start:b,end:b})}break;case"operator":P(b.value)||g("Invalid getter/setter name: "+b.value,b.line,b.col,b.pos),a=H(xb)}return e(),a}function E(a,b,d){for(var f=!0,g=[];!c("punc",a)&&(f?f=!1:m(","),!b||!c("punc",a));)c("punc",",")&&d?g.push(new Ib({start:N.token,end:N.token})):g.push(ea(!1));return e(),g}function F(){var a=N.token;switch(e(),a.type){case"num":case"string":case"name":case"operator":case"keyword":case"atom":return a.value;default:j()}}function G(){var a=N.token;switch(e(),a.type){case"name":case"operator":case"keyword":case"atom":return a.value;default:j()}}function H(a){var b=N.token.value;return new("this"==b?zb:a)({name:String(b),start:N.token,end:N.token})}function I(a,b){if(!c("name"))return b||g("Name expected"),null;var d=H(a);return e(),d}function J(a,b,c){return"++"!=b&&"--"!=b||L(c)||g("Invalid use of "+b+" operator",null,a===cb?c.start.col-1:null),new a({operator:b,expression:c})}function K(a){return ba(aa(!0),0,a)}function L(a){return!!b.cli||(a instanceof $a||a instanceof xb)}function M(a){++N.in_loop;var b=a();return--N.in_loop,b}b=l(b,{bare_returns:!1,cli:!1,expression:!1,filename:null,html5_comments:!0,shebang:!0,strict:!1,toplevel:null});var N={input:"string"==typeof a?U(a,b.filename,b.html5_comments,b.shebang):a,token:null,prev:null,peeked:null,in_function:0,in_directives:!0,in_loop:0,labels:[]};N.token=e();var O=q(function(){var a;switch(r(),N.token.type){case"string":var h=!1;!0===N.in_directives&&((T(d(),"punc",";")||d().nlb)&&-1===N.token.raw.indexOf("\\")?N.input.add_directive(N.token.value):N.in_directives=!1);var h=N.in_directives,i=t();return h?new ka({start:i.body.start,end:i.body.end,quote:i.body.quote,value:i.body.value}):i;case"num":case"regexp":case"operator":case"atom":return t();case"name":return T(d(),"punc",":")?s():t();case"punc":switch(N.token.value){case"{":return new na({start:N.token,body:z(),end:f()});case"[":case"(":return t();case";":return N.in_directives=!1,e(),new oa;default:j()}case"keyword":switch(a=N.token.value,e(),a){case"break":return u(Ja);case"continue":return u(Ka);case"debugger":return o(),new ja;case"do":return new ta({body:M(O),condition:(k("keyword","while"),a=p(),o(!0),a)});case"while":return new ua({condition:p(),body:M(O)});case"for":return v();case"function":return Q(Da);case"if":return y();case"return":return 0!=N.in_function||b.bare_returns||g("'return' outside of function"),new Ga({value:c("punc",";")?(e(),null):n()?null:(a=ea(!0),o(),a)});case"switch":return new Ma({expression:p(),body:M(A)});case"throw":return N.token.nlb&&g("Illegal newline after 'throw'"),new Ha({value:(a=ea(!0),o(),a)});case"try":return B();case"var":return a=R(),o(),a;case"const":return a=V(),o(),a;case"with":return N.input.has_directive("use strict")&&g("Strict mode may not include a with statement"),new xa({expression:p(),body:O()})}}j()}),Q=function(a){var b=a===Da,d=c("name")?I(b?tb:ub):null;return b&&!d&&j(),m("("),new a({name:d,argnames:function(a,b){for(;!c("punc",")");)a?a=!1:m(","),b.push(I(sb));return e(),b}(!0,[]),body:function(a,b){++N.in_function,N.in_directives=!0,N.input.push_directives_stack(),N.in_loop=0,N.labels=[];var c=z();return N.input.pop_directives_stack(),--N.in_function,N.in_loop=a,N.labels=b,c}(N.in_loop,N.labels)})},R=function(a){return new Ua({start:f(),definitions:C(a,!1),end:f()})},V=function(){return new Va({start:f(),definitions:C(!1,!0),end:f()})},W=function(a){var b=N.token;k("operator","new");var d,g=X(!1);return c("punc","(")?(e(),d=E(")")):d=[],_(new Ya({start:b,expression:g,args:d,end:f()}),a)},X=function(a){if(c("operator","new"))return W(a);var b=N.token;if(c("punc")){switch(b.value){case"(":e();var d=ea(!0);return d.start=b,d.end=N.token,m(")"),_(d,a);case"[":return _(Y(),a);case"{":return _($(),a)}j()}if(c("keyword","function")){e();var g=Q(Ca);return g.start=b,g.end=f(),_(g,a)}if(fc[N.token.type])return _(D(),a);j()},Y=q(function(){return m("["),new hb({elements:E("]",!b.strict,!0)})}),Z=q(function(){return Q(Ba)}),$=q(function(){m("{");for(var a=!0,d=[];!c("punc","}")&&(a?a=!1:m(","),b.strict||!c("punc","}"));){var g=N.token,h=g.type,i=F();if("name"==h&&!c("punc",":")){if("get"==i){d.push(new mb({start:g,key:D(),value:Z(),end:f()}));continue}if("set"==i){d.push(new lb({start:g,key:D(),value:Z(),end:f()}));continue}}m(":"),d.push(new kb({start:g,quote:g.quote,key:i,value:ea(!1),end:f()}))}return e(),new ib({properties:d})}),_=function(a,b){var d=a.start;if(c("punc","."))return e(),_(new _a({start:d,expression:a,property:G(),end:f()}),b);if(c("punc","[")){e();var g=ea(!0);return m("]"),_(new ab({start:d,expression:a,property:g,end:f()}),b)}return b&&c("punc","(")?(e(),_(new Xa({start:d,expression:a,args:E(")"),end:f()}),!0)):a},aa=function(a){var b=N.token;if(c("operator")&&ac(b.value)){e(),r();var d=J(cb,b.value,aa(a));return d.start=b,d.end=f(),d}for(var g=X(a);c("operator")&&bc(N.token.value)&&!N.token.nlb;)g=J(db,N.token.value,g),g.start=b,g.end=N.token,e();return g},ba=function(a,b,d){var f=c("operator")?N.token.value:null;"in"==f&&d&&(f=null);var g=null!=f?dc[f]:null;if(null!=g&&g>b){e();var h=ba(aa(!0),g,d);return ba(new eb({start:a.start,left:a,operator:f,right:h,end:h.end}),b,d)}return a},ca=function(a){var b=N.token,d=K(a);if(c("operator","?")){e();var g=ea(!1);return m(":"),new fb({start:b,condition:d,consequent:g,alternative:ea(!1,a),end:f()})}return d},da=function(a){var b=N.token,d=ca(a),h=N.token.value;if(c("operator")&&cc(h)){if(L(d))return e(),new gb({start:b,left:d,operator:h,right:da(a),end:f()});g("Invalid assignment")}return d},ea=function(a,b){var f=N.token,g=da(b);return a&&c("punc",",")?(e(),new Za({start:f,car:g,cdr:ea(!0,b),end:d()})):g};return b.expression?ea(!0):function(){var a=N.token,d=[];for(N.input.push_directives_stack();!c("eof");)d.push(O());N.input.pop_directives_stack();var e=f(),g=b.toplevel;return g?(g.body=g.body.concat(d),g.end=e):g=new za({start:a,body:d,end:e}),g}()}function W(a,b){F.call(this),this.before=a,this.after=b}function X(a,b,c){this.name=c.name,this.orig=[c],this.scope=a,this.references=[],this.global=!1,this.mangled_name=null,this.undeclared=!1,this.index=b,this.id=X.next_id++}function Y(a){return"comment2"==a.type&&/@preserve|@license|@cc_on/i.test(a.value)}function Z(a){function b(a,b){return a.replace(/[\u0000-\u001f\u007f-\uffff]/g,function(a){var c=a.charCodeAt(0).toString(16);if(c.length<=2&&!b){for(;c.length<2;)c="0"+c;return"\\x"+c}for(;c.length<4;)c="0"+c;return"\\u"+c})}function c(c,d){function e(){return"'"+c.replace(/\x27/g,"\\'")+"'"}function f(){return'"'+c.replace(/\x22/g,'\\"')+'"'}var g=0,h=0;switch(c=c.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g,function(b,d){switch(b){case'"':return++g,'"';case"'":return++h,"'";case"\\":return"\\\\";case"\n":return"\\n";case"\r":return"\\r";case"\t":return"\\t";case"\b":return"\\b";case"\f":return"\\f";case"\v":return a.screw_ie8?"\\v":"\\x0B";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";case"\ufeff":return"\\ufeff";case"\0":return/[0-7]/.test(c.charAt(d+1))?"\\x00":"\\0"}return b}),a.ascii_only&&(c=b(c)),a.quote_style){case 1:return e();case 2:return f();case 3:return"'"==d?e():f();default:return g>h?e():f()}}function d(b,d){var e=c(b,d);return a.inline_script&&(e=e.replace(/<\x2fscript([>\/\t\n\f\r ])/gi,"<\\/script$1"),e=e.replace(/\x3c!--/g,"\\x3c!--"),e=e.replace(/--\x3e/g,"--\\x3e")),e}function e(c){return c=c.toString(),a.ascii_only&&(c=b(c,!0)),c}function f(b){return i(" ",a.indent_start+z-b*a.indent_level)}function g(){return H.charAt(H.length-1)}function h(b){b=String(b);var c=b.charAt(0);if(F&&(F=!1,c&&!(";}".indexOf(c)<0)||/[;]$/.test(H)||(a.semicolons||J(c)?(D+=";",A++,C++):(I(),D+="\n",C++,B++,A=0,/^\s+$/.test(b)&&(F=!0)),a.beautify||(E=!1))),!a.beautify&&a.preserve_line&&R[R.length-1])for(var d=R[R.length-1].start.line;B<d;)I(),D+="\n",C++,B++,A=0,E=!1;if(E){var e=g();(O(e)&&(O(c)||"\\"==c)||"/"==c&&c==e||("+"==c||"-"==c)&&c==H)&&(D+=" ",A++,C++),E=!1}D+=b,C+=b.length;var f=b.split(/\r?\n/),h=f.length-1;B+=h,A+=f[0].length,h>0&&(I(),A=f[h].length),H=b}function j(){F=!1,h(";")}function k(){return z+a.indent_level}function m(a){var b;return h("{"),N(),M(k(),function(){b=a()}),L(),h("}"),b}function q(a){h("(");var b=a();return h(")"),b}function r(a){h("[");var b=a();return h("]"),b}function s(){h(","),K()}function t(){h(":"),a.space_colon&&K()}function u(){return G&&I(),D}a=l(a,{ascii_only:!1,beautify:!1,bracketize:!1,comments:!1,indent_level:4,indent_start:0,inline_script:!0,keep_quoted_props:!1,max_line_len:!1,preamble:null,preserve_line:!1,quote_keys:!1,quote_style:0,screw_ie8:!0,semicolons:!0,shebang:!0,source_map:null,space_colon:!0,unescape_regexps:!1,width:80,wrap_iife:!1},!0);var v=o;if(a.comments){var w=a.comments;if("string"==typeof a.comments&&/^\/.*\/[a-zA-Z]*$/.test(a.comments)){var x=a.comments.lastIndexOf("/");w=new RegExp(a.comments.substr(1,x-1),a.comments.substr(x+1))}v=w instanceof RegExp?function(a){return"comment5"!=a.type&&w.test(a.value)}:"function"==typeof w?function(a){return"comment5"!=a.type&&w(this,a)}:"some"===w?Y:p}var z=0,A=0,B=1,C=0,D="",E=!1,F=!1,G=0,H=null,I=a.max_line_len?function(){if(A>a.max_line_len){if(G){var b=D.slice(0,G),c=D.slice(G);D=b+"\n"+c,B++,C++,A=c.length}A>a.max_line_len&&ha.warn("Output exceeds {max_line_len} characters",a)}G=0}:n,J=y("( [ + * / - , ."),K=a.beautify?function(){h(" ")}:function(){E=!0},L=a.beautify?function(b){a.beautify&&h(f(b?.5:0))}:n,M=a.beautify?function(a,b){!0===a&&(a=k());var c=z;z=a;var d=b();return z=c,d}:function(a,b){return b()},N=a.beautify?function(){h("\n")}:a.max_line_len?function(){I(),G=D.length}:n,P=a.beautify?function(){h(";")}:function(){F=!0},Q=a.source_map?function(b,c){try{b&&a.source_map.add(b.file||"?",B,A,b.line,b.col,c||"name"!=b.type?c:b.value)}catch(a){ha.warn("Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]",{file:b.file,line:b.line,col:b.col,cline:B,ccol:A,name:c||""})}}:n,R=[];return{get:u,toString:u,indent:L,indentation:function(){return z},current_width:function(){return A-z},should_break:function(){return a.width&&this.current_width()>=a.width},newline:N,print:h,space:K,comma:s,colon:t,last:function(){return H},semicolon:P,force_semicolon:j,to_ascii:b,print_name:function(a){h(e(a))},print_string:function(a,b,c){var e=d(a,b);!0===c&&-1===e.indexOf("\\")&&(hc.test(D)||j(),j()),h(e)},encode_string:d,next_indent:k,with_indent:M,with_block:m,with_parens:q,with_square:r,add_mapping:Q,option:function(b){return a[b]},comment_filter:v,line:function(){return B},col:function(){return A},pos:function(){return C},push_node:function(a){R.push(a)},pop_node:function(){return R.pop()},parent:function(a){return R[R.length-2-(a||0)]}}}function $(a,b){if(!(this instanceof $))return new $(a,b);W.call(this,this.before,this.after),this.options=l(a,{angular:!1,booleans:!b,cascade:!b,collapse_vars:!b,comparisons:!b,conditionals:!b,dead_code:!b,drop_console:!1,drop_debugger:!b,evaluate:!b,expression:!1,global_defs:{},hoist_funs:!b,hoist_vars:!1,if_return:!b,join_vars:!b,keep_fargs:!0,keep_fnames:!1,keep_infinity:!1,loops:!b,negate_iife:!b,passes:1,properties:!b,pure_getters:!b&&"strict",pure_funcs:null,reduce_vars:!b,screw_ie8:!0,sequences:!b,side_effects:!b,switches:!b,top_retain:null,toplevel:!(!a||!a.top_retain),unsafe:!1,unsafe_comps:!1,unsafe_math:!1,unsafe_proto:!1,unused:!b,warnings:!0},!0);var c=this.options.pure_funcs;this.pure_funcs="function"==typeof c?c:c?function(a){return c.indexOf(a.expression.print_to_string())<0}:p;var d=this.options.top_retain;d instanceof RegExp?this.top_retain=function(a){return d.test(a.name)}:"function"==typeof d?this.top_retain=d:d&&("string"==typeof d&&(d=d.split(/,/)),this.top_retain=function(a){return d.indexOf(a.name)>=0});var e=this.options.sequences;this.sequences_limit=1==e?200:0|e,this.warnings_produced={}}function _(a){function b(b,e,f,g,h,i){if(d){var j=d.originalPositionFor({line:g,column:h});if(null===j.source)return;b=j.source,g=j.line,h=j.column,i=j.name||i}c.addMapping({generated:{line:e+a.dest_line_diff,column:f},original:{line:g+a.orig_line_diff,column:h},source:b,name:i})}a=l(a,{file:null,root:null,orig:null,orig_line_diff:0,dest_line_diff:0});var c=new da.SourceMapGenerator({file:a.file,sourceRoot:a.root}),d=a.orig&&new da.SourceMapConsumer(a.orig);return d&&Array.isArray(a.orig.sources)&&d._sources.toArray().forEach(function(a){var b=d.sourceContentFor(a,!0);b&&c.setSourceContent(a,b)}),{add:b,get:function(){return c},toString:function(){return JSON.stringify(c.toJSON())}}}function aa(){function a(a){s(b,a)}var b=["null","true","false","Infinity","-Infinity","undefined"];return[Object,Array,Function,Number,String,Boolean,Error,Math,Date,RegExp].forEach(function(b){Object.getOwnPropertyNames(b).map(a),b.prototype&&Object.getOwnPropertyNames(b.prototype).map(a)}),b}function ba(a,b){function c(a){return!(q.indexOf(a)>=0)&&(!(i.indexOf(a)>=0)&&(b.only_cache?j.props.has(a):!/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(a)))}function d(a){return!(n&&a in r)&&(!(m&&!m.test(a))&&(!(i.indexOf(a)>=0)&&(j.props.has(a)||p.indexOf(a)>=0)))}function e(a,b){if(b)return void(r[a]=!0);c(a)&&s(p,a),d(a)||s(q,a)}function f(a){if(!d(a))return a;var b=j.props.get(a);if(!b){if(o){var e="_$"+a+"$"+k+"_";!c(e)||n&&e in r||(b=e)}if(!b)do{b=gc(++j.cname)}while(!c(b)||n&&b in r);j.props.set(a,b)}return b}function g(a,b){var c={};try{!function a(d){d.walk(new F(function(d){if(d instanceof Za)return a(d.cdr),!0;if(d instanceof Bb)return e(d.value,b),!0;if(d instanceof fb)return a(d.consequent),a(d.alternative),!0;throw c}))}(a)}catch(a){if(a!==c)throw a}}function h(a){return a.transform(new W(function(a){return a instanceof Za?a.cdr=h(a.cdr):a instanceof Bb?a.value=f(a.value):a instanceof fb&&(a.consequent=h(a.consequent),a.alternative=h(a.alternative)),a}))}b=l(b,{cache:null,debug:!1,ignore_quoted:!1,only_cache:!1,regex:null,reserved:null});var i=b.reserved;null==i&&(i=aa());var j=b.cache;null==j&&(j={cname:-1,props:new A});var k,m=b.regex,n=b.ignore_quoted,o=!1!==b.debug;o&&(k=!0===b.debug?"":b.debug);var p=[],q=[],r={};return a.walk(new F(function(a){a instanceof kb?e(a.key,n&&a.quote):a instanceof jb?e(a.key.name):a instanceof _a?e(a.property):a instanceof ab&&g(a.property,n)})),a.transform(new W(function(a){a instanceof kb?n&&a.quote||(a.key=f(a.key)):a instanceof jb?a.key.name=f(a.key.name):a instanceof _a?a.property=f(a.property):a instanceof ab&&(n||(a.property=h(a.property)))}))}var ca=a("util"),da=a("source-map"),ea=c;k.prototype=Object.create(Error.prototype),k.prototype.constructor=k,k.prototype.name="DefaultsError",j(k),k.croak=function(a,b){throw new k(a,b)};var fa=function(){function a(a,f,g){function h(){var h=f(a[i],i),l=h instanceof d;return l&&(h=h.v),h instanceof b?(h=h.v,h instanceof c?k.push.apply(k,g?h.v.slice().reverse():h.v):k.push(h)):h!==e&&(h instanceof c?j.push.apply(j,g?h.v.slice().reverse():h.v):j.push(h)),l}var i,j=[],k=[];if(a instanceof Array)if(g){for(i=a.length;--i>=0&&!h(););j.reverse(),k.reverse()}else for(i=0;i<a.length&&!h();++i);else for(i in a)if(B(a,i)&&h())break;return k.concat(j)}function b(a){this.v=a}function c(a){this.v=a}function d(a){this.v=a}a.at_top=function(a){return new b(a)},a.splice=function(a){return new c(a)},a.last=function(a){return new d(a)};var e=a.skip={};return a}();A.prototype={set:function(a,b){return this.has(a)||++this._size,this._values["$"+a]=b,this},add:function(a,b){return this.has(a)?this.get(a).push(b):this.set(a,[b]),this},get:function(a){return this._values["$"+a]},del:function(a){return this.has(a)&&(--this._size,delete this._values["$"+a]),this},has:function(a){return"$"+a in this._values},each:function(a){for(var b in this._values)a(this._values[b],b.substr(1))},size:function(){return this._size},map:function(a){var b=[];for(var c in this._values)b.push(a(this._values[c],c.substr(1)));return b},toObject:function(){return this._values}},A.fromObject=function(a){var b=new A;return b._size=m(b._values,a),b};var ga=D("Token","type value line col pos endline endcol endpos nlb comments_before file raw",{},null),ha=D("Node","start end",{_clone:function(a){if(a){var b=this.clone();return b.transform(new W(function(a){if(a!==b)return a.clone(!0)}))}return new this.CTOR(this)},clone:function(a){return this._clone(a)},$documentation:"Base class of all AST nodes",$propdoc:{start:"[AST_Token] The first token of this node",end:"[AST_Token] The last token of this node"},_walk:function(a){return a._visit(this)},walk:function(a){return this._walk(a)}},null);ha.warn_function=null,ha.warn=function(a,b){ha.warn_function&&ha.warn_function(t(a,b))};var ia=D("Statement",null,{$documentation:"Base class of all statements"}),ja=D("Debugger",null,{$documentation:"Represents a debugger statement"},ia),ka=D("Directive","value scope quote",{$documentation:'Represents a directive, like "use strict";',$propdoc:{value:"[string] The value of this directive as a plain string (it's not an AST_String!)",scope:"[AST_Scope/S] The scope that this directive affects",quote:"[string] the original quote character"}},ia),la=D("SimpleStatement","body",{$documentation:"A statement consisting of an expression, i.e. a = 1 + 2",$propdoc:{body:"[AST_Node] an expression node (should not be instanceof AST_Statement)"},_walk:function(a){return a._visit(this,function(){this.body._walk(a)})}},ia),ma=D("Block","body",{$documentation:"A body of statements (usually bracketed)",$propdoc:{body:"[AST_Statement*] an array of statements"},_walk:function(a){return a._visit(this,function(){E(this,a)})}},ia),na=D("BlockStatement",null,{$documentation:"A block statement"},ma),oa=D("EmptyStatement",null,{$documentation:"The empty statement (empty block or simply a semicolon)",_walk:function(a){return a._visit(this)}},ia),pa=D("StatementWithBody","body",{$documentation:"Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`",$propdoc:{body:"[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement"},_walk:function(a){return a._visit(this,function(){this.body._walk(a)})}},ia),qa=D("LabeledStatement","label",{$documentation:"Statement with a label",$propdoc:{label:"[AST_Label] a label definition"},_walk:function(a){return a._visit(this,function(){this.label._walk(a),this.body._walk(a)})},clone:function(a){var b=this._clone(a);if(a){var c=b.label.references,d=this.label;b.walk(new F(function(a){a instanceof Ia&&a.label&&a.label.thedef===d&&c.push(a)}))}return b}},pa),ra=D("IterationStatement",null,{$documentation:"Internal class.  All loops inherit from it."},pa),sa=D("DWLoop","condition",{$documentation:"Base class for do/while statements",$propdoc:{condition:"[AST_Node] the loop condition.  Should not be instanceof AST_Statement"}},ra),ta=D("Do",null,{$documentation:"A `do` statement",_walk:function(a){return a._visit(this,function(){this.body._walk(a),this.condition._walk(a)})}},sa),ua=D("While",null,{$documentation:"A `while` statement",_walk:function(a){return a._visit(this,function(){this.condition._walk(a),this.body._walk(a)})}},sa),va=D("For","init condition step",{$documentation:"A `for` statement",$propdoc:{init:"[AST_Node?] the `for` initialization code, or null if empty",condition:"[AST_Node?] the `for` termination clause, or null if empty",step:"[AST_Node?] the `for` update clause, or null if empty"},
-_walk:function(a){return a._visit(this,function(){this.init&&this.init._walk(a),this.condition&&this.condition._walk(a),this.step&&this.step._walk(a),this.body._walk(a)})}},ra),wa=D("ForIn","init name object",{$documentation:"A `for ... in` statement",$propdoc:{init:"[AST_Node] the `for/in` initialization code",name:"[AST_SymbolRef?] the loop variable, only if `init` is AST_Var",object:"[AST_Node] the object that we're looping through"},_walk:function(a){return a._visit(this,function(){this.init._walk(a),this.object._walk(a),this.body._walk(a)})}},ra),xa=D("With","expression",{$documentation:"A `with` statement",$propdoc:{expression:"[AST_Node] the `with` expression"},_walk:function(a){return a._visit(this,function(){this.expression._walk(a),this.body._walk(a)})}},pa),ya=D("Scope","directives variables functions uses_with uses_eval parent_scope enclosed cname",{$documentation:"Base class for all statements introducing a lexical scope",$propdoc:{directives:"[string*/S] an array of directives declared in this scope",variables:"[Object/S] a map of name -> SymbolDef for all variables/functions defined in this scope",functions:"[Object/S] like `variables`, but only lists function declarations",uses_with:"[boolean/S] tells whether this scope uses the `with` statement",uses_eval:"[boolean/S] tells whether this scope contains a direct call to the global `eval`",parent_scope:"[AST_Scope?/S] link to the parent scope",enclosed:"[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes",cname:"[integer/S] current index for mangling variables (used internally by the mangler)"}},ma),za=D("Toplevel","globals",{$documentation:"The toplevel scope",$propdoc:{globals:"[Object/S] a map of name -> SymbolDef for all undeclared names"},wrap_enclose:function(a){var b=this,c=[],d=[];a.forEach(function(a){var b=a.lastIndexOf(":");c.push(a.substr(0,b)),d.push(a.substr(b+1))});var e="(function("+d.join(",")+"){ '$ORIG'; })("+c.join(",")+")";return e=V(e),e=e.transform(new W(function(a){if(a instanceof ka&&"$ORIG"==a.value)return fa.splice(b.body)}))},wrap_commonjs:function(a,b){var c=this,d=[];b&&(c.figure_out_scope(),c.walk(new F(function(a){a instanceof pb&&a.definition().global&&(h(function(b){return b.name==a.name},d)||d.push(a))})));var e="(function(exports, global){ '$ORIG'; '$EXPORTS'; global['"+a+"'] = exports; }({}, (function(){return this}())))";return e=V(e),e=e.transform(new W(function(a){if(a instanceof ka)switch(a.value){case"$ORIG":return fa.splice(c.body);case"$EXPORTS":var b=[];return d.forEach(function(a){b.push(new la({body:new gb({left:new ab({expression:new xb({name:"exports"}),property:new Bb({value:a.name})}),operator:"=",right:new xb(a)})}))}),fa.splice(b)}}))}},ya),Aa=D("Lambda","name argnames uses_arguments",{$documentation:"Base class for functions",$propdoc:{name:"[AST_SymbolDeclaration?] the name of this function",argnames:"[AST_SymbolFunarg*] array of function arguments",uses_arguments:"[boolean/S] tells whether this function accesses the arguments array"},_walk:function(a){return a._visit(this,function(){this.name&&this.name._walk(a);for(var b=this.argnames,c=0,d=b.length;c<d;c++)b[c]._walk(a);E(this,a)})}},ya),Ba=D("Accessor",null,{$documentation:"A setter/getter function.  The `name` property is always null."},Aa),Ca=D("Function",null,{$documentation:"A function expression"},Aa),Da=D("Defun",null,{$documentation:"A function definition"},Aa),Ea=D("Jump",null,{$documentation:"Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)"},ia),Fa=D("Exit","value",{$documentation:"Base class for “exits” (`return` and `throw`)",$propdoc:{value:"[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return"},_walk:function(a){return a._visit(this,this.value&&function(){this.value._walk(a)})}},Ea),Ga=D("Return",null,{$documentation:"A `return` statement"},Fa),Ha=D("Throw",null,{$documentation:"A `throw` statement"},Fa),Ia=D("LoopControl","label",{$documentation:"Base class for loop control statements (`break` and `continue`)",$propdoc:{label:"[AST_LabelRef?] the label, or null if none"},_walk:function(a){return a._visit(this,this.label&&function(){this.label._walk(a)})}},Ea),Ja=D("Break",null,{$documentation:"A `break` statement"},Ia),Ka=D("Continue",null,{$documentation:"A `continue` statement"},Ia),La=D("If","condition alternative",{$documentation:"A `if` statement",$propdoc:{condition:"[AST_Node] the `if` condition",alternative:"[AST_Statement?] the `else` part, or null if not present"},_walk:function(a){return a._visit(this,function(){this.condition._walk(a),this.body._walk(a),this.alternative&&this.alternative._walk(a)})}},pa),Ma=D("Switch","expression",{$documentation:"A `switch` statement",$propdoc:{expression:"[AST_Node] the `switch` “discriminant”"},_walk:function(a){return a._visit(this,function(){this.expression._walk(a),E(this,a)})}},ma),Na=D("SwitchBranch",null,{$documentation:"Base class for `switch` branches"},ma),Oa=D("Default",null,{$documentation:"A `default` switch branch"},Na),Pa=D("Case","expression",{$documentation:"A `case` switch branch",$propdoc:{expression:"[AST_Node] the `case` expression"},_walk:function(a){return a._visit(this,function(){this.expression._walk(a),E(this,a)})}},Na),Qa=D("Try","bcatch bfinally",{$documentation:"A `try` statement",$propdoc:{bcatch:"[AST_Catch?] the catch block, or null if not present",bfinally:"[AST_Finally?] the finally block, or null if not present"},_walk:function(a){return a._visit(this,function(){E(this,a),this.bcatch&&this.bcatch._walk(a),this.bfinally&&this.bfinally._walk(a)})}},ma),Ra=D("Catch","argname",{$documentation:"A `catch` node; only makes sense as part of a `try` statement",$propdoc:{argname:"[AST_SymbolCatch] symbol for the exception"},_walk:function(a){return a._visit(this,function(){this.argname._walk(a),E(this,a)})}},ma),Sa=D("Finally",null,{$documentation:"A `finally` node; only makes sense as part of a `try` statement"},ma),Ta=D("Definitions","definitions",{$documentation:"Base class for `var` or `const` nodes (variable declarations/initializations)",$propdoc:{definitions:"[AST_VarDef*] array of variable definitions"},_walk:function(a){return a._visit(this,function(){for(var b=this.definitions,c=0,d=b.length;c<d;c++)b[c]._walk(a)})}},ia),Ua=D("Var",null,{$documentation:"A `var` statement"},Ta),Va=D("Const",null,{$documentation:"A `const` statement"},Ta),Wa=D("VarDef","name value",{$documentation:"A variable declaration; only appears in a AST_Definitions node",$propdoc:{name:"[AST_SymbolVar|AST_SymbolConst] name of the variable",value:"[AST_Node?] initializer, or null of there's no initializer"},_walk:function(a){return a._visit(this,function(){this.name._walk(a),this.value&&this.value._walk(a)})}}),Xa=D("Call","expression args",{$documentation:"A function call expression",$propdoc:{expression:"[AST_Node] expression to invoke as function",args:"[AST_Node*] array of arguments"},_walk:function(a){return a._visit(this,function(){this.expression._walk(a);for(var b=this.args,c=0,d=b.length;c<d;c++)b[c]._walk(a)})}}),Ya=D("New",null,{$documentation:"An object instantiation.  Derives from a function call since it has exactly the same properties"},Xa),Za=D("Seq","car cdr",{$documentation:"A sequence expression (two comma-separated expressions)",$propdoc:{car:"[AST_Node] first element in sequence",cdr:"[AST_Node] second element in sequence"},$cons:function(a,b){var c=new Za(a);return c.car=a,c.cdr=b,c},$from_array:function(a){if(0==a.length)return null;if(1==a.length)return a[0].clone();for(var b=null,c=a.length;--c>=0;)b=Za.cons(a[c],b);for(var d=b;d;){if(d.cdr&&!d.cdr.cdr){d.cdr=d.cdr.car;break}d=d.cdr}return b},to_array:function(){for(var a=this,b=[];a;){if(b.push(a.car),a.cdr&&!(a.cdr instanceof Za)){b.push(a.cdr);break}a=a.cdr}return b},add:function(a){for(var b=this;b;){if(!(b.cdr instanceof Za)){var c=Za.cons(b.cdr,a);return b.cdr=c}b=b.cdr}},len:function(){return this.cdr instanceof Za?this.cdr.len()+1:2},_walk:function(a){return a._visit(this,function(){this.car._walk(a),this.cdr&&this.cdr._walk(a)})}}),$a=D("PropAccess","expression property",{$documentation:'Base class for property access expressions, i.e. `a.foo` or `a["foo"]`',$propdoc:{expression:"[AST_Node] the “container” expression",property:"[AST_Node|string] the property to access.  For AST_Dot this is always a plain string, while for AST_Sub it's an arbitrary AST_Node"}}),_a=D("Dot",null,{$documentation:"A dotted property access expression",_walk:function(a){return a._visit(this,function(){this.expression._walk(a)})}},$a),ab=D("Sub",null,{$documentation:'Index-style property access, i.e. `a["foo"]`',_walk:function(a){return a._visit(this,function(){this.expression._walk(a),this.property._walk(a)})}},$a),bb=D("Unary","operator expression",{$documentation:"Base class for unary expressions",$propdoc:{operator:"[string] the operator",expression:"[AST_Node] expression that this unary operator applies to"},_walk:function(a){return a._visit(this,function(){this.expression._walk(a)})}}),cb=D("UnaryPrefix",null,{$documentation:"Unary prefix expression, i.e. `typeof i` or `++i`"},bb),db=D("UnaryPostfix",null,{$documentation:"Unary postfix expression, i.e. `i++`"},bb),eb=D("Binary","left operator right",{$documentation:"Binary expression, i.e. `a + b`",$propdoc:{left:"[AST_Node] left-hand side expression",operator:"[string] the operator",right:"[AST_Node] right-hand side expression"},_walk:function(a){return a._visit(this,function(){this.left._walk(a),this.right._walk(a)})}}),fb=D("Conditional","condition consequent alternative",{$documentation:"Conditional expression using the ternary operator, i.e. `a ? b : c`",$propdoc:{condition:"[AST_Node]",consequent:"[AST_Node]",alternative:"[AST_Node]"},_walk:function(a){return a._visit(this,function(){this.condition._walk(a),this.consequent._walk(a),this.alternative._walk(a)})}}),gb=D("Assign",null,{$documentation:"An assignment expression — `a = b + 5`"},eb),hb=D("Array","elements",{$documentation:"An array literal",$propdoc:{elements:"[AST_Node*] array of elements"},_walk:function(a){return a._visit(this,function(){for(var b=this.elements,c=0,d=b.length;c<d;c++)b[c]._walk(a)})}}),ib=D("Object","properties",{$documentation:"An object literal",$propdoc:{properties:"[AST_ObjectProperty*] array of properties"},_walk:function(a){return a._visit(this,function(){for(var b=this.properties,c=0,d=b.length;c<d;c++)b[c]._walk(a)})}}),jb=D("ObjectProperty","key value",{$documentation:"Base class for literal object properties",$propdoc:{key:"[string] the property name converted to a string for ObjectKeyVal.  For setters and getters this is an arbitrary AST_Node.",value:"[AST_Node] property value.  For setters and getters this is an AST_Function."},_walk:function(a){return a._visit(this,function(){this.value._walk(a)})}}),kb=D("ObjectKeyVal","quote",{$documentation:"A key: value object property",$propdoc:{quote:"[string] the original quote character"}},jb),lb=D("ObjectSetter",null,{$documentation:"An object setter property"},jb),mb=D("ObjectGetter",null,{$documentation:"An object getter property"},jb),nb=D("Symbol","scope name thedef",{$propdoc:{name:"[string] name of this symbol",scope:"[AST_Scope/S] the current scope (not necessarily the definition scope)",thedef:"[SymbolDef/S] the definition of this symbol"},$documentation:"Base class for all symbols"}),ob=D("SymbolAccessor",null,{$documentation:"The name of a property accessor (setter/getter function)"},nb),pb=D("SymbolDeclaration","init",{$documentation:"A declaration symbol (symbol in var/const, function name or argument, symbol in catch)"},nb),qb=D("SymbolVar",null,{$documentation:"Symbol defining a variable"},pb),rb=D("SymbolConst",null,{$documentation:"A constant declaration"},pb),sb=D("SymbolFunarg",null,{$documentation:"Symbol naming a function argument"},qb),tb=D("SymbolDefun",null,{$documentation:"Symbol defining a function"},pb),ub=D("SymbolLambda",null,{$documentation:"Symbol naming a function expression"},pb),vb=D("SymbolCatch",null,{$documentation:"Symbol naming the exception in catch"},pb),wb=D("Label","references",{$documentation:"Symbol naming a label (declaration)",$propdoc:{references:"[AST_LoopControl*] a list of nodes referring to this label"},initialize:function(){this.references=[],this.thedef=this}},nb),xb=D("SymbolRef",null,{$documentation:"Reference to some symbol (not definition/declaration)"},nb),yb=D("LabelRef",null,{$documentation:"Reference to a label symbol"},nb),zb=D("This",null,{$documentation:"The `this` symbol"},nb),Ab=D("Constant",null,{$documentation:"Base class for all constants",getValue:function(){return this.value}}),Bb=D("String","value quote",{$documentation:"A string literal",$propdoc:{value:"[string] the contents of this string",quote:"[string] the original quote character"}},Ab),Cb=D("Number","value literal",{$documentation:"A number literal",$propdoc:{value:"[number] the numeric value",literal:"[string] numeric value as string (optional)"}},Ab),Db=D("RegExp","value",{$documentation:"A regexp literal",$propdoc:{value:"[RegExp] the actual regexp"}},Ab),Eb=D("Atom",null,{$documentation:"Base class for atoms"},Ab),Fb=D("Null",null,{$documentation:"The `null` atom",value:null},Eb),Gb=D("NaN",null,{$documentation:"The impossible value",value:NaN},Eb),Hb=D("Undefined",null,{$documentation:"The `undefined` value",value:void 0},Eb),Ib=D("Hole",null,{$documentation:"A hole in an array",value:void 0},Eb),Jb=D("Infinity",null,{$documentation:"The `Infinity` value",value:1/0},Eb),Kb=D("Boolean",null,{$documentation:"Base class for booleans"},Eb),Lb=D("False",null,{$documentation:"The `false` atom",value:!1},Kb),Mb=D("True",null,{$documentation:"The `true` atom",value:!0},Kb);F.prototype={_visit:function(a,b){this.push(a);var c=this.visit(a,b?function(){b.call(a)}:n);return!c&&b&&b.call(a),this.pop(a),c},parent:function(a){return this.stack[this.stack.length-2-(a||0)]},push:function(a){a instanceof Aa?this.directives=Object.create(this.directives):a instanceof ka&&!this.directives[a.value]&&(this.directives[a.value]=a),this.stack.push(a)},pop:function(a){this.stack.pop(),a instanceof Aa&&(this.directives=Object.getPrototypeOf(this.directives))},self:function(){return this.stack[this.stack.length-1]},find_parent:function(a){for(var b=this.stack,c=b.length;--c>=0;){var d=b[c];if(d instanceof a)return d}},has_directive:function(a){var b=this.directives[a];if(b)return b;var c=this.stack[this.stack.length-1];if(c instanceof ya)for(var d=0;d<c.body.length;++d){var e=c.body[d];if(!(e instanceof ka))break;if(e.value==a)return e}},in_boolean_context:function(){for(var a=this.stack,b=a.length,c=a[--b];b>0;){var d=a[--b];if(d instanceof La&&d.condition===c||d instanceof fb&&d.condition===c||d instanceof sa&&d.condition===c||d instanceof va&&d.condition===c||d instanceof cb&&"!"==d.operator&&d.expression===c)return!0;if(!(d instanceof eb)||"&&"!=d.operator&&"||"!=d.operator)return!1;c=d}},loopcontrol_target:function(a){var b=this.stack;if(a.label)for(var c=b.length;--c>=0;){var d=b[c];if(d instanceof qa&&d.label.name==a.label.name)return d.body}else for(var c=b.length;--c>=0;){var d=b[c];if(d instanceof ra||a instanceof Ja&&d instanceof Ma)return d}}};var Nb="break case catch const continue debugger default delete do else finally for function if in instanceof new return switch throw try typeof var void while with",Ob="false null true",Pb="abstract boolean byte char class double enum export extends final float goto implements import int interface let long native package private protected public short static super synchronized this throws transient volatile yield "+Ob+" "+Nb,Qb="return new delete throw else case";Nb=y(Nb),Pb=y(Pb),Qb=y(Qb),Ob=y(Ob);var Rb=y(f("+-*&%=<>!?|~^")),Sb=/^0x[0-9a-f]+$/i,Tb=/^0[0-7]+$/,Ub=y(["in","instanceof","typeof","new","void","delete","++","--","+","-","!","~","&","|","^","*","/","%",">>","<<",">>>","<",">","<=",">=","==","===","!=","!==","?","=","+=","-=","/=","*=","%=",">>=","<<=",">>>=","|=","^=","&=","&&","||"]),Vb=y(f("  \n\r\t\f\v​           \u2028\u2029   \ufeff")),Wb=y(f("\n\r\u2028\u2029")),Xb=y(f("[{(,.;:")),Yb=y(f("[]{}(),;:")),Zb=y(f("gmsiy")),$b={letter:new RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),digit:new RegExp("[\\u0030-\\u0039\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]"),non_spacing_mark:new RegExp("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]"),space_combining_mark:new RegExp("[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]"),connector_punctuation:new RegExp("[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]")};R.prototype=Object.create(Error.prototype),R.prototype.constructor=R,R.prototype.name="SyntaxError",j(R);var _b={},ac=y(["typeof","void","delete","--","++","!","~","-","+"]),bc=y(["--","++"]),cc=y(["=","+=","-=","/=","*=","%=",">>=","<<=",">>>=","|=","^=","&="]),dc=function(a,b){for(var c=0;c<a.length;++c)for(var d=a[c],e=0;e<d.length;++e)b[d[e]]=c+1;return b}([["||"],["&&"],["|"],["^"],["&"],["==","===","!=","!=="],["<",">","<=",">=","in","instanceof"],[">>","<<",">>>"],["+","-"],["*","/","%"]],{}),ec=d(["for","do","while","switch"]),fc=d(["atom","num","string","regexp","name"]);W.prototype=new F,function(a){function b(b,c){b.DEFMETHOD("transform",function(b,d){var e,f;return b.push(this),b.before&&(e=b.before(this,c,d)),e===a&&(b.after?(b.stack[b.stack.length-1]=e=this,c(e,b),(f=b.after(e,d))!==a&&(e=f)):(e=this,c(e,b))),b.pop(this),e})}function c(a,b){return fa(a,function(a){return a.transform(b,!0)})}b(ha,n),b(qa,function(a,b){a.label=a.label.transform(b),a.body=a.body.transform(b)}),b(la,function(a,b){a.body=a.body.transform(b)}),b(ma,function(a,b){a.body=c(a.body,b)}),b(sa,function(a,b){a.condition=a.condition.transform(b),a.body=a.body.transform(b)}),b(va,function(a,b){a.init&&(a.init=a.init.transform(b)),a.condition&&(a.condition=a.condition.transform(b)),a.step&&(a.step=a.step.transform(b)),a.body=a.body.transform(b)}),b(wa,function(a,b){a.init=a.init.transform(b),a.object=a.object.transform(b),a.body=a.body.transform(b)}),b(xa,function(a,b){a.expression=a.expression.transform(b),a.body=a.body.transform(b)}),b(Fa,function(a,b){a.value&&(a.value=a.value.transform(b))}),b(Ia,function(a,b){a.label&&(a.label=a.label.transform(b))}),b(La,function(a,b){a.condition=a.condition.transform(b),a.body=a.body.transform(b),a.alternative&&(a.alternative=a.alternative.transform(b))}),b(Ma,function(a,b){a.expression=a.expression.transform(b),a.body=c(a.body,b)}),b(Pa,function(a,b){a.expression=a.expression.transform(b),a.body=c(a.body,b)}),b(Qa,function(a,b){a.body=c(a.body,b),a.bcatch&&(a.bcatch=a.bcatch.transform(b)),a.bfinally&&(a.bfinally=a.bfinally.transform(b))}),b(Ra,function(a,b){a.argname=a.argname.transform(b),a.body=c(a.body,b)}),b(Ta,function(a,b){a.definitions=c(a.definitions,b)}),b(Wa,function(a,b){a.name=a.name.transform(b),a.value&&(a.value=a.value.transform(b))}),b(Aa,function(a,b){a.name&&(a.name=a.name.transform(b)),a.argnames=c(a.argnames,b),a.body=c(a.body,b)}),b(Xa,function(a,b){a.expression=a.expression.transform(b),a.args=c(a.args,b)}),b(Za,function(a,b){a.car=a.car.transform(b),a.cdr=a.cdr.transform(b)}),b(_a,function(a,b){a.expression=a.expression.transform(b)}),b(ab,function(a,b){a.expression=a.expression.transform(b),a.property=a.property.transform(b)}),b(bb,function(a,b){a.expression=a.expression.transform(b)}),b(eb,function(a,b){a.left=a.left.transform(b),a.right=a.right.transform(b)}),b(fb,function(a,b){a.condition=a.condition.transform(b),a.consequent=a.consequent.transform(b),a.alternative=a.alternative.transform(b)}),b(hb,function(a,b){a.elements=c(a.elements,b)}),b(ib,function(a,b){a.properties=c(a.properties,b)}),b(jb,function(a,b){a.value=a.value.transform(b)})}(),X.next_id=1,X.prototype={unmangleable:function(a){return a||(a={}),this.global&&!a.toplevel||this.undeclared||!a.eval&&(this.scope.uses_eval||this.scope.uses_with)||a.keep_fnames&&(this.orig[0]instanceof ub||this.orig[0]instanceof tb)},mangle:function(a){var b=a.cache&&a.cache.props;if(this.global&&b&&b.has(this.name))this.mangled_name=b.get(this.name);else if(!this.mangled_name&&!this.unmangleable(a)){var c=this.scope,d=this.orig[0];!a.screw_ie8&&d instanceof ub&&(c=c.parent_scope);var e;this.defun&&(e=this.defun.variables.get(this.name))?this.mangled_name=e.mangled_name||e.name:this.mangled_name=c.next_mangled(a,this),this.global&&b&&b.set(this.name,this.mangled_name)}}},za.DEFMETHOD("figure_out_scope",function(a){a=l(a,{cache:null,screw_ie8:!0});var b=this,c=b.parent_scope=null,d=new A,e=null,f=new F(function(b,f){if(b instanceof Ra){var g=c;return c=new ya(b),c.init_scope_vars(g),f(),c=g,!0}if(b instanceof ya){b.init_scope_vars(c);var g=c,h=e,i=d;return e=c=b,d=new A,f(),c=g,e=h,d=i,!0}if(b instanceof qa){var j=b.label;if(d.has(j.name))throw new Error(t("Label {name} defined twice",j));return d.set(j.name,j),f(),d.del(j.name),!0}if(b instanceof xa)for(var k=c;k;k=k.parent_scope)k.uses_with=!0;else if(b instanceof nb&&(b.scope=c),b instanceof wb&&(b.thedef=b,b.references=[]),b instanceof ub)e.def_function(b);else if(b instanceof tb)(b.scope=e.parent_scope).def_function(b);else if(b instanceof qb||b instanceof rb){if(e.def_variable(b),e!==c){b.mark_enclosed(a);var l=c.find_variable(b);b.thedef!==l&&(b.thedef=l,b.reference(a))}}else if(b instanceof vb)c.def_variable(b).defun=e;else if(b instanceof yb){var m=d.get(b.name);if(!m)throw new Error(t("Undefined label {name} [{line},{col}]",{name:b.name,line:b.start.line,col:b.start.col}));b.thedef=m}});b.walk(f);var g=null,f=(b.globals=new A,new F(function(c,d){if(c instanceof Aa){var e=g;return g=c,d(),g=e,!0}if(c instanceof Ia&&c.label)return c.label.thedef.references.push(c),!0;if(c instanceof xb){var h=c.name;if("eval"==h&&f.parent()instanceof Xa)for(var i=c.scope;i&&!i.uses_eval;i=i.parent_scope)i.uses_eval=!0;var j=c.scope.find_variable(h);return c.scope instanceof Aa&&"arguments"==h&&(c.scope.uses_arguments=!0),j||(j=b.def_global(c)),c.thedef=j,c.reference(a),!0}}));b.walk(f),a.screw_ie8||b.walk(new F(function(c,d){if(c instanceof vb){var e=c.name,f=c.thedef.references,g=c.thedef.defun,h=g.find_variable(e)||b.globals.get(e)||g.def_variable(c);return f.forEach(function(b){b.thedef=h,b.reference(a)}),c.thedef=h,!0}})),a.cache&&(this.cname=a.cache.cname)}),za.DEFMETHOD("def_global",function(a){var b=this.globals,c=a.name;if(b.has(c))return b.get(c);var d=new X(this,b.size(),a);return d.undeclared=!0,d.global=!0,b.set(c,d),d}),ya.DEFMETHOD("init_scope_vars",function(a){this.variables=new A,this.functions=new A,this.uses_with=!1,this.uses_eval=!1,this.parent_scope=a,this.enclosed=[],this.cname=-1}),Aa.DEFMETHOD("init_scope_vars",function(){ya.prototype.init_scope_vars.apply(this,arguments),this.uses_arguments=!1,this.def_variable(new qb({name:"arguments",start:this.start,end:this.end}))}),nb.DEFMETHOD("mark_enclosed",function(a){for(var b=this.definition(),c=this.scope;c&&(s(c.enclosed,b),a.keep_fnames&&c.functions.each(function(a){s(b.scope.enclosed,a)}),c!==b.scope);)c=c.parent_scope}),nb.DEFMETHOD("reference",function(a){this.definition().references.push(this),this.mark_enclosed(a)}),ya.DEFMETHOD("find_variable",function(a){return a instanceof nb&&(a=a.name),this.variables.get(a)||this.parent_scope&&this.parent_scope.find_variable(a)}),
-ya.DEFMETHOD("def_function",function(a){this.functions.set(a.name,this.def_variable(a))}),ya.DEFMETHOD("def_variable",function(a){var b;return this.variables.has(a.name)?(b=this.variables.get(a.name),b.orig.push(a)):(b=new X(this,this.variables.size(),a),this.variables.set(a.name,b),b.global=!this.parent_scope),a.thedef=b}),ya.DEFMETHOD("next_mangled",function(a){var b=this.enclosed;a:for(;;){var c=gc(++this.cname);if(M(c)&&!(a.except.indexOf(c)>=0)){for(var d=b.length;--d>=0;){var e=b[d],f=e.mangled_name||e.unmangleable(a)&&e.name;if(c==f)continue a}return c}}}),Ca.DEFMETHOD("next_mangled",function(a,b){for(var c=b.orig[0]instanceof sb&&this.name&&this.name.definition(),d=c?c.mangled_name||c.name:null;;){var e=Aa.prototype.next_mangled.call(this,a,b);if(!d||d!=e)return e}}),nb.DEFMETHOD("unmangleable",function(a){return this.definition().unmangleable(a)}),ob.DEFMETHOD("unmangleable",function(){return!0}),wb.DEFMETHOD("unmangleable",function(){return!1}),nb.DEFMETHOD("unreferenced",function(){return 0==this.definition().references.length&&!(this.scope.uses_eval||this.scope.uses_with)}),nb.DEFMETHOD("undeclared",function(){return this.definition().undeclared}),yb.DEFMETHOD("undeclared",function(){return!1}),wb.DEFMETHOD("undeclared",function(){return!1}),nb.DEFMETHOD("definition",function(){return this.thedef}),nb.DEFMETHOD("global",function(){return this.definition().global}),za.DEFMETHOD("_default_mangler_options",function(a){return l(a,{eval:!1,except:[],keep_fnames:!1,screw_ie8:!0,sort:!1,toplevel:!1})}),za.DEFMETHOD("mangle_names",function(a){a=this._default_mangler_options(a),a.except.push("arguments");var b=-1,c=[];a.cache&&this.globals.each(function(b){a.except.indexOf(b.name)<0&&c.push(b)});var d=new F(function(e,f){if(e instanceof qa){var g=b;return f(),b=g,!0}if(e instanceof ya){var h=(d.parent(),[]);return e.variables.each(function(b){a.except.indexOf(b.name)<0&&h.push(b)}),void c.push.apply(c,h)}if(e instanceof wb){var i;do{i=gc(++b)}while(!M(i));return e.mangled_name=i,!0}if(a.screw_ie8&&e instanceof vb)return void c.push(e.definition())});this.walk(d),c.forEach(function(b){b.mangle(a)}),a.cache&&(a.cache.cname=this.cname)}),za.DEFMETHOD("compute_char_frequency",function(a){a=this._default_mangler_options(a);var b=new F(function(b){b instanceof Ab?gc.consider(b.print_to_string()):b instanceof Ga?gc.consider("return"):b instanceof Ha?gc.consider("throw"):b instanceof Ka?gc.consider("continue"):b instanceof Ja?gc.consider("break"):b instanceof ja?gc.consider("debugger"):b instanceof ka?gc.consider(b.value):b instanceof ua?gc.consider("while"):b instanceof ta?gc.consider("do while"):b instanceof La?(gc.consider("if"),b.alternative&&gc.consider("else")):b instanceof Ua?gc.consider("var"):b instanceof Va?gc.consider("const"):b instanceof Aa?gc.consider("function"):b instanceof va?gc.consider("for"):b instanceof wa?gc.consider("for in"):b instanceof Ma?gc.consider("switch"):b instanceof Pa?gc.consider("case"):b instanceof Oa?gc.consider("default"):b instanceof xa?gc.consider("with"):b instanceof lb?gc.consider("set"+b.key):b instanceof mb?gc.consider("get"+b.key):b instanceof kb?gc.consider(b.key):b instanceof Ya?gc.consider("new"):b instanceof zb?gc.consider("this"):b instanceof Qa?gc.consider("try"):b instanceof Ra?gc.consider("catch"):b instanceof Sa?gc.consider("finally"):b instanceof nb&&b.unmangleable(a)?gc.consider(b.name):b instanceof bb||b instanceof eb?gc.consider(b.operator):b instanceof _a&&gc.consider(b.property)});this.walk(b),gc.sort()});var gc=function(){function a(){d=Object.create(null),c=e.split("").map(function(a){return a.charCodeAt(0)}),c.forEach(function(a){d[a]=0})}function b(a){var b="",d=54;a++;do{a--,b+=String.fromCharCode(c[a%d]),a=Math.floor(a/d),d=64}while(a>0);return b}var c,d,e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789";return b.consider=function(a){for(var b=a.length;--b>=0;){var c=a.charCodeAt(b);c in d&&++d[c]}},b.sort=function(){c=v(c,function(a,b){return H(a)&&!H(b)?1:H(b)&&!H(a)?-1:d[b]-d[a]})},b.reset=a,a(),b.get=function(){return c},b.freq=function(){return d},b}();za.DEFMETHOD("scope_warnings",function(a){a=l(a,{assign_to_global:!0,eval:!0,func_arguments:!0,nested_defuns:!0,undeclared:!1,unreferenced:!0});var b=new F(function(c){if(a.undeclared&&c instanceof xb&&c.undeclared()&&ha.warn("Undeclared symbol: {name} [{file}:{line},{col}]",{name:c.name,file:c.start.file,line:c.start.line,col:c.start.col}),a.assign_to_global){var d=null;c instanceof gb&&c.left instanceof xb?d=c.left:c instanceof wa&&c.init instanceof xb&&(d=c.init),d&&(d.undeclared()||d.global()&&d.scope!==d.definition().scope)&&ha.warn("{msg}: {name} [{file}:{line},{col}]",{msg:d.undeclared()?"Accidental global?":"Assignment to global",name:d.name,file:d.start.file,line:d.start.line,col:d.start.col})}a.eval&&c instanceof xb&&c.undeclared()&&"eval"==c.name&&ha.warn("Eval is used [{file}:{line},{col}]",c.start),a.unreferenced&&(c instanceof pb||c instanceof wb)&&!(c instanceof vb)&&c.unreferenced()&&ha.warn("{type} {name} is declared but not referenced [{file}:{line},{col}]",{type:c instanceof wb?"Label":"Symbol",name:c.name,file:c.start.file,line:c.start.line,col:c.start.col}),a.func_arguments&&c instanceof Aa&&c.uses_arguments&&ha.warn("arguments used in function {name} [{file}:{line},{col}]",{name:c.name?c.name.name:"anonymous",file:c.start.file,line:c.start.line,col:c.start.col}),a.nested_defuns&&c instanceof Da&&!(b.parent()instanceof ya)&&ha.warn('Function {name} declared in nested statement "{type}" [{file}:{line},{col}]',{name:c.name.name,type:b.parent().TYPE,file:c.start.file,line:c.start.line,col:c.start.col})});this.walk(b)});var hc=/^$|[;{][\s\n]*$/;!function(){function a(a,b){a.DEFMETHOD("_codegen",b)}function b(a,c){Array.isArray(a)?a.forEach(function(a){b(a,c)}):a.DEFMETHOD("needs_parens",c)}function c(a,b,c,d){var e=a.length-1;q=d,a.forEach(function(a,d){!0!==q||a instanceof ka||a instanceof oa||a instanceof la&&a.body instanceof Bb||(q=!1),a instanceof oa||(c.indent(),a.print(c),d==e&&b||(c.newline(),b&&c.newline())),!0===q&&a instanceof la&&a.body instanceof Bb&&(q=!1)}),q=!1}function d(a,b,d){a.length>0?b.with_block(function(){c(a,!1,b,d)}):b.print("{}")}function e(a,b){var c=a.body;if(b.option("bracketize")||!b.option("screw_ie8")&&c instanceof ta)return l(c,b);if(!c)return b.force_semicolon();for(;;)if(c instanceof La){if(!c.alternative)return void l(a.body,b);c=c.alternative}else{if(!(c instanceof pa))break;c=c.body}h(a.body,b)}function f(a,b,c){if(c)try{a.walk(new F(function(a){if(a instanceof eb&&"in"==a.operator)throw b})),a.print(b)}catch(c){if(c!==b)throw c;a.print(b,!0)}else a.print(b)}function g(a){return[92,47,46,43,42,63,40,41,91,93,123,125,36,94,58,124,33,10,13,0,65279,8232,8233].indexOf(a)<0}function h(a,b){b.option("bracketize")?l(a,b):!a||a instanceof oa?b.force_semicolon():a.print(b)}function i(a,b){return a.args.length>0||b.option("beautify")}function j(a){for(var b=a[0],c=b.length,d=1;d<a.length;++d)a[d].length<c&&(b=a[d],c=b.length);return b}function k(a){var b,c=a.toString(10),d=[c.replace(/^0\./,".").replace("e+","e")];return Math.floor(a)===a?(a>=0?d.push("0x"+a.toString(16).toLowerCase(),"0"+a.toString(8)):d.push("-0x"+(-a).toString(16).toLowerCase(),"-0"+(-a).toString(8)),(b=/^(.*?)(0+)$/.exec(a))&&d.push(b[1]+"e"+b[2].length)):(b=/^0?\.(0+)(.*)$/.exec(a))&&d.push(b[2]+"e-"+(b[1].length+b[2].length),c.substr(c.indexOf("."))),j(d)}function l(a,b){!a||a instanceof oa?b.print("{}"):a instanceof na?a.print(b):b.with_block(function(){b.indent(),a.print(b),b.newline()})}function m(a,b){a.DEFMETHOD("add_source_map",function(a){b(this,a)})}function o(a,b){b.add_mapping(a.start)}var p=!1,q=!1;ha.DEFMETHOD("print",function(a,b){function c(){d.add_comments(a),d.add_source_map(a),e(d,a)}var d=this,e=d._codegen,f=p;d instanceof ka&&"use asm"==d.value&&a.parent()instanceof ya&&(p=!0),a.push_node(d),b||d.needs_parens(a)?a.with_parens(c):c(),a.pop_node(),d instanceof ya&&(p=f)}),ha.DEFMETHOD("print_to_string",function(a){var b=Z(a);return a||(b._readonly=!0),this.print(b),b.get()}),ha.DEFMETHOD("add_comments",function(a){if(!a._readonly){var b=this,c=b.start;if(c&&!c._comments_dumped){c._comments_dumped=!0;var d=c.comments_before||[];if(b instanceof Fa&&b.value&&b.value.walk(new F(function(a){if(a.start&&a.start.comments_before&&(d=d.concat(a.start.comments_before),a.start.comments_before=[]),a instanceof Ca||a instanceof hb||a instanceof ib)return!0})),0==a.pos()){d.length>0&&a.option("shebang")&&"comment5"==d[0].type&&(a.print("#!"+d.shift().value+"\n"),a.indent());var e=a.option("preamble");e&&a.print(e.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g,"\n"))}d=d.filter(a.comment_filter,b),!a.option("beautify")&&d.length>0&&/comment[134]/.test(d[0].type)&&0!==a.col()&&d[0].nlb&&a.print("\n"),d.forEach(function(b){/comment[134]/.test(b.type)?(a.print("//"+b.value+"\n"),a.indent()):"comment2"==b.type&&(a.print("/*"+b.value+"*/"),c.nlb?(a.print("\n"),a.indent()):a.space())})}}}),b(ha,function(){return!1}),b(Ca,function(a){if(C(a))return!0;if(a.option("wrap_iife")){var b=a.parent();return b instanceof Xa&&b.expression===this}return!1}),b(ib,function(a){return C(a)}),b(bb,function(a){var b=a.parent();return b instanceof $a&&b.expression===this||b instanceof Xa&&b.expression===this}),b(Za,function(a){var b=a.parent();return b instanceof Xa||b instanceof bb||b instanceof eb||b instanceof Wa||b instanceof $a||b instanceof hb||b instanceof jb||b instanceof fb}),b(eb,function(a){var b=a.parent();if(b instanceof Xa&&b.expression===this)return!0;if(b instanceof bb)return!0;if(b instanceof $a&&b.expression===this)return!0;if(b instanceof eb){var c=b.operator,d=dc[c],e=this.operator,f=dc[e];if(d>f||d==f&&this===b.right)return!0}}),b($a,function(a){var b=a.parent();if(b instanceof Ya&&b.expression===this)try{this.walk(new F(function(a){if(a instanceof Xa)throw b}))}catch(a){if(a!==b)throw a;return!0}}),b(Xa,function(a){var b,c=a.parent();return c instanceof Ya&&c.expression===this||this.expression instanceof Ca&&c instanceof $a&&c.expression===this&&(b=a.parent(1))instanceof gb&&b.left===c}),b(Ya,function(a){var b=a.parent();if(!i(this,a)&&(b instanceof $a||b instanceof Xa&&b.expression===this))return!0}),b(Cb,function(a){var b=a.parent();if(b instanceof $a&&b.expression===this){var c=this.getValue();if(c<0||/^0/.test(k(c)))return!0}}),b([gb,fb],function(a){var b=a.parent();return b instanceof bb||(b instanceof eb&&!(b instanceof gb)||(b instanceof Xa&&b.expression===this||(b instanceof fb&&b.condition===this||(b instanceof $a&&b.expression===this||void 0))))}),a(ka,function(a,b){b.print_string(a.value,a.quote),b.semicolon()}),a(ja,function(a,b){b.print("debugger"),b.semicolon()}),pa.DEFMETHOD("_do_print_body",function(a){h(this.body,a)}),a(ia,function(a,b){a.body.print(b),b.semicolon()}),a(za,function(a,b){c(a.body,!0,b,!0),b.print("")}),a(qa,function(a,b){a.label.print(b),b.colon(),a.body.print(b)}),a(la,function(a,b){a.body.print(b),b.semicolon()}),a(na,function(a,b){d(a.body,b)}),a(oa,function(a,b){b.semicolon()}),a(ta,function(a,b){b.print("do"),b.space(),l(a.body,b),b.space(),b.print("while"),b.space(),b.with_parens(function(){a.condition.print(b)}),b.semicolon()}),a(ua,function(a,b){b.print("while"),b.space(),b.with_parens(function(){a.condition.print(b)}),b.space(),a._do_print_body(b)}),a(va,function(a,b){b.print("for"),b.space(),b.with_parens(function(){a.init?(a.init instanceof Ta?a.init.print(b):f(a.init,b,!0),b.print(";"),b.space()):b.print(";"),a.condition?(a.condition.print(b),b.print(";"),b.space()):b.print(";"),a.step&&a.step.print(b)}),b.space(),a._do_print_body(b)}),a(wa,function(a,b){b.print("for"),b.space(),b.with_parens(function(){a.init.print(b),b.space(),b.print("in"),b.space(),a.object.print(b)}),b.space(),a._do_print_body(b)}),a(xa,function(a,b){b.print("with"),b.space(),b.with_parens(function(){a.expression.print(b)}),b.space(),a._do_print_body(b)}),Aa.DEFMETHOD("_do_print",function(a,b){var c=this;b||a.print("function"),c.name&&(a.space(),c.name.print(a)),a.with_parens(function(){c.argnames.forEach(function(b,c){c&&a.comma(),b.print(a)})}),a.space(),d(c.body,a,!0)}),a(Aa,function(a,b){a._do_print(b)}),Fa.DEFMETHOD("_do_print",function(a,b){a.print(b),this.value&&(a.space(),this.value.print(a)),a.semicolon()}),a(Ga,function(a,b){a._do_print(b,"return")}),a(Ha,function(a,b){a._do_print(b,"throw")}),Ia.DEFMETHOD("_do_print",function(a,b){a.print(b),this.label&&(a.space(),this.label.print(a)),a.semicolon()}),a(Ja,function(a,b){a._do_print(b,"break")}),a(Ka,function(a,b){a._do_print(b,"continue")}),a(La,function(a,b){b.print("if"),b.space(),b.with_parens(function(){a.condition.print(b)}),b.space(),a.alternative?(e(a,b),b.space(),b.print("else"),b.space(),a.alternative instanceof La?a.alternative.print(b):h(a.alternative,b)):a._do_print_body(b)}),a(Ma,function(a,b){b.print("switch"),b.space(),b.with_parens(function(){a.expression.print(b)}),b.space();var c=a.body.length-1;c<0?b.print("{}"):b.with_block(function(){a.body.forEach(function(a,d){b.indent(!0),a.print(b),d<c&&a.body.length>0&&b.newline()})})}),Na.DEFMETHOD("_do_print_body",function(a){a.newline(),this.body.forEach(function(b){a.indent(),b.print(a),a.newline()})}),a(Oa,function(a,b){b.print("default:"),a._do_print_body(b)}),a(Pa,function(a,b){b.print("case"),b.space(),a.expression.print(b),b.print(":"),a._do_print_body(b)}),a(Qa,function(a,b){b.print("try"),b.space(),d(a.body,b),a.bcatch&&(b.space(),a.bcatch.print(b)),a.bfinally&&(b.space(),a.bfinally.print(b))}),a(Ra,function(a,b){b.print("catch"),b.space(),b.with_parens(function(){a.argname.print(b)}),b.space(),d(a.body,b)}),a(Sa,function(a,b){b.print("finally"),b.space(),d(a.body,b)}),Ta.DEFMETHOD("_do_print",function(a,b){a.print(b),a.space(),this.definitions.forEach(function(b,c){c&&a.comma(),b.print(a)});var c=a.parent();(c instanceof va||c instanceof wa)&&c.init===this||a.semicolon()}),a(Ua,function(a,b){a._do_print(b,"var")}),a(Va,function(a,b){a._do_print(b,"const")}),a(Wa,function(a,b){if(a.name.print(b),a.value){b.space(),b.print("="),b.space();var c=b.parent(1),d=c instanceof va||c instanceof wa;f(a.value,b,d)}}),a(Xa,function(a,b){a.expression.print(b),a instanceof Ya&&!i(a,b)||b.with_parens(function(){a.args.forEach(function(a,c){c&&b.comma(),a.print(b)})})}),a(Ya,function(a,b){b.print("new"),b.space(),Xa.prototype._codegen(a,b)}),Za.DEFMETHOD("_do_print",function(a){this.car.print(a),this.cdr&&(a.comma(),a.should_break()&&(a.newline(),a.indent()),this.cdr.print(a))}),a(Za,function(a,b){a._do_print(b)}),a(_a,function(a,b){var c=a.expression;c.print(b),c instanceof Cb&&c.getValue()>=0&&(/[xa-f.)]/i.test(b.last())||b.print(".")),b.print("."),b.add_mapping(a.end),b.print_name(a.property)}),a(ab,function(a,b){a.expression.print(b),b.print("["),a.property.print(b),b.print("]")}),a(cb,function(a,b){var c=a.operator;b.print(c),(/^[a-z]/i.test(c)||/[+-]$/.test(c)&&a.expression instanceof cb&&/^[+-]/.test(a.expression.operator))&&b.space(),a.expression.print(b)}),a(db,function(a,b){a.expression.print(b),b.print(a.operator)}),a(eb,function(a,b){var c=a.operator;a.left.print(b),">"==c[0]&&a.left instanceof db&&"--"==a.left.operator?b.print(" "):b.space(),b.print(c),("<"==c||"<<"==c)&&a.right instanceof cb&&"!"==a.right.operator&&a.right.expression instanceof cb&&"--"==a.right.expression.operator?b.print(" "):b.space(),a.right.print(b)}),a(fb,function(a,b){a.condition.print(b),b.space(),b.print("?"),b.space(),a.consequent.print(b),b.space(),b.colon(),a.alternative.print(b)}),a(hb,function(a,b){b.with_square(function(){var c=a.elements,d=c.length;d>0&&b.space(),c.forEach(function(a,c){c&&b.comma(),a.print(b),c===d-1&&a instanceof Ib&&b.comma()}),d>0&&b.space()})}),a(ib,function(a,b){a.properties.length>0?b.with_block(function(){a.properties.forEach(function(a,c){c&&(b.print(","),b.newline()),b.indent(),a.print(b)}),b.newline()}):b.print("{}")}),a(kb,function(a,b){var c=a.key,d=a.quote;b.option("quote_keys")?b.print_string(c+""):("number"==typeof c||!b.option("beautify")&&+c+""==c)&&parseFloat(c)>=0?b.print(k(c)):(Pb(c)?b.option("screw_ie8"):P(c))?d&&b.option("keep_quoted_props")?b.print_string(c,d):b.print_name(c):b.print_string(c,d),b.colon(),a.value.print(b)}),a(lb,function(a,b){b.print("set"),b.space(),a.key.print(b),a.value._do_print(b,!0)}),a(mb,function(a,b){b.print("get"),b.space(),a.key.print(b),a.value._do_print(b,!0)}),a(nb,function(a,b){var c=a.definition();b.print_name(c?c.mangled_name||c.name:a.name)}),a(Ib,n),a(zb,function(a,b){b.print("this")}),a(Ab,function(a,b){b.print(a.getValue())}),a(Bb,function(a,b){b.print_string(a.getValue(),a.quote,q)}),a(Cb,function(a,b){p&&a.start&&null!=a.start.raw?b.print(a.start.raw):b.print(k(a.getValue()))}),a(Db,function(a,b){var c=a.getValue().toString();b.option("ascii_only")?c=b.to_ascii(c):b.option("unescape_regexps")&&(c=c.split("\\\\").map(function(a){return a.replace(/\\u[0-9a-fA-F]{4}|\\x[0-9a-fA-F]{2}/g,function(a){var b=parseInt(a.substr(2),16);return g(b)?String.fromCharCode(b):a})}).join("\\\\")),b.print(c);var d=b.parent();d instanceof eb&&/^in/.test(d.operator)&&d.left===a&&b.print(" ")}),m(ha,n),m(ka,o),m(ja,o),m(nb,o),m(Ea,o),m(pa,o),m(qa,n),m(Aa,o),m(Ma,o),m(Na,o),m(na,o),m(za,n),m(Ya,o),m(Qa,o),m(Ra,o),m(Sa,o),m(Ta,o),m(Ab,o),m(lb,function(a,b){b.add_mapping(a.start,a.key.name)}),m(mb,function(a,b){b.add_mapping(a.start,a.key.name)}),m(jb,function(a,b){b.add_mapping(a.start,a.key)})}(),$.prototype=new W,m($.prototype,{option:function(a){return this.options[a]},compress:function(a){this.option("expression")&&(a=a.process_expression(!0));for(var b=+this.options.passes||1,c=0;c<b&&c<3;++c)(c>0||this.option("reduce_vars"))&&a.reset_opt_flags(this,!0),a=a.transform(this);return this.option("expression")&&(a=a.process_expression(!1)),a},info:function(){"verbose"==this.options.warnings&&ha.warn.apply(ha,arguments)},warn:function(a,b){if(this.options.warnings){var c=t(a,b);c in this.warnings_produced||(this.warnings_produced[c]=!0,ha.warn.apply(ha,arguments))}},clear_warnings:function(){this.warnings_produced={}},before:function(a,b,c){if(a._squeezed)return a;var d=!1;a instanceof ya&&(a=a.hoist_declarations(this),d=!0),b(a,this),b(a,this);var e=a.optimize(this);return d&&e instanceof ya&&(e.drop_unused(this),b(e,this)),e===a&&(e._squeezed=!0),e}}),function(){function a(a,b){a.DEFMETHOD("optimize",function(a){var c=this;if(c._optimized)return c;if(a.has_directive("use asm"))return c;var d=b(c,a);return d._optimized=!0,d})}function b(a,b){for(var c,d=0;(c=a.parent(d++))&&!(c instanceof ya);)if(c instanceof Ra){c=c.argname.definition().scope;break}return c.find_variable(b)}function c(a,b,c){return c||(c={}),b&&(c.start||(c.start=b.start),c.end||(c.end=b.end)),new a(c)}function d(a,b){switch(typeof a){case"string":return c(Bb,b,{value:a});case"number":return isNaN(a)?c(Gb,b):isFinite(a)?1/a<0?c(cb,b,{operator:"-",expression:c(Cb,b,{value:-a})}):c(Cb,b,{value:a}):a<0?c(cb,b,{operator:"-",expression:c(Jb,b)}):c(Jb,b);case"boolean":return c(a?Mb:Lb,b);case"undefined":return c(Hb,b);default:if(null===a)return c(Fb,b,{value:null});if(a instanceof RegExp)return c(Db,b,{value:a});throw new Error(t("Can't handle constant of type: {type}",{type:typeof a}))}}function e(a,b,d){return a instanceof cb&&"delete"==a.operator||a instanceof Xa&&a.expression===b&&(d instanceof $a||d instanceof xb&&"eval"==d.name)?c(Za,b,{car:c(Cb,b,{value:0}),cdr:d}):d}function f(a){if(null===a)return[];if(a instanceof na)return a.body;if(a instanceof oa)return[];if(a instanceof ia)return[a];throw new Error("Can't convert thing to statement array")}function i(a){return null===a||(a instanceof oa||a instanceof na&&0==a.body.length)}function j(a){return a instanceof Ma?a:(a instanceof va||a instanceof wa||a instanceof sa)&&a.body instanceof na?a.body:a}function k(a){return a instanceof Xa&&!(a instanceof Ya)&&(a.expression instanceof Ca||k(a.expression))}function l(a,b){function d(a,b){function f(a,b){return a instanceof xb&&x(a,b)}function g(d,g,j){if(f(d,g))return d;var l=e(g,d,v.value);return v.value=null,p.splice(u,1),0===p.length&&(a[n]=c(oa,h),i=!0),m.reset_opt_flags(b),b.info("Collapsing "+(j?"constant":"variable")+" "+w+" [{file}:{line},{col}]",d.start),k=!0,l}for(var h=b.self(),i=!1,j=b.option("toplevel"),l=a.length;--l>=0;){var m=a[l];if(!(m instanceof Ta)){if([m,m.body,m.alternative,m.bcatch,m.bfinally].forEach(function(a){a&&a.body&&d(a.body,b)}),l<=0)break;var n=l-1,o=a[n];if(o instanceof Ta){var p=o.definitions;if(null!=p)for(var q={},r=!1,s=!1,t={},u=p.length;--u>=0;){var v=p[u];if(null==v.value)break;var w=v.name.name;if(!w||!w.length)break;if(w in q)break;q[w]=!0;var y=h.find_variable&&h.find_variable(w);if(y&&y.references&&1===y.references.length&&"arguments"!=w&&(j||!y.global)){var z=y.references[0];if(z.scope.uses_eval||z.scope.uses_with)break;if(v.value.is_constant()){var A=new W(function(a){var b=A.parent();return b instanceof ra&&(b.condition===a||b.init===a)?a:a===z?g(a,b,!0):void 0});m.transform(A)}else if(!(r|=s)){var B=v.value.has_side_effects(b);if(z.scope===h){var C=new F(function(a){a instanceof xb&&f(a,C.parent())&&(t[a.name]=s=!0)});v.value.walk(C);var D=!1,E=new W(function(a){if(D)return a;var b=E.parent();return a instanceof Aa||a instanceof Qa||a instanceof xa||a instanceof Pa||a instanceof ra||b instanceof La&&a!==b.condition||b instanceof fb&&a!==b.condition||a instanceof xb&&B&&!function(a,b){if(1===a.orig.length&&a.orig[0]instanceof tb)return!0;if(a.scope!==b)return!1;for(var c=a.references,d=0,e=c.length;d<e;d++)if(c[d].scope!==b)return!1;return!0}(a.definition(),h)||b instanceof eb&&("&&"==b.operator||"||"==b.operator)&&a===b.right||b instanceof Ma&&a!==b.expression?(r=D=!0,a):void 0},function(a){return D?a:a===z?(D=!0,g(a,E.parent(),!1)):(r|=a.has_side_effects(b))?(D=!0,a):s&&a instanceof xb&&a.name in t?(r=!0,D=!0,a):void 0});m.transform(E)}else r|=B}}else r=!0}}}}if(i)for(var G=a.length;--G>=0;)a.length>1&&a[G]instanceof oa&&a.splice(G,1);return a}function g(a){var b=[];return a.reduce(function(a,c){return c instanceof na?(k=!0,a.push.apply(a,g(c.body))):c instanceof oa?k=!0:c instanceof ka?b.indexOf(c.value)<0?(a.push(c),b.push(c.value)):k=!0:a.push(c),a},[])}function h(a){for(var b=0,c=0;c<a.length;++c){var d=a[c];d instanceof Za?b+=d.len():b++}return b}function i(a,b){function d(a){e.pop();var c=f.body;return c instanceof Za?c.add(a):c=Za.cons(c,a),c.transform(b)}var e=[],f=null;return a.forEach(function(a){if(f)if(a instanceof va){var g={};try{f.body.walk(new F(function(a){if(a instanceof eb&&"in"==a.operator)throw g})),!a.init||a.init instanceof Ta?a.init||(a.init=f.body.drop_side_effect_free(b),e.pop()):a.init=d(a.init)}catch(a){if(a!==g)throw a}}else a instanceof La?a.condition=d(a.condition):a instanceof xa?a.expression=d(a.expression):a instanceof Fa&&a.value?a.value=d(a.value):a instanceof Fa?a.value=d(c(Hb,a).transform(b)):a instanceof Ma&&(a.expression=d(a.expression));e.push(a),f=a instanceof la?a:null}),e}var k,l=10;do{k=!1,b.option("angular")&&(a=function(a){function d(a){return/@ngInject/.test(a.value)}function e(a){return a.argnames.map(function(a){return c(Bb,a,{value:a.name})})}function f(a,b){return c(hb,a,{elements:b})}function g(a,b){return c(la,a,{body:c(gb,a,{operator:"=",left:c(_a,b,{expression:c(xb,b,b),property:"$inject"}),right:f(a,e(a))})})}function h(a){a&&a.args&&(a.args.forEach(function(a,b,c){var g=a.start.comments_before;a instanceof Aa&&g.length&&d(g[0])&&(c[b]=f(a,e(a).concat(a)))}),a.expression&&a.expression.expression&&h(a.expression.expression))}return a.reduce(function(a,c){if(a.push(c),c.body&&c.body.args)h(c.body);else{var e=c.start,f=e.comments_before;if(f&&f.length>0){d(f.pop())&&(c instanceof Da?a.push(g(c,c.name)):c instanceof Ta?c.definitions.forEach(function(b){b.value&&b.value instanceof Aa&&a.push(g(b.value,b.name))}):b.warn("Unknown statement marked with @ngInject [{file}:{line},{col}]",e))}}return a},[])}(a)),a=g(a),b.option("dead_code")&&(a=function(a,b){var c=!1,d=a.length,e=b.self();return a=a.reduce(function(a,d){if(c)s(b,d,a);else{if(d instanceof Ia){var f=b.loopcontrol_target(d);d instanceof Ja&&!(f instanceof ra)&&j(f)===e||d instanceof Ka&&j(f)===e?d.label&&u(d.label.thedef.references,d):a.push(d)}else a.push(d);H(d)&&(c=!0)}return a},[]),k=a.length!=d,a}(a,b)),b.option("if_return")&&(a=function(a,b){var d=b.self(),e=function(a){for(var b=0,c=a.length;--c>=0;){var d=a[c];if(d instanceof La&&d.body instanceof Ga&&++b>1)return!0}return!1}(a),g=d instanceof Aa,h=[];a:for(var i=a.length;--i>=0;){var l=a[i];switch(!0){case g&&l instanceof Ga&&!l.value&&0==h.length:k=!0;continue a;case l instanceof La:if(l.body instanceof Ga){if((g&&0==h.length||h[0]instanceof Ga&&!h[0].value)&&!l.body.value&&!l.alternative){k=!0;var n=c(la,l.condition,{body:l.condition});h.unshift(n);continue a}if(h[0]instanceof Ga&&l.body.value&&h[0].value&&!l.alternative){k=!0,l=l.clone(),l.alternative=h[0],h[0]=l.transform(b);continue a}if(e&&(0==h.length||h[0]instanceof Ga)&&l.body.value&&!l.alternative&&g){k=!0,l=l.clone(),l.alternative=h[0]||c(Ga,l,{value:null}),h[0]=l.transform(b);continue a}if(!l.body.value&&g){k=!0,l=l.clone(),l.condition=l.condition.negate(b);var o=f(l.alternative).concat(h),p=m(o);l.body=c(na,l,{body:o}),l.alternative=null,h=p.concat([l.transform(b)]);continue a}if(b.option("sequences")&&i>0&&a[i-1]instanceof La&&a[i-1].body instanceof Ga&&1==h.length&&g&&h[0]instanceof la&&!l.alternative){k=!0,h.push(c(Ga,h[0],{value:null}).transform(b)),h.unshift(l);continue a}}var q=H(l.body),r=q instanceof Ia?b.loopcontrol_target(q):null;if(q&&(q instanceof Ga&&!q.value&&g||q instanceof Ka&&d===j(r)||q instanceof Ja&&r instanceof na&&d===r)){q.label&&u(q.label.thedef.references,q),k=!0;var o=f(l.body).slice(0,-1);l=l.clone(),l.condition=l.condition.negate(b),l.body=c(na,l,{body:f(l.alternative).concat(h)}),l.alternative=c(na,l,{body:o}),h=[l.transform(b)];continue a}var q=H(l.alternative),r=q instanceof Ia?b.loopcontrol_target(q):null;if(q&&(q instanceof Ga&&!q.value&&g||q instanceof Ka&&d===j(r)||q instanceof Ja&&r instanceof na&&d===r)){q.label&&u(q.label.thedef.references,q),k=!0,l=l.clone(),l.body=c(na,l.body,{body:f(l.body).concat(h)}),l.alternative=c(na,l.alternative,{body:f(l.alternative).slice(0,-1)}),h=[l.transform(b)];continue a}h.unshift(l);break;default:h.unshift(l)}}return h}(a,b)),b.sequences_limit>0&&(a=function(a,b){function d(){e=Za.from_array(e),e&&f.push(c(la,e,{body:e})),e=[]}if(a.length<2)return a;var e=[],f=[];return a.forEach(function(a){if(a instanceof la){h(e)>=b.sequences_limit&&d();var c=a.body;e.length>0&&(c=c.drop_side_effect_free(b)),c&&e.push(c)}else d(),f.push(a)}),d(),f=i(f,b),k=f.length!=a.length,f}(a,b)),b.option("join_vars")&&(a=function(a,b){var c=null;return a.reduce(function(a,b){return b instanceof Ta&&c&&c.TYPE==b.TYPE?(c.definitions=c.definitions.concat(b.definitions),k=!0):b instanceof va&&c instanceof Ua&&(!b.init||b.init.TYPE==c.TYPE)?(k=!0,a.pop(),b.init?b.init.definitions=c.definitions.concat(b.init.definitions):b.init=c,a.push(b),c=b):(c=b,a.push(b)),a},[])}(a,b)),b.option("collapse_vars")&&(a=d(a,b))}while(k&&l-- >0);return a}function m(a){for(var b=[],c=a.length-1;c>=0;--c){var d=a[c];d instanceof Da&&(a.splice(c,1),b.unshift(d))}return b}function s(a,b,c){b instanceof Da||a.warn("Dropping unreachable code [{file}:{line},{col}]",b.start),b.walk(new F(function(b){return b instanceof Ta?(a.warn("Declarations in unreachable code! [{file}:{line},{col}]",b.start),b.remove_initializers(),c.push(b),!0):b instanceof Da?(c.push(b),!0):b instanceof ya||void 0}))}function w(a,b){return a.is_undefined||a instanceof Hb||a instanceof cb&&"void"==a.operator&&!a.expression.has_side_effects(b)}function x(a,b){return b instanceof bb&&L(b.operator)?b.expression:b instanceof gb&&b.left===a?a:void 0}function D(a,b){return a.print_to_string().length>b.print_to_string().length?b:a}function E(a,b){return D(c(la,a,{body:a}),c(la,b,{body:b})).body}function G(a,b,c){return(C(a)?E:D)(b,c)}function H(a){return a&&a.aborts()}function I(a,b){function d(d){d=f(d),a.body instanceof na?(a.body=a.body.clone(),a.body.body=d.concat(a.body.body.slice(1)),a.body=a.body.transform(b)):a.body=c(na,a.body,{body:d}).transform(b),I(a,b)}var e=a.body instanceof na?a.body.body[0]:a.body;e instanceof La&&(e.body instanceof Ja&&b.loopcontrol_target(e.body)===b.self()?(a.condition?a.condition=c(eb,a.condition,{left:a.condition,operator:"&&",right:e.condition.negate(b)}):a.condition=e.condition.negate(b),d(e.alternative)):e.alternative instanceof Ja&&b.loopcontrol_target(e.alternative)===b.self()&&(a.condition?a.condition=c(eb,a.condition,{left:a.condition,operator:"&&",right:e.condition}):a.condition=e.condition,d(e.body)))}function J(a,b){return a instanceof xb||a.TYPE===b.TYPE}function K(a,b){return b.option("booleans")&&b.in_boolean_context()?G(b,a,c(Za,a,{car:a,cdr:c(Mb,a)}).optimize(b)):a}a(ha,function(a,b){return a}),ha.DEFMETHOD("equivalent_to",function(a){return this.TYPE==a.TYPE&&this.print_to_string()==a.print_to_string()}),ha.DEFMETHOD("process_expression",function(a,b){var d=this,e=new W(function(f){if(a&&f instanceof la)return c(Ga,f,{value:f.body});if(!a&&f instanceof Ga){if(b){var g=f.value&&f.value.drop_side_effect_free(b,!0);return g?c(la,f,{body:g}):c(oa,f)}return c(la,f,{body:f.value||c(cb,f,{operator:"void",expression:c(Cb,f,{value:0})})})}if(f instanceof Aa&&f!==d)return f;if(f instanceof ma){var h=f.body.length-1;h>=0&&(f.body[h]=f.body[h].transform(e))}return f instanceof La&&(f.body=f.body.transform(e),f.alternative&&(f.alternative=f.alternative.transform(e))),f instanceof xa&&(f.body=f.body.transform(e)),f});return d.transform(e)}),ha.DEFMETHOD("reset_opt_flags",function(a,b){function d(a,b){l[a.id]=b}function e(a){if(l[a.id]){if(null==a.fixed){var b=a.orig[0];if(b instanceof sb||"arguments"==b.name)return!1;a.fixed=c(Hb,b)}return!0}}function f(){l=Object.create(l)}function g(){l=Object.getPrototypeOf(l)}function h(a){k||!a.global||a.orig[0]instanceof rb?a.fixed=void 0:a.fixed=!1,a.references=[],a.should_replace=void 0}function i(a,b,c){var d=n.parent(b);return!!(x(a,d)||!c&&d instanceof Xa&&d.expression===a)||(d instanceof $a&&d.expression===a?!c&&i(d,b+1):void 0)}var j=b&&a.option("reduce_vars"),k=a.option("toplevel"),l=Object.create(null),m=new F(function(a){if(a instanceof nb){var b=a.definition();a instanceof xb&&b.references.push(a),b.fixed=!1}}),n=new F(function(a,b){if(a._squeezed=!1,a._optimized=!1,j){if(a instanceof za&&a.globals.each(h),a instanceof ya&&a.variables.each(h),a instanceof xb){var o=a.definition();o.references.push(a),void 0!==o.fixed&&e(o)&&!i(a,0,a.fixed_value()instanceof Aa)||(o.fixed=!1)}if(a instanceof vb&&(a.definition().fixed=!1),a instanceof Wa){var o=a.name.definition();if(null==o.fixed)return a.value?(o.fixed=function(){return a.value},d(o,!1),b()):o.fixed=null,d(o,!0),!0;a.value&&(o.fixed=!1)}if(a instanceof Da){var o=a.name.definition();!k&&o.global||e(o)?o.fixed=!1:(o.fixed=a,d(o,!0));var p=l;return l=Object.create(null),b(),l=p,!0}var q;if(a instanceof Ca&&!a.name&&(q=n.parent())instanceof Xa&&q.expression===a&&a.argnames.forEach(function(a,b){var e=a.definition();e.fixed=function(){return q.args[b]||c(Hb,q)},d(e,!0)}),a instanceof La||a instanceof sa)return a.condition.walk(n),f(),a.body.walk(n),g(),a.alternative&&(f(),a.alternative.walk(n),g()),!0;if(a instanceof qa)return f(),a.body.walk(n),g(),!0;if(a instanceof va)return a.init&&a.init.walk(n),f(),a.condition&&a.condition.walk(n),a.body.walk(n),a.step&&a.step.walk(n),g(),!0;if(a instanceof wa)return a.init.walk(m),a.object.walk(n),f(),a.body.walk(n),g(),!0;if(a instanceof Ra||a instanceof Na)return f(),b(),g(),!0}});this.walk(n)}),xb.DEFMETHOD("fixed_value",function(){var a=this.definition().fixed;return!a||a instanceof ha?a:a()}),function(a){function b(a){return/strict/.test(a)}ha.DEFMETHOD("may_eq_null",function(a){var b=a.option("pure_getters");return!b||this._eq_null(b)}),a(ha,b),a(Fb,p),
-a(Hb,p),a(Ab,o),a(hb,o),a(ib,o),a(Ca,o),a(db,o),a(cb,function(){return"void"==this.operator}),a(eb,function(a){switch(this.operator){case"&&":return this.left._eq_null(a);case"||":return this.left._eq_null(a)&&this.right._eq_null(a);default:return!1}}),a(gb,function(a){return"="==this.operator&&this.right._eq_null(a)}),a(fb,function(a){return this.consequent._eq_null(a)||this.alternative._eq_null(a)}),a(Za,function(a){return this.cdr._eq_null(a)}),a(xb,function(a){if(this.is_undefined)return!0;if(!b(a))return!1;var c=this.fixed_value();return!c||c._eq_null(a)})}(function(a,b){a.DEFMETHOD("_eq_null",b)}),function(a){var b=["!","delete"],c=["in","instanceof","==","!=","===","!==","<","<=",">=",">"];a(ha,o),a(cb,function(){return g(this.operator,b)}),a(eb,function(){return g(this.operator,c)||("&&"==this.operator||"||"==this.operator)&&this.left.is_boolean()&&this.right.is_boolean()}),a(fb,function(){return this.consequent.is_boolean()&&this.alternative.is_boolean()}),a(gb,function(){return"="==this.operator&&this.right.is_boolean()}),a(Za,function(){return this.cdr.is_boolean()}),a(Mb,p),a(Lb,p)}(function(a,b){a.DEFMETHOD("is_boolean",b)}),function(a){a(ha,o),a(Cb,p);var b=y("+ - ~ ++ --");a(bb,function(){return b(this.operator)});var c=y("- * / % & | ^ << >> >>>");a(eb,function(a){return c(this.operator)||"+"==this.operator&&this.left.is_number(a)&&this.right.is_number(a)}),a(gb,function(a){return c(this.operator.slice(0,-1))||"="==this.operator&&this.right.is_number(a)}),a(Za,function(a){return this.cdr.is_number(a)}),a(fb,function(a){return this.consequent.is_number(a)&&this.alternative.is_number(a)})}(function(a,b){a.DEFMETHOD("is_number",b)}),function(a){a(ha,o),a(Bb,p),a(cb,function(){return"typeof"==this.operator}),a(eb,function(a){return"+"==this.operator&&(this.left.is_string(a)||this.right.is_string(a))}),a(gb,function(a){return("="==this.operator||"+="==this.operator)&&this.right.is_string(a)}),a(Za,function(a){return this.cdr.is_string(a)}),a(fb,function(a){return this.consequent.is_string(a)&&this.alternative.is_string(a)})}(function(a,b){a.DEFMETHOD("is_string",b)});var L=y("delete ++ --");!function(a){function b(a,e){if(a instanceof ha)return c(a.CTOR,e,a);if(Array.isArray(a))return c(hb,e,{elements:a.map(function(a){return b(a,e)})});if(a&&"object"==typeof a){var f=[];for(var g in a)f.push(c(kb,e,{key:g,value:b(a[g],e)}));return c(ib,e,{properties:f})}return d(a,e)}ha.DEFMETHOD("resolve_defines",function(a){if(a.option("global_defs")){var b=this._find_defs(a,"");if(b){var c,d=this,e=0;do{c=d,d=a.parent(e++)}while(d instanceof $a&&d.expression===c);if(!x(c,d))return b;a.warn("global_defs "+this.print_to_string()+" redefined [{file}:{line},{col}]",this.start)}}}),a(ha,n),a(_a,function(a,b){return this.expression._find_defs(a,"."+this.property+b)}),a(xb,function(a,c){if(this.global()){var d,e=a.option("global_defs");if(e&&B(e,d=this.name+c)){var f=b(e[d],this),g=a.find_parent(za);return f.walk(new F(function(a){a instanceof xb&&(a.scope=g,a.thedef=g.def_global(a))})),f}}})}(function(a,b){a.DEFMETHOD("_find_defs",b)}),function(a){function b(a,b){if(!b)throw new Error("Compressor must be passed");return a._eval(b)}ha.DEFMETHOD("evaluate",function(b){if(!b.option("evaluate"))return this;try{var c=this._eval(b);return!c||c instanceof RegExp||"object"!=typeof c?c:this}catch(b){if(b!==a)throw b;return this}});var c=y("! ~ - + void");ha.DEFMETHOD("is_constant",function(){return this instanceof Ab?!(this instanceof Db):this instanceof cb&&this.expression instanceof Ab&&c(this.operator)}),ha.DEFMETHOD("constant_value",function(a){if(this instanceof Ab&&!(this instanceof Db))return this.value;if(this instanceof cb&&this.expression instanceof Ab)switch(this.operator){case"!":return!this.expression.value;case"~":return~this.expression.value;case"-":return-this.expression.value;case"+":return+this.expression.value;default:throw new Error(t("Cannot evaluate unary expression {value}",{value:this.print_to_string()}))}var b=this.evaluate(a);if(b!==this)return b;throw new Error(t("Cannot evaluate constant [{file}:{line},{col}]",this.start))}),a(ia,function(){throw new Error(t("Cannot evaluate a statement [{file}:{line},{col}]",this.start))}),a(Aa,function(){throw a}),a(ha,function(){throw a}),a(Ab,function(){return this.getValue()}),a(hb,function(c){if(c.option("unsafe"))return this.elements.map(function(a){return b(a,c)});throw a}),a(ib,function(c){if(c.option("unsafe")){for(var d={},e=0,f=this.properties.length;e<f;e++){var g=this.properties[e],h=g.key;if(h instanceof nb?h=h.name:h instanceof ha&&(h=b(h,c)),"function"==typeof Object.prototype[h])throw a;d[h]=b(g.value,c)}return d}throw a}),a(cb,function(c){var d=this.expression;switch(this.operator){case"!":return!b(d,c);case"typeof":if(d instanceof Ca)return"function";if((d=b(d,c))instanceof RegExp)throw a;return typeof d;case"void":return void b(d,c);case"~":return~b(d,c);case"-":return-b(d,c);case"+":return+b(d,c)}throw a}),a(eb,function(c){var d,e=this.left,f=this.right;switch(this.operator){case"&&":d=b(e,c)&&b(f,c);break;case"||":d=b(e,c)||b(f,c);break;case"|":d=b(e,c)|b(f,c);break;case"&":d=b(e,c)&b(f,c);break;case"^":d=b(e,c)^b(f,c);break;case"+":d=b(e,c)+b(f,c);break;case"*":d=b(e,c)*b(f,c);break;case"/":d=b(e,c)/b(f,c);break;case"%":d=b(e,c)%b(f,c);break;case"-":d=b(e,c)-b(f,c);break;case"<<":d=b(e,c)<<b(f,c);break;case">>":d=b(e,c)>>b(f,c);break;case">>>":d=b(e,c)>>>b(f,c);break;case"==":d=b(e,c)==b(f,c);break;case"===":d=b(e,c)===b(f,c);break;case"!=":d=b(e,c)!=b(f,c);break;case"!==":d=b(e,c)!==b(f,c);break;case"<":d=b(e,c)<b(f,c);break;case"<=":d=b(e,c)<=b(f,c);break;case">":d=b(e,c)>b(f,c);break;case">=":d=b(e,c)>=b(f,c);break;default:throw a}if(isNaN(d)&&c.find_parent(xa))throw a;return d}),a(fb,function(a){return b(this.condition,a)?b(this.consequent,a):b(this.alternative,a)}),a(xb,function(c){if(this._evaluating)throw a;this._evaluating=!0;try{var d=this.fixed_value();if(c.option("reduce_vars")&&d)return c.option("unsafe")?(B(d,"_evaluated")||(d._evaluated=b(d,c)),d._evaluated):b(d,c)}finally{this._evaluating=!1}throw a}),a($a,function(c){if(c.option("unsafe")){var d=this.property;d instanceof ha&&(d=b(d,c));var e=b(this.expression,c);if(e&&B(e,d))return e[d]}throw a})}(function(a,b){a.DEFMETHOD("_eval",b)}),function(a){function b(a){return c(cb,a,{operator:"!",expression:a})}function d(a,d,e){var f=b(a);if(e){var g=c(la,d,{body:d});return D(f,g)===g?d:f}return D(f,d)}a(ha,function(){return b(this)}),a(ia,function(){throw new Error("Cannot negate a statement")}),a(Ca,function(){return b(this)}),a(cb,function(){return"!"==this.operator?this.expression:b(this)}),a(Za,function(a){var b=this.clone();return b.cdr=b.cdr.negate(a),b}),a(fb,function(a,b){var c=this.clone();return c.consequent=c.consequent.negate(a),c.alternative=c.alternative.negate(a),d(this,c,b)}),a(eb,function(a,c){var e=this.clone(),f=this.operator;if(a.option("unsafe_comps"))switch(f){case"<=":return e.operator=">",e;case"<":return e.operator=">=",e;case">=":return e.operator="<",e;case">":return e.operator="<=",e}switch(f){case"==":return e.operator="!=",e;case"!=":return e.operator="==",e;case"===":return e.operator="!==",e;case"!==":return e.operator="===",e;case"&&":return e.operator="||",e.left=e.left.negate(a,c),e.right=e.right.negate(a),d(this,e,c);case"||":return e.operator="&&",e.left=e.left.negate(a,c),e.right=e.right.negate(a),d(this,e,c)}return b(this)})}(function(a,b){a.DEFMETHOD("negate",function(a,c){return b.call(this,a,c)})}),Xa.DEFMETHOD("has_pure_annotation",function(a){if(!a.option("side_effects"))return!1;if(void 0!==this.pure)return this.pure;var b,c,d=!1;return this.start&&(b=this.start.comments_before)&&b.length&&/[@#]__PURE__/.test((c=b[b.length-1]).value)&&(d=c),this.pure=d}),function(a){function b(a,b){for(var c=a.length;--c>=0;)if(a[c].has_side_effects(b))return!0;return!1}a(ha,p),a(oa,o),a(Ab,o),a(zb,o),a(Xa,function(a){if(!this.has_pure_annotation(a)&&a.pure_funcs(this))return!0;for(var b=this.args.length;--b>=0;)if(this.args[b].has_side_effects(a))return!0;return!1}),a(ma,function(a){return b(this.body,a)}),a(Ma,function(a){return this.expression.has_side_effects(a)||b(this.body,a)}),a(Pa,function(a){return this.expression.has_side_effects(a)||b(this.body,a)}),a(Qa,function(a){return b(this.body,a)||this.bcatch&&this.bcatch.has_side_effects(a)||this.bfinally&&this.bfinally.has_side_effects(a)}),a(La,function(a){return this.condition.has_side_effects(a)||this.body&&this.body.has_side_effects(a)||this.alternative&&this.alternative.has_side_effects(a)}),a(qa,function(a){return this.body.has_side_effects(a)}),a(la,function(a){return this.body.has_side_effects(a)}),a(Da,p),a(Ca,o),a(eb,function(a){return this.left.has_side_effects(a)||this.right.has_side_effects(a)}),a(gb,p),a(fb,function(a){return this.condition.has_side_effects(a)||this.consequent.has_side_effects(a)||this.alternative.has_side_effects(a)}),a(bb,function(a){return L(this.operator)||this.expression.has_side_effects(a)}),a(xb,function(a){return this.undeclared()}),a(ib,function(a){return b(this.properties,a)}),a(jb,function(a){return this.value.has_side_effects(a)}),a(hb,function(a){return b(this.elements,a)}),a(_a,function(a){return this.expression.may_eq_null(a)||this.expression.has_side_effects(a)}),a(ab,function(a){return this.expression.may_eq_null(a)||this.expression.has_side_effects(a)||this.property.has_side_effects(a)}),a(Za,function(a){return this.car.has_side_effects(a)||this.cdr.has_side_effects(a)})}(function(a,b){a.DEFMETHOD("has_side_effects",b)}),function(a){function b(){var a=this.body.length;return a>0&&H(this.body[a-1])}a(ia,r),a(Ea,q),a(na,b),a(Na,b),a(La,function(){return this.alternative&&H(this.body)&&H(this.alternative)&&this})}(function(a,b){a.DEFMETHOD("aborts",b)}),a(ka,function(a,b){return b.has_directive(a.value)!==a?c(oa,a):a}),a(ja,function(a,b){return b.option("drop_debugger")?c(oa,a):a}),a(qa,function(a,b){return a.body instanceof Ja&&b.loopcontrol_target(a.body)===a.body?c(oa,a):0==a.label.references.length?a.body:a}),a(ma,function(a,b){return a.body=l(a.body,b),a}),a(na,function(a,b){switch(a.body=l(a.body,b),a.body.length){case 1:return a.body[0];case 0:return c(oa,a)}return a}),ya.DEFMETHOD("drop_unused",function(a){var b=this;if(a.has_directive("use asm"))return b;var d=a.option("toplevel");if(a.option("unused")&&(!(b instanceof za)||d)&&!b.uses_eval&&!b.uses_with){var f=!/keep_assign/.test(a.option("unused")),g=/funcs/.test(d),h=/vars/.test(d);b instanceof za&&1!=d||(g=h=!0);var j=[],k=Object.create(null);b instanceof za&&a.top_retain&&b.variables.each(function(b){!a.top_retain(b)||b.id in k||(k[b.id]=!0,j.push(b))});var l=new A,m=this,n=new F(function(c,d){if(c!==b){if(c instanceof Da){if(!g&&m===b){var e=c.name.definition();e.id in k||(k[e.id]=!0,j.push(e))}return l.add(c.name.name,c),!0}if(c instanceof Ta&&m===b)return c.definitions.forEach(function(b){if(!h){var c=b.name.definition();c.id in k||(k[c.id]=!0,j.push(c))}b.value&&(l.add(b.name.name,b.value),b.value.has_side_effects(a)&&b.value.walk(n))}),!0;if(f&&c instanceof gb&&"="==c.operator&&c.left instanceof xb&&m===b)return c.right.walk(n),!0;if(c instanceof xb){var e=c.definition();return e.id in k||(k[e.id]=!0,j.push(e)),!0}if(c instanceof ya){var i=m;return m=c,d(),m=i,!0}}});b.walk(n);for(var o=0;o<j.length;++o)j[o].orig.forEach(function(a){var b=l.get(a.name);b&&b.forEach(function(a){var b=new F(function(a){if(a instanceof xb){var b=a.definition();b.id in k||(k[b.id]=!0,j.push(b))}});a.walk(b)})});var p=new W(function(d,j,l){if(d instanceof Ca&&d.name&&!a.option("keep_fnames")){var m=d.name.definition();m.id in k&&!(m.orig.length>1)||(d.name=null)}if(d instanceof Aa&&!(d instanceof Ba))for(var n=!a.option("keep_fargs"),o=d.argnames,q=o.length;--q>=0;){var r=o[q];r.definition().id in k?n=!1:(r.__unused=!0,n&&(o.pop(),a[r.unreferenced()?"warn":"info"]("Dropping unused function argument {name} [{file}:{line},{col}]",{name:r.name,file:r.start.file,line:r.start.line,col:r.start.col})))}if(g&&d instanceof Da&&d!==b)return d.name.definition().id in k?d:(a[d.name.unreferenced()?"warn":"info"]("Dropping unused function {name} [{file}:{line},{col}]",{name:d.name.name,file:d.name.start.file,line:d.name.start.line,col:d.name.start.col}),c(oa,d));if(h&&d instanceof Ta&&!(p.parent()instanceof wa)){var m=d.definitions.filter(function(b){b.value&&(b.value=b.value.transform(p));var c=b.name.definition();if(c.id in k)return!0;if(c.orig[0]instanceof vb)return b.value=b.value&&b.value.drop_side_effect_free(a),!0;var d={name:b.name.name,file:b.name.start.file,line:b.name.start.line,col:b.name.start.col};return b.value&&(b._unused_side_effects=b.value.drop_side_effect_free(a))?(a.warn("Side effects in initialization of unused variable {name} [{file}:{line},{col}]",d),!0):(a[b.name.unreferenced()?"warn":"info"]("Dropping unused variable {name} [{file}:{line},{col}]",d),!1)});m=v(m,function(a,b){return!a.value&&b.value?-1:!b.value&&a.value?1:0});for(var s=[],q=0;q<m.length;){var t=m[q];t._unused_side_effects?(s.push(t._unused_side_effects),m.splice(q,1)):(s.length>0&&(s.push(t.value),t.value=Za.from_array(s),s=[]),++q)}return s=s.length>0?c(na,d,{body:[c(la,d,{body:Za.from_array(s)})]}):null,0!=m.length||s?0==m.length?l?fa.splice(s.body):s:(d.definitions=m,s?(s.body.unshift(d),l?fa.splice(s.body):s):d):c(oa,d)}if(h&&f&&d instanceof gb&&"="==d.operator&&d.left instanceof xb){var m=d.left.definition();if(!(m.id in k)&&b.variables.get(m.name)===m)return e(p.parent(),d,d.right.transform(p))}if(d instanceof va){if(j(d,this),d.init instanceof na){var u=d.init.body.slice(0,-1);return d.init=d.init.body.slice(-1)[0].body,u.push(d),l?fa.splice(u):c(na,d,{body:u})}if(i(d.init))return d.init=null,d}return d instanceof ya&&d!==b?d:void 0});b.transform(p)}}),ya.DEFMETHOD("hoist_declarations",function(a){var b=this;if(a.has_directive("use asm"))return b;var d=a.option("hoist_funs"),e=a.option("hoist_vars");if(d||e){var f=[],g=[],i=new A,j=0,k=0;b.walk(new F(function(a){return a instanceof ya&&a!==b||(a instanceof Ua?(++k,!0):void 0)})),e=e&&k>1;var l=new W(function(h){if(h!==b){if(h instanceof ka)return f.push(h),c(oa,h);if(h instanceof Da&&d)return g.push(h),c(oa,h);if(h instanceof Ua&&e){h.definitions.forEach(function(a){i.set(a.name.name,a),++j});var k=h.to_assignments(a),m=l.parent();if(m instanceof wa&&m.init===h){if(null==k){var n=h.definitions[0].name;return c(xb,n,n)}return k}return m instanceof va&&m.init===h?k:k?c(la,h,{body:k}):c(oa,h)}if(h instanceof ya)return h}});if(b=b.transform(l),j>0){var m=[];if(i.each(function(a,c){b instanceof Aa&&h(function(b){return b.name==a.name.name},b.argnames)?i.del(c):(a=a.clone(),a.value=null,m.push(a),i.set(c,a))}),m.length>0){for(;0<b.body.length;){if(b.body[0]instanceof la){var n,o,p=b.body[0].body;if(p instanceof gb&&"="==p.operator&&(n=p.left)instanceof nb&&i.has(n.name)){var q=i.get(n.name);if(q.value)break;q.value=p.right,u(m,q),m.push(q),b.body.splice(0,1);continue}if(p instanceof Za&&(o=p.car)instanceof gb&&"="==o.operator&&(n=o.left)instanceof nb&&i.has(n.name)){var q=i.get(n.name);if(q.value)break;q.value=o.right,u(m,q),m.push(q),b.body[0].body=p.cdr;continue}}if(b.body[0]instanceof oa)b.body.splice(0,1);else{if(!(b.body[0]instanceof na))break;var r=[0,1].concat(b.body[0].body);b.body.splice.apply(b.body,r)}}m=c(Ua,b,{definitions:m}),g.push(m)}}b.body=f.concat(g,b.body)}return b}),function(a){function b(a,b,c){for(var d=[],e=!1,f=0,g=a.length;f<g;f++){var h=a[f].drop_side_effect_free(b,c);e|=h!==a[f],h&&(d.push(h),c=!1)}return e?d.length?d:null:a}a(ha,q),a(Ab,r),a(zb,r),a(Xa,function(a,c){if(!this.has_pure_annotation(a)&&a.pure_funcs(this)){if(this.expression instanceof Ca&&(!this.expression.name||!this.expression.name.definition().references.length)){var d=this.clone();return d.expression=d.expression.process_expression(!1,a),d}return this}this.pure&&(a.warn("Dropping __PURE__ call [{file}:{line},{col}]",this.start),this.pure.value=this.pure.value.replace(/[@#]__PURE__/g," "));var e=b(this.args,a,c);return e&&Za.from_array(e)}),a(Ca,r),a(eb,function(a,b){var d=this.right.drop_side_effect_free(a);if(!d)return this.left.drop_side_effect_free(a,b);switch(this.operator){case"&&":case"||":if(d===this.right)return this;var e=this.clone();return e.right=d,e;default:var f=this.left.drop_side_effect_free(a,b);return f?c(Za,this,{car:f,cdr:d}):this.right.drop_side_effect_free(a,b)}}),a(gb,q),a(fb,function(a){var b=this.consequent.drop_side_effect_free(a),d=this.alternative.drop_side_effect_free(a);if(b===this.consequent&&d===this.alternative)return this;if(!b)return d?c(eb,this,{operator:"||",left:this.condition,right:d}):this.condition.drop_side_effect_free(a);if(!d)return c(eb,this,{operator:"&&",left:this.condition,right:b});var e=this.clone();return e.consequent=b,e.alternative=d,e}),a(bb,function(a,b){if(L(this.operator))return this;if("typeof"==this.operator&&this.expression instanceof xb)return null;var d=this.expression.drop_side_effect_free(a,b);return b&&this instanceof cb&&k(d)?d===this.expression&&1===this.operator.length?this:c(cb,this,{operator:1===this.operator.length?this.operator:"!",expression:d}):d}),a(xb,function(){return this.undeclared()?this:null}),a(ib,function(a,c){var d=b(this.properties,a,c);return d&&Za.from_array(d)}),a(jb,function(a,b){return this.value.drop_side_effect_free(a,b)}),a(hb,function(a,c){var d=b(this.elements,a,c);return d&&Za.from_array(d)}),a(_a,function(a,b){return this.expression.may_eq_null(a)?this:this.expression.drop_side_effect_free(a,b)}),a(ab,function(a,b){if(this.expression.may_eq_null(a))return this;var d=this.expression.drop_side_effect_free(a,b);if(!d)return this.property.drop_side_effect_free(a,b);var e=this.property.drop_side_effect_free(a);return e?c(Za,this,{car:d,cdr:e}):d}),a(Za,function(a){var b=this.cdr.drop_side_effect_free(a);return b===this.cdr?this:b?c(Za,this,{car:this.car,cdr:b}):this.car})}(function(a,b){a.DEFMETHOD("drop_side_effect_free",b)}),a(la,function(a,b){if(b.option("side_effects")){var d=a.body,e=d.drop_side_effect_free(b,!0);if(!e)return b.warn("Dropping side-effect-free statement [{file}:{line},{col}]",a.start),c(oa,a);if(e!==d)return c(la,a,{body:e})}return a}),a(sa,function(a,b){if(!b.option("loops"))return a;var d=a.condition.evaluate(b);if(d!==a.condition){if(d)return c(va,a,{body:a.body});if(b.option("dead_code")&&a instanceof ua){var e=[];return s(b,a.body,e),c(na,a,{body:e})}if(a instanceof ta){var f=!1,g=new F(function(b){return!!(b instanceof ya||f)||(b instanceof Ia&&g.loopcontrol_target(b)===a?f=!0:void 0)});if(a.walk(g),!f)return a.body}}return a instanceof ua?c(va,a,a).optimize(b):a}),a(va,function(a,b){if(!b.option("loops"))return a;if(a.condition){var e=a.condition.evaluate(b);if(b.option("dead_code")&&!e){var f=[];return a.init instanceof ia?f.push(a.init):a.init&&f.push(c(la,a.init,{body:a.init})),s(b,a.body,f),c(na,a,{body:f})}e!==a.condition&&(e=d(e,a.condition).transform(b),a.condition=D(e,a.condition))}return I(a,b),a}),a(La,function(a,b){if(i(a.alternative)&&(a.alternative=null),!b.option("conditionals"))return a;var e=a.condition.evaluate(b);if(e!==a.condition){if(e){if(b.warn("Condition always true [{file}:{line},{col}]",a.condition.start),b.option("dead_code")){var f=[];return a.alternative&&s(b,a.alternative,f),f.push(a.body),c(na,a,{body:f}).optimize(b)}}else if(b.warn("Condition always false [{file}:{line},{col}]",a.condition.start),b.option("dead_code")){var f=[];return s(b,a.body,f),a.alternative&&f.push(a.alternative),c(na,a,{body:f}).optimize(b)}e=d(e,a.condition).transform(b),a.condition=D(e,a.condition)}var g=a.condition.negate(b),h=a.condition.print_to_string().length,j=g.print_to_string().length,k=j<h;if(a.alternative&&k){k=!1,a.condition=g;var l=a.body;a.body=a.alternative||c(oa,a),a.alternative=l}if(i(a.body)&&i(a.alternative))return c(la,a.condition,{body:a.condition.clone()}).optimize(b);if(a.body instanceof la&&a.alternative instanceof la)return c(la,a,{body:c(fb,a,{condition:a.condition,consequent:a.body.body,alternative:a.alternative.body})}).optimize(b);if(i(a.alternative)&&a.body instanceof la)return h===j&&!k&&a.condition instanceof eb&&"||"==a.condition.operator&&(k=!0),k?c(la,a,{body:c(eb,a,{operator:"||",left:g,right:a.body.body})}).optimize(b):c(la,a,{body:c(eb,a,{operator:"&&",left:a.condition,right:a.body.body})}).optimize(b);if(a.body instanceof oa&&a.alternative instanceof la)return c(la,a,{body:c(eb,a,{operator:"||",left:a.condition,right:a.alternative.body})}).optimize(b);if(a.body instanceof Fa&&a.alternative instanceof Fa&&a.body.TYPE==a.alternative.TYPE)return c(a.body.CTOR,a,{value:c(fb,a,{condition:a.condition,consequent:a.body.value||c(Hb,a.body),alternative:a.alternative.value||c(Hb,a.alternative)}).transform(b)}).optimize(b);if(a.body instanceof La&&!a.body.alternative&&!a.alternative&&(a=c(La,a,{condition:c(eb,a.condition,{operator:"&&",left:a.condition,right:a.body.condition}),body:a.body.body,alternative:null})),H(a.body)&&a.alternative){var m=a.alternative;return a.alternative=null,c(na,a,{body:[a,m]}).optimize(b)}if(H(a.alternative)){var n=a.body;return a.body=a.alternative,a.condition=k?g:a.condition.negate(b),a.alternative=null,c(na,a,{body:[a,n]}).optimize(b)}return a}),a(Ma,function(a,b){function e(a,c){c&&!H(c)?c.body=c.body.concat(a.body):s(b,a,k)}if(!b.option("switches"))return a;var f,g=a.expression.evaluate(b);if(g!==a.expression){var h=d(g,a.expression).transform(b);a.expression=D(h,a.expression)}if(!b.option("dead_code"))return a;for(var i,j,k=[],l=[],m=0,n=a.body.length;m<n&&!j;m++){if((f=a.body[m])instanceof Oa)i?e(f,l[l.length-1]):i=f;else if(g!==a.expression){var o=f.expression.evaluate(b);if(o===g){if(j=f,i){var p=l.indexOf(i);l.splice(p,1),e(i,l[p-1]),i=null}}else if(o!==f.expression){e(f,l[l.length-1]);continue}}if(H(f)){var q=l[l.length-1];H(q)&&q.body.length==f.body.length&&c(na,q,q).equivalent_to(c(na,f,f))&&(q.body=[])}l.push(f)}for(;m<n;)e(a.body[m++],l[l.length-1]);for(l.length>0&&(l[0].body=k.concat(l[0].body)),a.body=l;f=l[l.length-1];){var r=f.body[f.body.length-1];if(r instanceof Ja&&b.loopcontrol_target(r)===a&&f.body.pop(),f.body.length||f instanceof Pa&&(i||f.expression.has_side_effects(b)))break;l.pop()===i&&(i=null)}if(0==l.length)return c(na,a,{body:k.concat(c(la,a.expression,{body:a.expression}))}).optimize(b);if(1==l.length&&(l[0]===j||l[0]===i)){var t=!1,u=new F(function(b){if(t||b instanceof Aa||b instanceof la)return!0;b instanceof Ja&&u.loopcontrol_target(b)===a&&(t=!0)});if(a.walk(u),!t)return l=l[0].body.slice(),l.unshift(c(la,a.expression,{body:a.expression})),c(na,a,{body:l}).optimize(b)}return a}),a(Qa,function(a,b){if(a.body=l(a.body,b),a.bcatch&&a.bfinally&&z(a.bfinally.body,i)&&(a.bfinally=null),z(a.body,i)){var d=[];return a.bcatch&&s(b,a.bcatch,d),a.bfinally&&(d=d.concat(a.bfinally.body)),d.length>0?c(na,a,{body:d}).optimize(b):c(oa,a)}return a}),Ta.DEFMETHOD("remove_initializers",function(){this.definitions.forEach(function(a){a.value=null})}),Ta.DEFMETHOD("to_assignments",function(a){var b=a.option("reduce_vars"),d=this.definitions.reduce(function(a,d){if(d.value){var e=c(xb,d.name,d.name);a.push(c(gb,d,{operator:"=",left:e,right:d.value})),b&&(e.definition().fixed=!1)}return a},[]);return 0==d.length?null:Za.from_array(d)}),a(Ta,function(a,b){return 0==a.definitions.length?c(oa,a):a}),a(Xa,function(a,b){var e=a.expression;if(b.option("reduce_vars")&&e instanceof xb){var f=e.definition(),g=e.fixed_value();g instanceof Da&&(f.fixed=g=c(Ca,g,g).clone(!0)),g instanceof Ca&&(e=g,!b.option("unused")||1!=f.references.length||f.scope.uses_arguments&&f.orig[0]instanceof sb||f.scope.uses_eval||b.find_parent(ya)!==f.scope||(a.expression=e))}if(b.option("unused")&&e instanceof Ca&&!e.uses_arguments&&!e.uses_eval){for(var h=0,j=0,l=0,m=a.args.length;l<m;l++){var n=l>=e.argnames.length;if(n||e.argnames[l].__unused){var o=a.args[l].drop_side_effect_free(b);if(o)a.args[h++]=o;else if(!n){a.args[h++]=c(Cb,a.args[l],{value:0});continue}}else a.args[h++]=a.args[l];j=h}a.args.length=j}if(b.option("unsafe"))if(e instanceof xb&&e.undeclared())switch(e.name){case"Array":if(1!=a.args.length)return c(hb,a,{elements:a.args}).optimize(b);break;case"Object":if(0==a.args.length)return c(ib,a,{properties:[]});break;case"String":if(0==a.args.length)return c(Bb,a,{value:""});if(a.args.length<=1)return c(eb,a,{left:a.args[0],operator:"+",right:c(Bb,a,{value:""})}).optimize(b);break;case"Number":if(0==a.args.length)return c(Cb,a,{value:0});if(1==a.args.length)return c(cb,a,{expression:a.args[0],operator:"+"}).optimize(b);case"Boolean":if(0==a.args.length)return c(Lb,a);if(1==a.args.length)return c(cb,a,{expression:c(cb,a,{expression:a.args[0],operator:"!"}),operator:"!"}).optimize(b);break;case"Function":if(0==a.args.length)return c(Ca,a,{argnames:[],body:[]});if(z(a.args,function(a){return a instanceof Bb}))try{var p="(function("+a.args.slice(0,-1).map(function(a){return a.value}).join(",")+"){"+a.args[a.args.length-1].value+"})()",q=V(p);q.figure_out_scope({screw_ie8:b.option("screw_ie8")});var r=new $(b.options);q=q.transform(r),q.figure_out_scope({screw_ie8:b.option("screw_ie8")}),q.mangle_names();var s;try{q.walk(new F(function(a){if(a instanceof Aa)throw s=a,q}))}catch(a){if(a!==q)throw a}if(!s)return a;var t=s.argnames.map(function(b,d){return c(Bb,a.args[d],{value:b.print_to_string()})}),p=Z();return na.prototype._codegen.call(s,s,p),p=p.toString().replace(/^\{|\}$/g,""),t.push(c(Bb,a.args[a.args.length-1],{value:p})),a.args=t,a}catch(c){if(!(c instanceof R))throw console.log(c),c;b.warn("Error parsing code passed to new Function [{file}:{line},{col}]",a.args[a.args.length-1].start),b.warn(c.toString())}}else{if(e instanceof _a&&"toString"==e.property&&0==a.args.length)return c(eb,a,{left:c(Bb,a,{value:""}),operator:"+",right:e.expression}).optimize(b);if(e instanceof _a&&e.expression instanceof hb&&"join"==e.property){var u;if(!(a.args.length>0&&(u=a.args[0].evaluate(b))===a.args[0])){var v=[],w=[];if(e.expression.elements.forEach(function(d){var e=d.evaluate(b);e!==d?w.push(e):(w.length>0&&(v.push(c(Bb,a,{value:w.join(u)})),w.length=0),v.push(d))}),w.length>0&&v.push(c(Bb,a,{value:w.join(u)})),0==v.length)return c(Bb,a,{value:""});if(1==v.length)return v[0].is_string(b)?v[0]:c(eb,v[0],{operator:"+",left:c(Bb,a,{value:""}),right:v[0]});if(""==u){var x;return x=v[0].is_string(b)||v[1].is_string(b)?v.shift():c(Bb,a,{value:""}),v.reduce(function(a,b){return c(eb,b,{operator:"+",left:a,right:b})},x).optimize(b)}var o=a.clone();return o.expression=o.expression.clone(),o.expression.expression=o.expression.expression.clone(),o.expression.expression.elements=v,G(b,a,o)}}else if(e instanceof _a&&e.expression.is_string(b)&&"charAt"==e.property){var y=a.args[0],A=y?y.evaluate(b):0;if(A!==y)return c(ab,e,{expression:e.expression,property:d(0|A,y||e)}).optimize(b)}}if(e instanceof Ca){if(e.body[0]instanceof Ga){var B=e.body[0].value;if(!B||B.is_constant()){var t=a.args.concat(B||c(Hb,a));return Za.from_array(t).transform(b)}}if(b.option("side_effects")&&z(e.body,i)){var t=a.args.concat(c(Hb,a));return Za.from_array(t).transform(b)}}if(b.option("drop_console")&&e instanceof $a){for(var C=e.expression;C.expression;)C=C.expression;if(C instanceof xb&&"console"==C.name&&C.undeclared())return c(Hb,a).optimize(b)}return b.option("negate_iife")&&b.parent()instanceof la&&k(a)?a.negate(b,!0):a}),a(Ya,function(a,b){if(b.option("unsafe")){var d=a.expression;if(d instanceof xb&&d.undeclared())switch(d.name){case"Object":case"RegExp":case"Function":case"Error":case"Array":return c(Xa,a,a).transform(b)}}return a}),a(Za,function(a,b){if(!b.option("side_effects"))return a;if(a.car=a.car.drop_side_effect_free(b,C(b)),!a.car)return e(b.parent(),a,a.cdr);if(b.option("cascade")){var d;if(a.car instanceof gb&&!a.car.left.has_side_effects(b)?d=a.car.left:a.car instanceof bb&&("++"==a.car.operator||"--"==a.car.operator)&&(d=a.car.expression),d&&!(d instanceof xb&&d.definition().orig[0]instanceof ub))for(var f,g,h=a.cdr;;){if(h.equivalent_to(d)){var i=a.car instanceof db?c(cb,a.car,{operator:a.car.operator,expression:d}):a.car;return f?(f[g]=i,a.cdr):i}if(h instanceof eb&&!(h instanceof gb))if(h.left.is_constant()){if("||"==h.operator||"&&"==h.operator)break;g="right"}else g="left";else{if(!(h instanceof Xa||h instanceof bb&&!L(h.operator)))break;g="expression"}f=h,h=h[g]}}return w(a.cdr,b)?c(cb,a,{operator:"void",expression:a.car}):a}),bb.DEFMETHOD("lift_sequences",function(a){if(a.option("sequences")&&this.expression instanceof Za){var b=this.expression,c=b.to_array(),d=this.clone();return d.expression=c.pop(),c.push(d),b=Za.from_array(c).transform(a)}return this}),a(db,function(a,b){return a.lift_sequences(b)}),a(cb,function(a,b){var e=a.expression;if("delete"==a.operator&&!(e instanceof xb||e instanceof $a||e instanceof Gb||e instanceof Jb||e instanceof Hb))return e instanceof Za?(e=e.to_array(),e.push(c(Mb,a)),Za.from_array(e).optimize(b)):c(Za,a,{car:e,cdr:c(Mb,a)}).optimize(b);var f=a.lift_sequences(b);if(f!==a)return f;if(b.option("side_effects")&&"void"==a.operator)return e=e.drop_side_effect_free(b),e?(a.expression=e,a):c(Hb,a).optimize(b);if(b.option("booleans")&&b.in_boolean_context())switch(a.operator){case"!":if(e instanceof cb&&"!"==e.operator)return e.expression;e instanceof eb&&(a=G(b,a,e.negate(b,C(b))));break;case"typeof":return b.warn("Boolean expression always true [{file}:{line},{col}]",a.start),(e instanceof xb?c(Mb,a):c(Za,a,{car:e,cdr:c(Mb,a)})).optimize(b)}if("-"==a.operator&&e instanceof Jb&&(e=e.transform(b)),e instanceof eb&&("+"==a.operator||"-"==a.operator)&&("*"==e.operator||"/"==e.operator||"%"==e.operator))return c(eb,a,{operator:e.operator,left:c(cb,e.left,{operator:a.operator,expression:e.left}),right:e.right});if("-"!=a.operator||!(e instanceof Cb||e instanceof Jb)){var g=a.evaluate(b);if(g!==a)return g=d(g,a).optimize(b),G(b,g,a)}return a}),eb.DEFMETHOD("lift_sequences",function(a){if(a.option("sequences")){if(this.left instanceof Za){var b=this.left,c=b.to_array(),d=this.clone();return d.left=c.pop(),c.push(d),Za.from_array(c).optimize(a)}if(this.right instanceof Za&&!this.left.has_side_effects(a)){for(var e,f="="==this.operator&&this.left instanceof xb,g=this.right.clone(),b=g;(f||!b.car.has_side_effects(a))&&(e=b,b.cdr instanceof Za);)b=b.cdr=b.cdr.clone();if(e){var d=this.clone();return d.right=e.cdr,e.cdr=d,g.optimize(a)}}}return this});var M=y("== === != !== * & | ^");a(eb,function(a,b){function f(){return a.left.is_constant()||a.right.is_constant()||!a.left.has_side_effects(b)&&!a.right.has_side_effects(b)}function g(b){if(f()){b&&(a.operator=b);var c=a.left;a.left=a.right,a.right=c}}if(M(a.operator)&&a.right.is_constant()&&!a.left.is_constant()&&(a.left instanceof eb&&dc[a.left.operator]>=dc[a.operator]||g()),a=a.lift_sequences(b),b.option("comparisons"))switch(a.operator){case"===":case"!==":(a.left.is_string(b)&&a.right.is_string(b)||a.left.is_number(b)&&a.right.is_number(b)||a.left.is_boolean()&&a.right.is_boolean())&&(a.operator=a.operator.substr(0,2));case"==":case"!=":if(a.left instanceof Bb&&"undefined"==a.left.value&&a.right instanceof cb&&"typeof"==a.right.operator){var h=a.right.expression;(h instanceof xb?h.undeclared():h instanceof $a&&!b.option("screw_ie8"))||(a.right=h,a.left=c(Hb,a.left).optimize(b),2==a.operator.length&&(a.operator+="="))}}if(b.option("booleans")&&"+"==a.operator&&b.in_boolean_context()){var i=a.left.evaluate(b),j=a.right.evaluate(b);if(i&&"string"==typeof i)return b.warn("+ in boolean context always true [{file}:{line},{col}]",a.start),c(Za,a,{car:a.right,cdr:c(Mb,a)}).optimize(b);if(j&&"string"==typeof j)return b.warn("+ in boolean context always true [{file}:{line},{col}]",a.start),c(Za,a,{car:a.left,cdr:c(Mb,a)}).optimize(b)}if(b.option("comparisons")&&a.is_boolean()){if(!(b.parent()instanceof eb)||b.parent()instanceof gb){var k=c(cb,a,{operator:"!",expression:a.negate(b,C(b))});a=G(b,a,k)}
-if(b.option("unsafe_comps"))switch(a.operator){case"<":g(">");break;case"<=":g(">=")}}if("+"==a.operator){if(a.right instanceof Bb&&""==a.right.getValue()&&a.left.is_string(b))return a.left;if(a.left instanceof Bb&&""==a.left.getValue()&&a.right.is_string(b))return a.right;if(a.left instanceof eb&&"+"==a.left.operator&&a.left.left instanceof Bb&&""==a.left.left.getValue()&&a.right.is_string(b))return a.left=a.left.right,a.transform(b)}if(b.option("evaluate")){switch(a.operator){case"&&":var i=a.left.evaluate(b);if(!i)return b.warn("Condition left of && always false [{file}:{line},{col}]",a.start),e(b.parent(),a,a.left).optimize(b);if(i!==a.left)return b.warn("Condition left of && always true [{file}:{line},{col}]",a.start),e(b.parent(),a,a.right).optimize(b);if(b.option("booleans")&&b.in_boolean_context()){var j=a.right.evaluate(b);if(!j)return b.warn("Boolean && always false [{file}:{line},{col}]",a.start),c(Za,a,{car:a.left,cdr:c(Lb,a)}).optimize(b);if(j!==a.right)return b.warn("Dropping side-effect-free && in boolean context [{file}:{line},{col}]",a.start),a.left.optimize(b)}break;case"||":var i=a.left.evaluate(b);if(!i)return b.warn("Condition left of || always false [{file}:{line},{col}]",a.start),e(b.parent(),a,a.right).optimize(b);if(i!==a.left)return b.warn("Condition left of || always true [{file}:{line},{col}]",a.start),e(b.parent(),a,a.left).optimize(b);if(b.option("booleans")&&b.in_boolean_context()){var j=a.right.evaluate(b);if(!j)return b.warn("Dropping side-effect-free || in boolean context [{file}:{line},{col}]",a.start),a.left.optimize(b);if(j!==a.right)return b.warn("Boolean || always true [{file}:{line},{col}]",a.start),c(Za,a,{car:a.left,cdr:c(Mb,a)}).optimize(b)}}var l=!0;switch(a.operator){case"+":if(a.left instanceof Ab&&a.right instanceof eb&&"+"==a.right.operator&&a.right.left instanceof Ab&&a.right.is_string(b)&&(a=c(eb,a,{operator:"+",left:c(Bb,a.left,{value:""+a.left.getValue()+a.right.left.getValue(),start:a.left.start,end:a.right.left.end}),right:a.right.right})),a.right instanceof Ab&&a.left instanceof eb&&"+"==a.left.operator&&a.left.right instanceof Ab&&a.left.is_string(b)&&(a=c(eb,a,{operator:"+",left:a.left.left,right:c(Bb,a.right,{value:""+a.left.right.getValue()+a.right.getValue(),start:a.left.right.start,end:a.right.end})})),a.left instanceof eb&&"+"==a.left.operator&&a.left.is_string(b)&&a.left.right instanceof Ab&&a.right instanceof eb&&"+"==a.right.operator&&a.right.left instanceof Ab&&a.right.is_string(b)&&(a=c(eb,a,{operator:"+",left:c(eb,a.left,{operator:"+",left:a.left.left,right:c(Bb,a.left.right,{value:""+a.left.right.getValue()+a.right.left.getValue(),start:a.left.right.start,end:a.right.left.end})}),right:a.right.right})),a.right instanceof cb&&"-"==a.right.operator&&a.left.is_number(b)){a=c(eb,a,{operator:"-",left:a.left,right:a.right.expression});break}if(a.left instanceof cb&&"-"==a.left.operator&&f()&&a.right.is_number(b)){a=c(eb,a,{operator:"-",left:a.right,right:a.left.expression});break}case"*":l=b.option("unsafe_math");case"&":case"|":case"^":if(a.left.is_number(b)&&a.right.is_number(b)&&f()&&!(a.left instanceof eb&&a.left.operator!=a.operator&&dc[a.left.operator]>=dc[a.operator])){var m=c(eb,a,{operator:a.operator,left:a.right,right:a.left});a=a.right instanceof Ab&&!(a.left instanceof Ab)?G(b,m,a):G(b,a,m)}l&&a.is_number(b)&&(a.right instanceof eb&&a.right.operator==a.operator&&(a=c(eb,a,{operator:a.operator,left:c(eb,a.left,{operator:a.operator,left:a.left,right:a.right.left,start:a.left.start,end:a.right.left.end}),right:a.right.right})),a.right instanceof Ab&&a.left instanceof eb&&a.left.operator==a.operator&&(a.left.left instanceof Ab?a=c(eb,a,{operator:a.operator,left:c(eb,a.left,{operator:a.operator,left:a.left.left,right:a.right,start:a.left.left.start,end:a.right.end}),right:a.left.right}):a.left.right instanceof Ab&&(a=c(eb,a,{operator:a.operator,left:c(eb,a.left,{operator:a.operator,left:a.left.right,right:a.right,start:a.left.right.start,end:a.right.end}),right:a.left.left}))),a.left instanceof eb&&a.left.operator==a.operator&&a.left.right instanceof Ab&&a.right instanceof eb&&a.right.operator==a.operator&&a.right.left instanceof Ab&&(a=c(eb,a,{operator:a.operator,left:c(eb,a.left,{operator:a.operator,left:c(eb,a.left.left,{operator:a.operator,left:a.left.right,right:a.right.left,start:a.left.right.start,end:a.right.left.end}),right:a.left.left}),right:a.right.right})))}}if(a.right instanceof eb&&a.right.operator==a.operator&&("&&"==a.operator||"||"==a.operator||"+"==a.operator&&(a.right.left.is_string(b)||a.left.is_string(b)&&a.right.right.is_string(b))))return a.left=c(eb,a.left,{operator:a.operator,left:a.left,right:a.right.left}),a.right=a.right.right,a.transform(b);var n=a.evaluate(b);return n!==a?(n=d(n,a).optimize(b),G(b,n,a)):a}),a(xb,function(a,b){var e=a.resolve_defines(b);if(e)return e.optimize(b);if(b.option("screw_ie8")&&a.undeclared()&&(!a.scope.uses_with||!b.find_parent(xa)))switch(a.name){case"undefined":return c(Hb,a).optimize(b);case"NaN":return c(Gb,a).optimize(b);case"Infinity":return c(Jb,a).optimize(b)}if(b.option("evaluate")&&b.option("reduce_vars")){var f=a.definition(),g=a.fixed_value();if(g){if(void 0===f.should_replace){var h=g.evaluate(b);if(h!==g){h=d(h,g);var i=D(h.optimize(b),g).print_to_string().length,j=f.name.length,k=f.references.length,l=f.global||!k?0:(j+2+i)/k;f.should_replace=i<=j+l&&h}else f.should_replace=!1}if(f.should_replace)return D(f.should_replace.optimize(b),g).clone(!0)}}return a}),a(Hb,function(a,d){if(d.option("unsafe")){var e=b(d,"undefined");if(e){var f=c(xb,a,{name:"undefined",scope:e.scope,thedef:e});return f.is_undefined=!0,f}}var g=x(d.self(),d.parent());return g&&J(g,a)?a:c(cb,a,{operator:"void",expression:c(Cb,a,{value:0})})}),a(Jb,function(a,d){var e=x(d.self(),d.parent());return e&&J(e,a)?a:!d.option("keep_infinity")||e&&!J(e,a)||b(d,"Infinity")?c(eb,a,{operator:"/",left:c(Cb,a,{value:1}),right:c(Cb,a,{value:0})}):a}),a(Gb,function(a,d){var e=x(d.self(),d.parent());return e&&!J(e,a)||b(d,"NaN")?c(eb,a,{operator:"/",left:c(Cb,a,{value:0}),right:c(Cb,a,{value:0})}):a});var N=["+","-","/","*","%",">>","<<",">>>","|","^","&"],O=["*","|","^","&"];a(gb,function(a,b){return a=a.lift_sequences(b),"="==a.operator&&a.left instanceof xb&&a.right instanceof eb&&(a.right.left instanceof xb&&a.right.left.name==a.left.name&&g(a.right.operator,N)?(a.operator=a.right.operator+"=",a.right=a.right.right):a.right.right instanceof xb&&a.right.right.name==a.left.name&&g(a.right.operator,O)&&!a.right.left.has_side_effects(b)&&(a.operator=a.right.operator+"=",a.right=a.right.left)),a}),a(fb,function(a,b){function d(a){return a.is_boolean()?a:c(cb,a,{operator:"!",expression:a.negate(b)})}function f(a){return a instanceof Mb||a instanceof cb&&"!"==a.operator&&a.expression instanceof Ab&&!a.expression.value}function g(a){return a instanceof Lb||a instanceof cb&&"!"==a.operator&&a.expression instanceof Ab&&!!a.expression.value}if(!b.option("conditionals"))return a;if(a.condition instanceof Za){var h=a.condition.car;return a.condition=a.condition.cdr,Za.cons(h,a)}var i=a.condition.evaluate(b);if(i!==a.condition)return i?(b.warn("Condition always true [{file}:{line},{col}]",a.start),e(b.parent(),a,a.consequent)):(b.warn("Condition always false [{file}:{line},{col}]",a.start),e(b.parent(),a,a.alternative));var j=i.negate(b,C(b));G(b,i,j)===j&&(a=c(fb,a,{condition:j,consequent:a.alternative,alternative:a.consequent}));var k=a.condition,l=a.consequent,m=a.alternative;return k instanceof xb&&l instanceof xb&&k.definition()===l.definition()?c(eb,a,{operator:"||",left:k,right:m}):l instanceof gb&&m instanceof gb&&l.operator==m.operator&&l.left.equivalent_to(m.left)&&(!a.condition.has_side_effects(b)||"="==l.operator&&!l.left.has_side_effects(b))?c(gb,a,{operator:l.operator,left:l.left,right:c(fb,a,{condition:a.condition,consequent:l.right,alternative:m.right})}):l instanceof Xa&&m.TYPE===l.TYPE&&1==l.args.length&&1==m.args.length&&l.expression.equivalent_to(m.expression)&&!l.expression.has_side_effects(b)?(l.args[0]=c(fb,a,{condition:a.condition,consequent:l.args[0],alternative:m.args[0]}),l):l instanceof fb&&l.alternative.equivalent_to(m)?c(fb,a,{condition:c(eb,a,{left:a.condition,operator:"&&",right:l.condition}),consequent:l.consequent,alternative:m}):l.equivalent_to(m)?c(Za,a,{car:a.condition,cdr:l}).optimize(b):f(a.consequent)?g(a.alternative)?d(a.condition):c(eb,a,{operator:"||",left:d(a.condition),right:a.alternative}):g(a.consequent)?f(a.alternative)?d(a.condition.negate(b)):c(eb,a,{operator:"&&",left:d(a.condition.negate(b)),right:a.alternative}):f(a.alternative)?c(eb,a,{operator:"||",left:d(a.condition.negate(b)),right:a.consequent}):g(a.alternative)?c(eb,a,{operator:"&&",left:d(a.condition),right:a.consequent}):a}),a(Kb,function(a,b){if(b.option("booleans")){var d=b.parent();return d instanceof eb&&("=="==d.operator||"!="==d.operator)?(b.warn("Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]",{operator:d.operator,value:a.value,file:d.start.file,line:d.start.line,col:d.start.col}),c(Cb,a,{value:+a.value})):c(cb,a,{operator:"!",expression:c(Cb,a,{value:1-a.value})})}return a}),a(ab,function(a,b){var e=a.property;if(e instanceof Bb&&b.option("properties")){if(e=e.getValue(),Pb(e)?b.option("screw_ie8"):P(e))return c(_a,a,{expression:a.expression,property:e}).optimize(b);var f=parseFloat(e);isNaN(f)||f.toString()!=e||(a.property=c(Cb,a.property,{value:f}))}var g=a.evaluate(b);return g!==a?(g=d(g,a).optimize(b),G(b,g,a)):a}),a(_a,function(a,b){var e=a.resolve_defines(b);if(e)return e.optimize(b);var f=a.property;if(Pb(f)&&!b.option("screw_ie8"))return c(ab,a,{expression:a.expression,property:c(Bb,a,{value:f})}).optimize(b);if(b.option("unsafe_proto")&&a.expression instanceof _a&&"prototype"==a.expression.property){var g=a.expression.expression;if(g instanceof xb&&g.undeclared())switch(g.name){case"Array":a.expression=c(hb,a.expression,{elements:[]});break;case"Object":a.expression=c(ib,a.expression,{properties:[]});break;case"String":a.expression=c(Bb,a.expression,{value:""})}}var h=a.evaluate(b);return h!==a?(h=d(h,a).optimize(b),G(b,h,a)):a}),a(hb,K),a(ib,K),a(Db,K),a(Ga,function(a,b){return a.value&&w(a.value,b)&&(a.value=null),a}),a(Wa,function(a,b){var c=b.option("global_defs");return c&&B(c,a.name.name)&&b.warn("global_defs "+a.name.name+" redefined [{file}:{line},{col}]",a.start),a})}(),function(){function a(a){if("Literal"==a.type)return null!=a.raw?a.raw:a.value+""}function b(b){var c=b.loc,d=c&&c.start,e=b.range;return new ga({file:c&&c.source,line:d&&d.line,col:d&&d.column,pos:e?e[0]:b.start,endline:d&&d.line,endcol:d&&d.column,endpos:e?e[0]:b.start,raw:a(b)})}function d(b){var c=b.loc,d=c&&c.end,e=b.range;return new ga({file:c&&c.source,line:d&&d.line,col:d&&d.column,pos:e?e[1]:b.end,endline:d&&d.line,endcol:d&&d.column,endpos:e?e[1]:b.end,raw:a(b)})}function e(a,e,g){var k="function From_Moz_"+a+"(M){\n";k+="return new U2."+e.name+"({\nstart: my_start_token(M),\nend: my_end_token(M)";var m="function To_Moz_"+a+"(M){\n";m+="return {\ntype: "+JSON.stringify(a),g&&g.split(/\s*,\s*/).forEach(function(a){var b=/([a-z0-9$_]+)(=|@|>|%)([a-z0-9$_]+)/i.exec(a);if(!b)throw new Error("Can't understand property map: "+a);var c=b[1],d=b[2],e=b[3];switch(k+=",\n"+e+": ",m+=",\n"+c+": ",d){case"@":k+="M."+c+".map(from_moz)",m+="M."+e+".map(to_moz)";break;case">":k+="from_moz(M."+c+")",m+="to_moz(M."+e+")";break;case"=":k+="M."+c,m+="M."+e;break;case"%":k+="from_moz(M."+c+").body",m+="to_moz_block(M)";break;default:throw new Error("Can't understand operator in propmap: "+a)}}),k+="\n})\n}",m+="\n}\n}",k=new Function("U2","my_start_token","my_end_token","from_moz","return("+k+")")(c,b,d,f),m=new Function("to_moz","to_moz_block","return("+m+")")(i,j),l[a]=k,h(e,m)}function f(a){m.push(a);var b=null!=a?l[a.type](a):null;return m.pop(),b}function g(a,b,c){var d=a.start,e=a.end;return null!=d.pos&&null!=e.endpos&&(b.range=[d.pos,e.endpos]),d.line&&(b.loc={start:{line:d.line,column:d.col},end:e.endline?{line:e.endline,column:e.endcol}:null},d.file&&(b.loc.source=d.file)),b}function h(a,b){a.DEFMETHOD("to_mozilla_ast",function(){return g(this,b(this))})}function i(a){return null!=a?a.to_mozilla_ast():null}function j(a){return{type:"BlockStatement",body:a.body.map(i)}}var k=function(a){for(var b=!0,c=0;c<a.length;c++)b&&a[c]instanceof ia&&a[c].body instanceof Bb?a[c]=new ka({start:a[c].start,end:a[c].end,value:a[c].body.value}):!b||a[c]instanceof ia&&a[c].body instanceof Bb||(b=!1);return a},l={Program:function(a){return new za({start:b(a),end:d(a),body:k(a.body.map(f))})},FunctionDeclaration:function(a){return new Da({start:b(a),end:d(a),name:f(a.id),argnames:a.params.map(f),body:k(f(a.body).body)})},FunctionExpression:function(a){return new Ca({start:b(a),end:d(a),name:f(a.id),argnames:a.params.map(f),body:k(f(a.body).body)})},ExpressionStatement:function(a){return new la({start:b(a),end:d(a),body:f(a.expression)})},TryStatement:function(a){var c=a.handlers||[a.handler];if(c.length>1||a.guardedHandlers&&a.guardedHandlers.length)throw new Error("Multiple catch clauses are not supported.");return new Qa({start:b(a),end:d(a),body:f(a.block).body,bcatch:f(c[0]),bfinally:a.finalizer?new Sa(f(a.finalizer)):null})},Property:function(a){var c=a.key,e="Identifier"==c.type?c.name:c.value,g={start:b(c),end:d(a.value),key:e,value:f(a.value)};switch(a.kind){case"init":return new kb(g);case"set":return g.value.name=f(c),new lb(g);case"get":return g.value.name=f(c),new mb(g)}},ArrayExpression:function(a){return new hb({start:b(a),end:d(a),elements:a.elements.map(function(a){return null===a?new Ib:f(a)})})},ObjectExpression:function(a){return new ib({start:b(a),end:d(a),properties:a.properties.map(function(a){return a.type="Property",f(a)})})},SequenceExpression:function(a){return Za.from_array(a.expressions.map(f))},MemberExpression:function(a){return new(a.computed?ab:_a)({start:b(a),end:d(a),property:a.computed?f(a.property):a.property.name,expression:f(a.object)})},SwitchCase:function(a){return new(a.test?Pa:Oa)({start:b(a),end:d(a),expression:f(a.test),body:a.consequent.map(f)})},VariableDeclaration:function(a){return new("const"===a.kind?Va:Ua)({start:b(a),end:d(a),definitions:a.declarations.map(f)})},Literal:function(a){var c=a.value,e={start:b(a),end:d(a)};if(null===c)return new Fb(e);switch(typeof c){case"string":return e.value=c,new Bb(e);case"number":return e.value=c,new Cb(e);case"boolean":return new(c?Mb:Lb)(e);default:var f=a.regex;return f&&f.pattern?e.value=new RegExp(f.pattern,f.flags).toString():e.value=a.regex&&a.raw?a.raw:c,new Db(e)}},Identifier:function(a){var c=m[m.length-2];return new("LabeledStatement"==c.type?wb:"VariableDeclarator"==c.type&&c.id===a?"const"==c.kind?rb:qb:"FunctionExpression"==c.type?c.id===a?ub:sb:"FunctionDeclaration"==c.type?c.id===a?tb:sb:"CatchClause"==c.type?vb:"BreakStatement"==c.type||"ContinueStatement"==c.type?yb:xb)({start:b(a),end:d(a),name:a.name})}};l.UpdateExpression=l.UnaryExpression=function(a){return new(("prefix"in a?a.prefix:"UnaryExpression"==a.type)?cb:db)({start:b(a),end:d(a),operator:a.operator,expression:f(a.argument)})},e("EmptyStatement",oa),e("BlockStatement",na,"body@body"),e("IfStatement",La,"test>condition, consequent>body, alternate>alternative"),e("LabeledStatement",qa,"label>label, body>body"),e("BreakStatement",Ja,"label>label"),e("ContinueStatement",Ka,"label>label"),e("WithStatement",xa,"object>expression, body>body"),e("SwitchStatement",Ma,"discriminant>expression, cases@body"),e("ReturnStatement",Ga,"argument>value"),e("ThrowStatement",Ha,"argument>value"),e("WhileStatement",ua,"test>condition, body>body"),e("DoWhileStatement",ta,"test>condition, body>body"),e("ForStatement",va,"init>init, test>condition, update>step, body>body"),e("ForInStatement",wa,"left>init, right>object, body>body"),e("DebuggerStatement",ja),e("VariableDeclarator",Wa,"id>name, init>value"),e("CatchClause",Ra,"param>argname, body%body"),e("ThisExpression",zb),e("BinaryExpression",eb,"operator=operator, left>left, right>right"),e("LogicalExpression",eb,"operator=operator, left>left, right>right"),e("AssignmentExpression",gb,"operator=operator, left>left, right>right"),e("ConditionalExpression",fb,"test>condition, consequent>consequent, alternate>alternative"),e("NewExpression",Ya,"callee>expression, arguments@args"),e("CallExpression",Xa,"callee>expression, arguments@args"),h(za,function(a){return{type:"Program",body:a.body.map(i)}}),h(Da,function(a){return{type:"FunctionDeclaration",id:i(a.name),params:a.argnames.map(i),body:j(a)}}),h(Ca,function(a){return{type:"FunctionExpression",id:i(a.name),params:a.argnames.map(i),body:j(a)}}),h(ka,function(a){return{type:"ExpressionStatement",expression:{type:"Literal",value:a.value}}}),h(la,function(a){return{type:"ExpressionStatement",expression:i(a.body)}}),h(Na,function(a){return{type:"SwitchCase",test:i(a.expression),consequent:a.body.map(i)}}),h(Qa,function(a){return{type:"TryStatement",block:j(a),handler:i(a.bcatch),guardedHandlers:[],finalizer:i(a.bfinally)}}),h(Ra,function(a){return{type:"CatchClause",param:i(a.argname),guard:null,body:j(a)}}),h(Ta,function(a){return{type:"VariableDeclaration",kind:a instanceof Va?"const":"var",declarations:a.definitions.map(i)}}),h(Za,function(a){return{type:"SequenceExpression",expressions:a.to_array().map(i)}}),h($a,function(a){var b=a instanceof ab;return{type:"MemberExpression",object:i(a.expression),computed:b,property:b?i(a.property):{type:"Identifier",name:a.property}}}),h(bb,function(a){return{type:"++"==a.operator||"--"==a.operator?"UpdateExpression":"UnaryExpression",operator:a.operator,prefix:a instanceof cb,argument:i(a.expression)}}),h(eb,function(a){return{type:"&&"==a.operator||"||"==a.operator?"LogicalExpression":"BinaryExpression",left:i(a.left),operator:a.operator,right:i(a.right)}}),h(hb,function(a){return{type:"ArrayExpression",elements:a.elements.map(i)}}),h(ib,function(a){return{type:"ObjectExpression",properties:a.properties.map(i)}}),h(jb,function(a){var b,c=M(a.key)?{type:"Identifier",name:a.key}:{type:"Literal",value:a.key};return a instanceof kb?b="init":a instanceof mb?b="get":a instanceof lb&&(b="set"),{type:"Property",kind:b,key:c,value:i(a.value)}}),h(nb,function(a){var b=a.definition();return{type:"Identifier",name:b?b.mangled_name||b.name:a.name}}),h(Db,function(a){var b=a.value;return{type:"Literal",value:b,raw:b.toString(),regex:{pattern:b.source,flags:b.toString().match(/[gimuy]*$/)[0]}}}),h(Ab,function(a){var b=a.value;return"number"==typeof b&&(b<0||0===b&&1/b<0)?{type:"UnaryExpression",operator:"-",prefix:!0,argument:{type:"Literal",value:-b,raw:a.start.raw}}:{type:"Literal",value:b,raw:a.start.raw}}),h(Eb,function(a){return{type:"Identifier",name:String(a.value)}}),Kb.DEFMETHOD("to_mozilla_ast",Ab.prototype.to_mozilla_ast),Fb.DEFMETHOD("to_mozilla_ast",Ab.prototype.to_mozilla_ast),Ib.DEFMETHOD("to_mozilla_ast",function(){return null}),ma.DEFMETHOD("to_mozilla_ast",na.prototype.to_mozilla_ast),Aa.DEFMETHOD("to_mozilla_ast",Ca.prototype.to_mozilla_ast);var m=null;ha.from_mozilla_ast=function(a){var b=m;m=[];var c=f(a);return m=b,c}}(),c.Compressor=$,c.DefaultsError=k,c.Dictionary=A,c.JS_Parse_Error=R,c.MAP=fa,c.OutputStream=Z,c.SourceMap=_,c.TreeTransformer=W,c.TreeWalker=F,c.base54=gc,c.defaults=l,c.mangle_properties=ba,c.merge=m,c.parse=V,c.push_uniq=s,c.string_template=t,c.tokenizer=U,c.is_identifier=M,c.SymbolDef=X,c.sys=ca,c.MOZ_SourceMap=da,c.UglifyJS=ea,c.array_to_hash=d,c.slice=e,c.characters=f,c.member=g,c.find_if=h,c.repeat_string=i,c.configure_error_stack=j,c.DefaultsError=k,c.defaults=l,c.merge=m,c.noop=n,c.return_false=o,c.return_true=p,c.return_this=q,c.return_null=r,c.MAP=fa,c.push_uniq=s,c.string_template=t,c.remove=u,c.mergeSort=v,c.set_difference=w,c.set_intersection=x,c.makePredicate=y,c.all=z,c.Dictionary=A,c.HOP=B,c.first_in_statement=C,c.DEFNODE=D,c.AST_Token=ga,c.AST_Node=ha,c.AST_Statement=ia,c.AST_Debugger=ja,c.AST_Directive=ka,c.AST_SimpleStatement=la,c.walk_body=E,c.AST_Block=ma,c.AST_BlockStatement=na,c.AST_EmptyStatement=oa,c.AST_StatementWithBody=pa,c.AST_LabeledStatement=qa,c.AST_IterationStatement=ra,c.AST_DWLoop=sa,c.AST_Do=ta,c.AST_While=ua,c.AST_For=va,c.AST_ForIn=wa,c.AST_With=xa,c.AST_Scope=ya,c.AST_Toplevel=za,c.AST_Lambda=Aa,c.AST_Accessor=Ba,c.AST_Function=Ca,c.AST_Defun=Da,c.AST_Jump=Ea,c.AST_Exit=Fa,c.AST_Return=Ga,c.AST_Throw=Ha,c.AST_LoopControl=Ia,c.AST_Break=Ja,c.AST_Continue=Ka,c.AST_If=La,c.AST_Switch=Ma,c.AST_SwitchBranch=Na,c.AST_Default=Oa,c.AST_Case=Pa,c.AST_Try=Qa,c.AST_Catch=Ra,c.AST_Finally=Sa,c.AST_Definitions=Ta,c.AST_Var=Ua,c.AST_Const=Va,c.AST_VarDef=Wa,c.AST_Call=Xa,c.AST_New=Ya,c.AST_Seq=Za,c.AST_PropAccess=$a,c.AST_Dot=_a,c.AST_Sub=ab,c.AST_Unary=bb,c.AST_UnaryPrefix=cb,c.AST_UnaryPostfix=db,c.AST_Binary=eb,c.AST_Conditional=fb,c.AST_Assign=gb,c.AST_Array=hb,c.AST_Object=ib,c.AST_ObjectProperty=jb,c.AST_ObjectKeyVal=kb,c.AST_ObjectSetter=lb,c.AST_ObjectGetter=mb,c.AST_Symbol=nb,c.AST_SymbolAccessor=ob,c.AST_SymbolDeclaration=pb,c.AST_SymbolVar=qb,c.AST_SymbolConst=rb,c.AST_SymbolFunarg=sb,c.AST_SymbolDefun=tb,c.AST_SymbolLambda=ub,c.AST_SymbolCatch=vb,c.AST_Label=wb,c.AST_SymbolRef=xb,c.AST_LabelRef=yb,c.AST_This=zb,c.AST_Constant=Ab,c.AST_String=Bb,c.AST_Number=Cb,c.AST_RegExp=Db,c.AST_Atom=Eb,c.AST_Null=Fb,c.AST_NaN=Gb,c.AST_Undefined=Hb,c.AST_Hole=Ib,c.AST_Infinity=Jb,c.AST_Boolean=Kb,c.AST_False=Lb,c.AST_True=Mb,c.TreeWalker=F,c.KEYWORDS=Nb,c.KEYWORDS_ATOM=Ob,c.RESERVED_WORDS=Pb,c.KEYWORDS_BEFORE_EXPRESSION=Qb,c.OPERATOR_CHARS=Rb,c.RE_HEX_NUMBER=Sb,c.RE_OCT_NUMBER=Tb,c.OPERATORS=Ub,c.WHITESPACE_CHARS=Vb,c.NEWLINE_CHARS=Wb,c.PUNC_BEFORE_EXPRESSION=Xb,c.PUNC_CHARS=Yb,c.REGEXP_MODIFIERS=Zb,c.UNICODE=$b,c.is_letter=G,c.is_digit=H,c.is_alphanumeric_char=I,c.is_unicode_digit=J,c.is_unicode_combining_mark=K,c.is_unicode_connector_punctuation=L,c.is_identifier=M,c.is_identifier_start=N,c.is_identifier_char=O,c.is_identifier_string=P,c.parse_js_number=Q,c.JS_Parse_Error=R,c.js_error=S,c.is_token=T,c.EX_EOF=_b,c.tokenizer=U,c.UNARY_PREFIX=ac,c.UNARY_POSTFIX=bc,c.ASSIGNMENT=cc,c.PRECEDENCE=dc,c.STATEMENTS_WITH_LABELS=ec,c.ATOMIC_START_TOKEN=fc,c.parse=V,c.TreeTransformer=W,c.SymbolDef=X,c.base54=gc,c.EXPECT_DIRECTIVE=hc,c.is_some_comments=Y,c.OutputStream=Z,c.Compressor=$,c.SourceMap=_,c.find_builtins=aa,c.mangle_properties=ba,c.AST_Node.warn_function=function(a){"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(a)},c.minify=function(a,c){function d(a,b){var d=c.fromString?a:fs.readFileSync(a,"utf8");"inline"==e&&(e=read_source_map(d)),g[b]=d,f=ea.parse(d,{filename:b,toplevel:f,bare_returns:c.parse?c.parse.bare_returns:void 0})}c=ea.defaults(c,{compress:{},fromString:!1,inSourceMap:null,mangle:{},mangleProperties:!1,nameCache:null,outFileName:null,output:null,outSourceMap:null,parse:{},sourceMapInline:!1,sourceMapUrl:null,sourceRoot:null,spidermonkey:!1,warnings:!1}),ea.base54.reset();var e=c.inSourceMap;"string"==typeof e&&"inline"!=e&&(e=JSON.parse(fs.readFileSync(e,"utf8")));var f=null,g={};if(c.spidermonkey){if("inline"==e)throw new Error("inline source map only works with built-in parser");f=ea.AST_Node.from_mozilla_ast(a)}else{if(!c.fromString&&(a=ea.simple_glob(a),"inline"==e&&a.length>1))throw new Error("inline source map only works with singular input");[].concat(a).forEach(function(a,b){if("string"==typeof a)d(a,c.fromString?b:a);else for(var e in a)d(a[e],e)})}if(c.wrap&&(f=f.wrap_commonjs(c.wrap,c.exportAll)),c.compress){var h={warnings:c.warnings};ea.merge(h,c.compress),f.figure_out_scope(c.mangle);var i=ea.Compressor(h);f=i.compress(f)}(c.mangleProperties||c.nameCache)&&(c.mangleProperties.cache=ea.readNameCache(c.nameCache,"props"),f=ea.mangle_properties(f,c.mangleProperties),ea.writeNameCache(c.nameCache,"props",c.mangleProperties.cache)),c.mangle&&(f.figure_out_scope(c.mangle),f.compute_char_frequency(c.mangle),f.mangle_names(c.mangle));var j={max_line_len:32e3};if((c.outSourceMap||c.sourceMapInline)&&(j.source_map=ea.SourceMap({file:c.outFileName||("string"==typeof c.outSourceMap?c.outSourceMap.replace(/\.map$/i,""):null),orig:e,root:c.sourceRoot}),c.sourceMapIncludeSources))for(var k in g)g.hasOwnProperty(k)&&j.source_map.get().setSourceContent(k,g[k]);c.output&&ea.merge(j,c.output);var l=ea.OutputStream(j);f.print(l);var m=j.source_map;m&&(m+="");return c.sourceMapInline?l+="\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,"+new b(m).toString("base64"):c.outSourceMap&&"string"==typeof c.outSourceMap&&!1!==c.sourceMapUrl&&(l+="\n//# sourceMappingURL="+("string"==typeof c.sourceMapUrl?c.sourceMapUrl:c.outSourceMap)),{code:l+"",map:m}},c.describe_ast=function(){function a(c){b.print("AST_"+c.TYPE);var d=c.SELF_PROPS.filter(function(a){return!/^\$/.test(a)});d.length>0&&(b.space(),b.with_parens(function(){d.forEach(function(a,c){c&&b.space(),b.print(a)})})),c.documentation&&(b.space(),b.print_string(c.documentation)),c.SUBCLASSES.length>0&&(b.space(),b.with_block(function(){c.SUBCLASSES.forEach(function(c,d){b.indent(),a(c),b.newline()})}))}var b=ea.OutputStream({beautify:!0});return a(ea.AST_Node),b+""}}).call(this,a("buffer").Buffer)},{buffer:5,"source-map":152,util:164}],159:[function(a,b,c){"use strict";function d(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function e(a,b,c){if(a&&j.isObject(a)&&a instanceof d)return a;var e=new d;return e.parse(a,b,c),e}function f(a){return j.isString(a)&&(a=e(a)),a instanceof d?a.format():d.prototype.format.call(a)}function g(a,b){return e(a,!1,!0).resolve(b)}function h(a,b){return a?e(a,!1,!0).resolveObject(b):b}var i=a("punycode"),j=a("./util");c.parse=e,c.resolve=g,c.resolveObject=h,c.format=f,c.Url=d;var k=/^([a-z0-9.+-]+:)/i,l=/:[0-9]*$/,m=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,n=["<",">",'"',"`"," ","\r","\n","\t"],o=["{","}","|","\\","^","`"].concat(n),p=["'"].concat(o),q=["%","/","?",";","#"].concat(p),r=["/","?","#"],s={javascript:!0,"javascript:":!0},t={javascript:!0,"javascript:":!0},u={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},v=a("querystring");d.prototype.parse=function(a,b,c){if(!j.isString(a))throw new TypeError("Parameter 'url' must be a string, not "+typeof a);var d=a.indexOf("?"),e=-1!==d&&d<a.indexOf("#")?"?":"#",f=a.split(e);f[0]=f[0].replace(/\\/g,"/"),a=f.join(e);var g=a;if(g=g.trim(),!c&&1===a.split("#").length){var h=m.exec(g);if(h)return this.path=g,this.href=g,this.pathname=h[1],h[2]?(this.search=h[2],this.query=b?v.parse(this.search.substr(1)):this.search.substr(1)):b&&(this.search="",this.query={}),this}var l=k.exec(g);if(l){l=l[0];var n=l.toLowerCase();this.protocol=n,g=g.substr(l.length)}if(c||l||g.match(/^\/\/[^@\/]+@[^@\/]+/)){var o="//"===g.substr(0,2);!o||l&&t[l]||(g=g.substr(2),this.slashes=!0)}if(!t[l]&&(o||l&&!u[l])){for(var w=-1,x=0;x<r.length;x++){var y=g.indexOf(r[x]);-1!==y&&(-1===w||y<w)&&(w=y)}var z,A;A=-1===w?g.lastIndexOf("@"):g.lastIndexOf("@",w),-1!==A&&(z=g.slice(0,A),g=g.slice(A+1),this.auth=decodeURIComponent(z)),w=-1;for(var x=0;x<q.length;x++){var y=g.indexOf(q[x]);-1!==y&&(-1===w||y<w)&&(w=y)}-1===w&&(w=g.length),this.host=g.slice(0,w),g=g.slice(w),this.parseHost(),this.hostname=this.hostname||"";var B="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!B)for(var C=this.hostname.split(/\./),x=0,D=C.length;x<D;x++){var E=C[x];if(E&&!E.match(/^[+a-z0-9A-Z_-]{0,63}$/)){for(var F="",G=0,H=E.length;G<H;G++)E.charCodeAt(G)>127?F+="x":F+=E[G];if(!F.match(/^[+a-z0-9A-Z_-]{0,63}$/)){var I=C.slice(0,x),J=C.slice(x+1),K=E.match(/^([+a-z0-9A-Z_-]{0,63})(.*)$/);K&&(I.push(K[1]),J.unshift(K[2])),J.length&&(g="/"+J.join(".")+g),this.hostname=I.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),B||(this.hostname=i.toASCII(this.hostname));var L=this.port?":"+this.port:"",M=this.hostname||"";this.host=M+L,this.href+=this.host,B&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==g[0]&&(g="/"+g))}if(!s[n])for(var x=0,D=p.length;x<D;x++){var N=p[x];if(-1!==g.indexOf(N)){var O=encodeURIComponent(N);O===N&&(O=escape(N)),g=g.split(N).join(O)}}var P=g.indexOf("#");-1!==P&&(this.hash=g.substr(P),g=g.slice(0,P));var Q=g.indexOf("?");if(-1!==Q?(this.search=g.substr(Q),this.query=g.substr(Q+1),b&&(this.query=v.parse(this.query)),g=g.slice(0,Q)):b&&(this.search="",this.query={}),g&&(this.pathname=g),u[n]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var L=this.pathname||"",R=this.search||"";this.path=L+R}return this.href=this.format(),this},d.prototype.format=function(){var a=this.auth||"";a&&(a=encodeURIComponent(a),a=a.replace(/%3A/i,":"),a+="@");var b=this.protocol||"",c=this.pathname||"",d=this.hash||"",e=!1,f="";this.host?e=a+this.host:this.hostname&&(e=a+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(e+=":"+this.port)),this.query&&j.isObject(this.query)&&Object.keys(this.query).length&&(f=v.stringify(this.query));var g=this.search||f&&"?"+f||"";return b&&":"!==b.substr(-1)&&(b+=":"),this.slashes||(!b||u[b])&&!1!==e?(e="//"+(e||""),c&&"/"!==c.charAt(0)&&(c="/"+c)):e||(e=""),d&&"#"!==d.charAt(0)&&(d="#"+d),g&&"?"!==g.charAt(0)&&(g="?"+g),c=c.replace(/[?#]/g,function(a){return encodeURIComponent(a)}),g=g.replace("#","%23"),b+e+c+g+d},d.prototype.resolve=function(a){return this.resolveObject(e(a,!1,!0)).format()},d.prototype.resolveObject=function(a){if(j.isString(a)){var b=new d;b.parse(a,!1,!0),a=b}for(var c=new d,e=Object.keys(this),f=0;f<e.length;f++){var g=e[f];c[g]=this[g]}if(c.hash=a.hash,""===a.href)return c.href=c.format(),c;if(a.slashes&&!a.protocol){for(var h=Object.keys(a),i=0;i<h.length;i++){var k=h[i];"protocol"!==k&&(c[k]=a[k])}return u[c.protocol]&&c.hostname&&!c.pathname&&(c.path=c.pathname="/"),c.href=c.format(),c}if(a.protocol&&a.protocol!==c.protocol){if(!u[a.protocol]){for(var l=Object.keys(a),m=0;m<l.length;m++){var n=l[m];c[n]=a[n]}return c.href=c.format(),c}if(c.protocol=a.protocol,a.host||t[a.protocol])c.pathname=a.pathname;else{for(var o=(a.pathname||"").split("/");o.length&&!(a.host=o.shift()););a.host||(a.host=""),a.hostname||(a.hostname=""),""!==o[0]&&o.unshift(""),o.length<2&&o.unshift(""),c.pathname=o.join("/")}if(c.search=a.search,c.query=a.query,c.host=a.host||"",c.auth=a.auth,c.hostname=a.hostname||a.host,c.port=a.port,c.pathname||c.search){var p=c.pathname||"",q=c.search||"";c.path=p+q}return c.slashes=c.slashes||a.slashes,c.href=c.format(),c}var r=c.pathname&&"/"===c.pathname.charAt(0),s=a.host||a.pathname&&"/"===a.pathname.charAt(0),v=s||r||c.host&&a.pathname,w=v,x=c.pathname&&c.pathname.split("/")||[],o=a.pathname&&a.pathname.split("/")||[],y=c.protocol&&!u[c.protocol];if(y&&(c.hostname="",c.port=null,c.host&&(""===x[0]?x[0]=c.host:x.unshift(c.host)),c.host="",a.protocol&&(a.hostname=null,a.port=null,a.host&&(""===o[0]?o[0]=a.host:o.unshift(a.host)),a.host=null),v=v&&(""===o[0]||""===x[0])),s)c.host=a.host||""===a.host?a.host:c.host,c.hostname=a.hostname||""===a.hostname?a.hostname:c.hostname,c.search=a.search,c.query=a.query,x=o;else if(o.length)x||(x=[]),x.pop(),x=x.concat(o),c.search=a.search,c.query=a.query;else if(!j.isNullOrUndefined(a.search)){if(y){c.hostname=c.host=x.shift();var z=!!(c.host&&c.host.indexOf("@")>0)&&c.host.split("@");z&&(c.auth=z.shift(),c.host=c.hostname=z.shift())}return c.search=a.search,c.query=a.query,j.isNull(c.pathname)&&j.isNull(c.search)||(c.path=(c.pathname?c.pathname:"")+(c.search?c.search:"")),c.href=c.format(),c}if(!x.length)return c.pathname=null,c.search?c.path="/"+c.search:c.path=null,c.href=c.format(),c;for(var A=x.slice(-1)[0],B=(c.host||a.host||x.length>1)&&("."===A||".."===A)||""===A,C=0,D=x.length;D>=0;D--)A=x[D],"."===A?x.splice(D,1):".."===A?(x.splice(D,1),C++):C&&(x.splice(D,1),
-C--);if(!v&&!w)for(;C--;C)x.unshift("..");!v||""===x[0]||x[0]&&"/"===x[0].charAt(0)||x.unshift(""),B&&"/"!==x.join("/").substr(-1)&&x.push("");var E=""===x[0]||x[0]&&"/"===x[0].charAt(0);if(y){c.hostname=c.host=E?"":x.length?x.shift():"";var z=!!(c.host&&c.host.indexOf("@")>0)&&c.host.split("@");z&&(c.auth=z.shift(),c.host=c.hostname=z.shift())}return v=v||c.host&&x.length,v&&!E&&x.unshift(""),x.length?c.pathname=x.join("/"):(c.pathname=null,c.path=null),j.isNull(c.pathname)&&j.isNull(c.search)||(c.path=(c.pathname?c.pathname:"")+(c.search?c.search:"")),c.auth=a.auth||c.auth,c.slashes=c.slashes||a.slashes,c.href=c.format(),c},d.prototype.parseHost=function(){var a=this.host,b=l.exec(a);b&&(b=b[0],":"!==b&&(this.port=b.substr(1)),a=a.substr(0,a.length-b.length)),a&&(this.hostname=a)}},{"./util":160,punycode:112,querystring:115}],160:[function(a,b,c){"use strict";b.exports={isString:function(a){return"string"==typeof a},isObject:function(a){return"object"==typeof a&&null!==a},isNull:function(a){return null===a},isNullOrUndefined:function(a){return null==a}}},{}],161:[function(a,b,c){(function(a){function c(a,b){function c(){if(!e){if(d("throwDeprecation"))throw new Error(b);d("traceDeprecation")?console.trace(b):console.warn(b),e=!0}return a.apply(this,arguments)}if(d("noDeprecation"))return a;var e=!1;return c}function d(b){try{if(!a.localStorage)return!1}catch(a){return!1}var c=a.localStorage[b];return null!=c&&"true"===String(c).toLowerCase()}b.exports=c}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],162:[function(a,b,c){arguments[4][104][0].apply(c,arguments)},{dup:104}],163:[function(a,b,c){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8}},{}],164:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"\e["+e.colors[c][0]+"m"+a+"\e["+e.colors[c][1]+"m":a}function g(a,b){return a}function h(a){var b={};return a.forEach(function(a,c){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){r=" [Function"+(b.name?": "+b.name:"")+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(d<0)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var v;return v=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(v,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;g<h;++g)F(b,String(g))?f.push(m(a,b,c,d,String(g),!0)):f.push("");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return"  "+a}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return"   "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0;return a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n  ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||void 0===a}function C(a){return Object.prototype.toString.call(a)}function D(a){return a<10?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),I[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}c.format=function(a){if(!t(a)){for(var b=[],c=0;c<arguments.length;c++)b.push(e(arguments[c]));return b.join(" ")}for(var c=1,d=arguments,f=d.length,g=String(a).replace(/%[sdj%]/g,function(a){if("%%"===a)return"%";if(c>=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(a){return"[Circular]"}default:return a}}),h=d[c];c<f;h=d[++c])q(h)||!x(h)?g+=" "+h:g+=" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(!0===b.noDeprecation)return a;var g=!1;return f};var G,H={};c.debuglog=function(a){if(v(G)&&(G=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!H[a])if(new RegExp("\\b"+a+"\\b","i").test(G)){var d=b.pid;H[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else H[a]=function(){};return H[a]},c.inspect=e,e.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},e.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var I=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":163,_process:111,inherits:162}],165:[function(a,b,c){c.baseChar=/[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B36-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60\u0D61\u0E01-\u0E2E\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102\u1103\u1105-\u1107\u1109\u110B\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D\u116E\u1172\u1173\u1175\u119E\u11A8\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u212E\u2180-\u2182\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\uAC00-\uD7A3]/,c.ideographic=/[\u3007\u3021-\u3029\u4E00-\u9FA5]/,c.letter=/[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B36-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60\u0D61\u0E01-\u0E2E\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102\u1103\u1105-\u1107\u1109\u110B\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D\u116E\u1172\u1173\u1175\u119E\u11A8\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u212E\u2180-\u2182\u3007\u3021-\u3029\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\u4E00-\u9FA5\uAC00-\uD7A3]/,c.combiningChar=/[\u0300-\u0345\u0360\u0361\u0483-\u0486\u0591-\u05A1\u05A3-\u05B9\u05BB-\u05BD\u05BF\u05C1\u05C2\u05C4\u064B-\u0652\u0670\u06D6-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0901-\u0903\u093C\u093E-\u094D\u0951-\u0954\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A02\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A70\u0A71\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0B01-\u0B03\u0B3C\u0B3E-\u0B43\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B82\u0B83\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C01-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C82\u0C83\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86-\u0F8B\u0F90-\u0F95\u0F97\u0F99-\u0FAD\u0FB1-\u0FB7\u0FB9\u20D0-\u20DC\u20E1\u302A-\u302F\u3099\u309A]/,c.digit=/[0-9\u0660-\u0669\u06F0-\u06F9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE7-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29]/,c.extender=/[\xB7\u02D0\u02D1\u0387\u0640\u0E46\u0EC6\u3005\u3031-\u3035\u309D\u309E\u30FC-\u30FE]/},{}],166:[function(a,b,c){function d(){for(var a={},b=0;b<arguments.length;b++){var c=arguments[b];for(var d in c)e.call(c,d)&&(a[d]=c[d])}return a}b.exports=d;var e=Object.prototype.hasOwnProperty},{}],167:[function(a,b,c){"use strict";function d(a){return h(a,!0)}function e(a){var b=i.source+"(?:\\s*("+f(a)+")[ \\t\\n\\f\\r]*(?:"+k.join("|")+"))?";if(a.customAttrSurround){for(var c=[],d=a.customAttrSurround.length-1;d>=0;d--)c[d]="(?:("+a.customAttrSurround[d][0].source+")\\s*"+b+"\\s*("+a.customAttrSurround[d][1].source+"))";c.push("(?:"+b+")"),b="(?:"+c.join("|")+")"}return new RegExp("^\\s*"+b)}function f(a){return j.concat(a.customAttrAssign||[]).map(function(a){return"(?:"+a.source+")"}).join("|")}function g(a,b){function c(a){var b=a.match(m);if(b){var c={tagName:b[1],attrs:[]};a=a.slice(b[0].length);for(var d,e;!(d=a.match(n))&&(e=a.match(k));)a=a.slice(e[0].length),c.attrs.push(e);if(d)return c.unarySlash=d[1],c.rest=a.slice(d[0].length),c}}function d(a,c){var d;if(c){var e=c.toLowerCase();for(d=j.length-1;d>=0&&j[d].tag.toLowerCase()!==e;d--);}else d=0;if(d>=0){for(var g=j.length-1;g>=d;g--)b.end&&b.end(j[g].tag,j[g].attrs,g>d||!a);j.length=d,f=d&&j[d-1].tag}else"br"===c.toLowerCase()?b.start&&b.start(c,[],!0,""):"p"===c.toLowerCase()&&(b.start&&b.start(c,[],!1,"",!0),b.end&&b.end(c,[]))}for(var f,g,h,i,j=[],k=e(b);a;){if(g=a,f&&v(f)){var l=f.toLowerCase(),y=x[l]||(x[l]=new RegExp("([\\s\\S]*?)</"+l+"[^>]*>","i"));a=a.replace(y,function(a,c){return"script"!==l&&"style"!==l&&"noscript"!==l&&(c=c.replace(/<!--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),b.chars&&b.chars(c),""}),d("</"+l+">",l)}else{var z=a.indexOf("<");if(0===z){if(/^<!--/.test(a)){var A=a.indexOf("--\x3e");if(A>=0){b.comment&&b.comment(a.substring(4,A)),a=a.substring(A+3),h="";continue}}if(/^<!\[/.test(a)){var B=a.indexOf("]>");if(B>=0){b.comment&&b.comment(a.substring(2,B+1),!0),a=a.substring(B+2),h="";continue}}var C=a.match(p);if(C){b.doctype&&b.doctype(C[0]),a=a.substring(C[0].length),h="";continue}var D=a.match(o);if(D){a=a.substring(D[0].length),D[0].replace(o,d),h="/"+D[1].toLowerCase();continue}var E=c(a);if(E){a=E.rest,function(a){var c=a.tagName,e=a.unarySlash;if(b.html5&&"p"===f&&w(c)&&d("",f),!b.html5)for(;f&&s(f);)d("",f);t(c)&&f===c&&d("",c);var g=r(c)||"html"===c&&"head"===f||!!e,h=a.attrs.map(function(a){function c(b){return h=a[b],void 0!==(e=a[b+1])?'"':void 0!==(e=a[b+2])?"'":(e=a[b+3],void 0===e&&u(d)&&(e=d),"")}var d,e,f,g,h,i;q&&-1===a[0].indexOf('""')&&(""===a[3]&&delete a[3],""===a[4]&&delete a[4],""===a[5]&&delete a[5]);var j=1;if(b.customAttrSurround)for(var k=0,l=b.customAttrSurround.length;k<l;k++,j+=7)if(d=a[j+1]){i=c(j+2),f=a[j],g=a[j+6];break}return!d&&(d=a[j])&&(i=c(j+1)),{name:d,value:e,customAssign:h||"=",customOpen:f||"",customClose:g||"",quote:i||""}});g||(j.push({tag:c,attrs:h}),f=c,e=""),b.start&&b.start(c,h,g,e)}(E),h=E.tagName.toLowerCase();continue}}var F;z>=0?(F=a.substring(0,z),a=a.substring(z)):(F=a,a="");var G=c(a);G?i=G.tagName:(G=a.match(o),i=G?"/"+G[1]:""),b.chars&&b.chars(F,h,i),h=""}if(a===g)throw new Error("Parse Error: "+a)}b.partialMarkup||d()}var h=a("./utils").createMapFromString,i=/([^\s"'<>\/=]+)/,j=[/=/],k=[/"([^"]*)"+/.source,/'([^']*)'+/.source,/([^ \t\n\f\r"'`=<>]+)/.source],l=function(){var b=a("ncname").source.slice(1,-1);return"((?:"+b+"\\:)?"+b+")"}(),m=new RegExp("^<"+l),n=/^\s*(\/?)>/,o=new RegExp("^<\\/"+l+"[^>]*>"),p=/^<!DOCTYPE [^>]+>/i,q=!1;"x".replace(/x(.)?/g,function(a,b){q=""===b});var r=d("area,base,basefont,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),s=d("a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,noscript,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,svg,textarea,tt,u,var"),t=d("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),u=d("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),v=d("script,style"),w=d("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),x={};c.HTMLParser=g,c.HTMLtoXML=function(a){var b="";return new g(a,{start:function(a,c,d){b+="<"+a;for(var e=0,f=c.length;e<f;e++)b+=" "+c[e].name+'="'+(c[e].value||"").replace(/"/g,"&#34;")+'"';b+=(d?"/":"")+">"},end:function(a){b+="</"+a+">"},chars:function(a){b+=a},comment:function(a){b+="\x3c!--"+a+"--\x3e"},ignore:function(a){b+=a}}),b},c.HTMLtoDOM=function(a,b){var c={html:!0,head:!0,body:!0,title:!0},d={link:"head",base:"head"};b?b=b.ownerDocument||b.getOwnerDocument&&b.getOwnerDocument()||b:"undefined"!=typeof DOMDocument?b=new DOMDocument:"undefined"!=typeof document&&document.implementation&&document.implementation.createDocument?b=document.implementation.createDocument("","",null):"undefined"!=typeof ActiveX&&(b=new ActiveXObject("Msxml.DOMDocument"));var e=[];if(!(b.documentElement||b.getDocumentElement&&b.getDocumentElement())&&b.createElement&&function(){var a=b.createElement("html"),c=b.createElement("head");c.appendChild(b.createElement("title")),a.appendChild(c),a.appendChild(b.createElement("body")),b.appendChild(a)}(),b.getElementsByTagName)for(var f in c)c[f]=b.getElementsByTagName(f)[0];var h=c.body;return new g(a,{start:function(a,f,g){if(c[a])return void(h=c[a]);var i=b.createElement(a);for(var j in f)i.setAttribute(f[j].name,f[j].value);d[a]&&"boolean"!=typeof c[d[a]]?c[d[a]].appendChild(i):h&&h.appendChild&&h.appendChild(i),g||(e.push(i),h=i)},end:function(){e.length-=1,h=e[e.length-1]},chars:function(a){h.appendChild(b.createTextNode(a))},comment:function(){},ignore:function(){}}),b}},{"./utils":169,ncname:107}],168:[function(a,b,c){"use strict";function d(){}function e(){}d.prototype.sort=function(a,b){b=b||0;for(var c=0,d=this.keys.length;c<d;c++){var e=this.keys[c],f=e.slice(1),g=a.indexOf(f,b);if(-1!==g){do{g!==b&&(a.splice(g,1),a.splice(b,0,f)),b++}while(-1!==(g=a.indexOf(f,b)));return this[e].sort(a,b)}}return a},e.prototype={add:function(a){var b=this;a.forEach(function(c){var d="$"+c;b[d]||(b[d]=[],b[d].processed=0),b[d].push(a)})},createSorter:function(){var a=this,b=new d;return b.keys=Object.keys(a).sort(function(b,c){var d=a[b].length,e=a[c].length;return d<e?1:d>e?-1:b<c?-1:b>c?1:0}).filter(function(c){if(a[c].processed<a[c].length){var d=c.slice(1),f=new e;return a[c].forEach(function(b){for(var c;-1!==(c=b.indexOf(d));)b.splice(c,1);b.forEach(function(b){a["$"+b].processed++}),f.add(b.slice(0))}),b[c]=f.createSorter(),!0}return!1}),b}},b.exports=e},{}],169:[function(a,b,c){"use strict";function d(a,b){var c={};return a.forEach(function(a){c[a]=1}),b?function(a){return 1===c[a.toLowerCase()]}:function(a){return 1===c[a]}}c.createMap=d,c.createMapFromString=function(a,b){return d(a.split(/,/),b)}},{}],"html-minifier":[function(a,b,c){"use strict";function d(a){return a&&a.replace(/\s+/g,function(a){return"\t"===a?"\t":a.replace(/(^|\xA0+)[^\xA0]+/g,"$1 ")})}function e(a,b,c,e,f){var g="",h="";return b.preserveLineBreaks&&(a=a.replace(/^\s*?[\n\r]\s*/,function(){return g="\n",""}).replace(/\s*?[\n\r]\s*$/,function(){return h="\n",""})),c&&(a=a.replace(/^\s+/,function(a){var c=!g&&b.conservativeCollapse;return c&&"\t"===a?"\t":a.replace(/^[^\xA0]+/,"").replace(/(\xA0+)[^\xA0]+/g,"$1 ")||(c?" ":"")})),e&&(a=a.replace(/\s+$/,function(a){var c=!h&&b.conservativeCollapse;return c&&"\t"===a?"\t":a.replace(/[^\xA0]+(\xA0+)/g," $1").replace(/[^\xA0]+$/,"")||(c?" ":"")})),f&&(a=d(a)),g+a+h}function f(a,b,c,d){var f=b&&!da(b);f&&!d.collapseInlineTagWhitespace&&(f="/"===b.charAt(0)?!ba(b.slice(1)):!ca(b));var g=c&&!da(c);return g&&!d.collapseInlineTagWhitespace&&(g="/"===c.charAt(0)?!ca(c.slice(1)):!ba(c)),e(a,d,f,g,b&&c)}function g(a){return/^\[if\s[^\]]+]|\[endif]$/.test(a)}function h(a,b){for(var c=0,d=b.ignoreCustomComments.length;c<d;c++)if(b.ignoreCustomComments[c].test(a))return!0;return!1}function i(a,b){var c=b.customEventAttributes;if(c){for(var d=c.length;d--;)if(c[d].test(a))return!0;return!1}return/^on[a-z]{3,}$/.test(a)}function j(a){return/^[^ \t\n\f\r"'`=<>]+$/.test(a)}function k(a,b){for(var c=a.length;c--;)if(a[c].name.toLowerCase()===b)return!0;return!1}function l(a,b,c,d){return c=c?_(c.toLowerCase()):"","script"===a&&"language"===b&&"javascript"===c||"form"===a&&"method"===b&&"get"===c||"input"===a&&"type"===b&&"text"===c||"script"===a&&"charset"===b&&!k(d,"src")||"a"===a&&"name"===b&&k(d,"id")||"area"===a&&"shape"===b&&"rect"===c}function m(a){return""===(a=_(a.split(/;/,2)[0]).toLowerCase())||ea(a)}function n(a,b){if("script"!==a)return!1;for(var c=0,d=b.length;c<d;c++){if("type"===b[c].name.toLowerCase())return m(b[c].value)}return!0}function o(a){return""===(a=_(a).toLowerCase())||"text/css"===a}function p(a,b){if("style"!==a)return!1;for(var c=0,d=b.length;c<d;c++){if("type"===b[c].name.toLowerCase())return o(b[c].value)}return!0}function q(a,b){return fa(a)||"draggable"===a&&!ga(b)}function r(a,b){return/^(?:a|area|link|base)$/.test(b)&&"href"===a||"img"===b&&/^(?:src|longdesc|usemap)$/.test(a)||"object"===b&&/^(?:classid|codebase|data|usemap)$/.test(a)||"q"===b&&"cite"===a||"blockquote"===b&&"cite"===a||("ins"===b||"del"===b)&&"cite"===a||"form"===b&&"action"===a||"input"===b&&("src"===a||"usemap"===a)||"head"===b&&"profile"===a||"script"===b&&("src"===a||"for"===a)}function s(a,b){return/^(?:a|area|object|button)$/.test(b)&&"tabindex"===a||"input"===b&&("maxlength"===a||"tabindex"===a)||"select"===b&&("size"===a||"tabindex"===a)||"textarea"===b&&/^(?:rows|cols|tabindex)$/.test(a)||"colgroup"===b&&"span"===a||"col"===b&&"span"===a||("th"===b||"td"===b)&&("rowspan"===a||"colspan"===a)}function t(a,b,c){if("link"!==a)return!1;for(var d=0,e=b.length;d<e;d++)if("rel"===b[d].name&&b[d].value===c)return!0}function u(a,b,c){return"media"===c&&(t(a,b,"stylesheet")||p(a,b))}function v(a,b){return"srcset"===a&&ha(b)}function w(a,b,c,e,f){if(c&&i(b,e))return c=_(c).replace(/^javascript:\s*/i,""),e.minifyJS(c,!0);if("class"===b)return c=_(c),c=e.sortClassName?e.sortClassName(c):d(c);if(r(b,a))return c=_(c),t(a,f,"canonical")?c:e.minifyURLs(c);if(s(b,a))return _(c);if("style"===b)return c=_(c),c&&(/;$/.test(c)&&!/&#?[0-9a-zA-Z]+;$/.test(c)&&(c=c.replace(/\s*;$/,"")),c=z(e.minifyCSS(y(c)))),c;if(v(b,a))c=_(c).split(/\s+,\s*|\s*,\s+/).map(function(a){var b=a,c="",d=a.match(/\s+([1-9][0-9]*w|[0-9]+(?:\.[0-9]+)?x)$/);if(d){b=b.slice(0,-d[0].length);var f=+d[1].slice(0,-1),g=d[1].slice(-1);1===f&&"x"===g||(c=" "+f+g)}return e.minifyURLs(b)+c}).join(", ");else if(x(a,f)&&"content"===b)c=c.replace(/\s+/g,"").replace(/[0-9]+\.[0-9]+/g,function(a){return(+a).toString()});else if(c&&e.customAttrCollapse&&e.customAttrCollapse.test(b))c=c.replace(/\n+|\r+|\s{2,}/g,"");else if("script"===a&&"type"===b)c=_(c.replace(/\s*;\s*/g,";"));else if(u(a,f,b))return c=_(c),B(e.minifyCSS(A(c)));return c}function x(a,b){if("meta"!==a)return!1;for(var c=0,d=b.length;c<d;c++)if("name"===b[c].name&&"viewport"===b[c].value)return!0}function y(a){return"*{"+a+"}"}function z(a){var b=a.match(/^\*\{([\s\S]*)\}$/);return b?b[1]:a}function A(a){return"@media "+a+"{a{top:0}}"}function B(a){var b=a.match(/^@media ([\s\S]*?)\s*{[\s\S]*}$/);return b?b[1]:a}function C(a,b){return b.processConditionalComments?a.replace(/^(\[if\s[^\]]+]>)([\s\S]*?)(<!\[endif])$/,function(a,c,d,e){return c+S(d,b,!0)+e}):a}function D(a,b,c){for(var d=0,e=c.length;d<e;d++)if("type"===c[d].name.toLowerCase()&&b.processScripts.indexOf(c[d].value)>-1)return S(a,b);return a}function E(a,b){switch(a){case"html":case"head":return!0;case"body":return!ka(b);case"colgroup":return"col"===b;case"tbody":return"tr"===b}return!1}function F(a,b){switch(b){case"colgroup":return"colgroup"===a;case"tbody":return sa(a)}return!1}function G(a,b){switch(a){case"html":case"head":case"body":case"colgroup":case"caption":return!0;case"li":case"optgroup":case"tr":return b===a;case"dt":case"dd":return la(b);case"p":return ma(b);case"rb":case"rt":case"rp":return oa(b);case"rtc":return pa(b);case"option":return qa(b);case"thead":case"tbody":return ra(b);case"tfoot":return"tbody"===b;case"td":case"th":return ta(b)}return!1}function H(a,b,c,d){return!(c&&!/^\s*$/.test(c))&&("function"==typeof d.removeEmptyAttributes?d.removeEmptyAttributes(b,a):"input"===a&&"value"===b||za.test(b))}function I(a,b){for(var c=b.length-1;c>=0;c--)if(b[c].name===a)return!0;return!1}function J(a,b){switch(a){case"textarea":return!1;case"audio":case"script":case"video":if(I("src",b))return!1;break;case"iframe":if(I("src",b)||I("srcdoc",b))return!1;break;case"object":if(I("data",b))return!1;break;case"applet":if(I("code",b))return!1}return!0}function K(a){return!/^(?:script|style|pre|textarea)$/.test(a)}function L(a){return!/^(?:pre|textarea)$/.test(a)}function M(a,b,c,d){var e=d.caseSensitive?a.name:a.name.toLowerCase(),f=a.value;if(d.decodeEntities&&f&&(f=V(f,{isAttributeValue:!0})),!(d.removeRedundantAttributes&&l(c,e,f,b)||d.removeScriptTypeAttributes&&"script"===c&&"type"===e&&m(f)||d.removeStyleLinkTypeAttributes&&("style"===c||"link"===c)&&"type"===e&&o(f)||(f=w(c,e,f,d,b),d.removeEmptyAttributes&&H(c,e,f,d))))return d.decodeEntities&&f&&(f=f.replace(/&(#?[0-9a-zA-Z]+;)/g,"&amp;$1")),{attr:a,name:e,value:f}}function N(a,b,c,d,e){var f,g,h=a.name,i=a.value,k=a.attr,l=k.quote;if(void 0===i||c.removeAttributeQuotes&&!~i.indexOf(e)&&j(i))g=!d||b||/\/$/.test(i)?i+" ":i;else{if(!c.preventAttributesEscaping){if(void 0===c.quoteCharacter){l=(i.match(/'/g)||[]).length<(i.match(/"/g)||[]).length?"'":'"'}else l="'"===c.quoteCharacter?"'":'"';i='"'===l?i.replace(/"/g,"&#34;"):i.replace(/'/g,"&#39;")}g=l+i+l,d||c.removeTagWhitespace||(g+=" ")}return void 0===i||c.collapseBooleanAttributes&&q(h.toLowerCase(),i.toLowerCase())?(f=h,d||(f+=" ")):f=h+k.customAssign+g,k.customOpen+f+k.customClose}function O(a){return a}function P(a){["html5","includeAutoGeneratedTags"].forEach(function(b){b in a||(a[b]=!0)}),"function"!=typeof a.log&&(a.log=O);for(var b=["canCollapseWhitespace","canTrimWhitespace"],c=0,d=b.length;c<d;c++)a[b[c]]||(a[b[c]]=function(){return!1});if("ignoreCustomComments"in a||(a.ignoreCustomComments=[/^!/]),"ignoreCustomFragments"in a||(a.ignoreCustomFragments=[/<%[\s\S]*?%>/,/<\?[\s\S]*?\?>/]),a.minifyURLs||(a.minifyURLs=O),"function"!=typeof a.minifyURLs){var e=a.minifyURLs;"string"==typeof e?e={site:e}:"object"!=typeof e&&(e={}),a.minifyURLs=function(b){try{return X.relate(b,e)}catch(c){return a.log(c),b}}}if(a.minifyJS||(a.minifyJS=O),"function"!=typeof a.minifyJS){var f=a.minifyJS;"object"!=typeof f&&(f={}),f.fromString=!0,(f.parse||(f.parse={})).bare_returns=!1,a.minifyJS=function(b,c){var d=b.match(/^\s*<!--.*/),e=d?b.slice(d[0].length).replace(/\n\s*-->\s*$/,""):b;try{return f.parse.bare_returns=c,e=Z.minify(e,f).code,/;$/.test(e)&&(e=e.slice(0,-1)),e}catch(c){return a.log(c),b}}}if(a.minifyCSS||(a.minifyCSS=O),"function"!=typeof a.minifyCSS){var g=a.minifyCSS;"object"!=typeof g&&(g={}),a.minifyCSS=function(b){b=b.replace(/(url\s*\(\s*)("|'|)(.*?)\2(\s*\))/gi,function(b,c,d,e,f){return c+d+a.minifyURLs(e)+d+f});try{return new U(g).minify(b).styles}catch(c){return a.log(c),b}}}}function Q(a){var b;do{b=Math.random().toString(36).replace(/^0\.[0-9]*/,"")}while(~a.indexOf(b));return b}function R(a,b,c,d){function e(a){return a.map(function(a){return b.caseSensitive?a.name:a.name.toLowerCase()})}function f(a,b){return!b||-1===a.indexOf(b)}function g(a){return f(a,c)&&f(a,d)}function h(a){var c,d;new W(a,{start:function(a,f){i&&(i[a]||(i[a]=new Y),i[a].add(e(f).filter(g)));for(var h=0,k=f.length;h<k;h++){var l=f[h];j&&"class"===(b.caseSensitive?l.name:l.name.toLowerCase())?j.add(_(l.value).split(/[ \t\n\f\r]+/).filter(g)):b.processScripts&&"type"===l.name.toLowerCase()&&(c=a,d=l.value)}},end:function(){c=""},chars:function(a){b.processScripts&&Aa(c)&&b.processScripts.indexOf(d)>-1&&h(a)}})}var i=b.sortAttributes&&Object.create(null),j=b.sortClassName&&new Y,k=b.log;if(b.log=null,b.sortAttributes=!1,b.sortClassName=!1,h(S(a,b)),b.log=k,i){var l=Object.create(null);for(var m in i)l[m]=i[m].createSorter();b.sortAttributes=function(a,b){var c=l[a];if(c){var d=Object.create(null),f=e(b);f.forEach(function(a,c){(d[a]||(d[a]=[])).push(b[c])}),c.sort(f).forEach(function(a,c){b[c]=d[a].shift()})}}}if(j){var n=j.createSorter();b.sortClassName=function(a){return n.sort(a.split(/[ \n\f\r]+/)).join(" ")}}}function S(a,b,c){function i(a){return a.replace(w,function(a,b,c){var d=X[+c];return d[1]+v+c+d[2]})}function j(a,c){return K(a)||b.canCollapseWhitespace(a,c)}function k(a,c){return L(a)||b.canTrimWhitespace(a,c)}function l(){for(var a=x.length-1;a>0&&!/^<[^\/!]/.test(x[a]);)a--;x.length=Math.max(0,a)}function m(){for(var a=x.length-1;a>0&&!/^<\//.test(x[a]);)a--;x.length=Math.max(0,a)}function o(a,c){for(var d=null;a>=0&&k(d);a--){var e=x[a],g=e.match(/^<\/([\w:-]+)>$/);if(g)d=g[1];else if(/>$/.test(e)||(x[a]=f(e,null,c,b)))break}}function q(a){var b=x.length-1;if(x.length>1){var c=x[x.length-1];/^(?:<!|$)/.test(c)&&-1===c.indexOf(u)&&b--}o(b,a)}b=b||{};var r=[];P(b),b.collapseWhitespace&&(a=e(a,b,!0,!0));var s,t,u,v,w,x=[],y="",z="",A=[],B=[],H=[],I="",O="",S=Date.now(),U=[],X=[];a=a.replace(/<!-- htmlmin:ignore -->([\s\S]*?)<!-- htmlmin:ignore -->/g,function(c,d){if(!u){u=Q(a);var e=new RegExp("^"+u+"([0-9]+)$");b.ignoreCustomComments?b.ignoreCustomComments.push(e):b.ignoreCustomComments=[e]}var f="\x3c!--"+u+U.length+"--\x3e";return U.push(d),f});var Y=b.ignoreCustomFragments.map(function(a){return a.source});if(Y.length){var Z=new RegExp("\\s*(?:"+Y.join("|")+")+\\s*","g");a=a.replace(Z,function(c){if(!v){v=Q(a),w=new RegExp("(\\s*)"+v+"([0-9]+)(\\s*)","g");var d=b.minifyCSS;d&&(b.minifyCSS=function(a){return d(i(a))});var e=b.minifyJS;e&&(b.minifyJS=function(a,b){return e(i(a),b)})}var f=v+X.length;return X.push(/^(\s*)[\s\S]*?(\s*)$/.exec(c)),"\t"+f+"\t"})}
-(b.sortAttributes&&"function"!=typeof b.sortAttributes||b.sortClassName&&"function"!=typeof b.sortClassName)&&R(a,b,u,v),new W(a,{partialMarkup:c,html5:b.html5,start:function(a,c,d,e,f){var g=a.toLowerCase();if("svg"===g){r.push(b);var h={};for(var i in b)h[i]=b[i];h.keepClosingSlash=!0,h.caseSensitive=!0,b=h}a=b.caseSensitive?a:g,z=a,s=a,ca(a)||(y=""),t=!1,A=c;var n=b.removeOptionalTags;if(n){var o=ya(a);o&&E(I,a)&&l(),I="",o&&G(O,a)&&(m(),n=!F(O,a)),O=""}b.collapseWhitespace&&(B.length||q(a),k(a,c)||B.push(a),j(a,c)||H.push(a));var p="<"+a,u=e&&b.keepClosingSlash;x.push(p),b.sortAttributes&&b.sortAttributes(a,c);for(var w=[],C=c.length,D=!0;--C>=0;){var J=M(c[C],c,a,b);J&&(w.unshift(N(J,u,b,D,v)),D=!1)}w.length>0?(x.push(" "),x.push.apply(x,w)):n&&ia(a)&&(I=a),x.push(x.pop()+(u?"/":"")+">"),f&&!b.includeAutoGeneratedTags&&(l(),I="")},end:function(a,c,d){var e=a.toLowerCase();"svg"===e&&(b=r.pop()),a=b.caseSensitive?a:e,b.collapseWhitespace&&(B.length?a===B[B.length-1]&&B.pop():q("/"+a),H.length&&a===H[H.length-1]&&H.pop());var f=!1;a===z&&(z="",f=!t),b.removeOptionalTags&&(f&&ua(I)&&l(),I="",!ya(a)||!O||xa(O)||"p"===O&&na(a)||m(),O=ja(a)?a:""),b.removeEmptyElements&&f&&J(a,c)?(l(),I="",O=""):(d&&!b.includeAutoGeneratedTags?O="":x.push("</"+a+">"),s="/"+a,ba(a)?f&&(y+="|"):y="")},chars:function(a,c,d){if(c=""===c?"comment":c,d=""===d?"comment":d,b.decodeEntities&&a&&!Aa(z)&&(a=V(a)),b.collapseWhitespace){if(!B.length){if("comment"===c){var g=x[x.length-1];if(-1===g.indexOf(u)&&(g||(c=s),x.length>1&&(!g||!b.conservativeCollapse&&/ $/.test(y)))){var h=x.length-2;x[h]=x[h].replace(/\s+$/,function(b){return a=b+a,""})}}if(c)if("/nobr"===c||"wbr"===c){if(/^\s/.test(a)){for(var i=x.length-1;i>0&&0!==x[i].lastIndexOf("<"+c);)i--;o(i-1,"br")}}else ca("/"===c.charAt(0)?c.slice(1):c)&&(a=e(a,b,/(?:^|\s)$/.test(y)));a=c||d?f(a,c,d,b):e(a,b,!0,!0),!a&&/\s$/.test(y)&&c&&"/"===c.charAt(0)&&o(x.length-1,d)}H.length||"html"===d||c&&d||(a=e(a,b,!1,!1,!0))}b.processScripts&&Aa(z)&&(a=D(a,b,A)),n(z,A)&&(a=b.minifyJS(a)),p(z,A)&&(a=b.minifyCSS(a)),b.removeOptionalTags&&a&&(("html"===I||"body"===I&&!/^\s/.test(a))&&l(),I="",(va(O)||wa(O)&&!/^\s/.test(a))&&m(),O=""),s=/^\s*$/.test(a)?c:"comment",b.decodeEntities&&a&&!Aa(z)&&(a=a.replace(/&(#?[0-9a-zA-Z]+;)/g,"&amp$1").replace(/</g,"&lt;")),y+=a,a&&(t=!0),x.push(a)},comment:function(a,c){var d=c?"<!":"\x3c!--",e=c?">":"--\x3e";a=g(a)?d+C(a,b)+e:b.removeComments?h(a,b)?"\x3c!--"+a+"--\x3e":"":d+a+e,b.removeOptionalTags&&a&&(I="",O=""),x.push(a)},doctype:function(a){x.push(b.useShortDoctype?"<!DOCTYPE html>":d(a))},customAttrAssign:b.customAttrAssign,customAttrSurround:b.customAttrSurround}),b.removeOptionalTags&&(ua(I)&&l(),O&&!xa(O)&&m()),b.collapseWhitespace&&q("br");var $=T(x,b);return w&&($=$.replace(w,function(a,c,d,f){var g=X[+d][0];return b.collapseWhitespace?("\t"!==c&&(g=c+g),"\t"!==f&&(g+=f),e(g,{preserveLineBreaks:b.preserveLineBreaks,conservativeCollapse:!b.trimCustomFragments},/^\s/.test(g),/\s$/.test(g))):g})),u&&($=$.replace(new RegExp("\x3c!--"+u+"([0-9]+)--\x3e","g"),function(a,b){return U[+b]})),b.log("minified in: "+(Date.now()-S)+"ms"),$}function T(a,b){var c,d=b.maxLineLength;if(d){for(var f,g=[],h="",i=0,j=a.length;i<j;i++)f=a[i],h.length+f.length<d?h+=f:(g.push(h.replace(/^\n/,"")),h=f);g.push(h),c=g.join("\n")}else c=a.join("");return b.collapseWhitespace?e(c,b,!0,!0):c}var U=a("clean-css"),V=a("he").decode,W=a("./htmlparser").HTMLParser,X=a("relateurl"),Y=a("./tokenchain"),Z=a("uglify-js"),$=a("./utils"),_=String.prototype.trim?function(a){return"string"!=typeof a?a:a.trim()}:function(a){return"string"!=typeof a?a:a.replace(/^\s+/,"").replace(/\s+$/,"")},aa=$.createMapFromString,ba=aa("a,abbr,acronym,b,bdi,bdo,big,button,cite,code,del,dfn,em,font,i,ins,kbd,mark,math,nobr,q,rt,rp,s,samp,small,span,strike,strong,sub,sup,svg,time,tt,u,var"),ca=aa("a,abbr,acronym,b,big,del,em,font,i,ins,kbd,mark,nobr,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var"),da=aa("comment,img,input,wbr"),ea=$.createMap(["text/javascript","text/ecmascript","text/jscript","application/javascript","application/x-javascript","application/ecmascript"]),fa=aa("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ga=aa("true,false"),ha=aa("img,source"),ia=aa("html,head,body,colgroup,tbody"),ja=aa("html,head,body,li,dt,dd,p,rb,rt,rtc,rp,optgroup,option,colgroup,caption,thead,tbody,tfoot,tr,td,th"),ka=aa("meta,link,script,style,template,noscript"),la=aa("dt,dd"),ma=aa("address,article,aside,blockquote,details,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,main,menu,nav,ol,p,pre,section,table,ul"),na=aa("a,audio,del,ins,map,noscript,video"),oa=aa("rb,rt,rtc,rp"),pa=aa("rb,rtc,rp"),qa=aa("option,optgroup"),ra=aa("tbody,tfoot"),sa=aa("thead,tbody,tfoot"),ta=aa("td,th"),ua=aa("html,head,body"),va=aa("html,body"),wa=aa("head,colgroup,caption"),xa=aa("dt,thead"),ya=aa("a,abbr,acronym,address,applet,area,article,aside,audio,b,base,basefont,bdi,bdo,bgsound,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,dir,div,dl,dt,element,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,isindex,kbd,keygen,label,legend,li,link,listing,main,map,mark,marquee,menu,menuitem,meta,meter,multicol,nav,nobr,noembed,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,plaintext,pre,progress,q,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,spacer,span,strike,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,tt,u,ul,var,video,wbr,xmp"),za=new RegExp("^(?:class|id|style|title|lang|dir|on(?:focus|blur|change|click|dblclick|mouse(?:down|up|over|move|out)|key(?:press|down|up)))$"),Aa=aa("script,style");c.minify=function(a,b){return S(a,b)}},{"./htmlparser":167,"./tokenchain":168,"./utils":169,"clean-css":7,he:101,relateurl:127,"uglify-js":158}]},{},["html-minifier"]);
\ No newline at end of file
+require=function e(t,n,r){function o(a,u){if(!n[a]){if(!t[a]){var s="function"==typeof require&&require;if(!u&&s)return s(a,!0);if(i)return i(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[a]={exports:{}};t[a][0].call(c.exports,function(e){var n=t[a][1][e];return o(n||e)},c,c.exports,e,t,n,r)}return n[a].exports}for(var i="function"==typeof require&&require,a=0;a<r.length;a++)o(r[a]);return o}({1:[function(e,t,n){"use strict";function r(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===e[t-2]?2:"="===e[t-1]?1:0}function o(e){return 3*e.length/4-r(e)}function i(e){var t,n,o,i,a,u,s=e.length;a=r(e),u=new f(3*s/4-a),o=a>0?s-4:s;var l=0;for(t=0,n=0;t<o;t+=4,n+=3)i=c[e.charCodeAt(t)]<<18|c[e.charCodeAt(t+1)]<<12|c[e.charCodeAt(t+2)]<<6|c[e.charCodeAt(t+3)],u[l++]=i>>16&255,u[l++]=i>>8&255,u[l++]=255&i;return 2===a?(i=c[e.charCodeAt(t)]<<2|c[e.charCodeAt(t+1)]>>4,u[l++]=255&i):1===a&&(i=c[e.charCodeAt(t)]<<10|c[e.charCodeAt(t+1)]<<4|c[e.charCodeAt(t+2)]>>2,u[l++]=i>>8&255,u[l++]=255&i),u}function a(e){return l[e>>18&63]+l[e>>12&63]+l[e>>6&63]+l[63&e]}function u(e,t,n){for(var r,o=[],i=t;i<n;i+=3)r=(e[i]<<16)+(e[i+1]<<8)+e[i+2],o.push(a(r));return o.join("")}function s(e){for(var t,n=e.length,r=n%3,o="",i=[],a=0,s=n-r;a<s;a+=16383)i.push(u(e,a,a+16383>s?s:a+16383));return 1===r?(t=e[n-1],o+=l[t>>2],o+=l[t<<4&63],o+="=="):2===r&&(t=(e[n-2]<<8)+e[n-1],o+=l[t>>10],o+=l[t>>4&63],o+=l[t<<2&63],o+="="),i.push(o),i.join("")}n.byteLength=o,n.toByteArray=i,n.fromByteArray=s;for(var l=[],c=[],f="undefined"!=typeof Uint8Array?Uint8Array:Array,p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",h=0,d=p.length;h<d;++h)l[h]=p[h],c[p.charCodeAt(h)]=h;c["-".charCodeAt(0)]=62,c["_".charCodeAt(0)]=63},{}],2:[function(e,t,n){},{}],3:[function(e,t,n){arguments[4][2][0].apply(n,arguments)},{dup:2}],4:[function(e,t,n){(function(t){"use strict";var r=e("buffer"),o=r.Buffer,i=r.SlowBuffer,a=r.kMaxLength||2147483647;n.alloc=function(e,t,n){if("function"==typeof o.alloc)return o.alloc(e,t,n);if("number"==typeof n)throw new TypeError("encoding must not be number");if("number"!=typeof e)throw new TypeError("size must be a number");if(e>a)throw new RangeError("size is too large");var r=n,i=t;void 0===i&&(r=void 0,i=0);var u=new o(e);if("string"==typeof i)for(var s=new o(i,r),l=s.length,c=-1;++c<e;)u[c]=s[c%l];else u.fill(i);return u},n.allocUnsafe=function(e){if("function"==typeof o.allocUnsafe)return o.allocUnsafe(e);if("number"!=typeof e)throw new TypeError("size must be a number");if(e>a)throw new RangeError("size is too large");return new o(e)},n.from=function(e,n,r){if("function"==typeof o.from&&(!t.Uint8Array||Uint8Array.from!==o.from))return o.from(e,n,r);if("number"==typeof e)throw new TypeError('"value" argument must not be a number');if("string"==typeof e)return new o(e,n);if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer){var i=n;if(1===arguments.length)return new o(e);void 0===i&&(i=0);var a=r;if(void 0===a&&(a=e.byteLength-i),i>=e.byteLength)throw new RangeError("'offset' is out of bounds");if(a>e.byteLength-i)throw new RangeError("'length' is out of bounds");return new o(e.slice(i,i+a))}if(o.isBuffer(e)){var u=new o(e.length);return e.copy(u,0,0,e.length),u}if(e){if(Array.isArray(e)||"undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return new o(e);if("Buffer"===e.type&&Array.isArray(e.data))return new o(e.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")},n.allocUnsafeSlow=function(e){if("function"==typeof o.allocUnsafeSlow)return o.allocUnsafeSlow(e);if("number"!=typeof e)throw new TypeError("size must be a number");if(e>=a)throw new RangeError("size is too large");return new i(e)}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{buffer:5}],5:[function(e,t,n){(function(t){"use strict";function r(){return i.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(e,t){if(r()<t)throw new RangeError("Invalid typed array length");return i.TYPED_ARRAY_SUPPORT?(e=new Uint8Array(t)).__proto__=i.prototype:(null===e&&(e=new i(t)),e.length=t),e}function i(e,t,n){if(!(i.TYPED_ARRAY_SUPPORT||this instanceof i))return new i(e,t,n);if("number"==typeof e){if("string"==typeof t)throw new Error("If encoding is specified then the first argument must be a string");return l(this,e)}return a(this,e,t,n)}function a(e,t,n,r){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer?p(e,t,n,r):"string"==typeof t?c(e,t,n):h(e,t)}function u(e){if("number"!=typeof e)throw new TypeError('"size" argument must be a number');if(e<0)throw new RangeError('"size" argument must not be negative')}function s(e,t,n,r){return u(t),t<=0?o(e,t):void 0!==n?"string"==typeof r?o(e,t).fill(n,r):o(e,t).fill(n):o(e,t)}function l(e,t){if(u(t),e=o(e,t<0?0:0|d(t)),!i.TYPED_ARRAY_SUPPORT)for(var n=0;n<t;++n)e[n]=0;return e}function c(e,t,n){if("string"==typeof n&&""!==n||(n="utf8"),!i.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=0|g(t,n),a=(e=o(e,r)).write(t,n);return a!==r&&(e=e.slice(0,a)),e}function f(e,t){var n=t.length<0?0:0|d(t.length);e=o(e,n);for(var r=0;r<n;r+=1)e[r]=255&t[r];return e}function p(e,t,n,r){if(t.byteLength,n<0||t.byteLength<n)throw new RangeError("'offset' is out of bounds");if(t.byteLength<n+(r||0))throw new RangeError("'length' is out of bounds");return t=void 0===n&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,n):new Uint8Array(t,n,r),i.TYPED_ARRAY_SUPPORT?(e=t).__proto__=i.prototype:e=f(e,t),e}function h(e,t){if(i.isBuffer(t)){var n=0|d(t.length);return 0===(e=o(e,n)).length?e:(t.copy(e,0,0,n),e)}if(t){if("undefined"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||"length"in t)return"number"!=typeof t.length||W(t.length)?o(e,0):f(e,t);if("Buffer"===t.type&&J(t.data))return f(e,t.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function d(e){if(e>=r())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r().toString(16)+" bytes");return 0|e}function m(e){return+e!=e&&(e=0),i.alloc(+e)}function g(e,t){if(i.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return $(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Y(e).length;default:if(r)return $(e).length;t=(""+t).toLowerCase(),r=!0}}function v(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if(n>>>=0,t>>>=0,n<=t)return"";for(e||(e="utf8");;)switch(e){case"hex":return R(this,t,n);case"utf8":case"utf-8":return B(this,t,n);case"ascii":return D(this,t,n);case"latin1":case"binary":return T(this,t,n);case"base64":return O(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return F(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function b(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function y(e,t,n,r,o){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof t&&(t=i.from(t,r)),i.isBuffer(t))return 0===t.length?-1:_(e,t,n,r,o);if("number"==typeof t)return t&=255,i.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):_(e,[t],n,r,o);throw new TypeError("val must be string, number or Buffer")}function _(e,t,n,r,o){function i(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}var a=1,u=e.length,s=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,u/=2,s/=2,n/=2}var l;if(o){var c=-1;for(l=n;l<u;l++)if(i(e,l)===i(t,-1===c?0:l-c)){if(-1===c&&(c=l),l-c+1===s)return c*a}else-1!==c&&(l-=l-c),c=-1}else for(n+s>u&&(n=u-s),l=n;l>=0;l--){for(var f=!0,p=0;p<s;p++)if(i(e,l+p)!==i(t,p)){f=!1;break}if(f)return l}return-1}function w(e,t,n,r){n=Number(n)||0;var o=e.length-n;r?(r=Number(r))>o&&(r=o):r=o;var i=t.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var a=0;a<r;++a){var u=parseInt(t.substr(2*a,2),16);if(isNaN(u))return a;e[n+a]=u}return a}function A(e,t,n,r){return G($(t,e.length-n),e,n,r)}function E(e,t,n,r){return G(H(t),e,n,r)}function x(e,t,n,r){return E(e,t,n,r)}function C(e,t,n,r){return G(Y(t),e,n,r)}function k(e,t,n,r){return G(K(t,e.length-n),e,n,r)}function O(e,t,n){return 0===t&&n===e.length?Q.fromByteArray(e):Q.fromByteArray(e.slice(t,n))}function B(e,t,n){n=Math.min(e.length,n);for(var r=[],o=t;o<n;){var i=e[o],a=null,u=i>239?4:i>223?3:i>191?2:1;if(o+u<=n){var s,l,c,f;switch(u){case 1:i<128&&(a=i);break;case 2:128==(192&(s=e[o+1]))&&(f=(31&i)<<6|63&s)>127&&(a=f);break;case 3:s=e[o+1],l=e[o+2],128==(192&s)&&128==(192&l)&&(f=(15&i)<<12|(63&s)<<6|63&l)>2047&&(f<55296||f>57343)&&(a=f);break;case 4:s=e[o+1],l=e[o+2],c=e[o+3],128==(192&s)&&128==(192&l)&&128==(192&c)&&(f=(15&i)<<18|(63&s)<<12|(63&l)<<6|63&c)>65535&&f<1114112&&(a=f)}}null===a?(a=65533,u=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),o+=u}return S(r)}function S(e){var t=e.length;if(t<=X)return String.fromCharCode.apply(String,e);for(var n="",r=0;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=X));return n}function D(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;o<n;++o)r+=String.fromCharCode(127&e[o]);return r}function T(e,t,n){var r="";n=Math.min(e.length,n);for(var o=t;o<n;++o)r+=String.fromCharCode(e[o]);return r}function R(e,t,n){var r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);for(var o="",i=t;i<n;++i)o+=V(e[i]);return o}function F(e,t,n){for(var r=e.slice(t,n),o="",i=0;i<r.length;i+=2)o+=String.fromCharCode(r[i]+256*r[i+1]);return o}function L(e,t,n){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>n)throw new RangeError("Trying to access beyond buffer length")}function M(e,t,n,r,o,a){if(!i.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>o||t<a)throw new RangeError('"value" argument is out of bounds');if(n+r>e.length)throw new RangeError("Index out of range")}function P(e,t,n,r){t<0&&(t=65535+t+1);for(var o=0,i=Math.min(e.length-n,2);o<i;++o)e[n+o]=(t&255<<8*(r?o:1-o))>>>8*(r?o:1-o)}function U(e,t,n,r){t<0&&(t=4294967295+t+1);for(var o=0,i=Math.min(e.length-n,4);o<i;++o)e[n+o]=t>>>8*(r?o:3-o)&255}function N(e,t,n,r,o,i){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function q(e,t,n,r,o){return o||N(e,t,n,4,3.4028234663852886e38,-3.4028234663852886e38),Z.write(e,t,n,r,23,4),n+4}function z(e,t,n,r,o){return o||N(e,t,n,8,1.7976931348623157e308,-1.7976931348623157e308),Z.write(e,t,n,r,52,8),n+8}function I(e){if((e=j(e).replace(ee,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}function j(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function V(e){return e<16?"0"+e.toString(16):e.toString(16)}function $(e,t){t=t||1/0;for(var n,r=e.length,o=null,i=[],a=0;a<r;++a){if((n=e.charCodeAt(a))>55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;i.push(n)}else if(n<2048){if((t-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function H(e){for(var t=[],n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}function K(e,t){for(var n,r,o,i=[],a=0;a<e.length&&!((t-=2)<0);++a)r=(n=e.charCodeAt(a))>>8,o=n%256,i.push(o),i.push(r);return i}function Y(e){return Q.toByteArray(I(e))}function G(e,t,n,r){for(var o=0;o<r&&!(o+n>=t.length||o>=e.length);++o)t[o+n]=e[o];return o}function W(e){return e!==e}var Q=e("base64-js"),Z=e("ieee754"),J=e("isarray");n.Buffer=i,n.SlowBuffer=m,n.INSPECT_MAX_BYTES=50,i.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:function(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}(),n.kMaxLength=r(),i.poolSize=8192,i._augment=function(e){return e.__proto__=i.prototype,e},i.from=function(e,t,n){return a(null,e,t,n)},i.TYPED_ARRAY_SUPPORT&&(i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0})),i.alloc=function(e,t,n){return s(null,e,t,n)},i.allocUnsafe=function(e){return l(null,e)},i.allocUnsafeSlow=function(e){return l(null,e)},i.isBuffer=function(e){return!(null==e||!e._isBuffer)},i.compare=function(e,t){if(!i.isBuffer(e)||!i.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,r=t.length,o=0,a=Math.min(n,r);o<a;++o)if(e[o]!==t[o]){n=e[o],r=t[o];break}return n<r?-1:r<n?1:0},i.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},i.concat=function(e,t){if(!J(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return i.alloc(0);var n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;var r=i.allocUnsafe(t),o=0;for(n=0;n<e.length;++n){var a=e[n];if(!i.isBuffer(a))throw new TypeError('"list" argument must be an Array of Buffers');a.copy(r,o),o+=a.length}return r},i.byteLength=g,i.prototype._isBuffer=!0,i.prototype.swap16=function(){var e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;t<e;t+=2)b(this,t,t+1);return this},i.prototype.swap32=function(){var e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var t=0;t<e;t+=4)b(this,t,t+3),b(this,t+1,t+2);return this},i.prototype.swap64=function(){var e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var t=0;t<e;t+=8)b(this,t,t+7),b(this,t+1,t+6),b(this,t+2,t+5),b(this,t+3,t+4);return this},i.prototype.toString=function(){var e=0|this.length;return 0===e?"":0===arguments.length?B(this,0,e):v.apply(this,arguments)},i.prototype.equals=function(e){if(!i.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===i.compare(this,e)},i.prototype.inspect=function(){var e="",t=n.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),"<Buffer "+e+">"},i.prototype.compare=function(e,t,n,r,o){if(!i.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(t>>>=0,n>>>=0,r>>>=0,o>>>=0,this===e)return 0;for(var a=o-r,u=n-t,s=Math.min(a,u),l=this.slice(r,o),c=e.slice(t,n),f=0;f<s;++f)if(l[f]!==c[f]){a=l[f],u=c[f];break}return a<u?-1:u<a?1:0},i.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},i.prototype.indexOf=function(e,t,n){return y(this,e,t,n,!0)},i.prototype.lastIndexOf=function(e,t,n){return y(this,e,t,n,!1)},i.prototype.write=function(e,t,n,r){if(void 0===t)r="utf8",n=this.length,t=0;else if(void 0===n&&"string"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t|=0,isFinite(n)?(n|=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var o=this.length-t;if((void 0===n||n>o)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return A(this,e,t,n);case"ascii":return E(this,e,t,n);case"latin1":case"binary":return x(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,e,t,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var X=4096;i.prototype.slice=function(e,t){var n=this.length;e=~~e,t=void 0===t?n:~~t,e<0?(e+=n)<0&&(e=0):e>n&&(e=n),t<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e);var r;if(i.TYPED_ARRAY_SUPPORT)(r=this.subarray(e,t)).__proto__=i.prototype;else{var o=t-e;r=new i(o,void 0);for(var a=0;a<o;++a)r[a]=this[a+e]}return r},i.prototype.readUIntLE=function(e,t,n){e|=0,t|=0,n||L(e,t,this.length);for(var r=this[e],o=1,i=0;++i<t&&(o*=256);)r+=this[e+i]*o;return r},i.prototype.readUIntBE=function(e,t,n){e|=0,t|=0,n||L(e,t,this.length);for(var r=this[e+--t],o=1;t>0&&(o*=256);)r+=this[e+--t]*o;return r},i.prototype.readUInt8=function(e,t){return t||L(e,1,this.length),this[e]},i.prototype.readUInt16LE=function(e,t){return t||L(e,2,this.length),this[e]|this[e+1]<<8},i.prototype.readUInt16BE=function(e,t){return t||L(e,2,this.length),this[e]<<8|this[e+1]},i.prototype.readUInt32LE=function(e,t){return t||L(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},i.prototype.readUInt32BE=function(e,t){return t||L(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},i.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||L(e,t,this.length);for(var r=this[e],o=1,i=0;++i<t&&(o*=256);)r+=this[e+i]*o;return o*=128,r>=o&&(r-=Math.pow(2,8*t)),r},i.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||L(e,t,this.length);for(var r=t,o=1,i=this[e+--r];r>0&&(o*=256);)i+=this[e+--r]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*t)),i},i.prototype.readInt8=function(e,t){return t||L(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},i.prototype.readInt16LE=function(e,t){t||L(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt16BE=function(e,t){t||L(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt32LE=function(e,t){return t||L(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},i.prototype.readInt32BE=function(e,t){return t||L(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},i.prototype.readFloatLE=function(e,t){return t||L(e,4,this.length),Z.read(this,e,!0,23,4)},i.prototype.readFloatBE=function(e,t){return t||L(e,4,this.length),Z.read(this,e,!1,23,4)},i.prototype.readDoubleLE=function(e,t){return t||L(e,8,this.length),Z.read(this,e,!0,52,8)},i.prototype.readDoubleBE=function(e,t){return t||L(e,8,this.length),Z.read(this,e,!1,52,8)},i.prototype.writeUIntLE=function(e,t,n,r){e=+e,t|=0,n|=0,r||M(this,e,t,n,Math.pow(2,8*n)-1,0);var o=1,i=0;for(this[t]=255&e;++i<n&&(o*=256);)this[t+i]=e/o&255;return t+n},i.prototype.writeUIntBE=function(e,t,n,r){e=+e,t|=0,n|=0,r||M(this,e,t,n,Math.pow(2,8*n)-1,0);var o=n-1,i=1;for(this[t+o]=255&e;--o>=0&&(i*=256);)this[t+o]=e/i&255;return t+n},i.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,1,255,0),i.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},i.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):P(this,e,t,!0),t+2},i.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):P(this,e,t,!1),t+2},i.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):U(this,e,t,!0),t+4},i.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):U(this,e,t,!1),t+4},i.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);M(this,e,t,n,o-1,-o)}var i=0,a=1,u=0;for(this[t]=255&e;++i<n&&(a*=256);)e<0&&0===u&&0!==this[t+i-1]&&(u=1),this[t+i]=(e/a>>0)-u&255;return t+n},i.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var o=Math.pow(2,8*n-1);M(this,e,t,n,o-1,-o)}var i=n-1,a=1,u=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===u&&0!==this[t+i+1]&&(u=1),this[t+i]=(e/a>>0)-u&255;return t+n},i.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,1,127,-128),i.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},i.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):P(this,e,t,!0),t+2},i.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):P(this,e,t,!1),t+2},i.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,4,2147483647,-2147483648),i.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):U(this,e,t,!0),t+4},i.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||M(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),i.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):U(this,e,t,!1),t+4},i.prototype.writeFloatLE=function(e,t,n){return q(this,e,t,!0,n)},i.prototype.writeFloatBE=function(e,t,n){return q(this,e,t,!1,n)},i.prototype.writeDoubleLE=function(e,t,n){return z(this,e,t,!0,n)},i.prototype.writeDoubleBE=function(e,t,n){return z(this,e,t,!1,n)},i.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);var o,a=r-n;if(this===e&&n<t&&t<r)for(o=a-1;o>=0;--o)e[o+t]=this[o+n];else if(a<1e3||!i.TYPED_ARRAY_SUPPORT)for(o=0;o<a;++o)e[o+t]=this[o+n];else Uint8Array.prototype.set.call(e,this.subarray(n,n+a),t);return a},i.prototype.fill=function(e,t,n,r){if("string"==typeof e){if("string"==typeof t?(r=t,t=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===e.length){var o=e.charCodeAt(0);o<256&&(e=o)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!i.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}else"number"==typeof e&&(e&=255);if(t<0||this.length<t||this.length<n)throw new RangeError("Out of range index");if(n<=t)return this;t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var a;if("number"==typeof e)for(a=t;a<n;++a)this[a]=e;else{var u=i.isBuffer(e)?e:$(new i(e,r).toString()),s=u.length;for(a=0;a<n-t;++a)this[a+t]=u[a%s]}return this};var ee=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":1,ieee754:106,isarray:109}],6:[function(e,t,n){t.exports={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",208:"Already Reported",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Payload Too Large",414:"URI Too Long",415:"Unsupported Media Type",416:"Range Not Satisfiable",417:"Expectation Failed",418:"I'm a teapot",421:"Misdirected Request",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",425:"Unordered Collection",426:"Upgrade Required",428:"Precondition Required",429:"Too Many Requests",431:"Request Header Fields Too Large",451:"Unavailable For Legal Reasons",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",508:"Loop Detected",509:"Bandwidth Limit Exceeded",510:"Not Extended",511:"Network Authentication Required"}},{}],7:[function(e,t,n){t.exports=e("./lib/clean")},{"./lib/clean":8}],8:[function(e,t,n){(function(n){function r(e,t,n,r){var u="function"!=typeof n?n:null,s="function"==typeof r?r:"function"==typeof n?n:null,l={stats:{efficiency:0,minifiedSize:0,originalSize:0,startedAt:Date.now(),timeSpent:0},cache:{specificity:{}},errors:[],inlinedStylesheets:[],inputSourceMapTracker:A(),localOnly:!s,options:t,source:null,sourcesContent:{},validator:f(t.compatibility),warnings:[]};return u&&l.inputSourceMapTracker.track(void 0,u),o(l.localOnly)(function(){return E(e,l,function(e){var t=a((l.options.sourceMap?C:x)(i(e,l),l),l);return s?s(l.errors.length>0?l.errors:null,t):t})})}function o(e){return e?function(e){return e()}:n.nextTick}function i(e,t){var n;return n=s(e,t),n=b.One in t.options.level?l(e,t):e,n=b.Two in t.options.level?c(e,t,!0):n}function a(e,t){return e.stats=u(e.styles,t),e.errors=t.errors,e.inlinedStylesheets=t.inlinedStylesheets,e.warnings=t.warnings,e}function u(e,t){var n=Date.now()-t.stats.startedAt;return delete t.stats.startedAt,t.stats.timeSpent=n,t.stats.efficiency=1-e.length/t.stats.originalSize,t.stats.minifiedSize=e.length,t.stats}var s=e("./optimizer/level-0/optimize"),l=e("./optimizer/level-1/optimize"),c=e("./optimizer/level-2/optimize"),f=e("./optimizer/validator"),p=e("./options/compatibility"),h=e("./options/fetch"),d=e("./options/format").formatFrom,m=e("./options/inline"),g=e("./options/inline-request"),v=e("./options/inline-timeout"),b=e("./options/optimization-level").OptimizationLevel,y=e("./options/optimization-level").optimizationLevelFrom,_=e("./options/rebase"),w=e("./options/rebase-to"),A=e("./reader/input-source-map-tracker"),E=e("./reader/read-sources"),x=e("./writer/simple"),C=e("./writer/source-maps");(t.exports=function(e){e=e||{},this.options={compatibility:p(e.compatibility),fetch:h(e.fetch),format:d(e.format),inline:m(e.inline),inlineRequest:g(e.inlineRequest),inlineTimeout:v(e.inlineTimeout),level:y(e.level),rebase:_(e.rebase),rebaseTo:w(e.rebaseTo),returnPromise:!!e.returnPromise,sourceMap:!!e.sourceMap,sourceMapInlineSources:!!e.sourceMapInlineSources}}).prototype.minify=function(e,t,n){var o=this.options;return o.returnPromise?new Promise(function(n,i){r(e,o,t,function(e,t){return e?i(e):n(t)})}):r(e,o,t,n)}}).call(this,e("_process"))},{"./optimizer/level-0/optimize":10,"./optimizer/level-1/optimize":11,"./optimizer/level-2/optimize":30,"./optimizer/validator":58,"./options/compatibility":60,"./options/fetch":61,"./options/format":62,"./options/inline":65,"./options/inline-request":63,"./options/inline-timeout":64,"./options/optimization-level":66,"./options/rebase":68,"./options/rebase-to":67,"./reader/input-source-map-tracker":72,"./reader/read-sources":78,"./writer/simple":100,"./writer/source-maps":101,_process:114}],9:[function(e,t,n){var r={ASTERISK:"asterisk",BANG:"bang",BACKSLASH:"backslash",UNDERSCORE:"underscore"};t.exports=r},{}],10:[function(e,t,n){function r(e){return e}t.exports=r},{}],11:[function(e,t,n){function r(e){return e&&"-"==e[1][0]&&parseFloat(e[1])<0}function o(e){return re.test(e)}function i(e){return ie.test(e)}function a(e){return e.replace(ie,"url(").replace(/\\?\n|\\?\r\n/g,"")}function u(e){var t=e.value;1==t.length&&"none"==t[0][1]&&(t[0][1]="0 0"),1==t.length&&"transparent"==t[0][1]&&(t[0][1]="0 0")}function s(e){var t,n=e.value;3==n.length&&"/"==n[1][1]&&n[0][1]==n[2][1]?t=1:5==n.length&&"/"==n[2][1]&&n[0][1]==n[3][1]&&n[1][1]==n[4][1]?t=2:7==n.length&&"/"==n[3][1]&&n[0][1]==n[4][1]&&n[1][1]==n[5][1]&&n[2][1]==n[6][1]?t=3:9==n.length&&"/"==n[4][1]&&n[0][1]==n[5][1]&&n[1][1]==n[6][1]&&n[2][1]==n[7][1]&&n[3][1]==n[8][1]&&(t=4),t&&(e.value.splice(t),e.dirty=!0)}function l(e,t,n){return-1===t.indexOf("#")&&-1==t.indexOf("rgb")&&-1==t.indexOf("hsl")?F(t):(t=t.replace(/rgb\((\-?\d+),(\-?\d+),(\-?\d+)\)/g,function(e,t,n,r){return M(t,n,r)}).replace(/hsl\((-?\d+),(-?\d+)%?,(-?\d+)%?\)/g,function(e,t,n,r){return L(t,n,r)}).replace(/(^|[^='"])#([0-9a-f]{6})/gi,function(e,t,n){return n[0]==n[1]&&n[2]==n[3]&&n[4]==n[5]?(t+"#"+n[0]+n[2]+n[4]).toLowerCase():(t+"#"+n).toLowerCase()}).replace(/(^|[^='"])#([0-9a-f]{3})/gi,function(e,t,n){return t+"#"+n.toLowerCase()}).replace(/(rgb|rgba|hsl|hsla)\(([^\)]+)\)/g,function(e,t,n){var r=n.split(",");return"hsl"==t&&3==r.length||"hsla"==t&&4==r.length||"rgb"==t&&3==r.length&&n.indexOf("%")>0||"rgba"==t&&4==r.length&&n.indexOf("%")>0?(-1==r[1].indexOf("%")&&(r[1]+="%"),-1==r[2].indexOf("%")&&(r[2]+="%"),t+"("+r.join(",")+")"):e}),n.colors.opacity&&-1==e.indexOf("background")&&(t=t.replace(/(?:rgba|hsla)\(0,0%?,0%?,0\)/g,function(e){return G(t,",").pop().indexOf("gradient(")>-1?e:"transparent"})),F(t))}function c(e){1==e.value.length&&(e.value[0][1]=e.value[0][1].replace(/progid:DXImageTransform\.Microsoft\.(Alpha|Chroma)(\W)/,function(e,t,n){return t.toLowerCase()+n})),e.value[0][1]=e.value[0][1].replace(/,(\S)/g,", $1").replace(/ ?= ?/g,"=")}function f(e,t){var n=e.value[t][1];"normal"==n?n="400":"bold"==n&&(n="700"),e.value[t][1]=n}function p(e){var t,n=e.value;4==n.length&&"0"===n[0][1]&&"0"===n[1][1]&&"0"===n[2][1]&&"0"===n[3][1]&&(t=e.name.indexOf("box-shadow")>-1?2:1),t&&(e.value.splice(t),e.dirty=!0)}function h(e){var t=e.value;1==t.length&&"none"==t[0][1]&&(t[0][1]="0")}function d(e,t,n){return X.test(t)?t.replace(X,function(e,t){var r,o=parseInt(t);return 0===o?e:(n.properties.shorterLengthUnits&&n.units.pt&&3*o%4==0&&(r=3*o/4+"pt"),n.properties.shorterLengthUnits&&n.units.pc&&o%16==0&&(r=o/16+"pc"),n.properties.shorterLengthUnits&&n.units.in&&o%96==0&&(r=o/96+"in"),r&&(r=e.substring(0,e.indexOf(t))+r),r&&r.length<e.length?r:e)}):t}function m(e,t,n){return n.enabled&&-1!==t.indexOf(".")?t.replace(n.decimalPointMatcher,"$1$2$3").replace(n.zeroMatcher,function(e,t,r,o){var i=n.units[o].multiplier,a=parseInt(t),u=isNaN(a)?0:a,s=parseFloat(r);return Math.round((u+s)*i)/i+o}):t}function g(e,t){return ee.test(t)?t.replace(ee,function(e,t,n){var r;return"ms"==n?r=parseInt(t)/1e3+"s":"s"==n&&(r=1e3*parseFloat(t)+"ms"),r.length<e.length?r:e}):t}function v(e,t,n){return/^(?:\-moz\-calc|\-webkit\-calc|calc|rgb|hsl|rgba|hsla)\(/.test(t)?t:"flex"==e||"-ms-flex"==e||"-webkit-flex"==e||"flex-basis"==e||"-webkit-flex-basis"==e?t:t.indexOf("%")>0&&("height"==e||"max-height"==e)?t:t.replace(n,"$10$2").replace(n,"$10$2")}function b(e,t){return e.indexOf("filter")>-1||-1==t.indexOf(" ")||0===t.indexOf("expression")?t:t.indexOf(K.SINGLE_QUOTE)>-1||t.indexOf(K.DOUBLE_QUOTE)>-1?t:((t=t.replace(/\s+/g," ")).indexOf("calc")>-1&&(t=t.replace(/\) ?\/ ?/g,")/ ")),t.replace(/(\(;?)\s+/g,"$1").replace(/\s+(;?\))/g,"$1").replace(/, /g,","))}function y(e,t){return-1==t.indexOf("0deg")?t:t.replace(/\(0deg\)/g,"(0)")}function _(e,t){return-1==t.indexOf("0")?t:(t.indexOf("-")>-1&&(t=t.replace(/([^\w\d\-]|^)\-0([^\.]|$)/g,"$10$2").replace(/([^\w\d\-]|^)\-0([^\.]|$)/g,"$10$2")),t.replace(/(^|\s)0+([1-9])/g,"$1$2").replace(/(^|\D)\.0+(\D|$)/g,"$10$2").replace(/(^|\D)\.0+(\D|$)/g,"$10$2").replace(/\.([1-9]*)0+(\D|$)/g,function(e,t,n){return(t.length>0?".":"")+t+n}).replace(/(^|\D)0\.(\d)/g,"$1.$2"))}function w(e,t){return"content"==e||e.indexOf("font-feature-settings")>-1||e.indexOf("grid-")>-1?t:oe.test(t)?t.substring(1,t.length-1):t}function A(e){return!/^url\(['"].+['"]\)$/.test(e)||/^url\(['"].*[\*\s\(\)'"].*['"]\)$/.test(e)||/^url\(['"]data:[^;]+;charset/.test(e)?e:e.replace(/["']/g,"")}function E(e,t,n){var r=n(e,t);return void 0===r?t:!1===r?W:r}function x(e,t){var n,k,O,B,S,D,R=t.options,F=R.level[$.One],L=V(e,!0);e:for(var M=0,P=L.length;M<P;M++)if(n=L[M],k=n.name,te.test(k)||(D=n.all[n.position],t.warnings.push("Invalid property name '"+k+"' at "+Y(D[1][2][0])+". Ignoring."),n.unused=!0),0===n.value.length&&(D=n.all[n.position],t.warnings.push("Empty property '"+k+"' at "+Y(D[1][2][0])+". Ignoring."),n.unused=!0),n.hack&&((n.hack[0]==z.ASTERISK||n.hack[0]==z.UNDERSCORE)&&!R.compatibility.properties.iePrefixHack||n.hack[0]==z.BACKSLASH&&!R.compatibility.properties.ieSuffixHack||n.hack[0]==z.BANG&&!R.compatibility.properties.ieBangHack)&&(n.unused=!0),F.removeNegativePaddings&&0===k.indexOf("padding")&&(r(n.value[0])||r(n.value[1])||r(n.value[2])||r(n.value[3]))&&(n.unused=!0),!R.compatibility.properties.ieFilters&&T(n)&&(n.unused=!0),!n.unused)if(n.block)x(n.value[0][1],t);else if(!ae.test(k)){for(var U=0,N=n.value.length;U<N;U++){if(O=n.value[U][0],B=n.value[U][1],S=i(B),O==H.PROPERTY_BLOCK){n.unused=!0,t.warnings.push("Invalid value token at "+Y(B[0][1][2][0])+". Ignoring.");break}if(S&&!t.validator.isUrl(B)){n.unused=!0,t.warnings.push("Broken URL '"+B+"' at "+Y(n.value[U][2][0])+". Ignoring.");break}if(S?(B=F.normalizeUrls?a(B):B,B=R.compatibility.properties.urlQuotes?B:A(B)):o(B)?B=F.removeQuotes?w(k,B):B:(B=d(k,B=m(k,B=F.removeWhitespace?b(k,B):B,R.precision),R.compatibility),B=F.replaceTimeUnits?g(k,B):B,B=F.replaceZeroUnits?_(k,B):B,R.compatibility.properties.zeroUnits&&(B=v(k,B=y(k,B),R.unitsRegexp)),R.compatibility.properties.colors&&(B=l(k,B,R.compatibility))),(B=E(k,B,F.transform))===W){n.unused=!0;continue e}n.value[U][1]=B}F.replaceMultipleZeros&&p(n),"background"==k&&F.optimizeBackground?u(n):0===k.indexOf("border")&&k.indexOf("radius")>0&&F.optimizeBorderRadius?s(n):"filter"==k&&F.optimizeFilter&&R.compatibility.properties.ieFilters?c(n):"font-weight"==k&&F.optimizeFontWeight?f(n,0):"outline"==k&&F.optimizeOutline&&h(n)}j(L),I(L),L.length!=e.length&&C(e,R)}function C(e,t){var n,r;for(r=0;r<e.length;r++)(n=e[r])[0]==H.COMMENT&&(k(n,t),0===n[1].length&&(e.splice(r,1),r--))}function k(e,t){if(e[1][2]==K.EXCLAMATION&&("all"==t.level[$.One].specialComments||t.commentsKept<t.level[$.One].specialComments))return void t.commentsKept++;e[1]=[]}function O(e){for(var t=!1,n=0,r=e.length;n<r;n++){var o=e[n];o[0]==H.AT_RULE&&(Z.test(o[1])&&(t||-1==o[1].indexOf(Q)?(e.splice(n,1),n--,r--):(t=!0,e.splice(n,1),e.unshift([H.AT_RULE,o[1].replace(Z,Q)]))))}}function B(e){var t=["px","em","ex","cm","mm","in","pt","pc","%"];return["ch","rem","vh","vm","vmax","vmin","vw"].forEach(function(n){e.compatibility.units[n]&&t.push(n)}),new RegExp("(^|\\s|\\(|,)0(?:"+t.join("|")+")(\\W|$)","g")}function S(e){var t,n,r={matcher:null,units:{}},o=[];for(t in e)(n=e[t])!=J&&(r.units[t]={},r.units[t].value=n,r.units[t].multiplier=Math.pow(10,n),o.push(t));return o.length>0&&(r.enabled=!0,r.decimalPointMatcher=new RegExp("(\\d)\\.($|"+o.join("|")+")($|W)","g"),r.zeroMatcher=new RegExp("(\\d*)(\\.\\d+)("+o.join("|")+")","g")),r}function D(e){return ne.test(e[1])}function T(e){var t;return("filter"==e.name||"-ms-filter"==e.name)&&((t=e.value[0][1]).indexOf("progid")>-1||0===t.indexOf("alpha")||0===t.indexOf("chroma"))}function R(e,t){var n=t.options,r=n.level[$.One],o=n.compatibility.selectors.ie7Hack,i=n.compatibility.selectors.adjacentSpace,a=n.compatibility.properties.spaceAfterClosingBrace,u=n.format,s=!1,l=!1;n.unitsRegexp=n.unitsRegexp||B(n),n.precision=n.precision||S(r.roundingPrecision),n.commentsKept=n.commentsKept||0;for(var c=0,f=e.length;c<f;c++){var p=e[c];switch(p[0]){case H.AT_RULE:p[1]=D(p)&&l?"":p[1],p[1]=r.tidyAtRules?q(p[1]):p[1],s=!0;break;case H.AT_RULE_BLOCK:x(p[2],t),l=!0;break;case H.NESTED_BLOCK:p[1]=r.tidyBlockScopes?N(p[1],a):p[1],R(p[2],t),l=!0;break;case H.COMMENT:k(p,n);break;case H.RULE:p[1]=r.tidySelectors?U(p[1],!o,i,u,t.warnings):p[1],p[1]=p[1].length>1?P(p[1],r.selectorsSortingMethod):p[1],x(p[2],t),l=!0}r.removeEmpty&&(0===p[1].length||p[2]&&0===p[2].length)&&(e.splice(c,1),c--,f--)}return r.cleanupCharsets&&s&&O(e),e}var F=e("./shorten-hex"),L=e("./shorten-hsl"),M=e("./shorten-rgb"),P=e("./sort-selectors"),U=e("./tidy-rules"),N=e("./tidy-block"),q=e("./tidy-at-rule"),z=e("../hack"),I=e("../remove-unused"),j=e("../restore-from-optimizing"),V=e("../wrap-for-optimizing").all,$=e("../../options/optimization-level").OptimizationLevel,H=e("../../tokenizer/token"),K=e("../../tokenizer/marker"),Y=e("../../utils/format-position"),G=e("../../utils/split"),W="ignore-property",Q="@charset",Z=new RegExp("^"+Q,"i"),J=e("../../options/rounding-precision").DEFAULT,X=/(?:^|\s|\()(-?\d+)px/,ee=/^(\-?[\d\.]+)(m?s)$/,te=/^(?:\-chrome\-|\-[\w\-]+\w|\w[\w\-]+\w|\-\-\S+)$/,ne=/^@import/i,re=/^('.*'|".*")$/,oe=/^['"][a-zA-Z][a-zA-Z\d\-_]+['"]$/,ie=/^url\(/i,ae=/^--\S+$/;t.exports=R},{"../../options/optimization-level":66,"../../options/rounding-precision":69,"../../tokenizer/marker":84,"../../tokenizer/token":85,"../../utils/format-position":88,"../../utils/split":97,"../hack":9,"../remove-unused":56,"../restore-from-optimizing":57,"../wrap-for-optimizing":59,"./shorten-hex":12,"./shorten-hsl":13,"./shorten-rgb":14,"./sort-selectors":15,"./tidy-at-rule":16,"./tidy-block":17,"./tidy-rules":18}],12:[function(e,t,n){function r(e,t,n,r){return t+u[n.toLowerCase()]+r}function o(e,t,n){return s[t.toLowerCase()]+n}function i(e){var t=e.indexOf("#")>-1,n=e.replace(f,r);return n!=e&&(n=n.replace(f,r)),t?n.replace(p,o):n}var a={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#f0f",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#f00",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"},u={},s={};for(var l in a){var c=a[l];l.length<c.length?s[c]=l:u[l]=c}var f=new RegExp("(^| |,|\\))("+Object.keys(u).join("|")+")( |,|\\)|$)","ig"),p=new RegExp("("+Object.keys(s).join("|")+")([^a-f0-9]|$)","ig");t.exports=i},{}],13:[function(e,t,n){function r(e,t,n){var r,i,a;if((e%=360)<0&&(e+=360),e=~~e/360,t<0?t=0:t>100&&(t=100),t=~~t/100,n<0?n=0:n>100&&(n=100),n=~~n/100,0===t)r=i=a=n;else{var u=n<.5?n*(1+t):n+t-n*t,s=2*n-u;r=o(s,u,e+1/3),i=o(s,u,e),a=o(s,u,e-1/3)}return[~~(255*r),~~(255*i),~~(255*a)]}function o(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function i(e,t,n){var o=r(e,t,n),i=o[0].toString(16),a=o[1].toString(16),u=o[2].toString(16);return"#"+(1==i.length?"0":"")+i+(1==a.length?"0":"")+a+(1==u.length?"0":"")+u}t.exports=i},{}],14:[function(e,t,n){function r(e,t,n){return"#"+("00000"+(Math.max(0,Math.min(parseInt(e),255))<<16|Math.max(0,Math.min(parseInt(t),255))<<8|Math.max(0,Math.min(parseInt(n),255))).toString(16)).slice(-6)}t.exports=r},{}],15:[function(e,t,n){function r(e,t){return a(e[1],t[1])}function o(e,t){return e[1]>t[1]?1:-1}function i(e,t){switch(t){case"natural":return e.sort(r);case"standard":return e.sort(o);case"none":case!1:return e}}var a=e("../../utils/natural-compare");t.exports=i},{"../../utils/natural-compare":95}],16:[function(e,t,n){function r(e){return e.replace(/\s+/g," ").replace(/url\(\s+/g,"url(").replace(/\s+\)/g,")").trim()}t.exports=r},{}],17:[function(e,t,n){function r(e,t){var n,r;for(r=e.length-1;r>=0;r--)n=!t&&o.test(e[r][1]),e[r][1]=e[r][1].replace(/\n|\r\n/g," ").replace(/\s+/g," ").replace(/(,|:|\() /g,"$1").replace(/ \)/g,")").replace(/'([a-zA-Z][a-zA-Z\d\-_]+)'/,"$1").replace(/"([a-zA-Z][a-zA-Z\d\-_]+)"/,"$1").replace(n?/\) /g:null,")");return e}var o=/^@media\W/;t.exports=r},{}],18:[function(e,t,n){function r(e){var t,n,r,o,i=!1,a=!1;for(r=0,o=e.length;r<o;r++){if(n=e[r],t);else if(n==s.SINGLE_QUOTE||n==s.DOUBLE_QUOTE)a=!a;else{if(!(a||n!=s.CLOSE_CURLY_BRACKET&&n!=s.EXCLAMATION&&n!=w&&n!=s.SEMICOLON)){i=!0;break}if(!a&&0===r&&v.test(n)){i=!0;break}}t=n==s.BACK_SLASH}return i}function o(e,t){var n,r,o,i,a,l,p,h,d,m,g,y,_,w=[],A=0,E=!1,x=!1,C=c.test(e),k=t&&t.spaces[u.AroundSelectorRelation];for(y=0,_=e.length;y<_;y++){if(n=e[y],r=n==s.NEW_LINE_NIX,o=n==s.NEW_LINE_NIX&&e[y-1]==s.NEW_LINE_WIN,l=p||h,m=!i&&0===A&&v.test(n),g=b.test(n),a&&l&&o)w.pop(),w.pop();else if(i&&l&&r)w.pop();else if(i)w.push(n);else if(n!=s.OPEN_SQUARE_BRACKET||l)if(n!=s.CLOSE_SQUARE_BRACKET||l)if(n!=s.OPEN_ROUND_BRACKET||l)if(n!=s.CLOSE_ROUND_BRACKET||l)if(n!=s.SINGLE_QUOTE||l)if(n!=s.DOUBLE_QUOTE||l)if(n==s.SINGLE_QUOTE&&l)w.push(n),p=!1;else if(n==s.DOUBLE_QUOTE&&l)w.push(n),h=!1;else{if(g&&E&&!k)continue;!g&&E&&k?(w.push(s.SPACE),w.push(n)):g&&(d||A>0)&&!l||g&&x&&!l||(o||r)&&(d||A>0)&&l||(m&&x&&!k?(w.pop(),w.push(n)):m&&!x&&k?(w.push(s.SPACE),w.push(n)):g?w.push(s.SPACE):w.push(n))}else w.push(n),h=!0;else w.push(n),p=!0;else w.push(n),A--;else w.push(n),A++;else w.push(n),d=!1;else w.push(n),d=!0;a=i,i=n==s.BACK_SLASH,E=m,x=g}return C?w.join("").replace(f,"$1 $2]"):w.join("")}function i(e){return-1==e.indexOf("'")&&-1==e.indexOf('"')?e:e.replace(m,"=$1 $2").replace(g,"=$1$2").replace(p,"=$1 $2").replace(h,"=$1$2")}function a(e,t,n,a,u){function s(e,t){return u.push("HTML comment '"+t+"' at "+l(e[2][0])+". Removing."),""}for(var c=[],f=[],p=0,h=e.length;p<h;p++){var m=e[p],g=m[1];r(g=g.replace(d,s.bind(null,m)))?u.push("Invalid selector '"+m[1]+"' at "+l(m[2][0])+". Ignoring."):(g=i(g=o(g,a)),n&&g.indexOf("nav")>0&&(g=g.replace(/\+nav(\S|$)/,"+ nav$1")),t&&g.indexOf(y)>-1||t&&g.indexOf(_)>-1||(g.indexOf("*")>-1&&(g=g.replace(/\*([:#\.\[])/g,"$1").replace(/^(\:first\-child)?\+html/,"*$1+html")),f.indexOf(g)>-1||(m[1]=g,f.push(g),c.push(m))))}return 1==c.length&&0===c[0][1].length&&(u.push("Empty selector '"+c[0][1]+"' at "+l(c[0][2][0])+". Ignoring."),c=[]),c}var u=e("../../options/format").Spaces,s=e("../../tokenizer/marker"),l=e("../../utils/format-position"),c=/[\s"'][iI]\s*\]/,f=/([\d\w])([iI])\]/g,p=/="([a-zA-Z][a-zA-Z\d\-_]+)"([iI])/g,h=/="([a-zA-Z][a-zA-Z\d\-_]+)"(\s|\])/g,d=/^(?:(?:<!--|-->)\s*)+/,m=/='([a-zA-Z][a-zA-Z\d\-_]+)'([iI])/g,g=/='([a-zA-Z][a-zA-Z\d\-_]+)'(\s|\])/g,v=/[>\+~]/,b=/\s/,y="*+html ",_="*:first-child+html ",w="<";t.exports=a},{"../../options/format":62,"../../tokenizer/marker":84,"../../utils/format-position":88}],19:[function(e,t,n){function r(e){var t,n;for(t=0,n=e.length;t<n;t++)if("inherit"==e[t][1])return!0;return!1}function o(e){return function(t){return"invert"==t[1]||e.isColor(t[1])||e.isPrefixed(t[1])}}function i(e){return function(t){return"inherit"!=t[1]&&e.isStyleKeyword(t[1])&&!e.isColorFunction(t[1])}}function a(e,t,n){var r=n[e];return v(r.doubleValues&&2==r.defaultValue.length?[b.PROPERTY,[b.PROPERTY_NAME,e],[b.PROPERTY_VALUE,r.defaultValue[0]],[b.PROPERTY_VALUE,r.defaultValue[1]]]:r.doubleValues&&1==r.defaultValue.length?[b.PROPERTY,[b.PROPERTY_NAME,e],[b.PROPERTY_VALUE,r.defaultValue[0]]]:[b.PROPERTY,[b.PROPERTY_NAME,e],[b.PROPERTY_VALUE,r.defaultValue]])}function u(e){return function(t){return"inherit"!=t[1]&&(e.isWidth(t[1])||e.isUnit(t[1])&&!e.isDynamicUnit(t[1]))&&!e.isStyleKeyword(t[1])&&!e.isColorFunction(t[1])}}function s(e,t,n){var o,i,u,s=a(e.name+"-duration",e,t),l=a(e.name+"-timing-function",e,t),c=a(e.name+"-delay",e,t),f=a(e.name+"-iteration-count",e,t),p=a(e.name+"-direction",e,t),h=a(e.name+"-fill-mode",e,t),d=a(e.name+"-play-state",e,t),m=a(e.name+"-name",e,t),v=[s,l,c,f,p,h,d,m],b=e.value,y=!1,w=!1,A=!1,E=!1,x=!1,C=!1,k=!1,O=!1;if(1==e.value.length&&"inherit"==e.value[0][1])return s.value=l.value=c.value=f.value=p.value=h.value=d.value=m.value=e.value,v;if(b.length>1&&r(b))throw new g("Invalid animation values at "+_(b[0][2][0])+". Ignoring.");for(i=0,u=b.length;i<u;i++)if(o=b[i],n.isTime(o[1])&&!y)s.value=[o],y=!0;else if(n.isTime(o[1])&&!A)c.value=[o],A=!0;else if(!n.isGlobal(o[1])&&!n.isAnimationTimingFunction(o[1])||w)if(!n.isAnimationIterationCountKeyword(o[1])&&!n.isPositiveNumber(o[1])||E)if(n.isAnimationDirectionKeyword(o[1])&&!x)p.value=[o],x=!0;else if(n.isAnimationFillModeKeyword(o[1])&&!C)h.value=[o],C=!0;else if(n.isAnimationPlayStateKeyword(o[1])&&!k)d.value=[o],k=!0;else{if(!n.isAnimationNameKeyword(o[1])&&!n.isIdentifier(o[1])||O)throw new g("Invalid animation value at "+_(o[2][0])+". Ignoring.");m.value=[o],O=!0}else f.value=[o],E=!0;else l.value=[o],w=!0;return v}function l(e,t,n){var r=a("background-image",e,t),o=a("background-position",e,t),i=a("background-size",e,t),u=a("background-repeat",e,t),s=a("background-attachment",e,t),l=a("background-origin",e,t),c=a("background-clip",e,t),f=a("background-color",e,t),p=[r,o,i,u,s,l,c,f],h=e.value,d=!1,m=!1,v=!1,b=!1,w=!1;if(1==e.value.length&&"inherit"==e.value[0][1])return f.value=r.value=u.value=o.value=i.value=l.value=c.value=e.value,p;if(1==e.value.length&&"0 0"==e.value[0][1])return p;for(var A=h.length-1;A>=0;A--){var E=h[A];if(n.isBackgroundAttachmentKeyword(E[1]))s.value=[E],w=!0;else if(n.isBackgroundClipKeyword(E[1])||n.isBackgroundOriginKeyword(E[1]))m?(l.value=[E],v=!0):(c.value=[E],m=!0),w=!0;else if(n.isBackgroundRepeatKeyword(E[1]))b?u.value.unshift(E):(u.value=[E],b=!0),w=!0;else if(n.isBackgroundPositionKeyword(E[1])||n.isBackgroundSizeKeyword(E[1])||n.isUnit(E[1])||n.isDynamicUnit(E[1])){if(A>0){var x=h[A-1];x[1]==y.FORWARD_SLASH?i.value=[E]:A>1&&h[A-2][1]==y.FORWARD_SLASH?(i.value=[x,E],A-=2):(d||(o.value=[]),o.value.unshift(E),d=!0)}else d||(o.value=[]),o.value.unshift(E),d=!0;w=!0}else f.value[0][1]!=t[f.name].defaultValue&&"none"!=f.value[0][1]||!n.isColor(E[1])&&!n.isPrefixed(E[1])?(n.isUrl(E[1])||n.isFunction(E[1]))&&(r.value=[E],w=!0):(f.value=[E],w=!0)}if(m&&!v&&(l.value=c.value.slice(0)),!w)throw new g("Invalid background value at "+_(h[0][2][0])+". Ignoring.");return p}function c(e,t){for(var n=e.value,r=-1,o=0,i=n.length;o<i;o++)if(n[o][1]==y.FORWARD_SLASH){r=o;break}if(0===r||r===n.length-1)throw new g("Invalid border-radius value at "+_(n[0][2][0])+". Ignoring.");var u=a(e.name,e,t);u.value=r>-1?n.slice(0,r):n.slice(0),u.components=p(u,t);var s=a(e.name,e,t);s.value=r>-1?n.slice(r+1):n.slice(0),s.components=p(s,t);for(var l=0;l<4;l++)u.components[l].multiplex=!0,u.components[l].value=u.components[l].value.concat(s.components[l].value);return u.components}function f(e,t,n){var o,i,u,s,l=a("font-style",e,t),c=a("font-variant",e,t),f=a("font-weight",e,t),p=a("font-stretch",e,t),h=a("font-size",e,t),d=a("line-height",e,t),m=a("font-family",e,t),v=[l,c,f,p,h,d,m],b=e.value,w=0,A=!1,E=!1,x=!1,C=!1,k=!1,O=!1;if(!b[w])throw new g("Missing font values at "+_(e.all[e.position][1][2][0])+". Ignoring.");if(1==b.length&&"inherit"==b[0][1])return l.value=c.value=f.value=p.value=h.value=d.value=m.value=b,v;if(1==b.length&&(n.isFontKeyword(b[0][1])||n.isGlobal(b[0][1])||n.isPrefixed(b[0][1])))return b[0][1]=y.INTERNAL+b[0][1],l.value=c.value=f.value=p.value=h.value=d.value=m.value=b,v;if(b.length>1&&r(b))throw new g("Invalid font values at "+_(b[0][2][0])+". Ignoring.");for(;w<4;){if(o=n.isFontStretchKeyword(b[w][1])||n.isGlobal(b[w][1]),i=n.isFontStyleKeyword(b[w][1])||n.isGlobal(b[w][1]),u=n.isFontVariantKeyword(b[w][1])||n.isGlobal(b[w][1]),s=n.isFontWeightKeyword(b[w][1])||n.isGlobal(b[w][1]),i&&!E)l.value=[b[w]],E=!0;else if(u&&!x)c.value=[b[w]],x=!0;else if(s&&!C)f.value=[b[w]],C=!0;else{if(!o||A){if(i&&E||u&&x||s&&C||o&&A)throw new g("Invalid font style / variant / weight / stretch value at "+_(b[0][2][0])+". Ignoring.");break}p.value=[b[w]],A=!0}w++}if(!(n.isFontSizeKeyword(b[w][1])||n.isUnit(b[w][1])&&!n.isDynamicUnit(b[w][1])))throw new g("Missing font size at "+_(b[0][2][0])+". Ignoring.");if(h.value=[b[w]],k=!0,w++,!b[w])throw new g("Missing font family at "+_(b[0][2][0])+". Ignoring.");for(k&&b[w]&&b[w][1]==y.FORWARD_SLASH&&b[w+1]&&(n.isLineHeightKeyword(b[w+1][1])||n.isUnit(b[w+1][1])||n.isNumber(b[w+1][1]))&&(d.value=[b[w+1]],w++,w++),m.value=[];b[w];)b[w][1]==y.COMMA?O=!1:(O?m.value[m.value.length-1][1]+=y.SPACE+b[w][1]:m.value.push(b[w]),O=!0),w++;if(0===m.value.length)throw new g("Missing font family at "+_(b[0][2][0])+". Ignoring.");return v}function p(e,t){var n=t[e.name].components,r=[],o=e.value;if(o.length<1)return[];o.length<2&&(o[1]=o[0].slice(0)),o.length<3&&(o[2]=o[0].slice(0)),o.length<4&&(o[3]=o[1].slice(0));for(var i=n.length-1;i>=0;i--){var a=v([b.PROPERTY,[b.PROPERTY_NAME,n[i]]]);a.value=[o[i]],r.unshift(a)}return r}function h(e){return function(t,n,r){var o,i,u,s,l=[],c=t.value;for(o=0,u=c.length;o<u;o++)","==c[o][1]&&l.push(o);if(0===l.length)return e(t,n,r);var f=[];for(o=0,u=l.length;o<=u;o++){var p=0===o?0:l[o-1]+1,h=o<u?l[o]:c.length,d=a(t.name,t,n);d.value=c.slice(p,h),f.push(e(d,n,r))}var m=f[0];for(o=0,u=m.length;o<u;o++)for(m[o].multiplex=!0,i=1,s=f.length;i<s;i++)m[o].value.push([b.PROPERTY_VALUE,y.COMMA]),Array.prototype.push.apply(m[o].value,f[i][o].value);return m}}function d(e,t,n){var r=a("list-style-type",e,t),o=a("list-style-position",e,t),i=a("list-style-image",e,t),u=[r,o,i];if(1==e.value.length&&"inherit"==e.value[0][1])return r.value=o.value=i.value=[e.value[0]],u;var s=e.value.slice(0),l=s.length,c=0;for(c=0,l=s.length;c<l;c++)if(n.isUrl(s[c][1])||"0"==s[c][1]){i.value=[s[c]],s.splice(c,1);break}for(c=0,l=s.length;c<l;c++)if(n.isListStylePositionKeyword(s[c][1])){o.value=[s[c]],s.splice(c,1);break}return s.length>0&&(n.isListStyleTypeKeyword(s[0][1])||n.isIdentifier(s[0][1]))&&(r.value=[s[0]]),u}function m(e,t,n){for(var r,s,l,c=t[e.name],f=[a(c.components[0],e,t),a(c.components[1],e,t),a(c.components[2],e,t)],p=0;p<3;p++){var h=f[p];h.name.indexOf("color")>0?r=h:h.name.indexOf("style")>0?s=h:l=h}if(1==e.value.length&&"inherit"==e.value[0][1]||3==e.value.length&&"inherit"==e.value[0][1]&&"inherit"==e.value[1][1]&&"inherit"==e.value[2][1])return r.value=s.value=l.value=[e.value[0]],f;var d,m,g=e.value.slice(0);return g.length>0&&(d=(m=g.filter(u(n))).length>1&&("none"==m[0][1]||"auto"==m[0][1])?m[1]:m[0])&&(l.value=[d],g.splice(g.indexOf(d),1)),g.length>0&&(d=g.filter(i(n))[0])&&(s.value=[d],g.splice(g.indexOf(d),1)),g.length>0&&(d=g.filter(o(n))[0])&&(r.value=[d],g.splice(g.indexOf(d),1)),f}var g=e("./invalid-property-error"),v=e("../wrap-for-optimizing").single,b=e("../../tokenizer/token"),y=e("../../tokenizer/marker"),_=e("../../utils/format-position");t.exports={animation:s,background:l,border:m,borderRadius:c,font:f,fourValues:p,listStyle:d,multiplex:h,outline:m}},{"../../tokenizer/marker":84,"../../tokenizer/token":85,"../../utils/format-position":88,"../wrap-for-optimizing":59,"./invalid-property-error":24}],20:[function(e,t,n){function r(e,t,n){return!!(w(e,t,n,0,!0)||e.isAnimationIterationCountKeyword(n)||e.isPositiveNumber(n))&&(!(!e.isVariable(t)||!e.isVariable(n))||(e.isAnimationIterationCountKeyword(n)||e.isPositiveNumber(n)))}function o(e,t,n){return!!(w(e,t,n,0,!0)||e.isAnimationNameKeyword(n)||e.isIdentifier(n))&&(!(!e.isVariable(t)||!e.isVariable(n))||(e.isAnimationNameKeyword(n)||e.isIdentifier(n)))}function i(e,t,n){return!!(w(e,t,n,0,!0)||e.isAnimationTimingFunction(n)||e.isGlobal(n))&&(!(!e.isVariable(t)||!e.isVariable(n))||(e.isAnimationTimingFunction(n)||e.isGlobal(n)))}function a(e,t,n){return!(!e.isFunction(t)||!e.isFunction(n))&&t.substring(0,t.indexOf("("))===n.substring(0,n.indexOf("("))}function u(e,t,n){return!!(w(e,t,n,0,!0)||e.isBackgroundPositionKeyword(n)||e.isGlobal(n))&&(!(!e.isVariable(t)||!e.isVariable(n))||(!(!e.isBackgroundPositionKeyword(n)&&!e.isGlobal(n))||b(e,t,n)))}function s(e,t,n){return!!(w(e,t,n,0,!0)||e.isBackgroundSizeKeyword(n)||e.isGlobal(n))&&(!(!e.isVariable(t)||!e.isVariable(n))||(!(!e.isBackgroundSizeKeyword(n)&&!e.isGlobal(n))||b(e,t,n)))}function l(e,t,n){return!(!w(e,t,n,0,!0)&&!e.isColor(n))&&(!(!e.isVariable(t)||!e.isVariable(n))||!(!e.colorOpacity&&(e.isRgbColor(t)||e.isHslColor(t)))&&(!(!e.colorOpacity&&(e.isRgbColor(n)||e.isHslColor(n)))&&(!(!e.isColor(t)||!e.isColor(n))||m(e,t,n))))}function c(e){return function(t,n,r,o){return e[o](t,n,r)}}function f(e,t,n){return w(e,t,n,0,!0)}function p(e,t,n){return!(!w(e,t,n,0,!0)&&!e.isImage(n))&&(!(!e.isVariable(t)||!e.isVariable(n))||(!!e.isImage(n)||!e.isImage(t)&&m(e,t,n)))}function h(e){return function(t,n,r){return!(!w(t,n,r,0,!0)&&!t.isKeyword(e)(r))&&(!(!t.isVariable(n)||!t.isVariable(r))||t.isKeyword(e)(r))}}function d(e){return function(t,n,r){return!!(w(t,n,r,0,!0)||t.isKeyword(e)(r)||t.isGlobal(r))&&(!(!t.isVariable(n)||!t.isVariable(r))||(t.isKeyword(e)(r)||t.isGlobal(r)))}}function m(e,t,n){return!!a(e,t,n)||t===n}function g(e,t,n){return!!(w(e,t,n,0,!0)||e.isUnit(n)||e.isColor(n)||e.isGlobal(n))&&(!(!e.isVariable(t)||!e.isVariable(n))||(e.isUnit(n)||e.isColor(n)||e.isGlobal(n)))}function v(e,t,n){return!(!w(e,t,n,0,!0)&&!e.isTime(n))&&(!(!e.isVariable(t)||!e.isVariable(n))||!(e.isTime(t)&&!e.isTime(n))&&(!!e.isTime(n)||!e.isTime(t)&&(!(!e.isFunction(t)||e.isPrefixed(t)||!e.isFunction(n)||e.isPrefixed(n))||m(e,t,n))))}function b(e,t,n){return!(!w(e,t,n,0,!0)&&!e.isUnit(n))&&(!(!e.isVariable(t)||!e.isVariable(n))||!(e.isUnit(t)&&!e.isUnit(n))&&(!!e.isUnit(n)||!e.isUnit(t)&&(!(!e.isFunction(t)||e.isPrefixed(t)||!e.isFunction(n)||e.isPrefixed(n))||m(e,t,n))))}function y(e){var t=d(e);return function(e,n,r){return b(e,n,r)||t(e,n,r)}}function _(e,t,n){return!(!w(e,t,n,0,!0)&&!e.isZIndex(n))&&(!(!e.isVariable(t)||!e.isVariable(n))||e.isZIndex(n))}var w=e("./properties/understandable");t.exports={generic:{color:l,components:c,image:p,time:v,unit:b},property:{animationDirection:d("animation-direction"),animationFillMode:h("animation-fill-mode"),animationIterationCount:r,animationName:o,animationPlayState:d("animation-play-state"),animationTimingFunction:i,backgroundAttachment:h("background-attachment"),backgroundClip:d("background-clip"),backgroundOrigin:h("background-origin"),backgroundPosition:u,backgroundRepeat:h("background-repeat"),backgroundSize:s,bottom:y("bottom"),borderCollapse:h("border-collapse"),borderStyle:d("*-style"),clear:d("clear"),cursor:d("cursor"),display:d("display"),float:d("float"),left:y("left"),fontFamily:f,fontStretch:d("font-stretch"),fontStyle:d("font-style"),fontVariant:d("font-variant"),fontWeight:d("font-weight"),listStyleType:d("list-style-type"),listStylePosition:d("list-style-position"),outlineStyle:d("*-style"),overflow:d("overflow"),position:d("position"),right:y("right"),textAlign:d("text-align"),textDecoration:d("text-decoration"),textOverflow:d("text-overflow"),textShadow:g,top:y("top"),transform:m,verticalAlign:y("vertical-align"),visibility:d("visibility"),whiteSpace:d("white-space"),zIndex:_}}},{"./properties/understandable":41}],21:[function(e,t,n){function r(e){for(var t=o(e),n=e.components.length-1;n>=0;n--){var r=o(e.components[n]);r.value=e.components[n].value.slice(0),t.components.unshift(r)}return t.dirty=!0,t.value=e.value.slice(0),t}function o(e){var t=i([a.PROPERTY,[a.PROPERTY_NAME,e.name]]);return t.important=e.important,t.hack=e.hack,t.unused=!1,t}var i=e("../wrap-for-optimizing").single,a=e("../../tokenizer/token");t.exports={deep:r,shallow:o}},{"../../tokenizer/token":85,"../wrap-for-optimizing":59}],22:[function(e,t,n){var r=e("./break-up"),o=e("./can-override"),i=e("./restore"),a=e("../../utils/override"),u={animation:{canOverride:o.generic.components([o.generic.time,o.property.animationTimingFunction,o.generic.time,o.property.animationIterationCount,o.property.animationDirection,o.property.animationFillMode,o.property.animationPlayState,o.property.animationName]),components:["animation-duration","animation-timing-function","animation-delay","animation-iteration-count","animation-direction","animation-fill-mode","animation-play-state","animation-name"],breakUp:r.multiplex(r.animation),defaultValue:"none",restore:i.multiplex(i.withoutDefaults),shorthand:!0,vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-delay":{canOverride:o.generic.time,componentOf:["animation"],defaultValue:"0s",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-direction":{canOverride:o.property.animationDirection,componentOf:["animation"],defaultValue:"normal",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-duration":{canOverride:o.generic.time,componentOf:["animation"],defaultValue:"0s",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-fill-mode":{canOverride:o.property.animationFillMode,componentOf:["animation"],defaultValue:"none",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-iteration-count":{canOverride:o.property.animationIterationCount,componentOf:["animation"],defaultValue:"1",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-name":{canOverride:o.property.animationName,componentOf:["animation"],defaultValue:"none",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-play-state":{canOverride:o.property.animationPlayState,componentOf:["animation"],defaultValue:"running",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-timing-function":{canOverride:o.property.animationTimingFunction,componentOf:["animation"],defaultValue:"ease",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},background:{canOverride:o.generic.components([o.generic.image,o.property.backgroundPosition,o.property.backgroundSize,o.property.backgroundRepeat,o.property.backgroundAttachment,o.property.backgroundOrigin,o.property.backgroundClip,o.generic.color]),components:["background-image","background-position","background-size","background-repeat","background-attachment","background-origin","background-clip","background-color"],breakUp:r.multiplex(r.background),defaultValue:"0 0",restore:i.multiplex(i.background),shortestValue:"0",shorthand:!0},"background-attachment":{canOverride:o.property.backgroundAttachment,componentOf:["background"],defaultValue:"scroll",intoMultiplexMode:"real"},"background-clip":{canOverride:o.property.backgroundClip,componentOf:["background"],defaultValue:"border-box",intoMultiplexMode:"real",shortestValue:"border-box"},"background-color":{canOverride:o.generic.color,componentOf:["background"],defaultValue:"transparent",intoMultiplexMode:"real",multiplexLastOnly:!0,nonMergeableValue:"none",shortestValue:"red"},"background-image":{canOverride:o.generic.image,componentOf:["background"],defaultValue:"none",intoMultiplexMode:"default"},"background-origin":{canOverride:o.property.backgroundOrigin,componentOf:["background"],defaultValue:"padding-box",intoMultiplexMode:"real",shortestValue:"border-box"},"background-position":{canOverride:o.property.backgroundPosition,componentOf:["background"],defaultValue:["0","0"],doubleValues:!0,intoMultiplexMode:"real",shortestValue:"0"},"background-repeat":{canOverride:o.property.backgroundRepeat,componentOf:["background"],defaultValue:["repeat"],doubleValues:!0,intoMultiplexMode:"real"},"background-size":{canOverride:o.property.backgroundSize,componentOf:["background"],defaultValue:["auto"],doubleValues:!0,intoMultiplexMode:"real",shortestValue:"0 0"},bottom:{canOverride:o.property.bottom,defaultValue:"auto"},border:{breakUp:r.border,canOverride:o.generic.components([o.generic.unit,o.property.borderStyle,o.generic.color]),components:["border-width","border-style","border-color"],defaultValue:"none",overridesShorthands:["border-bottom","border-left","border-right","border-top"],restore:i.withoutDefaults,shorthand:!0,shorthandComponents:!0},"border-bottom":{breakUp:r.border,canOverride:o.generic.components([o.generic.unit,o.property.borderStyle,o.generic.color]),components:["border-bottom-width","border-bottom-style","border-bottom-color"],defaultValue:"none",restore:i.withoutDefaults,shorthand:!0},"border-bottom-color":{canOverride:o.generic.color,componentOf:["border-bottom","border-color"],defaultValue:"none"},"border-bottom-left-radius":{canOverride:o.generic.unit,componentOf:["border-radius"],defaultValue:"0",vendorPrefixes:["-moz-","-o-"]},"border-bottom-right-radius":{canOverride:o.generic.unit,componentOf:["border-radius"],defaultValue:"0",vendorPrefixes:["-moz-","-o-"]},"border-bottom-style":{canOverride:o.property.borderStyle,componentOf:["border-bottom","border-style"],defaultValue:"none"},"border-bottom-width":{canOverride:o.generic.unit,componentOf:["border-bottom","border-width"],defaultValue:"medium",oppositeTo:"border-top-width",shortestValue:"0"},"border-collapse":{canOverride:o.property.borderCollapse,defaultValue:"separate"},"border-color":{breakUp:r.fourValues,canOverride:o.generic.components([o.generic.color,o.generic.color,o.generic.color,o.generic.color]),componentOf:["border"],components:["border-top-color","border-right-color","border-bottom-color","border-left-color"],defaultValue:"none",restore:i.fourValues,shortestValue:"red",shorthand:!0},"border-left":{breakUp:r.border,canOverride:o.generic.components([o.generic.unit,o.property.borderStyle,o.generic.color]),components:["border-left-width","border-left-style","border-left-color"],defaultValue:"none",restore:i.withoutDefaults,shorthand:!0},"border-left-color":{canOverride:o.generic.color,componentOf:["border-color","border-left"],defaultValue:"none"},"border-left-style":{canOverride:o.property.borderStyle,componentOf:["border-left","border-style"],defaultValue:"none"},"border-left-width":{canOverride:o.generic.unit,componentOf:["border-left","border-width"],defaultValue:"medium",oppositeTo:"border-right-width",shortestValue:"0"},"border-radius":{breakUp:r.borderRadius,canOverride:o.generic.components([o.generic.unit,o.generic.unit,o.generic.unit,o.generic.unit]),components:["border-top-left-radius","border-top-right-radius","border-bottom-right-radius","border-bottom-left-radius"],defaultValue:"0",restore:i.borderRadius,shorthand:!0,vendorPrefixes:["-moz-","-o-"]},"border-right":{breakUp:r.border,canOverride:o.generic.components([o.generic.unit,o.property.borderStyle,o.generic.color]),components:["border-right-width","border-right-style","border-right-color"],defaultValue:"none",restore:i.withoutDefaults,shorthand:!0},"border-right-color":{canOverride:o.generic.color,componentOf:["border-color","border-right"],defaultValue:"none"},"border-right-style":{canOverride:o.property.borderStyle,componentOf:["border-right","border-style"],defaultValue:"none"},"border-right-width":{canOverride:o.generic.unit,componentOf:["border-right","border-width"],defaultValue:"medium",oppositeTo:"border-left-width",shortestValue:"0"},"border-style":{breakUp:r.fourValues,canOverride:o.generic.components([o.property.borderStyle,o.property.borderStyle,o.property.borderStyle,o.property.borderStyle]),componentOf:["border"],components:["border-top-style","border-right-style","border-bottom-style","border-left-style"],defaultValue:"none",restore:i.fourValues,shorthand:!0},"border-top":{breakUp:r.border,canOverride:o.generic.components([o.generic.unit,o.property.borderStyle,o.generic.color]),components:["border-top-width","border-top-style","border-top-color"],defaultValue:"none",restore:i.withoutDefaults,shorthand:!0},"border-top-color":{canOverride:o.generic.color,componentOf:["border-color","border-top"],defaultValue:"none"},"border-top-left-radius":{canOverride:o.generic.unit,componentOf:["border-radius"],defaultValue:"0",vendorPrefixes:["-moz-","-o-"]},"border-top-right-radius":{canOverride:o.generic.unit,componentOf:["border-radius"],defaultValue:"0",vendorPrefixes:["-moz-","-o-"]},"border-top-style":{canOverride:o.property.borderStyle,componentOf:["border-style","border-top"],defaultValue:"none"},"border-top-width":{canOverride:o.generic.unit,componentOf:["border-top","border-width"],defaultValue:"medium",oppositeTo:"border-bottom-width",shortestValue:"0"},"border-width":{breakUp:r.fourValues,canOverride:o.generic.components([o.generic.unit,o.generic.unit,o.generic.unit,o.generic.unit]),componentOf:["border"],components:["border-top-width","border-right-width","border-bottom-width","border-left-width"],defaultValue:"medium",restore:i.fourValues,shortestValue:"0",shorthand:!0},clear:{canOverride:o.property.clear,defaultValue:"none"},color:{canOverride:o.generic.color,defaultValue:"transparent",shortestValue:"red"},cursor:{canOverride:o.property.cursor,defaultValue:"auto"},display:{canOverride:o.property.display},float:{canOverride:o.property.float,defaultValue:"none"},font:{breakUp:r.font,canOverride:o.generic.components([o.property.fontStyle,o.property.fontVariant,o.property.fontWeight,o.property.fontStretch,o.generic.unit,o.generic.unit,o.property.fontFamily]),components:["font-style","font-variant","font-weight","font-stretch","font-size","line-height","font-family"],restore:i.font,shorthand:!0},"font-family":{canOverride:o.property.fontFamily,defaultValue:"user|agent|specific"},"font-size":{canOverride:o.generic.unit,defaultValue:"medium",shortestValue:"0"},"font-stretch":{canOverride:o.property.fontStretch,defaultValue:"normal"},"font-style":{canOverride:o.property.fontStyle,defaultValue:"normal"},"font-variant":{canOverride:o.property.fontVariant,defaultValue:"normal"},"font-weight":{canOverride:o.property.fontWeight,defaultValue:"normal",shortestValue:"400"},height:{canOverride:o.generic.unit,defaultValue:"auto",shortestValue:"0"},left:{canOverride:o.property.left,defaultValue:"auto"},"line-height":{canOverride:o.generic.unit,defaultValue:"normal",shortestValue:"0"},"list-style":{canOverride:o.generic.components([o.property.listStyleType,o.property.listStylePosition,o.property.listStyleImage]),components:["list-style-type","list-style-position","list-style-image"],breakUp:r.listStyle,restore:i.withoutDefaults,defaultValue:"outside",shortestValue:"none",shorthand:!0},"list-style-image":{canOverride:o.generic.image,componentOf:["list-style"],defaultValue:"none"},"list-style-position":{canOverride:o.property.listStylePosition,componentOf:["list-style"],defaultValue:"outside",shortestValue:"inside"},"list-style-type":{canOverride:o.property.listStyleType,componentOf:["list-style"],defaultValue:"decimal|disc",shortestValue:"none"},margin:{breakUp:r.fourValues,canOverride:o.generic.components([o.generic.unit,o.generic.unit,o.generic.unit,o.generic.unit]),components:["margin-top","margin-right","margin-bottom","margin-left"],defaultValue:"0",restore:i.fourValues,shorthand:!0},"margin-bottom":{canOverride:o.generic.unit,componentOf:["margin"],defaultValue:"0",oppositeTo:"margin-top"},"margin-left":{canOverride:o.generic.unit,componentOf:["margin"],defaultValue:"0",oppositeTo:"margin-right"},"margin-right":{canOverride:o.generic.unit,componentOf:["margin"],defaultValue:"0",oppositeTo:"margin-left"},"margin-top":{canOverride:o.generic.unit,componentOf:["margin"],defaultValue:"0",oppositeTo:"margin-bottom"},outline:{canOverride:o.generic.components([o.generic.color,o.property.outlineStyle,o.generic.unit]),components:["outline-color","outline-style","outline-width"],breakUp:r.outline,restore:i.withoutDefaults,defaultValue:"0",shorthand:!0},"outline-color":{canOverride:o.generic.color,componentOf:["outline"],defaultValue:"invert",shortestValue:"red"},"outline-style":{canOverride:o.property.outlineStyle,componentOf:["outline"],defaultValue:"none"},"outline-width":{canOverride:o.generic.unit,componentOf:["outline"],defaultValue:"medium",shortestValue:"0"},overflow:{canOverride:o.property.overflow,defaultValue:"visible"},"overflow-x":{canOverride:o.property.overflow,defaultValue:"visible"},"overflow-y":{canOverride:o.property.overflow,defaultValue:"visible"},padding:{breakUp:r.fourValues,canOverride:o.generic.components([o.generic.unit,o.generic.unit,o.generic.unit,o.generic.unit]),components:["padding-top","padding-right","padding-bottom","padding-left"],defaultValue:"0",restore:i.fourValues,shorthand:!0},"padding-bottom":{canOverride:o.generic.unit,componentOf:["padding"],defaultValue:"0",oppositeTo:"padding-top"},"padding-left":{canOverride:o.generic.unit,componentOf:["padding"],defaultValue:"0",oppositeTo:"padding-right"},"padding-right":{canOverride:o.generic.unit,componentOf:["padding"],defaultValue:"0",oppositeTo:"padding-left"},"padding-top":{canOverride:o.generic.unit,componentOf:["padding"],defaultValue:"0",oppositeTo:"padding-bottom"},position:{canOverride:o.property.position,defaultValue:"static"},right:{canOverride:o.property.right,defaultValue:"auto"},"text-align":{canOverride:o.property.textAlign,defaultValue:"left|right"},"text-decoration":{canOverride:o.property.textDecoration,defaultValue:"none"},"text-overflow":{canOverride:o.property.textOverflow,defaultValue:"none"},"text-shadow":{canOverride:o.property.textShadow,defaultValue:"none"},top:{canOverride:o.property.top,defaultValue:"auto"},transform:{canOverride:o.property.transform,vendorPrefixes:["-moz-","-ms-","-webkit-"]},"vertical-align":{canOverride:o.property.verticalAlign,defaultValue:"baseline"},visibility:{canOverride:o.property.visibility,defaultValue:"visible"},"white-space":{canOverride:o.property.whiteSpace,defaultValue:"normal"},width:{canOverride:o.generic.unit,defaultValue:"auto",shortestValue:"0"},"z-index":{canOverride:o.property.zIndex,defaultValue:"auto"}},s={};for(var l in u){var c=u[l];if("vendorPrefixes"in c){for(var f=0;f<c.vendorPrefixes.length;f++){var p=c.vendorPrefixes[f],h=function(e,t){var n=a(u[e],{});return"componentOf"in n&&(n.componentOf=n.componentOf.map(function(e){return t+e})),"components"in n&&(n.components=n.components.map(function(e){return t+e})),n}(l,p);delete h.vendorPrefixes,s[p+l]=h}delete c.vendorPrefixes}}t.exports=a(u,s)},{"../../utils/override":96,"./break-up":19,"./can-override":20,"./restore":50}],23:[function(e,t,n){function r(e){var t,n,s,l,c,f,p=[];if(e[0]==i.RULE)for(t=!/[\.\+>~]/.test(a(e[1])),c=0,f=e[2].length;c<f;c++)(n=e[2][c])[0]==i.PROPERTY&&0!==(s=n[1][1]).length&&0!==s.indexOf("--")&&(l=u(n,c),p.push([s,l,o(s),e[2][c],s+":"+l,e[1],t]));else if(e[0]==i.NESTED_BLOCK)for(c=0,f=e[2].length;c<f;c++)p=p.concat(r(e[2][c]));return p}function o(e){return"list-style"==e?e:e.indexOf("-radius")>0?"border-radius":"border-collapse"==e||"border-spacing"==e||"border-image"==e?e:0===e.indexOf("border-")&&/^border\-\w+\-\w+$/.test(e)?e.match(/border\-\w+/)[0]:0===e.indexOf("border-")&&/^border\-\w+$/.test(e)?"border":0===e.indexOf("text-")?e:"-chrome-"==e?e:e.replace(/^\-\w+\-/,"").match(/([a-zA-Z]+)/)[0].toLowerCase()}var i=e("../../tokenizer/token"),a=e("../../writer/one-time").rules,u=e("../../writer/one-time").value;t.exports=r},{"../../tokenizer/token":85,"../../writer/one-time":99}],24:[function(e,t,n){function r(e){this.name="InvalidPropertyError",this.message=e,this.stack=(new Error).stack}r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,t.exports=r},{}],25:[function(e,t,n){function r(e,t,n,r){var u,s,l,c=h(e,p.COMMA);for(s=0,l=c.length;s<l;s++)if(0===(u=c[s]).length||o(u)||u.indexOf(p.COLON)>-1&&!a(u,i(u),t,n,r))return!1;return!0}function o(e){return d.test(e)}function i(e){var t,n,r,o,i,a,u=[],s=[],l=w.ROOT,c=0,f=!1,h=!1;for(i=0,a=e.length;i<a;i++)t=e[i],o=!r&&b.test(t),n=l==w.DOUBLE_QUOTE||l==w.SINGLE_QUOTE,r?s.push(t):t==p.DOUBLE_QUOTE&&l==w.ROOT?(s.push(t),l=w.DOUBLE_QUOTE):t==p.DOUBLE_QUOTE&&l==w.DOUBLE_QUOTE?(s.push(t),l=w.ROOT):t==p.SINGLE_QUOTE&&l==w.ROOT?(s.push(t),l=w.SINGLE_QUOTE):t==p.SINGLE_QUOTE&&l==w.SINGLE_QUOTE?(s.push(t),l=w.ROOT):n?s.push(t):t==p.OPEN_ROUND_BRACKET?(s.push(t),c++):t==p.CLOSE_ROUND_BRACKET&&1==c&&f?(s.push(t),u.push(s.join("")),c--,s=[],f=!1):t==p.CLOSE_ROUND_BRACKET?(s.push(t),c--):t==p.COLON&&0===c&&f&&!h?(u.push(s.join("")),(s=[]).push(t)):t!=p.COLON||0!==c||h?t==p.SPACE&&0===c&&f?(u.push(s.join("")),s=[],f=!1):o&&0===c&&f?(u.push(s.join("")),s=[],f=!1):s.push(t):((s=[]).push(t),f=!0),r=t==p.BACK_SLASH,h=t==p.COLON;return s.length>0&&f&&u.push(s.join("")),u}function a(e,t,n,r,o){return u(t,n,r)&&s(t)&&(t.length<2||!l(e,t))&&(t.length<2||o&&c(t))}function u(e,t,n){var r,o,i,a;for(i=0,a=e.length;i<a;i++)if(r=e[i],o=r.indexOf(p.OPEN_ROUND_BRACKET)>-1?r.substring(0,r.indexOf(p.OPEN_ROUND_BRACKET)):r,-1===t.indexOf(o)&&-1===n.indexOf(o))return!1;return!0}function s(e){var t,n,r,o,i,a;for(i=0,a=e.length;i<a;i++){if(t=e[i],r=t.indexOf(p.OPEN_ROUND_BRACKET),o=r>-1,n=o?t.substring(0,r):t,o&&-1==v.indexOf(n))return!1;if(!o&&v.indexOf(n)>-1)return!1}return!0}function l(e,t){var n,r,o,i,a,u,s,l,c=0;for(s=0,l=t.length;s<l&&(n=t[s],o=t[s+1]);s++)if(r=e.indexOf(n,c),i=e.indexOf(n,r+1),c=i,r+n.length==i&&(a=n.indexOf(p.OPEN_ROUND_BRACKET)>-1?n.substring(0,n.indexOf(p.OPEN_ROUND_BRACKET)):n,u=o.indexOf(p.OPEN_ROUND_BRACKET)>-1?o.substring(0,o.indexOf(p.OPEN_ROUND_BRACKET)):o,a!=g||u!=g))return!0;return!1}function c(e){var t,n,r,o=0;for(n=0,r=e.length;n<r;n++)if(t=e[n],f(t)?o+=_.indexOf(t)>-1?1:0:o+=y.indexOf(t)>-1?1:0,o>1)return!1;return!0}function f(e){return m.test(e)}var p=e("../../tokenizer/marker"),h=e("../../utils/split"),d=/\/deep\//,m=/^::/,g=":not",v=[":dir",":lang",":not",":nth-child",":nth-last-child",":nth-last-of-type",":nth-of-type"],b=/[>\+~]/,y=[":after",":before",":first-letter",":first-line",":lang"],_=["::after","::before","::first-letter","::first-line"],w={DOUBLE_QUOTE:"double-quote",SINGLE_QUOTE:"single-quote",ROOT:"root"};t.exports=r},{"../../tokenizer/marker":84,"../../utils/split":97}],26:[function(e,t,n){function r(e,t){for(var n=[null,[],[]],r=t.options,p=r.compatibility.selectors.adjacentSpace,h=r.level[s.One].selectorsSortingMethod,d=r.compatibility.selectors.mergeablePseudoClasses,m=r.compatibility.selectors.mergeablePseudoElements,g=r.compatibility.selectors.mergeLimit,v=r.compatibility.selectors.multiplePseudoMerging,b=0,y=e.length;b<y;b++){var _=e[b];_[0]==f.RULE?n[0]==f.RULE&&c(_[1])==c(n[1])?(Array.prototype.push.apply(n[2],_[2]),i(n[2],!0,!0,t),_[2]=[]):n[0]==f.RULE&&l(_[2])==l(n[2])&&o(c(_[1]),d,m,v)&&o(c(n[1]),d,m,v)&&n[1].length<g?(n[1]=u(n[1].concat(_[1]),!1,p,!1,t.warnings),n[1]=n.length>1?a(n[1],h):n[1],_[2]=[]):n=_:n=[null,[],[]]}}var o=e("./is-mergeable"),i=e("./properties/optimize"),a=e("../level-1/sort-selectors"),u=e("../level-1/tidy-rules"),s=e("../../options/optimization-level").OptimizationLevel,l=e("../../writer/one-time").body,c=e("../../writer/one-time").rules,f=e("../../tokenizer/token");t.exports=r},{"../../options/optimization-level":66,"../../tokenizer/token":85,"../../writer/one-time":99,"../level-1/sort-selectors":15,"../level-1/tidy-rules":18,"./is-mergeable":25,"./properties/optimize":37}],27:[function(e,t,n){function r(e,t){for(var n=t.options.level[c.Two].mergeSemantically,r=t.cache.specificity,a={},s=[],p=e.length-1;p>=0;p--){var h=e[p];if(h[0]==f.NESTED_BLOCK){var d=l(h[1]),m=a[d];m||(m=[],a[d]=m),m.push(p)}}for(var g in a){var v=a[g];e:for(var b=v.length-1;b>0;b--){var y=v[b],_=e[y],w=v[b-1],A=e[w];t:for(var E=1;E>=-1;E-=2){for(var x=1==E,C=x?y+1:w-1,k=x?w:y,O=x?1:-1,B=x?_:A,S=x?A:_,D=u(B);C!=k;){var T=u(e[C]);if(C+=O,!(n&&o(D,T,r)||i(D,T,r)))continue t}S[2]=x?B[2].concat(S[2]):S[2].concat(B[2]),B[2]=[],s.push(S);continue e}}}return s}function o(e,t,n){var r,o,i,u,l,c,f,p;for(l=0,c=e.length;l<c;l++)for(o=(r=e[l])[5],f=0,p=t.length;f<p;f++)if(i=t[f],u=i[5],s(o,u,!0)&&!a(r,i,n))return!1;return!0}var i=e("./reorderable").canReorder,a=e("./reorderable").canReorderSingle,u=e("./extract-properties"),s=e("./rules-overlap"),l=e("../../writer/one-time").rules,c=e("../../options/optimization-level").OptimizationLevel,f=e("../../tokenizer/token");t.exports=r},{"../../options/optimization-level":66,"../../tokenizer/token":85,"../../writer/one-time":99,"./extract-properties":23,"./reorderable":48,"./rules-overlap":52}],28:[function(e,t,n){function r(e){return/\.|\*| :/.test(e)}function o(e){var t=h(e[1]);return t.indexOf("__")>-1||t.indexOf("--")>-1}function i(e){return e.replace(/--[^ ,>\+~:]+/g,"")}function a(e,t){var n=i(h(e[1]));for(var r in t){var o=t[r],a=i(h(o[1]));(a.indexOf(n)>-1||n.indexOf(a)>-1)&&delete t[r]}}function u(e,t){for(var n=t.options,i=n.level[f.Two].mergeSemantically,u=n.compatibility.selectors.adjacentSpace,m=n.level[f.One].selectorsSortingMethod,g=n.compatibility.selectors.mergeablePseudoClasses,v=n.compatibility.selectors.mergeablePseudoElements,b=n.compatibility.selectors.multiplePseudoMerging,y={},_=e.length-1;_>=0;_--){var w=e[_];if(w[0]==d.RULE){w[2].length>0&&!i&&r(h(w[1]))&&(y={}),w[2].length>0&&i&&o(w)&&a(w,y);var A=p(w[2]),E=y[A];E&&s(h(w[1]),g,v,b)&&s(h(E[1]),g,v,b)&&(w[2].length>0?(w[1]=c(E[1].concat(w[1]),!1,u,!1,t.warnings),w[1]=w[1].length>1?l(w[1],m):w[1]):w[1]=E[1].concat(w[1]),E[2]=[],y[A]=null),y[p(w[2])]=w}}}var s=e("./is-mergeable"),l=e("../level-1/sort-selectors"),c=e("../level-1/tidy-rules"),f=e("../../options/optimization-level").OptimizationLevel,p=e("../../writer/one-time").body,h=e("../../writer/one-time").rules,d=e("../../tokenizer/token");t.exports=u},{"../../options/optimization-level":66,"../../tokenizer/token":85,"../../writer/one-time":99,"../level-1/sort-selectors":15,"../level-1/tidy-rules":18,"./is-mergeable":25}],29:[function(e,t,n){function r(e,t){var n,r=t.cache.specificity,l={},c=[];for(n=e.length-1;n>=0;n--)if(e[n][0]==s.RULE&&0!==e[n][2].length){var f=u(e[n][1]);l[f]=[n].concat(l[f]||[]),2==l[f].length&&c.push(f)}for(n=c.length-1;n>=0;n--){var p=l[c[n]];e:for(var h=p.length-1;h>0;h--){var d=p[h-1],m=e[d],g=p[h],v=e[g];t:for(var b=1;b>=-1;b-=2){for(var y=1==b,_=y?d+1:g-1,w=y?g:d,A=y?1:-1,E=y?m:v,x=y?v:m,C=i(E);_!=w;){var k=i(e[_]);_+=A;var O=y?o(C,k,r):o(k,C,r);if(!O&&!y)continue e;if(!O&&y)continue t}y?(Array.prototype.push.apply(E[2],x[2]),x[2]=E[2]):Array.prototype.push.apply(x[2],E[2]),a(x[2],!0,!0,t),E[2]=[]}}}}var o=e("./reorderable").canReorder,i=e("./extract-properties"),a=e("./properties/optimize"),u=e("../../writer/one-time").rules,s=e("../../tokenizer/token");t.exports=r},{"../../tokenizer/token":85,"../../writer/one-time":99,"./extract-properties":23,"./properties/optimize":37,"./reorderable":48}],30:[function(e,t,n){function r(e){for(var t=0,n=e.length;t<n;t++){var o=e[t],i=!1;switch(o[0]){case y.RULE:i=0===o[1].length||0===o[2].length;break;case y.NESTED_BLOCK:r(o[2]),i=0===o[2].length;break;case y.AT_RULE:i=0===o[1].length;break;case y.AT_RULE_BLOCK:i=0===o[2].length}i&&(e.splice(t,1),t--,n--)}}function o(e,t){for(var n=0,r=e.length;n<r;n++){var o=e[n];if(o[0]==y.NESTED_BLOCK){var i=/@(-moz-|-o-|-webkit-)?keyframes/.test(o[1][0][1]);a(o[2],t,!i)}}}function i(e,t){for(var n=0,r=e.length;n<r;n++){var o=e[n];switch(o[0]){case y.RULE:v(o[2],!0,!0,t);break;case y.NESTED_BLOCK:i(o[2],t)}}}function a(e,t,n){var v,y,_=t.options.level[b.Two];if(o(e,t),i(e,t),_.removeDuplicateRules&&d(e,t),_.mergeAdjacentRules&&u(e,t),_.reduceNonAdjacentRules&&f(e,t),_.mergeNonAdjacentRules&&"body"!=_.mergeNonAdjacentRules&&c(e,t),_.mergeNonAdjacentRules&&"selector"!=_.mergeNonAdjacentRules&&l(e,t),_.restructureRules&&_.mergeAdjacentRules&&n&&(g(e,t),u(e,t)),_.restructureRules&&!_.mergeAdjacentRules&&n&&g(e,t),_.removeDuplicateFontRules&&p(e,t),_.removeDuplicateMediaBlocks&&h(e,t),_.removeUnusedAtRules&&m(e,t),_.mergeMedia)for(y=(v=s(e,t)).length-1;y>=0;y--)a(v[y][2],t,!1);return _.removeEmpty&&r(e),e}var u=e("./merge-adjacent"),s=e("./merge-media-queries"),l=e("./merge-non-adjacent-by-body"),c=e("./merge-non-adjacent-by-selector"),f=e("./reduce-non-adjacent"),p=e("./remove-duplicate-font-at-rules"),h=e("./remove-duplicate-media-queries"),d=e("./remove-duplicates"),m=e("./remove-unused-at-rules"),g=e("./restructure"),v=e("./properties/optimize"),b=e("../../options/optimization-level").OptimizationLevel,y=e("../../tokenizer/token");t.exports=a},{"../../options/optimization-level":66,"../../tokenizer/token":85,"./merge-adjacent":26,"./merge-media-queries":27,"./merge-non-adjacent-by-body":28,"./merge-non-adjacent-by-selector":29,"./properties/optimize":37,"./reduce-non-adjacent":43,"./remove-duplicate-font-at-rules":44,"./remove-duplicate-media-queries":45,"./remove-duplicates":46,"./remove-unused-at-rules":47,"./restructure":51}],31:[function(e,t,n){function r(e,t,n){var r,i,a,u=t.value.length,s=n.value.length,l=Math.max(u,s),c=Math.min(u,s)-1;for(a=0;a<l;a++)if(r=t.value[a]&&t.value[a][1]||r,i=n.value[a]&&n.value[a][1]||i,r!=o.COMMA&&i!=o.COMMA&&!e(r,i,a,a<=c))return!1;return!0}var o=e("../../../tokenizer/marker");t.exports=r},{"../../../tokenizer/marker":84}],32:[function(e,t,n){function r(e,t){var n=o(t);return i(e,n)||a(e,n)}function o(e){return function(t){return e.name===t.name}}function i(e,t){return e.components.filter(t)[0]}function a(e,t){var n,r,o,a;if(u[e.name].shorthandComponents)for(o=0,a=e.components.length;o<a;o++)if(n=e.components[o],r=i(n,t))return r}var u=e("../compactable");t.exports=r},{"../compactable":22}],33:[function(e,t,n){function r(e){for(var t=e.value.length-1;t>=0;t--)if("inherit"==e.value[t][1])return!0;return!1}t.exports=r},{}],34:[function(e,t,n){function r(e,t,n){return o(e,t)||!n&&!!a[e.name].shorthandComponents&&i(e,t)}function o(e,t){var n=a[e.name];return"components"in n&&n.components.indexOf(t.name)>-1}function i(e,t){return e.components.some(function(e){return o(e,t)})}var a=e("../compactable");t.exports=r},{"../compactable":22}],35:[function(e,t,n){function r(e){return"font"!=e.name||-1==e.value[0][1].indexOf(o.INTERNAL)}var o=e("../../../tokenizer/marker");t.exports=r},{"../../../tokenizer/marker":84}],36:[function(e,t,n){function r(e,t){var n,r,i,a,u,s,l,c={};if(!(e.length<3)){for(a=0,u=e.length;a<u;a++)if(i=e[a],n=w[i.name],!i.unused&&!i.hack&&!i.block&&(o(e,a,c,t),n&&n.componentOf))for(s=0,l=n.componentOf.length;s<l;s++)c[r=n.componentOf[s]]=c[r]||{},c[r][i.name]=i;o(e,a,c,t)}}function o(e,t,n,r){var o,f,p,h=e[t];for(o in n)void 0!==h&&o==h.name||(f=w[o],p=n[o],h&&i(n,o,h)?delete n[o]:f.components.length>Object.keys(p).length||a(p)||u(p,o,r)&&s(p)&&(l(p)?c(e,p,o,r):v(e,p,o,r)))}function i(e,t,n){var r,o=w[t],i=w[n.name];if("overridesShorthands"in o&&o.overridesShorthands.indexOf(n.name)>-1)return!0;if(i&&"componentOf"in i)for(r in e[t])if(i.componentOf.indexOf(r)>-1)return!0;return!1}function a(e){var t,n;for(n in e){if(void 0!==t&&e[n].important!=t)return!0;t=e[n].important}return!1}function u(e,t,n){var r,o,i,a,u=w[t],s=[O.PROPERTY,[O.PROPERTY_NAME,t],[O.PROPERTY_VALUE,u.defaultValue]],l=C(s);for(_([l],n,[]),i=0,a=u.components.length;i<a;i++)if(r=e[u.components[i]],o=w[r.name].canOverride,!b(o.bind(null,n),l.components[i],r))return!1;return!0}function s(e){var t,n,r,o,i,a=null;for(n in e)if(r=e[n],"restore"in(o=w[n])){if(x([r.all[r.position]],E),i=o.restore(r,w),t=i.length,null!==a&&t!==a)return!1;a=t}return!0}function l(e){var t,n,r=null;for(t in e){if(n=y(e[t]),null!==r&&r!==n)return!0;r=n}return!1}function c(e,t,n,r){var o,i,a,u,s=f(t,n,r),l=m(t,n,r),c=s[0],p=l[0],h=k(c).length<k(p).length,d=h?c:p,v=h?s[1]:l[1],b=h?s[2]:l[2],y=t[Object.keys(t)[0]].all;v.position=y.length,v.shorthand=!0,v.dirty=!0,v.all=y,v.all.push(d[0]),e.push(v);for(o in t)(i=t[o]).unused=!0,i.name in b&&(a=b[i.name],u=g(d,o),a.position=y.length,a.all=y,a.all.push(u),e.push(a))}function f(e,t,n){var r,o,i,a,u,s,l=[],c={},f={},d=w[t],m=[O.PROPERTY,[O.PROPERTY_NAME,t],[O.PROPERTY_VALUE,d.defaultValue]],g=C(m);for(_([g],n,[]),u=0,s=d.components.length;u<s;u++)r=e[d.components[u]],y(r)?(o=r.all[r.position].slice(0,2),Array.prototype.push.apply(o,r.value),l.push(o),(i=A(r)).value=p(e,i.name),g.components[u]=i,c[r.name]=A(r)):((i=A(r)).all=r.all,g.components[u]=i,f[r.name]=r);return a=h(f,1),m[1].push(a),x([g],E),m=m.slice(0,2),Array.prototype.push.apply(m,g.value),l.unshift(m),[l,g,c]}function p(e,t){var n=w[t];return"oppositeTo"in n?e[n.oppositeTo].value:[[O.PROPERTY_VALUE,n.defaultValue]]}function h(e,t){var n,r,o,i,a=[];for(i in e)o=(r=(n=e[i]).all[n.position])[t][r[t].length-1],Array.prototype.push.apply(a,o);return a.sort(d)}function d(e,t){var n=e[0],r=t[0],o=e[1],i=t[1];return n<r?-1:n===r&&o<i?-1:1}function m(e,t,n){var r,o,i,a,u,s,l=[],c={},f={},p=w[t],d=[O.PROPERTY,[O.PROPERTY_NAME,t],[O.PROPERTY_VALUE,"inherit"]],m=C(d);for(_([m],n,[]),u=0,s=p.components.length;u<s;u++)r=e[p.components[u]],y(r)?c[r.name]=r:(o=r.all[r.position].slice(0,2),Array.prototype.push.apply(o,r.value),l.push(o),f[r.name]=A(r));return i=h(c,1),d[1].push(i),a=h(c,2),d[2].push(a),l.unshift(d),[l,m,f]}function g(e,t){var n,r;for(n=0,r=e.length;n<r;n++)if(e[n][1][1]==t)return e[n]}function v(e,t,n,r){var o,i,a,u=w[n],s=[O.PROPERTY,[O.PROPERTY_NAME,n],[O.PROPERTY_VALUE,u.defaultValue]],l=C(s);l.shorthand=!0,l.dirty=!0,_([l],r,[]);for(var c=0,f=u.components.length;c<f;c++){var p=t[u.components[c]];l.components[c]=A(p),l.important=p.important,a=p.all}for(var d in t)t[d].unused=!0;o=h(t,1),s[1].push(o),i=h(t,2),s[2].push(i),l.position=a.length,l.all=a,l.all.push(s),e.push(l)}var b=e("./every-values-pair"),y=e("./has-inherit"),_=e("./populate-components"),w=e("../compactable"),A=e("../clone").deep,E=e("../restore-with-components"),x=e("../../restore-from-optimizing"),C=e("../../wrap-for-optimizing").single,k=e("../../../writer/one-time").body,O=e("../../../tokenizer/token");t.exports=r},{"../../../tokenizer/token":85,"../../../writer/one-time":99,"../../restore-from-optimizing":57,"../../wrap-for-optimizing":59,"../clone":21,"../compactable":22,"../restore-with-components":49,"./every-values-pair":31,"./has-inherit":33,"./populate-components":40}],37:[function(e,t,n){function r(e,t,n,p){var h,d,m,g=p.options.level[f.Two],v=s(e,!1,g.skipProperties);for(a(v,p.validator,p.warnings),d=0,m=v.length;d<m;d++)(h=v[d]).block&&r(h.value[0][1],t,n,p);n&&g.mergeIntoShorthands&&o(v,p.validator),t&&g.overrideProperties&&i(v,n,p.options.compatibility,p.validator),c(v,u),l(v)}var o=e("./merge-into-shorthands"),i=e("./override-properties"),a=e("./populate-components"),u=e("../restore-with-components"),s=e("../../wrap-for-optimizing").all,l=e("../../remove-unused"),c=e("../../restore-from-optimizing"),f=e("../../../options/optimization-level").OptimizationLevel;t.exports=r},{"../../../options/optimization-level":66,"../../remove-unused":56,"../../restore-from-optimizing":57,"../../wrap-for-optimizing":59,"../restore-with-components":49,"./merge-into-shorthands":36,"./override-properties":38,"./populate-components":40}],38:[function(e,t,n){function r(e,t){for(var n=0;n<e.components.length;n++){var r=e.components[n],o=D[r.name],i=o&&o.canOverride||i.sameValue,a=F(r);if(a.value=[[M.PROPERTY_VALUE,o.defaultValue]],!x(i.bind(null,t),a,r))return!0}return!1}function o(e,t){t.unused=!0,l(t,p(e)),e.value=t.value}function i(e,t){t.unused=!0,e.multiplex=!0,e.value=t.value}function a(e,t){t.unused=!0,e.value=t.value}function u(e,t){t.multiplex?i(e,t):e.multiplex?o(e,t):a(e,t)}function s(e,t){t.unused=!0;for(var n=0,r=e.components.length;n<r;n++)u(e.components[n],t.components[n],e.multiplex)}function l(e,t){e.multiplex=!0,D[e.name].shorthand?c(e,t):f(e,t)}function c(e,t){var n,r,o;for(r=0,o=e.components.length;r<o;r++)(n=e.components[r]).multiplex||f(n,t)}function f(e,t){for(var n,r="real"==D[e.name].intoMultiplexMode,o=r?e.value.slice(0):D[e.name].defaultValue,i=p(e),a=o.length;i<t;i++)if(e.value.push([M.PROPERTY_VALUE,P.COMMA]),Array.isArray(o))for(n=0;n<a;n++)e.value.push(r?o[n]:[M.PROPERTY_VALUE,o[n]]);else e.value.push(r?o:[M.PROPERTY_VALUE,o])}function p(e){for(var t=0,n=0,r=e.value.length;n<r;n++)e.value[n][1]==P.COMMA&&t++;return t+1}function h(e){var t=[M.PROPERTY,[M.PROPERTY_NAME,e.name]].concat(e.value);return U([t],0).length}function d(e,t,n){for(var r=0,o=t;o>=0&&(e[o].name!=n||e[o].unused||r++,!(r>1));o--);return r>1}function m(e,t){for(var n=0,r=e.components.length;n<r;n++)if(!g(t.isUrl,e.components[n])&&g(t.isFunction,e.components[n]))return!0;return!1}function g(e,t){for(var n=0,r=t.value.length;n<r;n++)if(t.value[n][1]!=P.COMMA&&e(t.value[n][1]))return!0;return!1}function v(e,t){if(!e.multiplex&&!t.multiplex||e.multiplex&&t.multiplex)return!1;var n,r=e.multiplex?e:t,a=e.multiplex?t:e,u=T(r);L([u],R);var s=T(a);L([s],R);var c=h(u)+1+h(s);return e.multiplex?o(n=C(u,s),s):(n=C(s,u),l(s,p(u)),i(n,u)),L([s],R),c<=h(s)}function b(e){return e.name in D}function y(e,t){return!e.multiplex&&("background"==e.name||"background-image"==e.name)&&t.multiplex&&("background"==t.name||"background-image"==t.name)&&_(t.value)}function _(e){for(var t=w(e),n=0,r=t.length;n<r;n++)if(1==t[n].length&&"none"==t[n][0][1])return!0;return!1}function w(e){for(var t=[],n=0,r=[],o=e.length;n<o;n++){var i=e[n];i[1]==P.COMMA?(t.push(r),r=[]):r.push(i)}return t.push(r),t}function A(e,t,n,o){var i,a,c,f,h,_,w,A,T,R,F;e:for(T=e.length-1;T>=0;T--)if(a=e[T],b(a)&&!a.block){i=D[a.name].canOverride;t:for(R=T-1;R>=0;R--)if(c=e[R],b(c)&&!c.block&&!c.unused&&!a.unused&&(!c.hack||a.hack||a.important)&&(c.hack||c.important||!a.hack)&&(c.important!=a.important||c.hack[0]==a.hack[0])&&!(c.important==a.important&&(c.hack[0]!=a.hack[0]||c.hack[1]&&c.hack[1]!=a.hack[1])||E(a)||y(c,a)))if(a.shorthand&&k(a,c)){if(!a.important&&c.important)continue;if(!S([c],a.components))continue;if(!g(o.isFunction,c)&&m(a,o))continue;if(!O(a)){c.unused=!0;continue}f=C(a,c),i=D[c.name].canOverride,x(i.bind(null,o),c,f)&&(c.unused=!0)}else if(a.shorthand&&B(a,c)){if(!a.important&&c.important)continue;if(!S([c],a.components))continue;if(!g(o.isFunction,c)&&m(a,o))continue;for(F=(h=c.shorthand?c.components:[c]).length-1;F>=0;F--)if(_=h[F],w=C(a,_),i=D[_.name].canOverride,!x(i.bind(null,o),c,w))continue t;c.unused=!0}else if(t&&c.shorthand&&!a.shorthand&&k(c,a,!0)){if(a.important&&!c.important)continue;if(!a.important&&c.important){a.unused=!0;continue}if(d(e,T-1,c.name))continue;if(m(c,o))continue;if(!O(c))continue;if(f=C(c,a),x(i.bind(null,o),f,a)){var L=!n.properties.backgroundClipMerging&&f.name.indexOf("background-clip")>-1||!n.properties.backgroundOriginMerging&&f.name.indexOf("background-origin")>-1||!n.properties.backgroundSizeMerging&&f.name.indexOf("background-size")>-1,M=D[a.name].nonMergeableValue===a.value[0][1];if(L||M)continue;if(!n.properties.merging&&r(c,o))continue;if(f.value[0][1]!=a.value[0][1]&&(E(c)||E(a)))continue;if(v(c,a))continue;!c.multiplex&&a.multiplex&&l(c,p(a)),u(f,a),c.dirty=!0}}else if(t&&c.shorthand&&a.shorthand&&c.name==a.name){if(!c.multiplex&&a.multiplex)continue;if(!a.important&&c.important){a.unused=!0;continue e}if(a.important&&!c.important){c.unused=!0;continue}if(!O(a)){c.unused=!0;continue}for(F=c.components.length-1;F>=0;F--){var P=c.components[F],U=a.components[F];if(i=D[P.name].canOverride,!x(i.bind(null,o),P,U))continue e}s(c,a),c.dirty=!0}else if(t&&c.shorthand&&a.shorthand&&k(c,a)){if(!c.important&&a.important)continue;if(f=C(c,a),i=D[a.name].canOverride,!x(i.bind(null,o),f,a))continue;if(c.important&&!a.important){a.unused=!0;continue}if(D[a.name].restore(a,D).length>1)continue;u(f=C(c,a),a),a.dirty=!0}else if(c.name==a.name){if(A=!0,a.shorthand)for(F=a.components.length-1;F>=0&&A;F--)_=c.components[F],w=a.components[F],i=D[w.name].canOverride,A=A&&x(i.bind(null,o),_,w);else i=D[a.name].canOverride,A=x(i.bind(null,o),c,a);if(c.important&&!a.important&&A){a.unused=!0;continue}if(!c.important&&a.important&&A){c.unused=!0;continue}if(!A)continue;c.unused=!0}}}var E=e("./has-inherit"),x=e("./every-values-pair"),C=e("./find-component-in"),k=e("./is-component-of"),O=e("./is-mergeable-shorthand"),B=e("./overrides-non-component-shorthand"),S=e("./vendor-prefixes").same,D=e("../compactable"),T=e("../clone").deep,T=e("../clone").deep,R=e("../restore-with-components"),F=e("../clone").shallow,L=e("../../restore-from-optimizing"),M=e("../../../tokenizer/token"),P=e("../../../tokenizer/marker"),U=e("../../../writer/one-time").property;t.exports=A},{"../../../tokenizer/marker":84,"../../../tokenizer/token":85,"../../../writer/one-time":99,"../../restore-from-optimizing":57,"../clone":21,"../compactable":22,"../restore-with-components":49,"./every-values-pair":31,"./find-component-in":32,"./has-inherit":33,"./is-component-of":34,"./is-mergeable-shorthand":35,"./overrides-non-component-shorthand":39,"./vendor-prefixes":42}],39:[function(e,t,n){function r(e,t){return e.name in o&&"overridesShorthands"in o[e.name]&&o[e.name].overridesShorthands.indexOf(t.name)>-1}var o=e("../compactable");t.exports=r},{"../compactable":22}],40:[function(e,t,n){function r(e,t,n){for(var r,a,u,s=e.length-1;s>=0;s--){var l=e[s],c=o[l.name];if(c&&c.shorthand){l.shorthand=!0,l.dirty=!0;try{if(l.components=c.breakUp(l,o,t),c.shorthandComponents)for(a=0,u=l.components.length;a<u;a++)(r=l.components[a]).components=o[r.name].breakUp(r,o,t)}catch(e){if(!(e instanceof i))throw e;l.components=[],n.push(e.message)}l.components.length>0?l.multiplex=l.components[0].multiplex:l.unused=!0}}}var o=e("../compactable"),i=e("../invalid-property-error");t.exports=r},{"../compactable":22,"../invalid-property-error":24}],41:[function(e,t,n){function r(e,t,n,r,i){return!!o(t,n)&&(!i||e.isVariable(t)===e.isVariable(n))}var o=e("./vendor-prefixes").same;t.exports=r},{"./vendor-prefixes":42}],42:[function(e,t,n){function r(e){for(var t,n=[];null!==(t=i.exec(e));)-1==n.indexOf(t[0])&&n.push(t[0]);return n}function o(e,t){return r(e).sort().join(",")==r(t).sort().join(",")}var i=/(?:^|\W)(\-\w+\-)/g;t.exports={unique:r,same:o}},{}],43:[function(e,t,n){function r(e,t){for(var n=t.options,r=n.compatibility.selectors.mergeablePseudoClasses,u=n.compatibility.selectors.mergeablePseudoElements,l=n.compatibility.selectors.multiplePseudoMerging,c={},p=[],d=e.length-1;d>=0;d--){var m=e[d];if(m[0]==f.RULE&&0!==m[2].length)for(var g=h(m[1]),v=m[1].length>1&&s(g,r,u,l),b=o(m[1]),y=v?[g].concat(b):[g],_=0,w=y.length;_<w;_++){var A=y[_];c[A]?p.push(A):c[A]=[],c[A].push({where:d,list:b,isPartial:v&&_>0,isComplex:v&&0===_})}}i(e,p,c,n,t),a(e,c,n,t)}function o(e){for(var t=[],n=0;n<e.length;n++)t.push([e[n][1]]);return t}function i(e,t,n,r,o){function i(e,t){return c[e].isPartial&&0===t.length}function a(e,t,n,r){c[n-r-1].isPartial||(e[2]=t)}for(var s=0,l=t.length;s<l;s++){var c=n[t[s]];u(e,c,{filterOut:i,callback:a},r,o)}}function a(e,t,n,r){function o(e){return f.data[e].where<f.intoPosition}function i(e,t,n,r){0===r&&f.reducedBodies.push(t)}var a=n.compatibility.selectors.mergeablePseudoClasses,l=n.compatibility.selectors.mergeablePseudoElements,c=n.compatibility.selectors.multiplePseudoMerging,f={};e:for(var h in t){var d=t[h];if(d[0].isComplex){var m=d[d.length-1].where,g=e[m],v=[],b=s(h,a,l,c)?d[0].list:[h];f.intoPosition=m,f.reducedBodies=v;for(var y=0,_=b.length;y<_;y++){var w=t[b[y]];if(w.length<2)continue e;if(f.data=w,u(e,w,{filterOut:o,callback:i},n,r),p(v[v.length-1])!=p(v[0]))continue e}g[2]=v[0]}}}function u(e,t,n,r,o){for(var i=[],a=[],u=[],s=t.length-1;s>=0;s--)if(!n.filterOut(s,i)){var f=t[s].where,p=e[f],h=c(p[2]);i=i.concat(h),a.push(h),u.push(f)}l(i,!0,!1,o);for(var d=u.length,m=i.length-1,g=d-1;g>=0;)if((0===g||i[m]&&a[g].indexOf(i[m])>-1)&&m>-1)m--;else{var v=i.splice(m+1);n.callback(e[u[g]],v,d,g),g--}}var s=e("./is-mergeable"),l=e("./properties/optimize"),c=e("../../utils/clone-array"),f=e("../../tokenizer/token"),p=e("../../writer/one-time").body,h=e("../../writer/one-time").rules;t.exports=r},{"../../tokenizer/token":85,"../../utils/clone-array":87,"../../writer/one-time":99,"./is-mergeable":25,"./properties/optimize":37}],44:[function(e,t,n){function r(e){var t,n,r,u,s=[];for(r=0,u=e.length;r<u;r++)(t=e[r])[0]!=o.AT_RULE_BLOCK&&t[1][0][1]!=a||(n=i([t]),s.indexOf(n)>-1?t[2]=[]:s.push(n))}var o=e("../../tokenizer/token"),i=e("../../writer/one-time").all,a="@font-face";t.exports=r},{"../../tokenizer/token":85,"../../writer/one-time":99}],45:[function(e,t,n){function r(e){var t,n,r,u,s,l={};for(u=0,s=e.length;u<s;u++)(n=e[u])[0]==o.NESTED_BLOCK&&((t=l[r=a(n[1])+"%"+i(n[2])])&&(t[2]=[]),l[r]=n)}var o=e("../../tokenizer/token"),i=e("../../writer/one-time").all,a=e("../../writer/one-time").rules;t.exports=r},{"../../tokenizer/token":85,"../../writer/one-time":99}],46:[function(e,t,n){function r(e){for(var t,n,r,u,s={},l=[],c=0,f=e.length;c<f;c++)(n=e[c])[0]==o.RULE&&(s[t=a(n[1])]&&1==s[t].length?l.push(t):s[t]=s[t]||[],s[t].push(c));for(c=0,f=l.length;c<f;c++){u=[];for(var p=s[t=l[c]].length-1;p>=0;p--)n=e[s[t][p]],r=i(n[2]),u.indexOf(r)>-1?n[2]=[]:u.push(r)}}var o=e("../../tokenizer/token"),i=e("../../writer/one-time").body,a=e("../../writer/one-time").rules;t.exports=r},{"../../tokenizer/token":85,"../../writer/one-time":99}],47:[function(e,t,n){function r(e,t){o(e,a,u,t),o(e,s,l,t),o(e,c,f,t),o(e,p,h,t)}function o(e,t,n,r){var o,a,u,s,l={};for(u=0,s=e.length;u<s;u++)t(e[u],l);if(0!==Object.keys(l).length){i(e,n,l,r);for(o in l)(a=l[o])[a[0]==v.AT_RULE?1:2]=[]}}function i(e,t,n,r){var o,a,u=t(n);for(o=0,a=e.length;o<a;o++)switch(e[o][0]){case v.RULE:u(e[o],r);break;case v.NESTED_BLOCK:i(e[o][2],t,n,r)}}function a(e,t){e[0]==v.AT_RULE_BLOCK&&0===e[1][0][1].indexOf("@counter-style")&&(t[e[1][0][1].split(" ")[1]]=e)}function u(e){return function(t,n){var r,o,i,a;for(i=0,a=t[2].length;i<a;i++)"list-style"==(r=t[2][i])[1][1]&&(o=m(r),d([o],n.validator,n.warnings),o.components[0].value[0][1]in e&&delete e[r[2][1]],g([o])),"list-style-type"==r[1][1]&&r[2][1]in e&&delete e[r[2][1]]}}function s(e,t){var n,r,o;if(e[0]==v.AT_RULE_BLOCK&&"@font-face"==e[1][0][1])for(r=0,o=e[2].length;r<o;r++)if("font-family"==(n=e[2][r])[1][1]){t[n[2][1].toLowerCase()]=e;break}}function l(e){return function(t,n){var r,o,i,a,u,s,l,c;for(u=0,s=t[2].length;u<s;u++){if("font"==(r=t[2][u])[1][1]){for(o=m(r),d([o],n.validator,n.warnings),l=0,c=(i=o.components[6]).value.length;l<c;l++)(a=i.value[l][1].toLowerCase())in e&&delete e[a];g([o])}if("font-family"==r[1][1])for(l=2,c=r.length;l<c;l++)(a=r[l][1].toLowerCase())in e&&delete e[a]}}}function c(e,t){e[0]==v.NESTED_BLOCK&&_.test(e[1][0][1])&&(t[e[1][0][1].split(" ")[1]]=e)}function f(e){return function(t,n){var r,o,i,a,u,s,l;for(a=0,u=t[2].length;a<u;a++){if(r=t[2][a],y.test(r[1][1])){for(o=m(r),d([o],n.validator,n.warnings),s=0,l=(i=o.components[7]).value.length;s<l;s++)i.value[s][1]in e&&delete e[i.value[s][1]];g([o])}if(b.test(r[1][1]))for(s=2,l=r.length;s<l;s++)r[s][1]in e&&delete e[r[s][1]]}}}function p(e,t){e[0]==v.AT_RULE&&0===e[1].indexOf("@namespace")&&(t[e[1].split(" ")[1]]=e)}function h(e){var t=new RegExp(Object.keys(e).join("\\||")+"\\|","g");return function(n){var r,o,i,a,u,s;for(i=0,a=n[1].length;i<a;i++)for(u=0,s=(r=n[1][i][1].match(t)).length;u<s;u++)(o=r[u].substring(0,r[u].length-1))in e&&delete e[o]}}var d=e("./properties/populate-components"),m=e("../wrap-for-optimizing").single,g=e("../restore-from-optimizing"),v=e("../../tokenizer/token"),b=/^(\-moz\-|\-o\-|\-webkit\-)?animation-name$/,y=/^(\-moz\-|\-o\-|\-webkit\-)?animation$/,_=/^@(\-moz\-|\-o\-|\-webkit\-)?keyframes /;t.exports=r},{"../../tokenizer/token":85,"../restore-from-optimizing":57,"../wrap-for-optimizing":59,"./properties/populate-components":40}],48:[function(e,t,n){function r(e,t,n){for(var r=t.length-1;r>=0;r--)for(var i=e.length-1;i>=0;i--)if(!o(e[i],t[r],n))return!1;return!0}function o(e,t,n){var r=e[0],o=e[1],g=e[2],v=e[5],b=e[6],y=t[0],_=t[1],w=t[2],A=t[5],E=t[6];return!("font"==r&&"line-height"==y||"font"==y&&"line-height"==r)&&((!d.test(r)||!d.test(y))&&(!(g==w&&a(r)==a(y)&&i(r)^i(y))&&(("border"!=g||!m.test(w)||!("border"==r||r==w||o!=_&&u(r,y)))&&(("border"!=w||!m.test(g)||!("border"==y||y==g||o!=_&&u(r,y)))&&(("border"!=g||"border"!=w||r==y||!(s(r)&&l(y)||l(r)&&s(y)))&&(g!=w||(!(r!=y||g!=w||o!=_&&!c(o,_))||(r!=y&&g==w&&r!=g&&y!=w||(r!=y&&g==w&&o==_||(!(!E||!b||f(g)||f(w)||p(A,v,!1))||!h(v,A,n)))))))))))}function i(e){return/^\-(?:moz|webkit|ms|o)\-/.test(e)}function a(e){return e.replace(/^\-(?:moz|webkit|ms|o)\-/,"")}function u(e,t){return e.split("-").pop()==t.split("-").pop()}function s(e){return"border-top"==e||"border-right"==e||"border-bottom"==e||"border-left"==e}function l(e){return"border-color"==e||"border-style"==e||"border-width"==e}function c(e,t){return i(e)&&i(t)&&e.split("-")[1]!=t.split("-")[2]}function f(e){return"font"==e||"line-height"==e||"list-style"==e}var p=e("./rules-overlap"),h=e("./specificities-overlap"),d=/align\-items|box\-align|box\-pack|flex|justify/,m=/^border\-(top|right|bottom|left|color|style|width|radius)/;t.exports={canReorder:r,canReorderSingle:o}},{"./rules-overlap":52,"./specificities-overlap":53}],49:[function(e,t,n){function r(e){var t=o[e.name];return t&&t.shorthand?t.restore(e,o):e.value}var o=e("./compactable");t.exports=r},{"./compactable":22}],50:[function(e,t,n){function r(e){for(var t=0,n=e.length;t<n;t++){var r=e[t][1];if("inherit"!=r&&r!=p.COMMA&&r!=p.FORWARD_SLASH)return!1}return!0}function o(e,t,n){function o(e){Array.prototype.unshift.apply(l,e.value)}function i(e){var n=t[e.name];return n.doubleValues&&1==n.defaultValue.length?e.value[0][1]==n.defaultValue[0]&&(!e.value[1]||e.value[1][1]==n.defaultValue[0]):n.doubleValues&&1!=n.defaultValue.length?e.value[0][1]==n.defaultValue[0]&&(e.value[1]?e.value[1][1]:e.value[0][1])==n.defaultValue[1]:e.value[0][1]==n.defaultValue}for(var a,u,s=e.components,l=[],c=s.length-1;c>=0;c--){var h=s[c],d=i(h);if("background-clip"==h.name){var m=s[c-1],g=i(m);u=!(a=h.value[0][1]==m.value[0][1])&&(g&&!d||!g&&!d||!g&&d&&h.value[0][1]!=m.value[0][1]),a?o(m):u&&(o(h),o(m)),c--}else if("background-size"==h.name){var v=s[c-1],b=i(v);u=!(a=!b&&d)&&(b&&!d||!b&&!d),a?o(v):u?(o(h),l.unshift([f.PROPERTY_VALUE,p.FORWARD_SLASH]),o(v)):1==v.value.length&&o(v),c--}else{if(d||t[h.name].multiplexLastOnly&&!n)continue;o(h)}}return 0===l.length&&1==e.value.length&&"0"==e.value[0][1]&&l.push(e.value[0]),0===l.length&&l.push([f.PROPERTY_VALUE,t[e.name].defaultValue]),r(l)?[l[0]]:l}function i(e,t){if(e.multiplex){for(var n=c(e),r=c(e),o=0;o<4;o++){var i=e.components[o],a=c(e);a.value=[i.value[0]],n.components.push(a);var s=c(e);s.value=[i.value[1]||i.value[0]],r.components.push(s)}var l=u(n),h=u(r);return l.length!=h.length||l[0][1]!=h[0][1]||l.length>1&&l[1][1]!=h[1][1]||l.length>2&&l[2][1]!=h[2][1]||l.length>3&&l[3][1]!=h[3][1]?l.concat([[f.PROPERTY_VALUE,p.FORWARD_SLASH]]).concat(h):l}return u(e)}function a(e,t){var n,o=e.components,i=[],a=0,u=0;if(0===e.value[0][1].indexOf(p.INTERNAL))return e.value[0][1]=e.value[0][1].substring(p.INTERNAL.length),e.value;for(;a<4;)(n=o[a]).value[0][1]!=t[n.name].defaultValue&&Array.prototype.push.apply(i,n.value),a++;for(Array.prototype.push.apply(i,o[a].value),o[++a].value[0][1]!=t[o[a].name].defaultValue&&(Array.prototype.push.apply(i,[[f.PROPERTY_VALUE,p.FORWARD_SLASH]]),Array.prototype.push.apply(i,o[a].value)),a++;o[a].value[u];)i.push(o[a].value[u]),o[a].value[u+1]&&i.push([f.PROPERTY_VALUE,p.COMMA]),u++;return r(i)?[i[0]]:i}function u(e){var t=e.components,n=t[0].value[0],r=t[1].value[0],o=t[2].value[0],i=t[3].value[0];return n[1]==r[1]&&n[1]==o[1]&&n[1]==i[1]?[n]:n[1]==o[1]&&r[1]==i[1]?[n,r]:r[1]==i[1]?[n,r,o]:[n,r,o,i]}function s(e){return function(t,n){if(!t.multiplex)return e(t,n,!0);var r,o,i=0,a=[],u={};for(r=0,o=t.components[0].value.length;r<o;r++)t.components[0].value[r][1]==p.COMMA&&i++;for(r=0;r<=i;r++){for(var s=c(t),l=0,h=t.components.length;l<h;l++){var d=t.components[l],m=c(d);s.components.push(m);for(var g=u[m.name]||0,v=d.value.length;g<v;g++){if(d.value[g][1]==p.COMMA){u[m.name]=g+1;break}m.value.push(d.value[g])}}var b=e(s,n,r==i);Array.prototype.push.apply(a,b),r<i&&a.push([f.PROPERTY_VALUE,p.COMMA])}return a}}function l(e,t){for(var n=e.components,o=[],i=n.length-1;i>=0;i--){var a=n[i],u=t[a.name];a.value[0][1]!=u.defaultValue&&o.unshift(a.value[0])}return 0===o.length&&o.push([f.PROPERTY_VALUE,t[e.name].defaultValue]),r(o)?[o[0]]:o}var c=e("./clone").shallow,f=e("../../tokenizer/token"),p=e("../../tokenizer/marker");t.exports={background:o,borderRadius:i,font:a,fourValues:u,multiplex:s,withoutDefaults:l}},{"../../tokenizer/marker":84,"../../tokenizer/token":85,"./clone":21}],51:[function(e,t,n){function r(e,t){return e>t?1:-1}function o(e,t){var n=f(e);return n[5]=n[5].concat(t[5]),n}function i(e,t){function n(e,t,n){for(var r=n.length-1;r>=0;r--){var o=i(t,n[r][0]);if(F[o].length>1&&x(e,F[o])){f(o);break}}}function i(e,t){var n=d(t);return F[n]=F[n]||[],F[n].push([e,t]),n}function f(e){var t,n=e.split(P),r=[];for(var o in F){var i=o.split(P);for(t=i.length-1;t>=0;t--)if(n.indexOf(i[t])>-1){r.push(o);break}}for(t=r.length-1;t>=0;t--)delete F[r[t]]}function d(e){for(var t=[],n=0,r=e.length;n<r;n++)t.push(h(e[n][1]));return t.join(P)}function m(e){for(var t=[],n=[],r=e.length-1;r>=0;r--)s(h(e[r][1]),k,O,S)&&(n.unshift(e[r]),e[r][2].length>0&&-1==t.indexOf(e[r])&&t.push(e[r]));return t.length>1?n:[]}function g(e,t){var r=t[0],o=t[1],i=t[4],a=r.length+o.length+1,u=[],s=[],c=m(T[i]);if(!(c.length<2)){var f=b(c,a,1),p=f[0];if(p[1]>0)return n(e,t,f);for(var h=p[0].length-1;h>=0;h--)u=p[0][h][1].concat(u),s.unshift(p[0][h]);w(e,[t],u=l(u),s)}}function v(e,t){return e[1]>t[1]?1:e[1]==t[1]?0:-1}function b(e,t,n){return y(e,t,n,M-1).sort(v)}function y(e,t,n,r){var o=[[e,_(e,t,n)]];if(e.length>2&&r>0)for(var i=e.length-1;i>=0;i--){var a=Array.prototype.slice.call(e,0);a.splice(i,1),o=o.concat(y(a,t,n,r-1))}return o}function _(e,t,n){for(var r=0,o=e.length-1;o>=0;o--)r+=e[o][2].length>n?h(e[o][1]).length:-1;return r-(e.length-1)*t+1}function w(t,n,r,o){var i,a,u,s,l=[];for(i=o.length-1;i>=0;i--){var f=o[i];for(a=f[2].length-1;a>=0;a--){var h=f[2][a];for(u=0,s=n.length;u<s;u++){var d=n[u],m=h[1][1],g=d[0],v=d[4];if(m==g&&p([h])==v){f[2].splice(a,1);break}}}}for(i=n.length-1;i>=0;i--)l.unshift(n[i][3]);var b=[c.RULE,r,l];e.splice(t,0,b)}function A(e,t){var n=t[4],r=T[n];r&&r.length>1&&(E(e,t)||g(e,t))}function E(e,t){var n,r,o=[],i=[],a=t[4],u=m(T[a]);if(!(u.length<2)){e:for(var s in T){var l=T[s];for(n=u.length-1;n>=0;n--)if(-1==l.indexOf(u[n]))continue e;o.push(s)}if(o.length<2)return!1;for(n=o.length-1;n>=0;n--)for(r=R.length-1;r>=0;r--)if(R[r][4]==o[n]){i.unshift([R[r],u]);break}return x(e,i)}}function x(e,t){for(var n,r=0,o=[],i=t.length-1;i>=0;i--)r+=(n=t[i][0])[4].length+(i>0?1:0),o.push(n);var a=b(t[0][1],r,o.length)[0];if(a[1]>0)return!1;var u=[],s=[];for(i=a[0].length-1;i>=0;i--)u=a[0][i][1].concat(u),s.unshift(a[0][i]);for(w(e,o,u=l(u),s),i=o.length-1;i>=0;i--){n=o[i];var c=R.indexOf(n);delete T[n[4]],c>-1&&-1==L.indexOf(c)&&L.push(c)}return!0}for(var C=t.options,k=C.compatibility.selectors.mergeablePseudoClasses,O=C.compatibility.selectors.mergeablePseudoElements,B=C.compatibility.selectors.mergeLimit,S=C.compatibility.selectors.multiplePseudoMerging,D=t.cache.specificity,T={},R=[],F={},L=[],M=2,P="%",U=e.length-1;U>=0;U--){var N,q,z,I,j,V=e[U];if(V[0]==c.RULE)N=!0;else{if(V[0]!=c.NESTED_BLOCK)continue;N=!1}var $=R.length,H=u(V);L=[];var K=[];for(q=H.length-1;q>=0;q--)for(z=q-1;z>=0;z--)if(!a(H[q],H[z],D)){K.push(q);break}for(q=H.length-1;q>=0;q--){var Y=H[q],G=!1;for(z=0;z<$;z++){var W=R[z];-1==L.indexOf(z)&&(!a(Y,W,D)&&!function(e,t,n){if(e[0]!=t[0])return!1;var r=t[4],o=T[r];return o&&o.indexOf(n)>-1}(Y,W,V)||T[W[4]]&&T[W[4]].length===B)&&(A(U+1,W),-1==L.indexOf(z)&&(L.push(z),delete T[W[4]])),G||(G=Y[0]==W[0]&&Y[1]==W[1])&&(j=z)}if(N&&!(K.indexOf(q)>-1)){var Q=Y[4];G&&R[j][5].length+Y[5].length>B?(A(U+1,R[j]),R.splice(j,1),T[Q]=[V],G=!1):(T[Q]=T[Q]||[],T[Q].push(V)),G?R[j]=o(R[j],Y):R.push(Y)}}for(q=0,I=(L=L.sort(r)).length;q<I;q++){var Z=L[q]-q;R.splice(Z,1)}}for(var J=e[0]&&e[0][0]==c.AT_RULE&&0===e[0][1].indexOf("@charset")?1:0;J<e.length-1;J++){var X=e[J][0]===c.AT_RULE&&0===e[J][1].indexOf("@import"),ee=e[J][0]===c.COMMENT;if(!X&&!ee)break}for(U=0;U<R.length;U++)A(J,R[U])}var a=e("./reorderable").canReorderSingle,u=e("./extract-properties"),s=e("./is-mergeable"),l=e("./tidy-rule-duplicates"),c=e("../../tokenizer/token"),f=e("../../utils/clone-array"),p=e("../../writer/one-time").body,h=e("../../writer/one-time").rules;t.exports=i},{"../../tokenizer/token":85,"../../utils/clone-array":87,"../../writer/one-time":99,"./extract-properties":23,"./is-mergeable":25,"./reorderable":48,"./tidy-rule-duplicates":55}],52:[function(e,t,n){function r(e,t,n){var r,i,a,u,s,l;for(a=0,u=e.length;a<u;a++)for(r=e[a][1],s=0,l=t.length;s<l;s++){if(i=t[s][1],r==i)return!0;if(n&&o(r)==o(i))return!0}return!1}function o(e){return e.replace(i,"")}var i=/\-\-.+$/;t.exports=r},{}],53:[function(e,t,n){function r(e,t,n){var r,i,a,u,s,l;for(a=0,u=e.length;a<u;a++)for(r=o(e[a][1],n),s=0,l=t.length;s<l;s++)if(i=o(t[s][1],n),r[0]===i[0]&&r[1]===i[1]&&r[2]===i[2])return!0;return!1}function o(e,t){var n;return e in t||(t[e]=n=i(e)),n||t[e]}var i=e("./specificity");t.exports=r},{"./specificity":54}],54:[function(e,t,n){function r(e){var t,n,r,s,c,f,p,h=[0,0,0],d=0,m=!1,g=!1;for(f=0,p=e.length;f<p;f++){if(t=e[f],n);else if(t!=i.SINGLE_QUOTE||s||r)if(t==i.SINGLE_QUOTE&&!s&&r)r=!1;else if(t!=i.DOUBLE_QUOTE||s||r)if(t==i.DOUBLE_QUOTE&&s&&!r)s=!1;else{if(r||s)continue;d>0&&!m||(t==i.OPEN_ROUND_BRACKET?d++:t==i.CLOSE_ROUND_BRACKET&&1==d?(d--,m=!1):t==i.CLOSE_ROUND_BRACKET?d--:t==a.HASH?h[0]++:t==a.DOT||t==i.OPEN_SQUARE_BRACKET?h[1]++:t!=a.PSEUDO||g||o(e,f)?t==a.PSEUDO?m=!0:(0===f||c)&&u.test(t)&&h[2]++:(h[1]++,m=!1))}else s=!0;else r=!0;n=t==i.BACK_SLASH,g=t==a.PSEUDO,c=!n&&l.test(t)}return h}function o(e,t){return e.indexOf(s,t)===t}var i=e("../../tokenizer/marker"),a={ADJACENT_SIBLING:"+",DESCENDANT:">",DOT:".",HASH:"#",NON_ADJACENT_SIBLING:"~",PSEUDO:":"},u=/[a-zA-Z]/,s=":not(",l=/[\s,\(>~\+]/;t.exports=r},{"../../tokenizer/marker":84}],55:[function(e,t,n){function r(e,t){return e[1]>t[1]?1:-1}function o(e){for(var t=[],n=[],o=0,i=e.length;o<i;o++){var a=e[o];-1==n.indexOf(a[1])&&(n.push(a[1]),t.push(a))}return t.sort(r)}t.exports=o},{}],56:[function(e,t,n){function r(e){for(var t=e.length-1;t>=0;t--){var n=e[t];n.unused&&n.all.splice(n.position,1)}}t.exports=r},{}],57:[function(e,t,n){function r(e,t){var n,r,a,u;for(u=e.length-1;u>=0;u--)(n=e[u]).unused||(n.dirty||n.important||n.hack)&&(t?(r=t(n),n.value=r):r=n.value,n.important&&o(n),n.hack&&i(n),"all"in n&&((a=n.all[n.position])[1][1]=n.name,a.splice(2,a.length-1),Array.prototype.push.apply(a,r)))}function o(e){e.value[e.value.length-1][1]+=c}function i(e){e.hack[0]==a.UNDERSCORE?e.name=f+e.name:e.hack[0]==a.ASTERISK?e.name=s+e.name:e.hack[0]==a.BACKSLASH?e.value[e.value.length-1][1]+=l+e.hack[1]:e.hack[0]==a.BANG&&(e.value[e.value.length-1][1]+=u.SPACE+p)}var a=e("./hack"),u=e("../tokenizer/marker"),s="*",l="\\",c="!important",f="_",p="!ie";t.exports=r},{"../tokenizer/marker":84,"./hack":9}],58:[function(e,t,n){function r(){var e=p("animation-timing-function");return function(t){return e(t)||x.test(t)}}function o(e){return"auto"!=e&&(p("color")(e)||s(e)||i(e)||h(e))}function i(e){return m(e)||l(e)}function a(e){return C.test(e)}function u(e){return k.test(e)}function s(e){return F.test(e)||S.test(e)}function l(e){return O.test(e)}function c(e){return B.test(e)}function f(e){return"none"==e||"inherit"==e||w(e)}function p(e){return function(t){return U[e].indexOf(t)>-1}}function h(e){return D.test(e)}function d(e){return e.length>0&&""+parseFloat(e)===e}function m(e){return R.test(e)}function g(e){return T.test(e)}function v(e){return d(e)&&parseFloat(e)>=0}function b(e){return P.test(e)}function y(e){return L.test(e)}function _(e,t){return e.test(t)}function w(e){return M.test(e)}function A(e){return"auto"==e||d(e)||p("^")(e)}function E(e){var t=N.slice(0).filter(function(t){return!(t in e.units)||!0===e.units[t]}),n=new RegExp("^(\\-?\\.?\\d+\\.?\\d*("+t.join("|")+"|)|auto|inherit)$","i");return{colorOpacity:e.colors.opacity,isAnimationDirectionKeyword:p("animation-direction"),isAnimationFillModeKeyword:p("animation-fill-mode"),isAnimationIterationCountKeyword:p("animation-iteration-count"),isAnimationNameKeyword:p("animation-name"),isAnimationPlayStateKeyword:p("animation-play-state"),isAnimationTimingFunction:r(),isBackgroundAttachmentKeyword:p("background-attachment"),isBackgroundClipKeyword:p("background-clip"),isBackgroundOriginKeyword:p("background-origin"),isBackgroundPositionKeyword:p("background-position"),isBackgroundRepeatKeyword:p("background-repeat"),isBackgroundSizeKeyword:p("background-size"),isColor:o,isColorFunction:i,isDynamicUnit:a,isFontKeyword:p("font"),isFontSizeKeyword:p("font-size"),isFontStretchKeyword:p("font-stretch"),isFontStyleKeyword:p("font-style"),isFontVariantKeyword:p("font-variant"),isFontWeightKeyword:p("font-weight"),isFunction:u,isGlobal:p("^"),isHslColor:l,isIdentifier:c,isImage:f,isKeyword:p,isLineHeightKeyword:p("line-height"),isListStylePositionKeyword:p("list-style-position"),isListStyleTypeKeyword:p("list-style-type"),isPrefixed:g,isPositiveNumber:v,isRgbColor:m,isStyleKeyword:p("*-style"),isTime:y,isUnit:_.bind(null,n),isUrl:w,isVariable:b,isWidth:p("width"),isZIndex:A}}var x=/^(cubic\-bezier|steps)\([^\)]+\)$/,C=new RegExp("^(\\-moz\\-|\\-webkit\\-)?calc\\([^\\)]+\\)$","i"),k=new RegExp("^(var\\(\\-\\-[^\\)]+\\)|[A-Z]+(\\-|[A-Z]|[0-9])+\\(.*?\\)|\\-(\\-|[A-Z]|[0-9])+\\(.*?\\))$","i"),O=/^hsl\(\s*[\-\.\d]+\s*,\s*[\.\d]+%\s*,\s*[\.\d]+%\s*\)|hsla\(\s*[\-\.\d]+\s*,\s*[\.\d]+%\s*,\s*[\.\d]+%\s*,\s*[\.\d]+\s*\)$/,B=/^(\-[a-z0-9_][a-z0-9\-_]*|[a-z][a-z0-9\-_]*)$/i,S=/^#[0-9a-f]{6}$/i,D=/^[a-z]+$/i,T=/^-([a-z0-9]|-)*$/i,R=/^rgb\(\s*[\d]{1,3}\s*,\s*[\d]{1,3}\s*,\s*[\d]{1,3}\s*\)|rgba\(\s*[\d]{1,3}\s*,\s*[\d]{1,3}\s*,\s*[\d]{1,3}\s*,\s*[\.\d]+\s*\)$/,F=/^#[0-9a-f]{3}$/i,L=new RegExp("^(\\-?\\+?\\.?\\d+\\.?\\d*(s|ms))$"),M=/^url\([\s\S]+\)$/i,P=new RegExp("^var\\(\\-\\-[^\\)]+\\)$","i"),U={"^":["inherit","initial","unset"],"*-style":["auto","dashed","dotted","double","groove","hidden","inset","none","outset","ridge","solid"],"animation-direction":["alternate","alternate-reverse","normal","reverse"],"animation-fill-mode":["backwards","both","forwards","none"],"animation-iteration-count":["infinite"],"animation-name":["none"],"animation-play-state":["paused","running"],"animation-timing-function":["ease","ease-in","ease-in-out","ease-out","linear","step-end","step-start"],"background-attachment":["fixed","inherit","local","scroll"],"background-clip":["border-box","content-box","inherit","padding-box","text"],"background-origin":["border-box","content-box","inherit","padding-box"],"background-position":["bottom","center","left","right","top"],"background-repeat":["no-repeat","inherit","repeat","repeat-x","repeat-y","round","space"],"background-size":["auto","cover","contain"],"border-collapse":["collapse","inherit","separate"],bottom:["auto"],clear:["both","left","none","right"],color:["transparent"],cursor:["all-scroll","auto","col-resize","crosshair","default","e-resize","help","move","n-resize","ne-resize","no-drop","not-allowed","nw-resize","pointer","progress","row-resize","s-resize","se-resize","sw-resize","text","vertical-text","w-resize","wait"],display:["block","inline","inline-block","inline-table","list-item","none","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group"],float:["left","none","right"],left:["auto"],font:["caption","icon","menu","message-box","small-caption","status-bar","unset"],"font-size":["large","larger","medium","small","smaller","x-large","x-small","xx-large","xx-small"],"font-stretch":["condensed","expanded","extra-condensed","extra-expanded","normal","semi-condensed","semi-expanded","ultra-condensed","ultra-expanded"],"font-style":["italic","normal","oblique"],"font-variant":["normal","small-caps"],"font-weight":["100","200","300","400","500","600","700","800","900","bold","bolder","lighter","normal"],"line-height":["normal"],"list-style-position":["inside","outside"],"list-style-type":["armenian","circle","decimal","decimal-leading-zero","disc","decimal|disc","georgian","lower-alpha","lower-greek","lower-latin","lower-roman","none","square","upper-alpha","upper-latin","upper-roman"],overflow:["auto","hidden","scroll","visible"],position:["absolute","fixed","relative","static"],right:["auto"],"text-align":["center","justify","left","left|right","right"],"text-decoration":["line-through","none","overline","underline"],"text-overflow":["clip","ellipsis"],top:["auto"],"vertical-align":["baseline","bottom","middle","sub","super","text-bottom","text-top","top"],visibility:["collapse","hidden","visible"],"white-space":["normal","nowrap","pre"],width:["inherit","initial","medium","thick","thin"]},N=["%","ch","cm","em","ex","in","mm","pc","pt","px","rem","vh","vm","vmax","vmin","vw"];t.exports=E},{}],59:[function(e,t,n){function r(e,t,n){var r,i,a,u=[];for(a=e.length-1;a>=0;a--)(i=e[a])[0]==m.PROPERTY&&(!t&&o(i)||n&&n.indexOf(i[1][1])>-1||((r=p(i)).all=e,r.position=a,u.unshift(r)));return u}function o(e){var t,n,r;for(t=2,n=e.length;t<n;t++)if((r=e[t])[0]==m.PROPERTY_VALUE&&i(r[1]))return!0;return!1}function i(e){return g.VARIABLE_REFERENCE_PATTERN.test(e)}function a(e){var t,n,r;for(n=3,r=e.length;n<r;n++)if((t=e[n])[0]==m.PROPERTY_VALUE&&(t[1]==d.COMMA||t[1]==d.FORWARD_SLASH))return!0;return!1}function u(e){var t=!1,n=e[1][1],r=e[e.length-1];return n[0]==g.UNDERSCORE?t=[h.UNDERSCORE]:n[0]==g.ASTERISK?t=[h.ASTERISK]:r[1][0]!=g.BANG||r[1].match(g.IMPORTANT_WORD_PATTERN)?r[1].indexOf(g.BANG)>0&&!r[1].match(g.IMPORTANT_WORD_PATTERN)&&g.BANG_SUFFIX_PATTERN.test(r[1])?t=[h.BANG]:r[1].indexOf(g.BACKSLASH)>0&&r[1].indexOf(g.BACKSLASH)==r[1].length-g.BACKSLASH.length-1?t=[h.BACKSLASH,r[1].substring(r[1].indexOf(g.BACKSLASH)+1)]:0===r[1].indexOf(g.BACKSLASH)&&2==r[1].length&&(t=[h.BACKSLASH,r[1].substring(1)]):t=[h.BANG],t}function s(e){if(e.length<3)return!1;var t=e[e.length-1];return!!g.IMPORTANT_TOKEN_PATTERN.test(t[1])||!(!g.IMPORTANT_WORD_PATTERN.test(t[1])||!g.SUFFIX_BANG_PATTERN.test(e[e.length-2][1]))}function l(e){var t=e[e.length-1],n=e[e.length-2];g.IMPORTANT_TOKEN_PATTERN.test(t[1])?t[1]=t[1].replace(g.IMPORTANT_TOKEN_PATTERN,""):(t[1]=t[1].replace(g.IMPORTANT_WORD_PATTERN,""),n[1]=n[1].replace(g.SUFFIX_BANG_PATTERN,"")),0===t[1].length&&e.pop(),0===n[1].length&&e.pop()}function c(e){e[1][1]=e[1][1].substring(1)}function f(e,t){var n=e[e.length-1];n[1]=n[1].substring(0,n[1].indexOf(t[0]==h.BACKSLASH?g.BACKSLASH:g.BANG)).trim(),0===n[1].length&&e.pop()}function p(e){var t=s(e);t&&l(e);var n=u(e);return n[0]==h.ASTERISK||n[0]==h.UNDERSCORE?c(e):n[0]!=h.BACKSLASH&&n[0]!=h.BANG||f(e,n),{block:e[2]&&e[2][0]==m.PROPERTY_BLOCK,components:[],dirty:!1,hack:n,important:t,name:e[1][1],multiplex:e.length>3&&a(e),position:0,shorthand:!1,unused:!1,value:e.slice(2)}}var h=e("./hack"),d=e("../tokenizer/marker"),m=e("../tokenizer/token"),g={ASTERISK:"*",BACKSLASH:"\\",BANG:"!",BANG_SUFFIX_PATTERN:/!\w+$/,IMPORTANT_TOKEN:"!important",IMPORTANT_TOKEN_PATTERN:new RegExp("!important$","i"),IMPORTANT_WORD:"important",IMPORTANT_WORD_PATTERN:new RegExp("important$","i"),SUFFIX_BANG_PATTERN:/!$/,UNDERSCORE:"_",VARIABLE_REFERENCE_PATTERN:/var\(--.+\)$/};t.exports={all:r,single:p}},{"../tokenizer/marker":84,"../tokenizer/token":85,"./hack":9}],60:[function(e,t,n){function r(e){return o(a["*"],i(e))}function o(e,t){for(var n in e){var r=e[n];"object"!=typeof r||Array.isArray(r)?t[n]=n in t?t[n]:r:t[n]=o(r,t[n]||{})}return t}function i(e){if("object"==typeof e)return e;if(!/[,\+\-]/.test(e))return a[e]||a["*"];var t=e.split(","),n=t[0]in a?a[t.shift()]:a["*"];return e={},t.forEach(function(t){var n="+"==t[0],r=t.substring(1).split("."),o=r[0],i=r[1];e[o]=e[o]||{},e[o][i]=n}),o(n,e)}var a={"*":{colors:{opacity:!0},properties:{backgroundClipMerging:!0,backgroundOriginMerging:!0,backgroundSizeMerging:!0,colors:!0,ieBangHack:!1,ieFilters:!1,iePrefixHack:!1,ieSuffixHack:!1,merging:!0,shorterLengthUnits:!1,spaceAfterClosingBrace:!0,urlQuotes:!1,zeroUnits:!0},selectors:{adjacentSpace:!1,ie7Hack:!1,mergeablePseudoClasses:[":active",":after",":before",":empty",":checked",":disabled",":empty",":enabled",":first-child",":first-letter",":first-line",":first-of-type",":focus",":hover",":lang",":last-child",":last-of-type",":link",":not",":nth-child",":nth-last-child",":nth-last-of-type",":nth-of-type",":only-child",":only-of-type",":root",":target",":visited"],mergeablePseudoElements:["::after","::before","::first-letter","::first-line"],mergeLimit:8191,multiplePseudoMerging:!0},units:{ch:!0,in:!0,pc:!0,pt:!0,rem:!0,vh:!0,vm:!0,vmax:!0,vmin:!0,vw:!0}}};a.ie11=a["*"],a.ie10=a["*"],a.ie9=o(a["*"],{properties:{ieFilters:!0,ieSuffixHack:!0}}),a.ie8=o(a.ie9,{colors:{opacity:!1},properties:{backgroundClipMerging:!1,backgroundOriginMerging:!1,backgroundSizeMerging:!1,iePrefixHack:!0,merging:!1},selectors:{mergeablePseudoClasses:[":after",":before",":first-child",":first-letter",":focus",":hover",":visited"],mergeablePseudoElements:[]},units:{ch:!1,rem:!1,vh:!1,vm:!1,vmax:!1,vmin:!1,vw:!1}}),a.ie7=o(a.ie8,{properties:{ieBangHack:!0},selectors:{ie7Hack:!0,mergeablePseudoClasses:[":first-child",":first-letter",":hover",":visited"]}}),t.exports=r},{}],61:[function(e,t,n){function r(e){return e||o}var o=e("../reader/load-remote-resource");t.exports=r},{"../reader/load-remote-resource":75}],62:[function(e,t,n){function r(e){var t={};return t[f.AfterAtRule]=e,t[f.AfterBlockBegins]=e,t[f.AfterBlockEnds]=e,t[f.AfterComment]=e,t[f.AfterProperty]=e,t[f.AfterRuleBegins]=e,t[f.AfterRuleEnds]=e,t[f.BeforeBlockEnds]=e,t[f.BetweenSelectors]=e,t}function o(e){var t={};return t[h.AroundSelectorRelation]=e,t[h.BeforeBlockBegins]=e,t[h.BeforeValue]=e,t}function i(e){return void 0!==e&&!1!==e&&("object"==typeof e&&"indentBy"in e&&(e=c(e,{indentBy:parseInt(e.indentBy)})),"object"==typeof e&&"indentWith"in e&&(e=c(e,{indentWith:l(e.indentWith)})),"object"==typeof e?c(d,e):"object"==typeof e?c(d,e):"string"==typeof e&&e==m?c(d,{breaks:r(!0),indentBy:2,spaces:o(!0)}):"string"==typeof e&&e==g?c(d,{breaks:{afterAtRule:!0,afterBlockBegins:!0,afterBlockEnds:!0,afterComment:!0,afterRuleEnds:!0,beforeBlockEnds:!0}}):"string"==typeof e?c(d,a(e)):d)}function a(e){return e.split(v).reduce(function(e,t){var n=t.split(b),r=n[0],o=n[1];return"breaks"==r||"spaces"==r?e[r]=u(o):"indentBy"==r||"wrapAt"==r?e[r]=parseInt(o):"indentWith"==r&&(e[r]=l(o)),e},{})}function u(e){return e.split(y).reduce(function(e,t){var n=t.split(_),r=n[0],o=n[1];return e[r]=s(o),e},{})}function s(e){switch(e){case w:case A:return!1;case E:case x:return!0;default:return e}}function l(e){switch(e){case"space":return p.Space;case"tab":return p.Tab;default:return e}}var c=e("../utils/override"),f={AfterAtRule:"afterAtRule",AfterBlockBegins:"afterBlockBegins",AfterBlockEnds:"afterBlockEnds",AfterComment:"afterComment",AfterProperty:"afterProperty",AfterRuleBegins:"afterRuleBegins",AfterRuleEnds:"afterRuleEnds",BeforeBlockEnds:"beforeBlockEnds",BetweenSelectors:"betweenSelectors"},p={Space:" ",Tab:"\t"},h={AroundSelectorRelation:"aroundSelectorRelation",BeforeBlockBegins:"beforeBlockBegins",BeforeValue:"beforeValue"},d={breaks:r(!1),indentBy:0,indentWith:p.Space,spaces:o(!1),wrapAt:!1},m="beautify",g="keep-breaks",v=";",b=":",y=",",_="=",w="false",A="off",E="true",x="on";t.exports={Breaks:f,Spaces:h,formatFrom:i}},{"../utils/override":96}],63:[function(e,t,n){(function(n){function r(e){return a(o(n.env.HTTP_PROXY||n.env.http_proxy),e||{})}function o(e){return e?{hostname:i.parse(e).hostname,port:parseInt(i.parse(e).port)}:{}}var i=e("url"),a=e("../utils/override");t.exports=r}).call(this,e("_process"))},{"../utils/override":96,_process:114,url:161}],64:[function(e,t,n){function r(e){return e||o}var o=5e3;t.exports=r},{}],65:[function(e,t,n){function r(e){return Array.isArray(e)?e:!1===e?["none"]:void 0===e?["local"]:e.split(",")}t.exports=r},{}],66:[function(e,t,n){function r(){}function o(e){var t=c(p,{}),n=f.Zero,r=f.One,o=f.Two;return void 0===e?(delete t[o],t):("string"==typeof e&&(e=parseInt(e)),"number"==typeof e&&e===parseInt(o)?t:"number"==typeof e&&e===parseInt(r)?(delete t[o],t):"number"==typeof e&&e===parseInt(n)?(delete t[o],delete t[r],t):("object"==typeof e&&(e=u(e)),r in e&&"roundingPrecision"in e[r]&&(e[r].roundingPrecision=l(e[r].roundingPrecision)),o in e&&"skipProperties"in e[o]&&"string"==typeof e[o].skipProperties&&(e[o].skipProperties=e[o].skipProperties.split(y)),(n in e||r in e||o in e)&&(t[n]=c(t[n],e[n])),r in e&&h in e[r]&&(t[r]=c(t[r],i(r,a(e[r][h]))),delete e[r][h]),r in e&&d in e[r]&&(t[r]=c(t[r],i(r,a(e[r][d]))),delete e[r][d]),r in e||o in e?t[r]=c(t[r],e[r]):delete t[r],o in e&&h in e[o]&&(t[o]=c(t[o],i(o,a(e[o][h]))),delete e[o][h]),o in e&&d in e[o]&&(t[o]=c(t[o],i(o,a(e[o][d]))),delete e[o][d]),o in e?t[o]=c(t[o],e[o]):delete t[o],t))}function i(e,t){var n,r=c(p[e],{});for(n in r)"boolean"==typeof r[n]&&(r[n]=t);return r}function a(e){switch(e){case m:case g:return!1;case v:case b:return!0;default:return e}}function u(e){var t,n,r=c(e,{});for(n=0;n<=2;n++)(t=""+n)in r&&(void 0===r[t]||!1===r[t])&&delete r[t],t in r&&!0===r[t]&&(r[t]={}),t in r&&"string"==typeof r[t]&&(r[t]=s(r[t],t));return r}function s(e,t){return e.split(_).reduce(function(e,n){var r=n.split(w),o=r[0],u=a(r[1]);return h==o||d==o?e=c(e,i(t,u)):e[o]=u,e},{})}var l=e("./rounding-precision").roundingPrecisionFrom,c=e("../utils/override"),f={Zero:"0",One:"1",Two:"2"},p={};p[f.Zero]={},p[f.One]={cleanupCharsets:!0,normalizeUrls:!0,optimizeBackground:!0,optimizeBorderRadius:!0,optimizeFilter:!0,optimizeFontWeight:!0,optimizeOutline:!0,removeEmpty:!0,removeNegativePaddings:!0,removeQuotes:!0,removeWhitespace:!0,replaceMultipleZeros:!0,replaceTimeUnits:!0,replaceZeroUnits:!0,roundingPrecision:l(void 0),selectorsSortingMethod:"standard",specialComments:"all",tidyAtRules:!0,tidyBlockScopes:!0,tidySelectors:!0,transform:r},p[f.Two]={mergeAdjacentRules:!0,mergeIntoShorthands:!0,mergeMedia:!0,mergeNonAdjacentRules:!0,mergeSemantically:!1,overrideProperties:!0,removeEmpty:!0,reduceNonAdjacentRules:!0,removeDuplicateFontRules:!0,removeDuplicateMediaBlocks:!0,removeDuplicateRules:!0,removeUnusedAtRules:!1,restructureRules:!1,skipProperties:[]};var h="*",d="all",m="false",g="off",v="true",b="on",y=",",_=";",w=":";t.exports={OptimizationLevel:f,optimizationLevelFrom:o}},{"../utils/override":96,"./rounding-precision":69}],67:[function(e,t,n){(function(n){function r(e){return e?o.resolve(e):n.cwd()}var o=e("path");t.exports=r}).call(this,e("_process"))},{_process:114,path:112}],68:[function(e,t,n){function r(e){return void 0===e||!!e}t.exports=r},{}],69:[function(e,t,n){function r(e){return a(o(l),i(e))}function o(e){return{ch:e,cm:e,em:e,ex:e,in:e,mm:e,pc:e,pt:e,px:e,q:e,rem:e,vh:e,vmax:e,vmin:e,vw:e,"%":e}}function i(e){return null===e||void 0===e?{}:"boolean"==typeof e?{}:"number"==typeof e&&-1==e?o(l):"number"==typeof e?o(e):"string"==typeof e&&u.test(e)?o(parseInt(e)):"string"==typeof e&&e==l?o(l):"object"==typeof e?e:e.split(c).reduce(function(e,t){var n=t.split(f),r=n[0],i=parseInt(n[1]);return(isNaN(i)||-1==i)&&(i=l),s.indexOf(r)>-1?e=a(e,o(i)):e[r]=i,e},{})}var a=e("../utils/override"),u=/^\d+$/,s=["*","all"],l="off",c=",",f="=";t.exports={DEFAULT:l,roundingPrecisionFrom:r}},{"../utils/override":96}],70:[function(e,t,n){(function(n,r){function o(e,t,n){var r={callback:n,fetch:t.options.fetch,index:0,inline:t.options.inline,inlineRequest:t.options.inlineRequest,inlineTimeout:t.options.inlineTimeout,inputSourceMapTracker:t.inputSourceMapTracker,localOnly:t.localOnly,processedTokens:[],rebaseTo:t.options.rebaseTo,sourceTokens:e,warnings:t.warnings};return t.options.sourceMap&&e.length>0?i(r):n(e)}function i(e){var t,n,r,o=[],i=a(e.sourceTokens[0]);for(r=e.sourceTokens.length;e.index<r;e.index++)if(n=e.sourceTokens[e.index],(t=a(n))!=i&&(o=[],i=t),o.push(n),e.processedTokens.push(n),n[0]==_.COMMENT&&x.test(n[1]))return u(n[1],t,o,e);return e.callback(e.processedTokens)}function a(e){return(e[0]==_.AT_RULE||e[0]==_.COMMENT?e[2][0]:e[1][0][2][0])[2]}function u(e,t,n,r){return s(e,r,function(e){return e&&(r.inputSourceMapTracker.track(t,e),p(n,r.inputSourceMapTracker)),r.index++,i(r)})}function s(e,t,n){var r,o,i,a=x.exec(e)[1];return A(a)?(o=l(a),n(o)):E(a)?c(a,t,function(e){var t;e?(t=JSON.parse(e),i=y(t,a),n(i)):n(null)}):(r=m.resolve(t.rebaseTo,a),o=f(r,t),o?(i=b(o,r,t.rebaseTo),n(i)):n(null))}function l(e){var t=v(e),o=t[2]?t[2].split(/[=;]/)[2]:"us-ascii",i=t[3]?t[3].split(";")[1]:"utf8",a="utf8"==i?n.unescape(t[4]):t[4],u=new r(a,i);return u.charset=o,JSON.parse(u.toString())}function c(e,t,n){var r=g(e,!0,t.inline),o=!w(e);return t.localOnly?(t.warnings.push('Cannot fetch remote resource from "'+e+'" as no callback given.'),n(null)):o?(t.warnings.push('Cannot fetch "'+e+'" as no protocol given.'),n(null)):r?void t.fetch(e,t.inlineRequest,t.inlineTimeout,function(r,o){if(r)return t.warnings.push('Missing source map at "'+e+'" - '+r),n(null);n(o)}):(t.warnings.push('Cannot fetch "'+e+'" as resource is not allowed.'),n(null))}function f(e,t){var n,r=g(e,!1,t.inline);return d.existsSync(e)&&d.statSync(e).isFile()?r?(n=d.readFileSync(e,"utf-8"),JSON.parse(n)):(t.warnings.push('Cannot fetch "'+e+'" as resource is not allowed.'),null):(t.warnings.push('Ignoring local source map at "'+e+'" as resource is missing.'),null)}function p(e,t){var n,r,o;for(r=0,o=e.length;r<o;r++)switch((n=e[r])[0]){case _.AT_RULE:h(n,t);break;case _.AT_RULE_BLOCK:p(n[1],t),p(n[2],t);break;case _.AT_RULE_BLOCK_SCOPE:h(n,t);break;case _.NESTED_BLOCK:p(n[1],t),p(n[2],t);break;case _.NESTED_BLOCK_SCOPE:case _.COMMENT:h(n,t);break;case _.PROPERTY:p(n,t);break;case _.PROPERTY_BLOCK:p(n[1],t);break;case _.PROPERTY_NAME:case _.PROPERTY_VALUE:h(n,t);break;case _.RULE:p(n[1],t),p(n[2],t);break;case _.RULE_SCOPE:h(n,t)}return e}function h(e,t){var n,r,o=e[1],i=e[2],a=[];for(n=0,r=i.length;n<r;n++)a.push(t.originalPositionFor(i[n],o.length));e[2]=a}var d=e("fs"),m=e("path"),g=e("./is-allowed-resource"),v=e("./match-data-uri"),b=e("./rebase-local-map"),y=e("./rebase-remote-map"),_=e("../tokenizer/token"),w=e("../utils/has-protocol"),A=e("../utils/is-data-uri-resource"),E=e("../utils/is-remote-resource"),x=/^\/\*# sourceMappingURL=(\S+) \*\/$/;t.exports=o}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{"../tokenizer/token":85,"../utils/has-protocol":89,"../utils/is-data-uri-resource":90,"../utils/is-remote-resource":94,"./is-allowed-resource":73,"./match-data-uri":76,"./rebase-local-map":79,"./rebase-remote-map":80,buffer:5,fs:3,path:112}],71:[function(e,t,n){function r(e){var t,n,r,p;return r=e.replace(u,"").trim().replace(c,"(").replace(f,")").replace(s,"").replace(l,""),p=o(r," "),t=p[0].replace(i,"").replace(a,""),n=p.slice(1).join(" "),[t,n]}var o=e("../utils/split"),i=/^\(/,a=/\)$/,u=/^@import/i,s=/['"]\s*/,l=/\s*['"]/,c=/^url\(\s*/i,f=/\s*\)/i;t.exports=r},{"../utils/split":97}],72:[function(e,t,n){function r(){var e={};return{all:o.bind(null,e),isTracking:i.bind(null,e),originalPositionFor:a.bind(null,e),track:s.bind(null,e)}}function o(e){return e}function i(e,t){return t in e}function a(e,t,n,r){for(var o,i=t[0],s=t[1],l=t[2],c={line:i,column:s+n};!o&&c.column>s;)c.column--,o=e[l].originalPositionFor(c);return null===o.line&&i>1&&r>0?a(e,[i-1,s,l],n,r-1):null!==o.line?u(o):t}function u(e){return[e.line,e.column,e.source]}function s(e,t,n){e[t]=new l(n)}var l=e("source-map").SourceMapConsumer;t.exports=r},{"source-map":155}],73:[function(e,t,n){function r(e,t,n){var u,c,f,p,h,d,m=!t;if(0===n.length)return!1;for(t&&!s(e)&&(e=l+e),u=t?a.parse(e).host:e,c=t?e:i.resolve(e),d=0;d<n.length;d++)p="!"==(f=n[d])[0],h=f.substring(1),m=p&&t&&o(h)?m&&!r(e,!0,[h]):!p||t||o(h)?p?m&&!0:"all"==f||(t&&"local"==f?m||!1:!(!t||"remote"!=f)||!(!t&&"remote"==f)&&(!t&&"local"==f||(f===u||(f===e||(!(!t||0!==c.indexOf(f))||(!t&&0===c.indexOf(i.resolve(f))||t!=o(h)&&(m&&!0))))))):m&&!r(e,!1,[h]);return m}function o(e){return u(e)||a.parse(l+"//"+e).host==e}var i=e("path"),a=e("url"),u=e("../utils/is-remote-resource"),s=e("../utils/has-protocol"),l="http:";t.exports=r},{"../utils/has-protocol":89,"../utils/is-remote-resource":94,path:112,url:161}],74:[function(e,t,n){function r(e,t){var n={callback:t,fetch:e.options.fetch,index:0,inline:e.options.inline,inlineRequest:e.options.inlineRequest,inlineTimeout:e.options.inlineTimeout,localOnly:e.localOnly,rebaseTo:e.options.rebaseTo,sourcesContent:e.sourcesContent,uriToSource:o(e.inputSourceMapTracker.all()),warnings:e.warnings};return e.options.sourceMap&&e.options.sourceMapInlineSources?i(n):t()}function o(e){var t,n,r,o,i,a={};for(r in e)for(o=0,i=(t=e[r]).sources.length;o<i;o++)n=t.sources[o],r=t.sourceContentFor(n,!0),a[n]=r;return a}function i(e){var t,n,r,o=Object.keys(e.uriToSource);for(r=o.length;e.index<r;e.index++){if(t=o[e.index],!(n=e.uriToSource[t]))return a(t,e);e.sourcesContent[t]=n}return e.callback()}function a(e,t){var n;return h(e)?u(e,t,function(n){return t.index++,t.sourcesContent[e]=n,i(t)}):(n=s(e,t),t.index++,t.sourcesContent[e]=n,i(t))}function u(e,t,n){var r=f(e,!0,t.inline),o=!p(e);return t.localOnly?(t.warnings.push('Cannot fetch remote resource from "'+e+'" as no callback given.'),n(null)):o?(t.warnings.push('Cannot fetch "'+e+'" as no protocol given.'),n(null)):r?void t.fetch(e,t.inlineRequest,t.inlineTimeout,function(r,o){r&&t.warnings.push('Missing original source at "'+e+'" - '+r),n(o)}):(t.warnings.push('Cannot fetch "'+e+'" as resource is not allowed.'),n(null))}function s(e,t){var n=f(e,!1,t.inline),r=c.resolve(t.rebaseTo,e);return l.existsSync(r)&&l.statSync(r).isFile()?n?l.readFileSync(r,"utf8"):(t.warnings.push('Cannot fetch "'+r+'" as resource is not allowed.'),null):(t.warnings.push('Ignoring local source map at "'+r+'" as resource is missing.'),null)}var l=e("fs"),c=e("path"),f=e("./is-allowed-resource"),p=e("../utils/has-protocol"),h=e("../utils/is-remote-resource");t.exports=r},{"../utils/has-protocol":89,"../utils/is-remote-resource":94,"./is-allowed-resource":73,fs:3,path:112}],75:[function(e,t,n){function r(e,t,n,f){var p,h=t.protocol||t.hostname,d=!1;p=l(a.parse(e),t||{}),void 0!==t.hostname&&(p.protocol=t.protocol||c,p.path=p.href),(h&&!s(h)||u(e)?o.get:i.get)(p,function(o){var i,u=[];if(!d){if(o.statusCode<200||o.statusCode>399)return f(o.statusCode,null);if(o.statusCode>299)return i=a.resolve(e,o.headers.location),r(i,t,n,f);o.on("data",function(e){u.push(e.toString())}),o.on("end",function(){var e=u.join("");f(null,e)})}}).on("error",function(e){d||(d=!0,f(e.message,null))}).on("timeout",function(){d||(d=!0,f("timeout",null))}).setTimeout(n)}var o=e("http"),i=e("https"),a=e("url"),u=e("../utils/is-http-resource"),s=e("../utils/is-https-resource"),l=e("../utils/override"),c="http:";t.exports=r},{"../utils/is-http-resource":91,"../utils/is-https-resource":92,"../utils/override":96,http:156,https:105,url:161}],76:[function(e,t,n){function r(e){return o.exec(e)}var o=/^data:(\S*?)?(;charset=[^;]+)?(;[^,]+?)?,(.+)/;t.exports=r},{}],77:[function(e,t,n){function r(e){return e.replace(i,o)}var o="/",i=/\\/g;t.exports=r},{}],78:[function(e,t,n){(function(n,r){function o(e,t,n){return i(e,t,function(e){return x(e,t,function(){return O(t,function(){return n(e)})})})}function i(e,t,r){return"string"==typeof e?a(e,t,r):n.isBuffer(e)?a(e.toString(),t,r):Array.isArray(e)?u(e,t,r):"object"==typeof e?s(e,t,r):void 0}function a(e,t,n){return t.source=void 0,t.sourcesContent[void 0]=e,t.stats.originalSize+=e.length,d(e,t,{inline:t.options.inline},n)}function u(e,t,n){return d(e.reduce(function(e,n){return"string"==typeof n?l(n,e):c(n,t,e)},[]).join(""),t,{inline:["all"]},n)}function s(e,t,n){return d(c(e,t,[]).join(""),t,{inline:["all"]},n)}function l(e,t){return t.push(h(f(e))),t}function c(e,t,n){var r,o,i;for(r in e)i=e[r],o=f(r),n.push(h(o)),t.sourcesContent[o]=i.styles,i.sourceMap&&p(i.sourceMap,o,t);return n}function f(e){var t,n,r=E.resolve("");return N(e)?e:(t=E.isAbsolute(e)?e:E.resolve(e),n=E.relative(r,t),B(n))}function p(e,t,n){var r="string"==typeof e?JSON.parse(e):e,o=N(t)?T(r,t):D(r,t||q,n.options.rebaseTo);n.inputSourceMapTracker.track(t,o)}function h(e){return R("url("+e+")","")+M.SEMICOLON}function d(e,t,n,r){var o,i={};return t.source?N(t.source)?(i.fromBase=t.source,i.toBase=t.source):E.isAbsolute(t.source)?(i.fromBase=E.dirname(t.source),i.toBase=t.options.rebaseTo):(i.fromBase=E.dirname(E.resolve(t.source)),i.toBase=t.options.rebaseTo):(i.fromBase=E.resolve(""),i.toBase=t.options.rebaseTo),o=F(e,t),o=S(o,t.options.rebase,t.validator,i),m(n.inline)?g(o,t,n,r):r(o)}function m(e){return!(1==e.length&&"none"==e[0])}function g(e,t,n,r){return v({afterContent:!1,callback:r,errors:t.errors,externalContext:t,fetch:t.options.fetch,inlinedStylesheets:n.inlinedStylesheets||t.inlinedStylesheets,inline:n.inline,inlineRequest:t.options.inlineRequest,inlineTimeout:t.options.inlineTimeout,isRemote:n.isRemote||!1,localOnly:t.localOnly,outputTokens:[],rebaseTo:t.options.rebaseTo,sourceTokens:e,warnings:t.warnings})}function v(e){var t,n,r;for(n=0,r=e.sourceTokens.length;n<r;n++){if((t=e.sourceTokens[n])[0]==L.AT_RULE&&U(t[1]))return e.sourceTokens.splice(0,n),b(t,e);t[0]==L.AT_RULE||t[0]==L.COMMENT?e.outputTokens.push(t):(e.outputTokens.push(t),e.afterContent=!0)}return e.sourceTokens=[],e.callback(e.outputTokens)}function b(e,t){var n=C(e[1]),r=n[0],o=n[1],i=e[2];return N(r)?y(r,o,i,t):_(r,o,i,t)}function y(e,t,n,o){function i(i,a){return i?(o.errors.push('Broken @import declaration of "'+e+'" - '+i),r.nextTick(function(){o.outputTokens=o.outputTokens.concat(o.sourceTokens.slice(0,1)),o.sourceTokens=o.sourceTokens.slice(1),v(o)})):(o.inline=o.externalContext.options.inline,o.isRemote=!0,o.externalContext.source=u,o.externalContext.sourcesContent[e]=a,o.externalContext.stats.originalSize+=a.length,d(a,o.externalContext,o,function(e){return e=w(e,t,n),o.outputTokens=o.outputTokens.concat(e),o.sourceTokens=o.sourceTokens.slice(1),v(o)}))}var a=k(e,!0,o.inline),u=e,s=e in o.externalContext.sourcesContent,l=!P(e);return o.inlinedStylesheets.indexOf(e)>-1?(o.warnings.push('Ignoring remote @import of "'+e+'" as it has already been imported.'),o.sourceTokens=o.sourceTokens.slice(1),v(o)):o.localOnly&&o.afterContent?(o.warnings.push('Ignoring remote @import of "'+e+'" as no callback given and after other content.'),o.sourceTokens=o.sourceTokens.slice(1),v(o)):l?(o.warnings.push('Skipping remote @import of "'+e+'" as no protocol given.'),o.outputTokens=o.outputTokens.concat(o.sourceTokens.slice(0,1)),o.sourceTokens=o.sourceTokens.slice(1),v(o)):o.localOnly&&!s?(o.warnings.push('Skipping remote @import of "'+e+'" as no callback given.'),o.outputTokens=o.outputTokens.concat(o.sourceTokens.slice(0,1)),o.sourceTokens=o.sourceTokens.slice(1),v(o)):!a&&o.afterContent?(o.warnings.push('Ignoring remote @import of "'+e+'" as resource is not allowed and after other content.'),o.sourceTokens=o.sourceTokens.slice(1),v(o)):a?(o.inlinedStylesheets.push(e),s?i(null,o.externalContext.sourcesContent[e]):o.fetch(e,o.inlineRequest,o.inlineTimeout,i)):(o.warnings.push('Skipping remote @import of "'+e+'" as resource is not allowed.'),o.outputTokens=o.outputTokens.concat(o.sourceTokens.slice(0,1)),o.sourceTokens=o.sourceTokens.slice(1),v(o))}function _(e,t,n,r){var o,i,a=E.resolve(""),u=E.isAbsolute(e)?E.resolve(a,"/"==e[0]?e.substring(1):e):E.resolve(r.rebaseTo,e),s=E.relative(a,u),l=k(e,!1,r.inline),c=B(s),f=c in r.externalContext.sourcesContent;return r.inlinedStylesheets.indexOf(u)>-1?r.warnings.push('Ignoring local @import of "'+e+'" as it has already been imported.'):f||A.existsSync(u)&&A.statSync(u).isFile()?!l&&r.afterContent?r.warnings.push('Ignoring local @import of "'+e+'" as resource is not allowed and after other content.'):r.afterContent?r.warnings.push('Ignoring local @import of "'+e+'" as after other content.'):l?(o=f?r.externalContext.sourcesContent[c]:A.readFileSync(u,"utf-8"),r.inlinedStylesheets.push(u),r.inline=r.externalContext.options.inline,r.externalContext.source=c,r.externalContext.sourcesContent[c]=o,r.externalContext.stats.originalSize+=o.length,i=w(i=d(o,r.externalContext,r,function(e){return e}),t,n),r.outputTokens=r.outputTokens.concat(i)):(r.warnings.push('Skipping local @import of "'+e+'" as resource is not allowed.'),r.outputTokens=r.outputTokens.concat(r.sourceTokens.slice(0,1))):r.errors.push('Ignoring local @import of "'+e+'" as resource is missing.'),r.sourceTokens=r.sourceTokens.slice(1),v(r)}function w(e,t,n){return t?[[L.NESTED_BLOCK,[[L.NESTED_BLOCK_SCOPE,"@media "+t,n]],e]]:e}var A=e("fs"),E=e("path"),x=e("./apply-source-maps"),C=e("./extract-import-url-and-media"),k=e("./is-allowed-resource"),O=e("./load-original-sources"),B=e("./normalize-path"),S=e("./rebase"),D=e("./rebase-local-map"),T=e("./rebase-remote-map"),R=e("./restore-import"),F=e("../tokenizer/tokenize"),L=e("../tokenizer/token"),M=e("../tokenizer/marker"),P=e("../utils/has-protocol"),U=e("../utils/is-import"),N=e("../utils/is-remote-resource"),q="uri:unknown";t.exports=o}).call(this,{isBuffer:e("../../../is-buffer/index.js")},e("_process"))},{"../../../is-buffer/index.js":108,"../tokenizer/marker":84,"../tokenizer/token":85,"../tokenizer/tokenize":86,"../utils/has-protocol":89,"../utils/is-import":93,"../utils/is-remote-resource":94,"./apply-source-maps":70,"./extract-import-url-and-media":71,"./is-allowed-resource":73,"./load-original-sources":74,"./normalize-path":77,"./rebase":81,"./rebase-local-map":79,"./rebase-remote-map":80,"./restore-import":82,_process:114,fs:3,path:112}],79:[function(e,t,n){function r(e,t,n){var r=o.resolve(""),i=o.resolve(r,t),a=o.dirname(i);return e.sources=e.sources.map(function(e){return o.relative(n,o.resolve(a,e))}),e}var o=e("path");t.exports=r},{path:112}],80:[function(e,t,n){function r(e,t){var n=o.dirname(t);return e.sources=e.sources.map(function(e){return i.resolve(n,e)}),e}var o=e("path"),i=e("url");t.exports=r},{path:112,url:161}],81:[function(e,t,n){function r(e,t,n,r){return t?o(e,n,r):i(e,n,r)}function o(e,t,n){var r,i,l;for(i=0,l=e.length;i<l;i++)switch((r=e[i])[0]){case p.AT_RULE:a(r,t,n);break;case p.AT_RULE_BLOCK:s(r[2],t,n);break;case p.COMMENT:u(r,n);break;case p.NESTED_BLOCK:o(r[2],t,n);break;case p.RULE:s(r[2],t,n)}return e}function i(e,t,n){var r,o,i;for(o=0,i=e.length;o<i;o++)switch((r=e[o])[0]){case p.AT_RULE:a(r,t,n)}return e}function a(e,t,n){if(h(e[1])){var r=l(e[1]),o=f(r[0],n),i=r[1];e[1]=c(o,i)}}function u(e,t){var n=d.exec(e[1]);n&&-1===n[1].indexOf("data:")&&(e[1]=e[1].replace(n[1],f(n[1],t,!0)))}function s(e,t,n){var r,o,i,a,u,s;for(i=0,a=e.length;i<a;i++)for(u=2,s=(r=e[i]).length;u<s;u++)o=r[u][1],t.isUrl(o)&&(r[u][1]=f(o,n))}var l=e("./extract-import-url-and-media"),c=e("./restore-import"),f=e("./rewrite-url"),p=e("../tokenizer/token"),h=e("../utils/is-import"),d=/^\/\*# sourceMappingURL=(\S+) \*\/$/;t.exports=r},{"../tokenizer/token":85,"../utils/is-import":93,"./extract-import-url-and-media":71,"./restore-import":82,"./rewrite-url":83}],82:[function(e,t,n){function r(e,t){return("@import "+e+" "+t).trim()}t.exports=r},{}],83:[function(e,t,n){(function(n){function r(e,t){return t?o(e)&&!u(t.toBase)?e:u(e)||i(e)||a(e)?e:s(e)?"'"+e+"'":u(t.toBase)?v.resolve(t.toBase,e):f(t.absolute?l(e,t):c(e,t)):e}function o(e){return g.isAbsolute(e)}function i(e){return"#"==e[0]}function a(e){return/^\w+:\w+/.test(e)}function u(e){return/^[^:]+?:\/\//.test(e)||0===e.indexOf("//")}function s(e){return 0===e.indexOf("data:")}function l(e,t){return g.resolve(g.join(t.fromBase||"",e)).replace(t.toBase,"")}function c(e,t){return g.relative(t.toBase,g.join(t.fromBase||"",e))}function f(e){return B?e.replace(/\\/g,"/"):e}function p(e){return e.indexOf(y)>-1?b:e.indexOf(b)>-1?y:h(e)||d(e)?y:""}function h(e){return O.test(e)}function d(e){return x.test(e)}function m(e,t,n){var o=e.replace(C,"").replace(k,"").trim(),i=o.replace(A,"").replace(E,"").trim(),a=o[0]==y||o[0]==b?o[0]:p(i);return n?r(i,t):_+a+r(i,t)+a+w}var g=e("path"),v=e("url"),b='"',y="'",_="url(",w=")",A=/^["']/,E=/["']$/,x=/[\(\)]/,C=/^url\(/i,k=/\)$/,O=/\s/,B="win32"==n.platform;t.exports=m}).call(this,e("_process"))},{_process:114,path:112,url:161}],84:[function(e,t,n){var r={ASTERISK:"*",AT:"@",BACK_SLASH:"\\",CLOSE_CURLY_BRACKET:"}",CLOSE_ROUND_BRACKET:")",CLOSE_SQUARE_BRACKET:"]",COLON:":",COMMA:",",DOUBLE_QUOTE:'"',EXCLAMATION:"!",FORWARD_SLASH:"/",INTERNAL:"-clean-css-",NEW_LINE_NIX:"\n",NEW_LINE_WIN:"\r",OPEN_CURLY_BRACKET:"{",OPEN_ROUND_BRACKET:"(",OPEN_SQUARE_BRACKET:"[",SEMICOLON:";",SINGLE_QUOTE:"'",SPACE:" ",TAB:"\t",UNDERSCORE:"_"};t.exports=r},{}],85:[function(e,t,n){var r={AT_RULE:"at-rule",AT_RULE_BLOCK:"at-rule-block",AT_RULE_BLOCK_SCOPE:"at-rule-block-scope",COMMENT:"comment",NESTED_BLOCK:"nested-block",NESTED_BLOCK_SCOPE:"nested-block-scope",PROPERTY:"property",PROPERTY_BLOCK:"property-block",PROPERTY_NAME:"property-name",PROPERTY_VALUE:"property-value",RULE:"rule",RULE_SCOPE:"rule-scope"};t.exports=r},{}],86:[function(e,t,n){function r(e,t){return o(e,t,{level:f.BLOCK,position:{source:t.source||void 0,line:1,column:0,index:0}},!1)}function o(e,t,n,r){for(var p,h,d,g,v,b,y,_,w,A,E,x,C=[],k=C,O=[],B=[],S=n.level,D=[],T=[],R=[],F=0,L=!1,M=!1,P=!1,U=!1,N=n.position;N.index<e.length;N.index++){var q=e[N.index];if(b=S==f.SINGLE_QUOTE||S==f.DOUBLE_QUOTE,y=q==s.SPACE||q==s.TAB,_=q==s.NEW_LINE_NIX,w=q==s.NEW_LINE_NIX&&e[N.index-1]==s.NEW_LINE_WIN,A=!M&&S!=f.COMMENT&&!b&&q==s.ASTERISK&&e[N.index-1]==s.FORWARD_SLASH,E=!L&&S==f.COMMENT&&q==s.FORWARD_SLASH&&e[N.index-1]==s.ASTERISK,g=0===T.length?[N.line,N.column,N.source]:g,x)T.push(q);else if(E||S!=f.COMMENT)if(A&&(S==f.BLOCK||S==f.RULE)&&T.length>1)B.push(g),T.push(q),R.push(T.slice(0,T.length-2)),T=T.slice(T.length-2),g=[N.line,N.column-1,N.source],D.push(S),S=f.COMMENT;else if(A)D.push(S),S=f.COMMENT,T.push(q);else if(E)v=T.join("").trim()+q,p=[l.COMMENT,v,[i(g,v,t)]],k.push(p),S=D.pop(),g=B.pop()||null,T=R.pop()||[];else if(q!=s.SINGLE_QUOTE||b)if(q==s.SINGLE_QUOTE&&S==f.SINGLE_QUOTE)S=D.pop(),T.push(q);else if(q!=s.DOUBLE_QUOTE||b)if(q==s.DOUBLE_QUOTE&&S==f.DOUBLE_QUOTE)S=D.pop(),T.push(q);else if(!A&&!E&&q!=s.CLOSE_ROUND_BRACKET&&q!=s.OPEN_ROUND_BRACKET&&S!=f.COMMENT&&!b&&F>0)T.push(q);else if(q!=s.OPEN_ROUND_BRACKET||b||S==f.COMMENT||P)if(q!=s.CLOSE_ROUND_BRACKET||b||S==f.COMMENT||P)if(q==s.SEMICOLON&&S==f.BLOCK&&T[0]==s.AT)v=T.join("").trim(),C.push([l.AT_RULE,v,[i(g,v,t)]]),T=[];else if(q==s.COMMA&&S==f.BLOCK&&h)v=T.join("").trim(),h[1].push([u(h[0]),v,[i(g,v,t,h[1].length)]]),T=[];else if(q==s.COMMA&&S==f.BLOCK&&a(T)==l.AT_RULE)T.push(q);else if(q==s.COMMA&&S==f.BLOCK)h=[a(T),[],[]],v=T.join("").trim(),h[1].push([u(h[0]),v,[i(g,v,t,0)]]),T=[];else if(q==s.OPEN_CURLY_BRACKET&&S==f.BLOCK&&h&&h[0]==l.NESTED_BLOCK)v=T.join("").trim(),h[1].push([l.NESTED_BLOCK_SCOPE,v,[i(g,v,t)]]),C.push(h),D.push(S),N.column++,N.index++,T=[],h[2]=o(e,t,n,!0),h=null;else if(q==s.OPEN_CURLY_BRACKET&&S==f.BLOCK&&a(T)==l.NESTED_BLOCK)v=T.join("").trim(),(h=h||[l.NESTED_BLOCK,[],[]])[1].push([l.NESTED_BLOCK_SCOPE,v,[i(g,v,t)]]),C.push(h),D.push(S),N.column++,N.index++,T=[],h[2]=o(e,t,n,!0),h=null;else if(q==s.OPEN_CURLY_BRACKET&&S==f.BLOCK)v=T.join("").trim(),(h=h||[a(T),[],[]])[1].push([u(h[0]),v,[i(g,v,t,h[1].length)]]),k=h[2],C.push(h),D.push(S),S=f.RULE,T=[];else if(q==s.OPEN_CURLY_BRACKET&&S==f.RULE&&P)O.push(h),h=[l.PROPERTY_BLOCK,[]],d.push(h),k=h[1],D.push(S),S=f.RULE,P=!1;else if(q!=s.COLON||S!=f.RULE||P)if(q==s.SEMICOLON&&S==f.RULE&&d&&O.length>0&&T.length>0&&T[0]==s.AT)v=T.join("").trim(),h[1].push([l.AT_RULE,v,[i(g,v,t)]]),T=[];else if(q==s.SEMICOLON&&S==f.RULE&&d&&T.length>0)v=T.join("").trim(),d.push([l.PROPERTY_VALUE,v,[i(g,v,t)]]),d=null,P=!1,T=[];else if(q==s.SEMICOLON&&S==f.RULE&&d&&0===T.length)d=null,P=!1;else if(q==s.SEMICOLON&&S==f.RULE&&T.length>0&&T[0]==s.AT)v=T.join(""),k.push([l.AT_RULE,v,[i(g,v,t)]]),P=!1,T=[];else if(q==s.SEMICOLON&&S==f.RULE&&U)U=!1,T=[];else if(q==s.SEMICOLON&&S==f.RULE&&0===T.length);else if(q==s.CLOSE_CURLY_BRACKET&&S==f.RULE&&d&&P&&T.length>0&&O.length>0)v=T.join(""),d.push([l.PROPERTY_VALUE,v,[i(g,v,t)]]),d=null,k=(h=O.pop())[2],S=D.pop(),P=!1,T=[];else if(q==s.CLOSE_CURLY_BRACKET&&S==f.RULE&&d&&T.length>0&&T[0]==s.AT&&O.length>0)v=T.join(""),h[1].push([l.AT_RULE,v,[i(g,v,t)]]),d=null,k=(h=O.pop())[2],S=D.pop(),P=!1,T=[];else if(q==s.CLOSE_CURLY_BRACKET&&S==f.RULE&&d&&O.length>0)d=null,k=(h=O.pop())[2],S=D.pop(),P=!1;else if(q==s.CLOSE_CURLY_BRACKET&&S==f.RULE&&d&&T.length>0)v=T.join(""),d.push([l.PROPERTY_VALUE,v,[i(g,v,t)]]),d=null,h=O.pop(),k=C,S=D.pop(),P=!1,T=[];else if(q==s.CLOSE_CURLY_BRACKET&&S==f.RULE&&T.length>0&&T[0]==s.AT)d=null,h=null,v=T.join("").trim(),k.push([l.AT_RULE,v,[i(g,v,t)]]),k=C,S=D.pop(),P=!1,T=[];else if(q==s.CLOSE_CURLY_BRACKET&&S==f.RULE&&D[D.length-1]==f.RULE)d=null,k=(h=O.pop())[2],S=D.pop(),P=!1,U=!0,T=[];else if(q==s.CLOSE_CURLY_BRACKET&&S==f.RULE)d=null,h=null,k=C,S=D.pop(),P=!1;else if(q==s.CLOSE_CURLY_BRACKET&&S==f.BLOCK&&!r&&N.index<=e.length-1)t.warnings.push("Unexpected '}' at "+c([N.line,N.column,N.source])+"."),T.push(q);else{if(q==s.CLOSE_CURLY_BRACKET&&S==f.BLOCK)break;q==s.OPEN_ROUND_BRACKET&&S==f.RULE&&P?(T.push(q),F++):q==s.CLOSE_ROUND_BRACKET&&S==f.RULE&&P&&1==F?(T.push(q),v=T.join("").trim(),d.push([l.PROPERTY_VALUE,v,[i(g,v,t)]]),F--,T=[]):q==s.CLOSE_ROUND_BRACKET&&S==f.RULE&&P?(T.push(q),F--):q==s.FORWARD_SLASH&&e[N.index+1]!=s.ASTERISK&&S==f.RULE&&P&&T.length>0?(v=T.join("").trim(),d.push([l.PROPERTY_VALUE,v,[i(g,v,t)]]),d.push([l.PROPERTY_VALUE,q,[[N.line,N.column,N.source]]]),T=[]):q==s.FORWARD_SLASH&&e[N.index+1]!=s.ASTERISK&&S==f.RULE&&P?(d.push([l.PROPERTY_VALUE,q,[[N.line,N.column,N.source]]]),T=[]):q==s.COMMA&&S==f.RULE&&P&&T.length>0?(v=T.join("").trim(),d.push([l.PROPERTY_VALUE,v,[i(g,v,t)]]),d.push([l.PROPERTY_VALUE,q,[[N.line,N.column,N.source]]]),T=[]):q==s.COMMA&&S==f.RULE&&P?(d.push([l.PROPERTY_VALUE,q,[[N.line,N.column,N.source]]]),T=[]):(y||_&&!w)&&S==f.RULE&&P&&d&&T.length>0?(v=T.join("").trim(),d.push([l.PROPERTY_VALUE,v,[i(g,v,t)]]),T=[]):w&&S==f.RULE&&P&&d&&T.length>1?(v=T.join("").trim(),d.push([l.PROPERTY_VALUE,v,[i(g,v,t)]]),T=[]):w&&S==f.RULE&&P?T=[]:1==T.length&&w?T.pop():(T.length>0||!y&&!_&&!w)&&T.push(q)}else v=T.join("").trim(),d=[l.PROPERTY,[l.PROPERTY_NAME,v,[i(g,v,t)]]],k.push(d),P=!0,T=[];else T.push(q),F--;else T.push(q),F++;else D.push(S),S=f.DOUBLE_QUOTE,T.push(q);else D.push(S),S=f.SINGLE_QUOTE,T.push(q);else T.push(q);x=!x&&q==s.BACK_SLASH,L=A,M=E,N.line=w||_?N.line+1:N.line,N.column=w||_?0:N.column+1}return P&&t.warnings.push("Missing '}' at "+c([N.line,N.column,N.source])+"."),P&&T.length>0&&(v=T.join("").replace(m,""),d.push([l.PROPERTY_VALUE,v,[i(g,v,t)]]),T=[]),T.length>0&&t.warnings.push("Invalid character(s) '"+T.join("")+"' at "+c(g)+". Ignoring."),C}function i(e,t,n,r){var o=e[2];return n.inputSourceMapTracker.isTracking(o)?n.inputSourceMapTracker.originalPositionFor(e,t.length,r):e}function a(e){var t=e[0]==s.AT||e[0]==s.UNDERSCORE,n=e.join("").split(d)[0];return t&&h.indexOf(n)>-1?l.NESTED_BLOCK:t&&p.indexOf(n)>-1?l.AT_RULE:t?l.AT_RULE_BLOCK:l.RULE}function u(e){return e==l.RULE?l.RULE_SCOPE:e==l.NESTED_BLOCK?l.NESTED_BLOCK_SCOPE:e==l.AT_RULE_BLOCK?l.AT_RULE_BLOCK_SCOPE:void 0}var s=e("./marker"),l=e("./token"),c=e("../utils/format-position"),f={BLOCK:"block",COMMENT:"comment",DOUBLE_QUOTE:"double-quote",RULE:"rule",SINGLE_QUOTE:"single-quote"},p=["@charset","@import"],h=["@-moz-document","@document","@-moz-keyframes","@-ms-keyframes","@-o-keyframes","@-webkit-keyframes","@keyframes","@media","@supports"],d=/[\s\(]/,m=/[\s|\}]*$/;t.exports=r},{"../utils/format-position":88,"./marker":84,"./token":85}],87:[function(e,t,n){function r(e){for(var t=e.slice(0),n=0,o=t.length;n<o;n++)Array.isArray(t[n])&&(t[n]=r(t[n]));return t}t.exports=r},{}],88:[function(e,t,n){function r(e){var t=e[0],n=e[1],r=e[2];return r?r+":"+t+":"+n:t+":"+n}t.exports=r},{}],89:[function(e,t,n){function r(e){return!o.test(e)}var o=/^\/\//;t.exports=r},{}],90:[function(e,t,n){function r(e){return o.test(e)}var o=/^data:(\S*?)?(;charset=[^;]+)?(;[^,]+?)?,(.+)/;t.exports=r},{}],91:[function(e,t,n){function r(e){return o.test(e)}var o=/^http:\/\//;t.exports=r},{}],92:[function(e,t,n){function r(e){return o.test(e)}var o=/^https:\/\//;t.exports=r},{}],93:[function(e,t,n){function r(e){return o.test(e)}var o=/^@import/i;t.exports=r},{}],94:[function(e,t,n){function r(e){return o.test(e)}var o=/^(\w+:\/\/|\/\/)/;t.exports=r},{}],95:[function(e,t,n){function r(e,t){var n,r,a,u,s=(""+e).split(i).map(o),l=(""+t).split(i).map(o);for(a=0,u=Math.min(s.length,l.length);a<u;a++)if(n=s[a],r=l[a],n!=r)return n>r?1:-1;return s.length>l.length?1:s.length==l.length?0:-1}function o(e){return""+parseInt(e)==e?parseInt(e):e}var i=/([0-9]+)/;t.exports=r},{}],96:[function(e,t,n){function r(e,t){var n,o,i,a={};for(n in e)i=e[n],Array.isArray(i)?a[n]=i.slice(0):a[n]="object"==typeof i&&null!==i?r(i,{}):i;for(o in t)i=t[o],o in a&&Array.isArray(i)?a[o]=i.slice(0):a[o]=o in a&&"object"==typeof i&&null!==i?r(a[o],i):i;return a}t.exports=r},{}],97:[function(e,t,n){function r(e,t){var n,r=o.OPEN_ROUND_BRACKET,i=o.CLOSE_ROUND_BRACKET,a=0,u=0,s=0,l=e.length,c=[];if(-1==e.indexOf(t))return[e];if(-1==e.indexOf(r))return e.split(t);for(;u<l;)e[u]==r?a++:e[u]==i&&a--,0===a&&u>0&&u+1<l&&e[u]==t&&(c.push(e.substring(s,u)),s=u+1),u++;return s<u+1&&((n=e.substring(s))[n.length-1]==t&&(n=n.substring(0,n.length-1)),c.push(n)),c}var o=e("../tokenizer/marker");t.exports=r},{"../tokenizer/marker":84}],98:[function(e,t,n){function r(e){return"background"==e[1][1]||"transform"==e[1][1]||"src"==e[1][1]}function o(e,t){return e[t][1][e[t][1].length-1]==B.CLOSE_ROUND_BRACKET}function i(e,t){return e[t][1]==B.COMMA}function a(e,t){return e[t][1]==B.FORWARD_SLASH}function u(e,t){return e[t+1]&&e[t+1][1]==B.COMMA}function s(e,t){return e[t+1]&&e[t+1][1]==B.FORWARD_SLASH}function l(e){return"filter"==e[1][1]||"-ms-filter"==e[1][1]}function c(e,t,n){return!e.spaceAfterClosingBrace&&r(t)&&o(t,n)||s(t,n)||a(t,n)||u(t,n)||i(t,n)}function f(e,t){for(var n=e.store,r=0,o=t.length;r<o;r++)n(e,t[r]),r<o-1&&n(e,A(e))}function p(e,t){for(var n=h(t),r=0,o=t.length;r<o;r++)d(e,t,r,n)}function h(e){for(var t=e.length-1;t>=0&&e[t][0]==S.COMMENT;t--);return t}function d(e,t,n,r){var o=e.store,i=t[n],a=i[2][0]==S.PROPERTY_BLOCK,u=n<r||a,s=n===r;switch(i[0]){case S.AT_RULE:o(e,i),o(e,w(e,k.AfterProperty,!1));break;case S.COMMENT:o(e,i);break;case S.PROPERTY:o(e,i[1]),o(e,_(e)),m(e,i),o(e,u?w(e,k.AfterProperty,s):C)}}function m(e,t){var n,r,o=e.store;if(t[2][0]==S.PROPERTY_BLOCK)o(e,b(e,k.AfterBlockBegins,!1)),p(e,t[2][1]),o(e,y(e,k.AfterBlockEnds,!1,!0));else for(n=2,r=t.length;n<r;n++)o(e,t[n]),n<r-1&&(l(t)||!c(e,t,n))&&o(e,B.SPACE)}function g(e,t){return e.format&&e.format.breaks[t]}function v(e,t){return e.format&&e.format.spaces[t]}function b(e,t,n){return e.format?(e.indentBy+=e.format.indentBy,e.indentWith=e.format.indentWith.repeat(e.indentBy),(n&&v(e,O.BeforeBlockBegins)?B.SPACE:C)+B.OPEN_CURLY_BRACKET+(g(e,t)?x:C)+e.indentWith):B.OPEN_CURLY_BRACKET}function y(e,t,n,r){return e.format?(e.indentBy-=e.format.indentBy,e.indentWith=e.format.indentWith.repeat(e.indentBy),(g(e,k.AfterProperty)||n&&g(e,k.BeforeBlockEnds)?x:C)+e.indentWith+B.CLOSE_CURLY_BRACKET+(r?C:(g(e,t)?x:C)+e.indentWith)):B.CLOSE_CURLY_BRACKET}function _(e){return e.format?B.COLON+(v(e,O.BeforeValue)?B.SPACE:C):B.COLON}function w(e,t,n){return e.format?B.SEMICOLON+(n||!g(e,t)?C:x+e.indentWith):B.SEMICOLON}function A(e){return e.format?B.COMMA+(g(e,k.BetweenSelectors)?x:C)+e.indentWith:B.COMMA}function E(e,t){var n,r,o,i,a=e.store;for(o=0,i=t.length;o<i;o++)switch(n=t[o],r=o==i-1,n[0]){case S.AT_RULE:a(e,n),a(e,w(e,k.AfterAtRule,r));break;case S.AT_RULE_BLOCK:f(e,n[1]),a(e,b(e,k.AfterRuleBegins,!0)),p(e,n[2]),a(e,y(e,k.AfterRuleEnds,!1,r));break;case S.NESTED_BLOCK:f(e,n[1]),a(e,b(e,k.AfterBlockBegins,!0)),E(e,n[2]),a(e,y(e,k.AfterBlockEnds,!0,r));break;case S.COMMENT:a(e,n),a(e,g(e,k.AfterComment)?x:C);break;case S.RULE:f(e,n[1]),a(e,b(e,k.AfterRuleBegins,!0)),p(e,n[2]),a(e,y(e,k.AfterRuleEnds,!1,r))}}var x=e("os").EOL,C="",k=e("../options/format").Breaks,O=e("../options/format").Spaces,B=e("../tokenizer/marker"),S=e("../tokenizer/token");t.exports={all:E,body:p,property:d,rules:f,value:m}},{"../options/format":62,"../tokenizer/marker":84,"../tokenizer/token":85,os:111}],99:[function(e,t,n){function r(e,t){e.output.push("string"==typeof t?t:t[1])}function o(){return{output:[],store:r}}function i(e){var t=o();return c.all(t,e),t.output.join("")}function a(e){var t=o();return c.body(t,e),t.output.join("")}function u(e,t){var n=o();return c.property(n,e,t,!0),n.output.join("")}function s(e){var t=o();return c.rules(t,e),t.output.join("")}function l(e){var t=o();return c.value(t,e),t.output.join("")}var c=e("./helpers");t.exports={all:i,body:a,property:u,rules:s,value:l}},{"./helpers":98}],100:[function(e,t,n){function r(e,t){var n="string"==typeof t?t:t[1];(0,e.wrap)(e,n),i(e,n),e.output.push(n)}function o(e,t){e.column+t.length>e.format.wrapAt&&(i(e,s),e.output.push(s))}function i(e,t){var n=t.split("\n");e.line+=n.length-1,e.column=n.length>1?0:e.column+n.pop().length}function a(e,t){var n={column:0,format:t.options.format,indentBy:0,indentWith:"",line:1,output:[],spaceAfterClosingBrace:t.options.compatibility.properties.spaceAfterClosingBrace,store:r,wrap:t.options.format.wrapAt?o:function(){}};return u(n,e),{styles:n.output.join("")}}var u=e("./helpers").all,s=e("os").EOL;t.exports=a},{"./helpers":98,os:111}],101:[function(e,t,n){(function(n){function r(e,t){var n="string"==typeof t,r=n?t:t[1],o=n?null:t[2];(0,e.wrap)(e,r),i(e,r,o),e.output.push(r)}function o(e,t){e.column+t.length>e.format.wrapAt&&(i(e,f,!1),e.output.push(f))}function i(e,t,n){var r=t.split("\n");n&&a(e,n),e.line+=r.length-1,e.column=r.length>1?0:e.column+r.pop().length}function a(e,t){for(var n=0,r=t.length;n<r;n++)u(e,t[n])}function u(e,t){var n=t[0],r=t[1],o=t[2],i=o,a=i||m;h&&i&&!p(i)&&(a=i.replace(d,g)),e.outputMap.addMapping({generated:{line:e.line,column:e.column},source:a,original:{line:n,column:r}}),e.inlineSources&&o in e.sourcesContent&&e.outputMap.setSourceContent(a,e.sourcesContent[o])}function s(e,t){var n={column:0,format:t.options.format,indentBy:0,indentWith:"",inlineSources:t.options.sourceMapInlineSources,line:1,output:[],outputMap:new l,sourcesContent:t.sourcesContent,spaceAfterClosingBrace:t.options.compatibility.properties.spaceAfterClosingBrace,store:r,wrap:t.options.format.wrapAt?o:function(){}};return c(n,e),{sourceMap:n.outputMap,styles:n.output.join("")}}var l=e("source-map").SourceMapGenerator,c=e("./helpers").all,f=e("os").EOL,p=e("../utils/is-remote-resource"),h="win32"==n.platform,d=/\//g,m="$stdin",g="\\";t.exports=s}).call(this,e("_process"))},{"../utils/is-remote-resource":94,"./helpers":98,_process:114,os:111,"source-map":155}],102:[function(e,t,n){(function(e){function t(e){return Array.isArray?Array.isArray(e):"[object Array]"===g(e)}function r(e){return"boolean"==typeof e}function o(e){return null===e}function i(e){return null==e}function a(e){return"number"==typeof e}function u(e){return"string"==typeof e}function s(e){return"symbol"==typeof e}function l(e){return void 0===e}function c(e){return"[object RegExp]"===g(e)}function f(e){return"object"==typeof e&&null!==e}function p(e){return"[object Date]"===g(e)}function h(e){return"[object Error]"===g(e)||e instanceof Error}function d(e){return"function"==typeof e}function m(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e}function g(e){return Object.prototype.toString.call(e)}n.isArray=t,n.isBoolean=r,n.isNull=o,n.isNullOrUndefined=i,n.isNumber=a,n.isString=u,n.isSymbol=s,n.isUndefined=l,n.isRegExp=c,n.isObject=f,n.isDate=p,n.isError=h,n.isFunction=d,n.isPrimitive=m,n.isBuffer=e.isBuffer}).call(this,{isBuffer:e("../../is-buffer/index.js")})},{"../../is-buffer/index.js":108}],103:[function(e,t,n){function r(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function o(e){return"function"==typeof e}function i(e){return"number"==typeof e}function a(e){return"object"==typeof e&&null!==e}function u(e){return void 0===e}t.exports=r,r.EventEmitter=r,r.prototype._events=void 0,r.prototype._maxListeners=void 0,r.defaultMaxListeners=10,r.prototype.setMaxListeners=function(e){if(!i(e)||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},r.prototype.emit=function(e){var t,n,r,i,s,l;if(this._events||(this._events={}),"error"===e&&(!this._events.error||a(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var c=new Error('Uncaught, unspecified "error" event. ('+t+")");throw c.context=t,c}if(n=this._events[e],u(n))return!1;if(o(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:i=Array.prototype.slice.call(arguments,1),n.apply(this,i)}else if(a(n))for(i=Array.prototype.slice.call(arguments,1),r=(l=n.slice()).length,s=0;s<r;s++)l[s].apply(this,i);return!0},r.prototype.addListener=function(e,t){var n;if(!o(t))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,o(t.listener)?t.listener:t),this._events[e]?a(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,a(this._events[e])&&!this._events[e].warned&&(n=u(this._maxListeners)?r.defaultMaxListeners:this._maxListeners)&&n>0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function n(){this.removeListener(e,n),r||(r=!0,t.apply(this,arguments))}if(!o(t))throw TypeError("listener must be a function");var r=!1;return n.listener=t,this.on(e,n),this},r.prototype.removeListener=function(e,t){var n,r,i,u;if(!o(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(n=this._events[e],i=n.length,r=-1,n===t||o(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(a(n)){for(u=i;u-- >0;)if(n[u]===t||n[u].listener&&n[u].listener===t){r=u;break}if(r<0)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[e],o(n))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){return this._events&&this._events[e]?o(this._events[e])?[this._events[e]]:this._events[e].slice():[]},r.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(o(t))return 1;if(t)return t.length}return 0},r.listenerCount=function(e,t){return e.listenerCount(t)}},{}],104:[function(e,t,n){(function(e){!function(r){var o="object"==typeof n&&n,i="object"==typeof t&&t&&t.exports==o&&t,a="object"==typeof e&&e;a.global!==a&&a.window!==a||(r=a);var u=/<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g,s={"­":"shy","‌":"zwnj","‍":"zwj","‎":"lrm","⁣":"ic","⁢":"it","⁡":"af","‏":"rlm","​":"ZeroWidthSpace","⁠":"NoBreak","̑":"DownBreve","⃛":"tdot","⃜":"DotDot","\t":"Tab","\n":"NewLine"," ":"puncsp"," ":"MediumSpace"," ":"thinsp"," ":"hairsp"," ":"emsp13"," ":"ensp"," ":"emsp14"," ":"emsp"," ":"numsp"," ":"nbsp","  ":"ThickSpace","‾":"oline",_:"lowbar","‐":"dash","–":"ndash","—":"mdash","―":"horbar",",":"comma",";":"semi","⁏":"bsemi",":":"colon","⩴":"Colone","!":"excl","¡":"iexcl","?":"quest","¿":"iquest",".":"period","‥":"nldr","…":"mldr","·":"middot","'":"apos","‘":"lsquo","’":"rsquo","‚":"sbquo","‹":"lsaquo","›":"rsaquo",'"':"quot","“":"ldquo","”":"rdquo","„":"bdquo","«":"laquo","»":"raquo","(":"lpar",")":"rpar","[":"lsqb","]":"rsqb","{":"lcub","}":"rcub","⌈":"lceil","⌉":"rceil","⌊":"lfloor","⌋":"rfloor","⦅":"lopar","⦆":"ropar","⦋":"lbrke","⦌":"rbrke","⦍":"lbrkslu","⦎":"rbrksld","⦏":"lbrksld","⦐":"rbrkslu","⦑":"langd","⦒":"rangd","⦓":"lparlt","⦔":"rpargt","⦕":"gtlPar","⦖":"ltrPar","⟦":"lobrk","⟧":"robrk","⟨":"lang","⟩":"rang","⟪":"Lang","⟫":"Rang","⟬":"loang","⟭":"roang","❲":"lbbrk","❳":"rbbrk","‖":"Vert","§":"sect","¶":"para","@":"commat","*":"ast","/":"sol",undefined:null,"&":"amp","#":"num","%":"percnt","‰":"permil","‱":"pertenk","†":"dagger","‡":"Dagger","•":"bull","⁃":"hybull","′":"prime","″":"Prime","‴":"tprime","⁗":"qprime","‵":"bprime","⁁":"caret","`":"grave","´":"acute","˜":"tilde","^":"Hat","¯":"macr","˘":"breve","˙":"dot","¨":"die","˚":"ring","˝":"dblac","¸":"cedil","˛":"ogon","ˆ":"circ","ˇ":"caron","°":"deg","©":"copy","®":"reg","℗":"copysr","℘":"wp","℞":"rx","℧":"mho","℩":"iiota","←":"larr","↚":"nlarr","→":"rarr","↛":"nrarr","↑":"uarr","↓":"darr","↔":"harr","↮":"nharr","↕":"varr","↖":"nwarr","↗":"nearr","↘":"searr","↙":"swarr","↝":"rarrw","↝̸":"nrarrw","↞":"Larr","↟":"Uarr","↠":"Rarr","↡":"Darr","↢":"larrtl","↣":"rarrtl","↤":"mapstoleft","↥":"mapstoup","↦":"map","↧":"mapstodown","↩":"larrhk","↪":"rarrhk","↫":"larrlp","↬":"rarrlp","↭":"harrw","↰":"lsh","↱":"rsh","↲":"ldsh","↳":"rdsh","↵":"crarr","↶":"cularr","↷":"curarr","↺":"olarr","↻":"orarr","↼":"lharu","↽":"lhard","↾":"uharr","↿":"uharl","⇀":"rharu","⇁":"rhard","⇂":"dharr","⇃":"dharl","⇄":"rlarr","⇅":"udarr","⇆":"lrarr","⇇":"llarr","⇈":"uuarr","⇉":"rrarr","⇊":"ddarr","⇋":"lrhar","⇌":"rlhar","⇐":"lArr","⇍":"nlArr","⇑":"uArr","⇒":"rArr","⇏":"nrArr","⇓":"dArr","⇔":"iff","⇎":"nhArr","⇕":"vArr","⇖":"nwArr","⇗":"neArr","⇘":"seArr","⇙":"swArr","⇚":"lAarr","⇛":"rAarr","⇝":"zigrarr","⇤":"larrb","⇥":"rarrb","⇵":"duarr","⇽":"loarr","⇾":"roarr","⇿":"hoarr","∀":"forall","∁":"comp","∂":"part","∂̸":"npart","∃":"exist","∄":"nexist","∅":"empty","∇":"Del","∈":"in","∉":"notin","∋":"ni","∌":"notni","϶":"bepsi","∏":"prod","∐":"coprod","∑":"sum","+":"plus","±":"pm","÷":"div","×":"times","<":"lt","≮":"nlt","<⃒":"nvlt","=":"equals","≠":"ne","=⃥":"bne","⩵":"Equal",">":"gt","≯":"ngt",">⃒":"nvgt","¬":"not","|":"vert","¦":"brvbar","−":"minus","∓":"mp","∔":"plusdo","⁄":"frasl","∖":"setmn","∗":"lowast","∘":"compfn","√":"Sqrt","∝":"prop","∞":"infin","∟":"angrt","∠":"ang","∠⃒":"nang","∡":"angmsd","∢":"angsph","∣":"mid","∤":"nmid","∥":"par","∦":"npar","∧":"and","∨":"or","∩":"cap","∩︀":"caps","∪":"cup","∪︀":"cups","∫":"int","∬":"Int","∭":"tint","⨌":"qint","∮":"oint","∯":"Conint","∰":"Cconint","∱":"cwint","∲":"cwconint","∳":"awconint","∴":"there4","∵":"becaus","∶":"ratio","∷":"Colon","∸":"minusd","∺":"mDDot","∻":"homtht","∼":"sim","≁":"nsim","∼⃒":"nvsim","∽":"bsim","∽̱":"race","∾":"ac","∾̳":"acE","∿":"acd","≀":"wr","≂":"esim","≂̸":"nesim","≃":"sime","≄":"nsime","≅":"cong","≇":"ncong","≆":"simne","≈":"ap","≉":"nap","≊":"ape","≋":"apid","≋̸":"napid","≌":"bcong","≍":"CupCap","≭":"NotCupCap","≍⃒":"nvap","≎":"bump","≎̸":"nbump","≏":"bumpe","≏̸":"nbumpe","≐":"doteq","≐̸":"nedot","≑":"eDot","≒":"efDot","≓":"erDot","≔":"colone","≕":"ecolon","≖":"ecir","≗":"cire","≙":"wedgeq","≚":"veeeq","≜":"trie","≟":"equest","≡":"equiv","≢":"nequiv","≡⃥":"bnequiv","≤":"le","≰":"nle","≤⃒":"nvle","≥":"ge","≱":"nge","≥⃒":"nvge","≦":"lE","≦̸":"nlE","≧":"gE","≧̸":"ngE","≨︀":"lvnE","≨":"lnE","≩":"gnE","≩︀":"gvnE","≪":"ll","≪̸":"nLtv","≪⃒":"nLt","≫":"gg","≫̸":"nGtv","≫⃒":"nGt","≬":"twixt","≲":"lsim","≴":"nlsim","≳":"gsim","≵":"ngsim","≶":"lg","≸":"ntlg","≷":"gl","≹":"ntgl","≺":"pr","⊀":"npr","≻":"sc","⊁":"nsc","≼":"prcue","⋠":"nprcue","≽":"sccue","⋡":"nsccue","≾":"prsim","≿":"scsim","≿̸":"NotSucceedsTilde","⊂":"sub","⊄":"nsub","⊂⃒":"vnsub","⊃":"sup","⊅":"nsup","⊃⃒":"vnsup","⊆":"sube","⊈":"nsube","⊇":"supe","⊉":"nsupe","⊊︀":"vsubne","⊊":"subne","⊋︀":"vsupne","⊋":"supne","⊍":"cupdot","⊎":"uplus","⊏":"sqsub","⊏̸":"NotSquareSubset","⊐":"sqsup","⊐̸":"NotSquareSuperset","⊑":"sqsube","⋢":"nsqsube","⊒":"sqsupe","⋣":"nsqsupe","⊓":"sqcap","⊓︀":"sqcaps","⊔":"sqcup","⊔︀":"sqcups","⊕":"oplus","⊖":"ominus","⊗":"otimes","⊘":"osol","⊙":"odot","⊚":"ocir","⊛":"oast","⊝":"odash","⊞":"plusb","⊟":"minusb","⊠":"timesb","⊡":"sdotb","⊢":"vdash","⊬":"nvdash","⊣":"dashv","⊤":"top","⊥":"bot","⊧":"models","⊨":"vDash","⊭":"nvDash","⊩":"Vdash","⊮":"nVdash","⊪":"Vvdash","⊫":"VDash","⊯":"nVDash","⊰":"prurel","⊲":"vltri","⋪":"nltri","⊳":"vrtri","⋫":"nrtri","⊴":"ltrie","⋬":"nltrie","⊴⃒":"nvltrie","⊵":"rtrie","⋭":"nrtrie","⊵⃒":"nvrtrie","⊶":"origof","⊷":"imof","⊸":"mumap","⊹":"hercon","⊺":"intcal","⊻":"veebar","⊽":"barvee","⊾":"angrtvb","⊿":"lrtri","⋀":"Wedge","⋁":"Vee","⋂":"xcap","⋃":"xcup","⋄":"diam","⋅":"sdot","⋆":"Star","⋇":"divonx","⋈":"bowtie","⋉":"ltimes","⋊":"rtimes","⋋":"lthree","⋌":"rthree","⋍":"bsime","⋎":"cuvee","⋏":"cuwed","⋐":"Sub","⋑":"Sup","⋒":"Cap","⋓":"Cup","⋔":"fork","⋕":"epar","⋖":"ltdot","⋗":"gtdot","⋘":"Ll","⋘̸":"nLl","⋙":"Gg","⋙̸":"nGg","⋚︀":"lesg","⋚":"leg","⋛":"gel","⋛︀":"gesl","⋞":"cuepr","⋟":"cuesc","⋦":"lnsim","⋧":"gnsim","⋨":"prnsim","⋩":"scnsim","⋮":"vellip","⋯":"ctdot","⋰":"utdot","⋱":"dtdot","⋲":"disin","⋳":"isinsv","⋴":"isins","⋵":"isindot","⋵̸":"notindot","⋶":"notinvc","⋷":"notinvb","⋹":"isinE","⋹̸":"notinE","⋺":"nisd","⋻":"xnis","⋼":"nis","⋽":"notnivc","⋾":"notnivb","⌅":"barwed","⌆":"Barwed","⌌":"drcrop","⌍":"dlcrop","⌎":"urcrop","⌏":"ulcrop","⌐":"bnot","⌒":"profline","⌓":"profsurf","⌕":"telrec","⌖":"target","⌜":"ulcorn","⌝":"urcorn","⌞":"dlcorn","⌟":"drcorn","⌢":"frown","⌣":"smile","⌭":"cylcty","⌮":"profalar","⌶":"topbot","⌽":"ovbar","⌿":"solbar","⍼":"angzarr","⎰":"lmoust","⎱":"rmoust","⎴":"tbrk","⎵":"bbrk","⎶":"bbrktbrk","⏜":"OverParenthesis","⏝":"UnderParenthesis","⏞":"OverBrace","⏟":"UnderBrace","⏢":"trpezium","⏧":"elinters","␣":"blank","─":"boxh","│":"boxv","┌":"boxdr","┐":"boxdl","└":"boxur","┘":"boxul","├":"boxvr","┤":"boxvl","┬":"boxhd","┴":"boxhu","┼":"boxvh","═":"boxH","║":"boxV","╒":"boxdR","╓":"boxDr","╔":"boxDR","╕":"boxdL","╖":"boxDl","╗":"boxDL","╘":"boxuR","╙":"boxUr","╚":"boxUR","╛":"boxuL","╜":"boxUl","╝":"boxUL","╞":"boxvR","╟":"boxVr","╠":"boxVR","╡":"boxvL","╢":"boxVl","╣":"boxVL","╤":"boxHd","╥":"boxhD","╦":"boxHD","╧":"boxHu","╨":"boxhU","╩":"boxHU","╪":"boxvH","╫":"boxVh","╬":"boxVH","▀":"uhblk","▄":"lhblk","█":"block","░":"blk14","▒":"blk12","▓":"blk34","□":"squ","▪":"squf","▫":"EmptyVerySmallSquare","▭":"rect","▮":"marker","▱":"fltns","△":"xutri","▴":"utrif","▵":"utri","▸":"rtrif","▹":"rtri","▽":"xdtri","▾":"dtrif","▿":"dtri","◂":"ltrif","◃":"ltri","◊":"loz","○":"cir","◬":"tridot","◯":"xcirc","◸":"ultri","◹":"urtri","◺":"lltri","◻":"EmptySmallSquare","◼":"FilledSmallSquare","★":"starf","☆":"star","☎":"phone","♀":"female","♂":"male","♠":"spades","♣":"clubs","♥":"hearts","♦":"diams","♪":"sung","✓":"check","✗":"cross","✠":"malt","✶":"sext","❘":"VerticalSeparator","⟈":"bsolhsub","⟉":"suphsol","⟵":"xlarr","⟶":"xrarr","⟷":"xharr","⟸":"xlArr","⟹":"xrArr","⟺":"xhArr","⟼":"xmap","⟿":"dzigrarr","⤂":"nvlArr","⤃":"nvrArr","⤄":"nvHarr","⤅":"Map","⤌":"lbarr","⤍":"rbarr","⤎":"lBarr","⤏":"rBarr","⤐":"RBarr","⤑":"DDotrahd","⤒":"UpArrowBar","⤓":"DownArrowBar","⤖":"Rarrtl","⤙":"latail","⤚":"ratail","⤛":"lAtail","⤜":"rAtail","⤝":"larrfs","⤞":"rarrfs","⤟":"larrbfs","⤠":"rarrbfs","⤣":"nwarhk","⤤":"nearhk","⤥":"searhk","⤦":"swarhk","⤧":"nwnear","⤨":"toea","⤩":"tosa","⤪":"swnwar","⤳":"rarrc","⤳̸":"nrarrc","⤵":"cudarrr","⤶":"ldca","⤷":"rdca","⤸":"cudarrl","⤹":"larrpl","⤼":"curarrm","⤽":"cularrp","⥅":"rarrpl","⥈":"harrcir","⥉":"Uarrocir","⥊":"lurdshar","⥋":"ldrushar","⥎":"LeftRightVector","⥏":"RightUpDownVector","⥐":"DownLeftRightVector","⥑":"LeftUpDownVector","⥒":"LeftVectorBar","⥓":"RightVectorBar","⥔":"RightUpVectorBar","⥕":"RightDownVectorBar","⥖":"DownLeftVectorBar","⥗":"DownRightVectorBar","⥘":"LeftUpVectorBar","⥙":"LeftDownVectorBar","⥚":"LeftTeeVector","⥛":"RightTeeVector","⥜":"RightUpTeeVector","⥝":"RightDownTeeVector","⥞":"DownLeftTeeVector","⥟":"DownRightTeeVector","⥠":"LeftUpTeeVector","⥡":"LeftDownTeeVector","⥢":"lHar","⥣":"uHar","⥤":"rHar","⥥":"dHar","⥦":"luruhar","⥧":"ldrdhar","⥨":"ruluhar","⥩":"rdldhar","⥪":"lharul","⥫":"llhard","⥬":"rharul","⥭":"lrhard","⥮":"udhar","⥯":"duhar","⥰":"RoundImplies","⥱":"erarr","⥲":"simrarr","⥳":"larrsim","⥴":"rarrsim","⥵":"rarrap","⥶":"ltlarr","⥸":"gtrarr","⥹":"subrarr","⥻":"suplarr","⥼":"lfisht","⥽":"rfisht","⥾":"ufisht","⥿":"dfisht","⦚":"vzigzag","⦜":"vangrt","⦝":"angrtvbd","⦤":"ange","⦥":"range","⦦":"dwangle","⦧":"uwangle","⦨":"angmsdaa","⦩":"angmsdab","⦪":"angmsdac","⦫":"angmsdad","⦬":"angmsdae","⦭":"angmsdaf","⦮":"angmsdag","⦯":"angmsdah","⦰":"bemptyv","⦱":"demptyv","⦲":"cemptyv","⦳":"raemptyv","⦴":"laemptyv","⦵":"ohbar","⦶":"omid","⦷":"opar","⦹":"operp","⦻":"olcross","⦼":"odsold","⦾":"olcir","⦿":"ofcir","⧀":"olt","⧁":"ogt","⧂":"cirscir","⧃":"cirE","⧄":"solb","⧅":"bsolb","⧉":"boxbox","⧍":"trisb","⧎":"rtriltri","⧏":"LeftTriangleBar","⧏̸":"NotLeftTriangleBar","⧐":"RightTriangleBar","⧐̸":"NotRightTriangleBar","⧜":"iinfin","⧝":"infintie","⧞":"nvinfin","⧣":"eparsl","⧤":"smeparsl","⧥":"eqvparsl","⧫":"lozf","⧴":"RuleDelayed","⧶":"dsol","⨀":"xodot","⨁":"xoplus","⨂":"xotime","⨄":"xuplus","⨆":"xsqcup","⨍":"fpartint","⨐":"cirfnint","⨑":"awint","⨒":"rppolint","⨓":"scpolint","⨔":"npolint","⨕":"pointint","⨖":"quatint","⨗":"intlarhk","⨢":"pluscir","⨣":"plusacir","⨤":"simplus","⨥":"plusdu","⨦":"plussim","⨧":"plustwo","⨩":"mcomma","⨪":"minusdu","⨭":"loplus","⨮":"roplus","⨯":"Cross","⨰":"timesd","⨱":"timesbar","⨳":"smashp","⨴":"lotimes","⨵":"rotimes","⨶":"otimesas","⨷":"Otimes","⨸":"odiv","⨹":"triplus","⨺":"triminus","⨻":"tritime","⨼":"iprod","⨿":"amalg","⩀":"capdot","⩂":"ncup","⩃":"ncap","⩄":"capand","⩅":"cupor","⩆":"cupcap","⩇":"capcup","⩈":"cupbrcap","⩉":"capbrcup","⩊":"cupcup","⩋":"capcap","⩌":"ccups","⩍":"ccaps","⩐":"ccupssm","⩓":"And","⩔":"Or","⩕":"andand","⩖":"oror","⩗":"orslope","⩘":"andslope","⩚":"andv","⩛":"orv","⩜":"andd","⩝":"ord","⩟":"wedbar","⩦":"sdote","⩪":"simdot","⩭":"congdot","⩭̸":"ncongdot","⩮":"easter","⩯":"apacir","⩰":"apE","⩰̸":"napE","⩱":"eplus","⩲":"pluse","⩳":"Esim","⩷":"eDDot","⩸":"equivDD","⩹":"ltcir","⩺":"gtcir","⩻":"ltquest","⩼":"gtquest","⩽":"les","⩽̸":"nles","⩾":"ges","⩾̸":"nges","⩿":"lesdot","⪀":"gesdot","⪁":"lesdoto","⪂":"gesdoto","⪃":"lesdotor","⪄":"gesdotol","⪅":"lap","⪆":"gap","⪇":"lne","⪈":"gne","⪉":"lnap","⪊":"gnap","⪋":"lEg","⪌":"gEl","⪍":"lsime","⪎":"gsime","⪏":"lsimg","⪐":"gsiml","⪑":"lgE","⪒":"glE","⪓":"lesges","⪔":"gesles","⪕":"els","⪖":"egs","⪗":"elsdot","⪘":"egsdot","⪙":"el","⪚":"eg","⪝":"siml","⪞":"simg","⪟":"simlE","⪠":"simgE","⪡":"LessLess","⪡̸":"NotNestedLessLess","⪢":"GreaterGreater","⪢̸":"NotNestedGreaterGreater","⪤":"glj","⪥":"gla","⪦":"ltcc","⪧":"gtcc","⪨":"lescc","⪩":"gescc","⪪":"smt","⪫":"lat","⪬":"smte","⪬︀":"smtes","⪭":"late","⪭︀":"lates","⪮":"bumpE","⪯":"pre","⪯̸":"npre","⪰":"sce","⪰̸":"nsce","⪳":"prE","⪴":"scE","⪵":"prnE","⪶":"scnE","⪷":"prap","⪸":"scap","⪹":"prnap","⪺":"scnap","⪻":"Pr","⪼":"Sc","⪽":"subdot","⪾":"supdot","⪿":"subplus","⫀":"supplus","⫁":"submult","⫂":"supmult","⫃":"subedot","⫄":"supedot","⫅":"subE","⫅̸":"nsubE","⫆":"supE","⫆̸":"nsupE","⫇":"subsim","⫈":"supsim","⫋︀":"vsubnE","⫋":"subnE","⫌︀":"vsupnE","⫌":"supnE","⫏":"csub","⫐":"csup","⫑":"csube","⫒":"csupe","⫓":"subsup","⫔":"supsub","⫕":"subsub","⫖":"supsup","⫗":"suphsub","⫘":"supdsub","⫙":"forkv","⫚":"topfork","⫛":"mlcp","⫤":"Dashv","⫦":"Vdashl","⫧":"Barv","⫨":"vBar","⫩":"vBarv","⫫":"Vbar","⫬":"Not","⫭":"bNot","⫮":"rnmid","⫯":"cirmid","⫰":"midcir","⫱":"topcir","⫲":"nhpar","⫳":"parsim","⫽":"parsl","⫽⃥":"nparsl","♭":"flat","♮":"natur","♯":"sharp","¤":"curren","¢":"cent",$:"dollar","£":"pound","¥":"yen","€":"euro","¹":"sup1","½":"half","⅓":"frac13","¼":"frac14","⅕":"frac15","⅙":"frac16","⅛":"frac18","²":"sup2","⅔":"frac23","⅖":"frac25","³":"sup3","¾":"frac34","⅗":"frac35","⅜":"frac38","⅘":"frac45","⅚":"frac56","⅝":"frac58","⅞":"frac78","𝒶":"ascr","𝕒":"aopf","𝔞":"afr","𝔸":"Aopf","𝔄":"Afr","𝒜":"Ascr","ª":"ordf","á":"aacute","Á":"Aacute","à":"agrave","À":"Agrave","ă":"abreve","Ă":"Abreve","â":"acirc","Â":"Acirc","å":"aring","Å":"angst","ä":"auml","Ä":"Auml","ã":"atilde","Ã":"Atilde","ą":"aogon","Ą":"Aogon","ā":"amacr","Ā":"Amacr","æ":"aelig","Æ":"AElig","𝒷":"bscr","𝕓":"bopf","𝔟":"bfr","𝔹":"Bopf","ℬ":"Bscr","𝔅":"Bfr","𝔠":"cfr","𝒸":"cscr","𝕔":"copf","ℭ":"Cfr","𝒞":"Cscr","ℂ":"Copf","ć":"cacute","Ć":"Cacute","ĉ":"ccirc","Ĉ":"Ccirc","č":"ccaron","Č":"Ccaron","ċ":"cdot","Ċ":"Cdot","ç":"ccedil","Ç":"Ccedil","℅":"incare","𝔡":"dfr","ⅆ":"dd","𝕕":"dopf","𝒹":"dscr","𝒟":"Dscr","𝔇":"Dfr","ⅅ":"DD","𝔻":"Dopf","ď":"dcaron","Ď":"Dcaron","đ":"dstrok","Đ":"Dstrok","ð":"eth","Ð":"ETH","ⅇ":"ee","ℯ":"escr","𝔢":"efr","𝕖":"eopf","ℰ":"Escr","𝔈":"Efr","𝔼":"Eopf","é":"eacute","É":"Eacute","è":"egrave","È":"Egrave","ê":"ecirc","Ê":"Ecirc","ě":"ecaron","Ě":"Ecaron","ë":"euml","Ë":"Euml","ė":"edot","Ė":"Edot","ę":"eogon","Ę":"Eogon","ē":"emacr","Ē":"Emacr","𝔣":"ffr","𝕗":"fopf","𝒻":"fscr","𝔉":"Ffr","𝔽":"Fopf","ℱ":"Fscr","ff":"fflig","ffi":"ffilig","ffl":"ffllig","fi":"filig",fj:"fjlig","fl":"fllig","ƒ":"fnof","ℊ":"gscr","𝕘":"gopf","𝔤":"gfr","𝒢":"Gscr","𝔾":"Gopf","𝔊":"Gfr","ǵ":"gacute","ğ":"gbreve","Ğ":"Gbreve","ĝ":"gcirc","Ĝ":"Gcirc","ġ":"gdot","Ġ":"Gdot","Ģ":"Gcedil","𝔥":"hfr","ℎ":"planckh","𝒽":"hscr","𝕙":"hopf","ℋ":"Hscr","ℌ":"Hfr","ℍ":"Hopf","ĥ":"hcirc","Ĥ":"Hcirc","ℏ":"hbar","ħ":"hstrok","Ħ":"Hstrok","𝕚":"iopf","𝔦":"ifr","𝒾":"iscr","ⅈ":"ii","𝕀":"Iopf","ℐ":"Iscr","ℑ":"Im","í":"iacute","Í":"Iacute","ì":"igrave","Ì":"Igrave","î":"icirc","Î":"Icirc","ï":"iuml","Ï":"Iuml","ĩ":"itilde","Ĩ":"Itilde","İ":"Idot","į":"iogon","Į":"Iogon","ī":"imacr","Ī":"Imacr","ij":"ijlig","IJ":"IJlig","ı":"imath","𝒿":"jscr","𝕛":"jopf","𝔧":"jfr","𝒥":"Jscr","𝔍":"Jfr","𝕁":"Jopf","ĵ":"jcirc","Ĵ":"Jcirc","ȷ":"jmath","𝕜":"kopf","𝓀":"kscr","𝔨":"kfr","𝒦":"Kscr","𝕂":"Kopf","𝔎":"Kfr","ķ":"kcedil","Ķ":"Kcedil","𝔩":"lfr","𝓁":"lscr","ℓ":"ell","𝕝":"lopf","ℒ":"Lscr","𝔏":"Lfr","𝕃":"Lopf","ĺ":"lacute","Ĺ":"Lacute","ľ":"lcaron","Ľ":"Lcaron","ļ":"lcedil","Ļ":"Lcedil","ł":"lstrok","Ł":"Lstrok","ŀ":"lmidot","Ŀ":"Lmidot","𝔪":"mfr","𝕞":"mopf","𝓂":"mscr","𝔐":"Mfr","𝕄":"Mopf","ℳ":"Mscr","𝔫":"nfr","𝕟":"nopf","𝓃":"nscr","ℕ":"Nopf","𝒩":"Nscr","𝔑":"Nfr","ń":"nacute","Ń":"Nacute","ň":"ncaron","Ň":"Ncaron","ñ":"ntilde","Ñ":"Ntilde","ņ":"ncedil","Ņ":"Ncedil","№":"numero","ŋ":"eng","Ŋ":"ENG","𝕠":"oopf","𝔬":"ofr","ℴ":"oscr","𝒪":"Oscr","𝔒":"Ofr","𝕆":"Oopf","º":"ordm","ó":"oacute","Ó":"Oacute","ò":"ograve","Ò":"Ograve","ô":"ocirc","Ô":"Ocirc","ö":"ouml","Ö":"Ouml","ő":"odblac","Ő":"Odblac","õ":"otilde","Õ":"Otilde","ø":"oslash","Ø":"Oslash","ō":"omacr","Ō":"Omacr","œ":"oelig","Œ":"OElig","𝔭":"pfr","𝓅":"pscr","𝕡":"popf","ℙ":"Popf","𝔓":"Pfr","𝒫":"Pscr","𝕢":"qopf","𝔮":"qfr","𝓆":"qscr","𝒬":"Qscr","𝔔":"Qfr","ℚ":"Qopf","ĸ":"kgreen","𝔯":"rfr","𝕣":"ropf","𝓇":"rscr","ℛ":"Rscr","ℜ":"Re","ℝ":"Ropf","ŕ":"racute","Ŕ":"Racute","ř":"rcaron","Ř":"Rcaron","ŗ":"rcedil","Ŗ":"Rcedil","𝕤":"sopf","𝓈":"sscr","𝔰":"sfr","𝕊":"Sopf","𝔖":"Sfr","𝒮":"Sscr","Ⓢ":"oS","ś":"sacute","Ś":"Sacute","ŝ":"scirc","Ŝ":"Scirc","š":"scaron","Š":"Scaron","ş":"scedil","Ş":"Scedil","ß":"szlig","𝔱":"tfr","𝓉":"tscr","𝕥":"topf","𝒯":"Tscr","𝔗":"Tfr","𝕋":"Topf","ť":"tcaron","Ť":"Tcaron","ţ":"tcedil","Ţ":"Tcedil","™":"trade","ŧ":"tstrok","Ŧ":"Tstrok","𝓊":"uscr","𝕦":"uopf","𝔲":"ufr","𝕌":"Uopf","𝔘":"Ufr","𝒰":"Uscr","ú":"uacute","Ú":"Uacute","ù":"ugrave","Ù":"Ugrave","ŭ":"ubreve","Ŭ":"Ubreve","û":"ucirc","Û":"Ucirc","ů":"uring","Ů":"Uring","ü":"uuml","Ü":"Uuml","ű":"udblac","Ű":"Udblac","ũ":"utilde","Ũ":"Utilde","ų":"uogon","Ų":"Uogon","ū":"umacr","Ū":"Umacr","𝔳":"vfr","𝕧":"vopf","𝓋":"vscr","𝔙":"Vfr","𝕍":"Vopf","𝒱":"Vscr","𝕨":"wopf","𝓌":"wscr","𝔴":"wfr","𝒲":"Wscr","𝕎":"Wopf","𝔚":"Wfr","ŵ":"wcirc","Ŵ":"Wcirc","𝔵":"xfr","𝓍":"xscr","𝕩":"xopf","𝕏":"Xopf","𝔛":"Xfr","𝒳":"Xscr","𝔶":"yfr","𝓎":"yscr","𝕪":"yopf","𝒴":"Yscr","𝔜":"Yfr","𝕐":"Yopf","ý":"yacute","Ý":"Yacute","ŷ":"ycirc","Ŷ":"Ycirc","ÿ":"yuml","Ÿ":"Yuml","𝓏":"zscr","𝔷":"zfr","𝕫":"zopf","ℨ":"Zfr","ℤ":"Zopf","𝒵":"Zscr","ź":"zacute","Ź":"Zacute","ž":"zcaron","Ž":"Zcaron","ż":"zdot","Ż":"Zdot","Ƶ":"imped","þ":"thorn","Þ":"THORN","ʼn":"napos","α":"alpha","Α":"Alpha","β":"beta","Β":"Beta","γ":"gamma","Γ":"Gamma","δ":"delta","Δ":"Delta","ε":"epsi","ϵ":"epsiv","Ε":"Epsilon","ϝ":"gammad","Ϝ":"Gammad","ζ":"zeta","Ζ":"Zeta","η":"eta","Η":"Eta","θ":"theta","ϑ":"thetav","Θ":"Theta","ι":"iota","Ι":"Iota","κ":"kappa","ϰ":"kappav","Κ":"Kappa","λ":"lambda","Λ":"Lambda","μ":"mu","µ":"micro","Μ":"Mu","ν":"nu","Ν":"Nu","ξ":"xi","Ξ":"Xi","ο":"omicron","Ο":"Omicron","π":"pi","ϖ":"piv","Π":"Pi","ρ":"rho","ϱ":"rhov","Ρ":"Rho","σ":"sigma","Σ":"Sigma","ς":"sigmaf","τ":"tau","Τ":"Tau","υ":"upsi","Υ":"Upsilon","ϒ":"Upsi","φ":"phi","ϕ":"phiv","Φ":"Phi","χ":"chi","Χ":"Chi","ψ":"psi","Ψ":"Psi","ω":"omega","Ω":"ohm","а":"acy","А":"Acy","б":"bcy","Б":"Bcy","в":"vcy","В":"Vcy","г":"gcy","Г":"Gcy","ѓ":"gjcy","Ѓ":"GJcy","д":"dcy","Д":"Dcy","ђ":"djcy","Ђ":"DJcy","е":"iecy","Е":"IEcy","ё":"iocy","Ё":"IOcy","є":"jukcy","Є":"Jukcy","ж":"zhcy","Ж":"ZHcy","з":"zcy","З":"Zcy","ѕ":"dscy","Ѕ":"DScy","и":"icy","И":"Icy","і":"iukcy","І":"Iukcy","ї":"yicy","Ї":"YIcy","й":"jcy","Й":"Jcy","ј":"jsercy","Ј":"Jsercy","к":"kcy","К":"Kcy","ќ":"kjcy","Ќ":"KJcy","л":"lcy","Л":"Lcy","љ":"ljcy","Љ":"LJcy","м":"mcy","М":"Mcy","н":"ncy","Н":"Ncy","њ":"njcy","Њ":"NJcy","о":"ocy","О":"Ocy","п":"pcy","П":"Pcy","р":"rcy","Р":"Rcy","с":"scy","С":"Scy","т":"tcy","Т":"Tcy","ћ":"tshcy","Ћ":"TSHcy","у":"ucy","У":"Ucy","ў":"ubrcy","Ў":"Ubrcy","ф":"fcy","Ф":"Fcy","х":"khcy","Х":"KHcy","ц":"tscy","Ц":"TScy","ч":"chcy","Ч":"CHcy","џ":"dzcy","Џ":"DZcy","ш":"shcy","Ш":"SHcy","щ":"shchcy","Щ":"SHCHcy","ъ":"hardcy","Ъ":"HARDcy","ы":"ycy","Ы":"Ycy","ь":"softcy","Ь":"SOFTcy","э":"ecy","Э":"Ecy","ю":"yucy","Ю":"YUcy","я":"yacy","Я":"YAcy","ℵ":"aleph","ℶ":"beth","ℷ":"gimel","ℸ":"daleth"},l={'"':"&quot;","&":"&amp;","'":"&#x27;","<":"&lt;",">":"&gt;","`":"&#x60;"},c=/&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/,f=/[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,p={aacute:"á",Aacute:"Á",abreve:"ă",Abreve:"Ă",ac:"∾",acd:"∿",acE:"∾̳",acirc:"â",Acirc:"Â",acute:"´",acy:"а",Acy:"А",aelig:"æ",AElig:"Æ",af:"⁡",afr:"𝔞",Afr:"𝔄",agrave:"à",Agrave:"À",alefsym:"ℵ",aleph:"ℵ",alpha:"α",Alpha:"Α",amacr:"ā",Amacr:"Ā",amalg:"⨿",amp:"&",AMP:"&",and:"∧",And:"⩓",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",aogon:"ą",Aogon:"Ą",aopf:"𝕒",Aopf:"𝔸",ap:"≈",apacir:"⩯",ape:"≊",apE:"⩰",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",aring:"å",Aring:"Å",ascr:"𝒶",Ascr:"𝒜",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",atilde:"ã",Atilde:"Ã",auml:"ä",Auml:"Ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",bcy:"б",Bcy:"Б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",beta:"β",Beta:"Β",beth:"ℶ",between:"≬",bfr:"𝔟",Bfr:"𝔅",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bnot:"⌐",bNot:"⫭",bopf:"𝕓",Bopf:"𝔹",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxhD:"╥",boxHd:"╤",boxHD:"╦",boxhu:"┴",boxhU:"╨",boxHu:"╧",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpe:"≏",bumpE:"⪮",bumpeq:"≏",Bumpeq:"≎",cacute:"ć",Cacute:"Ć",cap:"∩",Cap:"⋒",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",ccaron:"č",Ccaron:"Č",ccedil:"ç",Ccedil:"Ç",ccirc:"ĉ",Ccirc:"Ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",cdot:"ċ",Cdot:"Ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",chcy:"ч",CHcy:"Ч",check:"✓",checkmark:"✓",chi:"χ",Chi:"Χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cire:"≗",cirE:"⧃",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",colone:"≔",Colone:"⩴",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",cscr:"𝒸",Cscr:"𝒞",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cup:"∪",Cup:"⋓",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",dArr:"⇓",Darr:"↡",dash:"‐",dashv:"⊣",Dashv:"⫤",dbkarow:"⤏",dblac:"˝",dcaron:"ď",Dcaron:"Ď",dcy:"д",Dcy:"Д",dd:"ⅆ",DD:"ⅅ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",delta:"δ",Delta:"Δ",demptyv:"⦱",dfisht:"⥿",dfr:"𝔡",Dfr:"𝔇",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",djcy:"ђ",DJcy:"Ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",dopf:"𝕕",Dopf:"𝔻",dot:"˙",Dot:"¨",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",downarrow:"↓",Downarrow:"⇓",DownArrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",dscr:"𝒹",Dscr:"𝒟",dscy:"ѕ",DScy:"Ѕ",dsol:"⧶",dstrok:"đ",Dstrok:"Đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",dzcy:"џ",DZcy:"Џ",dzigrarr:"⟿",eacute:"é",Eacute:"É",easter:"⩮",ecaron:"ě",Ecaron:"Ě",ecir:"≖",ecirc:"ê",Ecirc:"Ê",ecolon:"≕",ecy:"э",Ecy:"Э",eDDot:"⩷",edot:"ė",eDot:"≑",Edot:"Ė",ee:"ⅇ",efDot:"≒",efr:"𝔢",Efr:"𝔈",eg:"⪚",egrave:"è",Egrave:"È",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",emacr:"ē",Emacr:"Ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",eng:"ŋ",ENG:"Ŋ",ensp:" ",eogon:"ę",Eogon:"Ę",eopf:"𝕖",Eopf:"𝔼",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",epsilon:"ε",Epsilon:"Ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",esim:"≂",Esim:"⩳",eta:"η",Eta:"Η",eth:"ð",ETH:"Ð",euml:"ë",Euml:"Ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",fcy:"ф",Fcy:"Ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",ffr:"𝔣",Ffr:"𝔉",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",fopf:"𝕗",Fopf:"𝔽",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",gamma:"γ",Gamma:"Γ",gammad:"ϝ",Gammad:"Ϝ",gap:"⪆",gbreve:"ğ",Gbreve:"Ğ",Gcedil:"Ģ",gcirc:"ĝ",Gcirc:"Ĝ",gcy:"г",Gcy:"Г",gdot:"ġ",Gdot:"Ġ",ge:"≥",gE:"≧",gel:"⋛",gEl:"⪌",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",gfr:"𝔤",Gfr:"𝔊",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",gjcy:"ѓ",GJcy:"Ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",gopf:"𝕘",Gopf:"𝔾",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",gscr:"ℊ",Gscr:"𝒢",gsim:"≳",gsime:"⪎",gsiml:"⪐",gt:">",Gt:"≫",GT:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",hardcy:"ъ",HARDcy:"Ъ",harr:"↔",hArr:"⇔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",hcirc:"ĥ",Hcirc:"Ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",hstrok:"ħ",Hstrok:"Ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",iacute:"í",Iacute:"Í",ic:"⁣",icirc:"î",Icirc:"Î",icy:"и",Icy:"И",Idot:"İ",iecy:"е",IEcy:"Е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",igrave:"ì",Igrave:"Ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",ijlig:"ij",IJlig:"IJ",Im:"ℑ",imacr:"ī",Imacr:"Ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",int:"∫",Int:"∬",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",iocy:"ё",IOcy:"Ё",iogon:"į",Iogon:"Į",iopf:"𝕚",Iopf:"𝕀",iota:"ι",Iota:"Ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",itilde:"ĩ",Itilde:"Ĩ",iukcy:"і",Iukcy:"І",iuml:"ï",Iuml:"Ï",jcirc:"ĵ",Jcirc:"Ĵ",jcy:"й",Jcy:"Й",jfr:"𝔧",Jfr:"𝔍",jmath:"ȷ",jopf:"𝕛",Jopf:"𝕁",jscr:"𝒿",Jscr:"𝒥",jsercy:"ј",Jsercy:"Ј",jukcy:"є",Jukcy:"Є",kappa:"κ",Kappa:"Κ",kappav:"ϰ",kcedil:"ķ",Kcedil:"Ķ",kcy:"к",Kcy:"К",kfr:"𝔨",Kfr:"𝔎",kgreen:"ĸ",khcy:"х",KHcy:"Х",kjcy:"ќ",KJcy:"Ќ",kopf:"𝕜",Kopf:"𝕂",kscr:"𝓀",Kscr:"𝒦",lAarr:"⇚",lacute:"ĺ",Lacute:"Ĺ",laemptyv:"⦴",lagran:"ℒ",lambda:"λ",Lambda:"Λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larr:"←",lArr:"⇐",Larr:"↞",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",latail:"⤙",lAtail:"⤛",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",lcaron:"ľ",Lcaron:"Ľ",lcedil:"ļ",Lcedil:"Ļ",lceil:"⌈",lcub:"{",lcy:"л",Lcy:"Л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",leftarrow:"←",Leftarrow:"⇐",LeftArrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",Leftrightarrow:"⇔",LeftRightArrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",leg:"⋚",lEg:"⪋",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",lfr:"𝔩",Lfr:"𝔏",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",ljcy:"љ",LJcy:"Љ",ll:"≪",Ll:"⋘",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",lmidot:"ŀ",Lmidot:"Ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",Longleftarrow:"⟸",LongLeftArrow:"⟵",longleftrightarrow:"⟷",Longleftrightarrow:"⟺",LongLeftRightArrow:"⟷",longmapsto:"⟼",longrightarrow:"⟶",Longrightarrow:"⟹",LongRightArrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",lopf:"𝕝",Lopf:"𝕃",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",lstrok:"ł",Lstrok:"Ł",lt:"<",Lt:"≪",LT:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",map:"↦",Map:"⤅",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",mcy:"м",Mcy:"М",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",mfr:"𝔪",Mfr:"𝔐",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",mopf:"𝕞",Mopf:"𝕄",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",mu:"μ",Mu:"Μ",multimap:"⊸",mumap:"⊸",nabla:"∇",nacute:"ń",Nacute:"Ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",ncaron:"ň",Ncaron:"Ň",ncedil:"ņ",Ncedil:"Ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",ncy:"н",Ncy:"Н",ndash:"–",ne:"≠",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",nfr:"𝔫",Nfr:"𝔑",nge:"≱",ngE:"≧̸",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",ngt:"≯",nGt:"≫⃒",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",njcy:"њ",NJcy:"Њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nle:"≰",nlE:"≦̸",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nlt:"≮",nLt:"≪⃒",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",not:"¬",Not:"⫬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrarr:"↛",nrArr:"⇏",nrarrc:"⤳̸",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",nscr:"𝓃",Nscr:"𝒩",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsube:"⊈",nsubE:"⫅̸",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupe:"⊉",nsupE:"⫆̸",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",ntilde:"ñ",Ntilde:"Ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",nu:"ν",Nu:"Ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",oacute:"ó",Oacute:"Ó",oast:"⊛",ocir:"⊚",ocirc:"ô",Ocirc:"Ô",ocy:"о",Ocy:"О",odash:"⊝",odblac:"ő",Odblac:"Ő",odiv:"⨸",odot:"⊙",odsold:"⦼",oelig:"œ",OElig:"Œ",ofcir:"⦿",ofr:"𝔬",Ofr:"𝔒",ogon:"˛",ograve:"ò",Ograve:"Ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",omacr:"ō",Omacr:"Ō",omega:"ω",Omega:"Ω",omicron:"ο",Omicron:"Ο",omid:"⦶",ominus:"⊖",oopf:"𝕠",Oopf:"𝕆",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",or:"∨",Or:"⩔",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",oscr:"ℴ",Oscr:"𝒪",oslash:"ø",Oslash:"Ø",osol:"⊘",otilde:"õ",Otilde:"Õ",otimes:"⊗",Otimes:"⨷",otimesas:"⨶",ouml:"ö",Ouml:"Ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",pcy:"п",Pcy:"П",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",pfr:"𝔭",Pfr:"𝔓",phi:"φ",Phi:"Φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",pi:"π",Pi:"Π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",pr:"≺",Pr:"⪻",prap:"⪷",prcue:"≼",pre:"⪯",prE:"⪳",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",pscr:"𝓅",Pscr:"𝒫",psi:"ψ",Psi:"Ψ",puncsp:" ",qfr:"𝔮",Qfr:"𝔔",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",qscr:"𝓆",Qscr:"𝒬",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",racute:"ŕ",Racute:"Ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarr:"→",rArr:"⇒",Rarr:"↠",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",rarrtl:"↣",Rarrtl:"⤖",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",rcaron:"ř",Rcaron:"Ř",rcedil:"ŗ",Rcedil:"Ŗ",rceil:"⌉",rcub:"}",rcy:"р",Rcy:"Р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",rho:"ρ",Rho:"Ρ",rhov:"ϱ",RightAngleBracket:"⟩",rightarrow:"→",Rightarrow:"⇒",RightArrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",sacute:"ś",Sacute:"Ś",sbquo:"‚",sc:"≻",Sc:"⪼",scap:"⪸",scaron:"š",Scaron:"Š",sccue:"≽",sce:"⪰",scE:"⪴",scedil:"ş",Scedil:"Ş",scirc:"ŝ",Scirc:"Ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",scy:"с",Scy:"С",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",sfr:"𝔰",Sfr:"𝔖",sfrown:"⌢",sharp:"♯",shchcy:"щ",SHCHcy:"Щ",shcy:"ш",SHcy:"Ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",sigma:"σ",Sigma:"Σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",softcy:"ь",SOFTcy:"Ь",sol:"/",solb:"⧄",solbar:"⌿",sopf:"𝕤",Sopf:"𝕊",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",sscr:"𝓈",Sscr:"𝒮",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",star:"☆",Star:"⋆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",sube:"⊆",subE:"⫅",subedot:"⫃",submult:"⫁",subne:"⊊",subnE:"⫋",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup:"⊃",Sup:"⋑",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supe:"⊇",supE:"⫆",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supne:"⊋",supnE:"⫌",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",tau:"τ",Tau:"Τ",tbrk:"⎴",tcaron:"ť",Tcaron:"Ť",tcedil:"ţ",Tcedil:"Ţ",tcy:"т",Tcy:"Т",tdot:"⃛",telrec:"⌕",tfr:"𝔱",Tfr:"𝔗",there4:"∴",therefore:"∴",Therefore:"∴",theta:"θ",Theta:"Θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",thorn:"þ",THORN:"Þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",topf:"𝕥",Topf:"𝕋",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",tscr:"𝓉",Tscr:"𝒯",tscy:"ц",TScy:"Ц",tshcy:"ћ",TSHcy:"Ћ",tstrok:"ŧ",Tstrok:"Ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",uacute:"ú",Uacute:"Ú",uarr:"↑",uArr:"⇑",Uarr:"↟",Uarrocir:"⥉",ubrcy:"ў",Ubrcy:"Ў",ubreve:"ŭ",Ubreve:"Ŭ",ucirc:"û",Ucirc:"Û",ucy:"у",Ucy:"У",udarr:"⇅",udblac:"ű",Udblac:"Ű",udhar:"⥮",ufisht:"⥾",ufr:"𝔲",Ufr:"𝔘",ugrave:"ù",Ugrave:"Ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",umacr:"ū",Umacr:"Ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",uogon:"ų",Uogon:"Ų",uopf:"𝕦",Uopf:"𝕌",uparrow:"↑",Uparrow:"⇑",UpArrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",updownarrow:"↕",Updownarrow:"⇕",UpDownArrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",upsilon:"υ",Upsilon:"Υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",uring:"ů",Uring:"Ů",urtri:"◹",uscr:"𝓊",Uscr:"𝒰",utdot:"⋰",utilde:"ũ",Utilde:"Ũ",utri:"▵",utrif:"▴",uuarr:"⇈",uuml:"ü",Uuml:"Ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",vcy:"в",Vcy:"В",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",vee:"∨",Vee:"⋁",veebar:"⊻",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",vfr:"𝔳",Vfr:"𝔙",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",vopf:"𝕧",Vopf:"𝕍",vprop:"∝",vrtri:"⊳",vscr:"𝓋",Vscr:"𝒱",vsubne:"⊊︀",vsubnE:"⫋︀",vsupne:"⊋︀",vsupnE:"⫌︀",Vvdash:"⊪",vzigzag:"⦚",wcirc:"ŵ",Wcirc:"Ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",wfr:"𝔴",Wfr:"𝔚",wopf:"𝕨",Wopf:"𝕎",wp:"℘",wr:"≀",wreath:"≀",wscr:"𝓌",Wscr:"𝒲",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",xfr:"𝔵",Xfr:"𝔛",xharr:"⟷",xhArr:"⟺",xi:"ξ",Xi:"Ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",xopf:"𝕩",Xopf:"𝕏",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",xscr:"𝓍",Xscr:"𝒳",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",yacute:"ý",Yacute:"Ý",yacy:"я",YAcy:"Я",ycirc:"ŷ",Ycirc:"Ŷ",ycy:"ы",Ycy:"Ы",yen:"¥",yfr:"𝔶",Yfr:"𝔜",yicy:"ї",YIcy:"Ї",yopf:"𝕪",Yopf:"𝕐",yscr:"𝓎",Yscr:"𝒴",yucy:"ю",YUcy:"Ю",yuml:"ÿ",Yuml:"Ÿ",zacute:"ź",Zacute:"Ź",zcaron:"ž",Zcaron:"Ž",zcy:"з",Zcy:"З",zdot:"ż",Zdot:"Ż",zeetrf:"ℨ",ZeroWidthSpace:"​",zeta:"ζ",Zeta:"Ζ",zfr:"𝔷",Zfr:"ℨ",zhcy:"ж",ZHcy:"Ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",zscr:"𝓏",Zscr:"𝒵",zwj:"‍",zwnj:"‌"},h={aacute:"á",Aacute:"Á",acirc:"â",Acirc:"Â",acute:"´",aelig:"æ",AElig:"Æ",agrave:"à",Agrave:"À",amp:"&",AMP:"&",aring:"å",Aring:"Å",atilde:"ã",Atilde:"Ã",auml:"ä",Auml:"Ä",brvbar:"¦",ccedil:"ç",Ccedil:"Ç",cedil:"¸",cent:"¢",copy:"©",COPY:"©",curren:"¤",deg:"°",divide:"÷",eacute:"é",Eacute:"É",ecirc:"ê",Ecirc:"Ê",egrave:"è",Egrave:"È",eth:"ð",ETH:"Ð",euml:"ë",Euml:"Ë",frac12:"½",frac14:"¼",frac34:"¾",gt:">",GT:">",iacute:"í",Iacute:"Í",icirc:"î",Icirc:"Î",iexcl:"¡",igrave:"ì",Igrave:"Ì",iquest:"¿",iuml:"ï",Iuml:"Ï",laquo:"«",lt:"<",LT:"<",macr:"¯",micro:"µ",middot:"·",nbsp:" ",not:"¬",ntilde:"ñ",Ntilde:"Ñ",oacute:"ó",Oacute:"Ó",ocirc:"ô",Ocirc:"Ô",ograve:"ò",Ograve:"Ò",ordf:"ª",ordm:"º",oslash:"ø",Oslash:"Ø",otilde:"õ",Otilde:"Õ",ouml:"ö",Ouml:"Ö",para:"¶",plusmn:"±",pound:"£",quot:'"',QUOT:'"',raquo:"»",reg:"®",REG:"®",sect:"§",shy:"­",sup1:"¹",sup2:"²",sup3:"³",szlig:"ß",thorn:"þ",THORN:"Þ",times:"×",uacute:"ú",Uacute:"Ú",ucirc:"û",Ucirc:"Û",ugrave:"ù",Ugrave:"Ù",uml:"¨",uuml:"ü",Uuml:"Ü",yacute:"ý",Yacute:"Ý",yen:"¥",yuml:"ÿ"},d={0:"�",128:"€",130:"‚",131:"ƒ",132:"„",133:"…",134:"†",135:"‡",136:"ˆ",137:"‰",138:"Š",139:"‹",140:"Œ",142:"Ž",145:"‘",146:"’",147:"“",148:"”",149:"•",150:"–",151:"—",152:"˜",153:"™",154:"š",155:"›",156:"œ",158:"ž",159:"Ÿ"},m=[1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65e3,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111],g=String.fromCharCode,v={}.hasOwnProperty,b=function(e,t){return v.call(e,t)},y=function(e,t){for(var n=-1,r=e.length;++n<r;)if(e[n]==t)return!0;return!1},_=function(e,t){if(!e)return t;var n,r={};for(n in t)r[n]=b(e,n)?e[n]:t[n];return r},w=function(e,t){var n="";return e>=55296&&e<=57343||e>1114111?(t&&x("character reference outside the permissible Unicode range"),"�"):b(d,e)?(t&&x("disallowed character reference"),d[e]):(t&&y(m,e)&&x("disallowed character reference"),e>65535&&(n+=g((e-=65536)>>>10&1023|55296),e=56320|1023&e),n+=g(e))},A=function(e){return"&#x"+e.toString(16).toUpperCase()+";"},E=function(e){return"&#"+e+";"},x=function(e){throw Error("Parse error: "+e)},C=function(e,t){(t=_(t,C.options)).strict&&f.test(e)&&x("forbidden code point");var n=t.encodeEverything,r=t.useNamedReferences,o=t.allowUnsafeSymbols,i=t.decimal?E:A,a=function(e){return i(e.charCodeAt(0))};return n?(e=e.replace(/[\x01-\x7F]/g,function(e){return r&&b(s,e)?"&"+s[e]+";":a(e)}),r&&(e=e.replace(/&gt;\u20D2/g,"&nvgt;").replace(/&lt;\u20D2/g,"&nvlt;").replace(/&#x66;&#x6A;/g,"&fjlig;")),r&&(e=e.replace(u,function(e){return"&"+s[e]+";"}))):r?(o||(e=e.replace(/["&'<>`]/g,function(e){return"&"+s[e]+";"})),e=(e=e.replace(/&gt;\u20D2/g,"&nvgt;").replace(/&lt;\u20D2/g,"&nvlt;")).replace(u,function(e){return"&"+s[e]+";"})):o||(e=e.replace(/["&'<>`]/g,a)),e.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,function(e){var t=e.charCodeAt(0),n=e.charCodeAt(1);return i(1024*(t-55296)+n-56320+65536)}).replace(/[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,a)};C.options={allowUnsafeSymbols:!1,encodeEverything:!1,strict:!1,useNamedReferences:!1,decimal:!1};var k=function(e,t){var n=(t=_(t,k.options)).strict;return n&&c.test(e)&&x("malformed character reference"),e.replace(/&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)([=a-zA-Z0-9])?/g,function(e,r,o,i,a,u,s,l){var c,f,d,m,g,v;return r?(d=r,f=o,n&&!f&&x("character reference was not terminated by a semicolon"),c=parseInt(d,10),w(c,n)):i?(m=i,f=a,n&&!f&&x("character reference was not terminated by a semicolon"),c=parseInt(m,16),w(c,n)):u?(g=u,b(p,g)?p[g]:(n&&x("named character reference was not terminated by a semicolon"),e)):(g=s,v=l,v&&t.isAttributeValue?(n&&"="==v&&x("`&` did not start a character reference"),e):(n&&x("named character reference was not terminated by a semicolon"),h[g]+(v||"")))})};k.options={isAttributeValue:!1,strict:!1};var O={version:"1.1.1",encode:C,decode:k,escape:function(e){return e.replace(/["&'<>`]/g,function(e){return l[e]})},unescape:k};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return O});else if(o&&!o.nodeType)if(i)i.exports=O;else for(var B in O)b(O,B)&&(o[B]=O[B]);else r.he=O}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],105:[function(e,t,n){var r=e("http"),o=t.exports;for(var i in r)r.hasOwnProperty(i)&&(o[i]=r[i]);o.request=function(e,t){return e||(e={}),e.scheme="https",e.protocol="https:",r.request.call(this,e,t)}},{http:156}],106:[function(e,t,n){n.read=function(e,t,n,r,o){var i,a,u=8*o-r-1,s=(1<<u)-1,l=s>>1,c=-7,f=n?o-1:0,p=n?-1:1,h=e[t+f];for(f+=p,i=h&(1<<-c)-1,h>>=-c,c+=u;c>0;i=256*i+e[t+f],f+=p,c-=8);for(a=i&(1<<-c)-1,i>>=-c,c+=r;c>0;a=256*a+e[t+f],f+=p,c-=8);if(0===i)i=1-l;else{if(i===s)return a?NaN:1/0*(h?-1:1);a+=Math.pow(2,r),i-=l}return(h?-1:1)*a*Math.pow(2,i-r)},n.write=function(e,t,n,r,o,i){var a,u,s,l=8*i-o-1,c=(1<<l)-1,f=c>>1,p=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:i-1,d=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(u=isNaN(t)?1:0,a=c):(a=Math.floor(Math.log(t)/Math.LN2),t*(s=Math.pow(2,-a))<1&&(a--,s*=2),(t+=a+f>=1?p/s:p*Math.pow(2,1-f))*s>=2&&(a++,s/=2),a+f>=c?(u=0,a=c):a+f>=1?(u=(t*s-1)*Math.pow(2,o),a+=f):(u=t*Math.pow(2,f-1)*Math.pow(2,o),a=0));o>=8;e[n+h]=255&u,h+=d,u/=256,o-=8);for(a=a<<o|u,l+=o;l>0;e[n+h]=255&a,h+=d,a/=256,l-=8);e[n+h-d]|=128*m}},{}],107:[function(e,t,n){"function"==typeof Object.create?t.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}},{}],108:[function(e,t,n){function r(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}function o(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&r(e.slice(0,0))}t.exports=function(e){return null!=e&&(r(e)||o(e)||!!e._isBuffer)}},{}],109:[function(e,t,n){var r={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==r.call(e)}},{}],110:[function(e,t,n){"use strict";function r(e){return e.source.slice(1,-1)}var o=e("xml-char-classes");t.exports=new RegExp("^["+r(o.letter)+"_]["+r(o.letter)+r(o.digit)+"\\.\\-_"+r(o.combiningChar)+r(o.extender)+"]*$")},{"xml-char-classes":164}],111:[function(e,t,n){n.endianness=function(){return"LE"},n.hostname=function(){return"undefined"!=typeof location?location.hostname:""},n.loadavg=function(){return[]},n.uptime=function(){return 0},n.freemem=function(){return Number.MAX_VALUE},n.totalmem=function(){return Number.MAX_VALUE},n.cpus=function(){return[]},n.type=function(){return"Browser"},n.release=function(){return"undefined"!=typeof navigator?navigator.appVersion:""},n.networkInterfaces=n.getNetworkInterfaces=function(){return{}},n.arch=function(){return"javascript"},n.platform=function(){return"browser"},n.tmpdir=n.tmpDir=function(){return"/tmp"},n.EOL="\n"},{}],112:[function(e,t,n){(function(e){function t(e,t){for(var n=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e.splice(r,1):".."===o?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r<e.length;r++)t(e[r],r,e)&&n.push(e[r]);return n}var o=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,i=function(e){return o.exec(e).slice(1)};n.resolve=function(){for(var n="",o=!1,i=arguments.length-1;i>=-1&&!o;i--){var a=i>=0?arguments[i]:e.cwd();if("string"!=typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(n=a+"/"+n,o="/"===a.charAt(0))}return n=t(r(n.split("/"),function(e){return!!e}),!o).join("/"),(o?"/":"")+n||"."},n.normalize=function(e){var o=n.isAbsolute(e),i="/"===a(e,-1);return(e=t(r(e.split("/"),function(e){return!!e}),!o).join("/"))||o||(e="."),e&&i&&(e+="/"),(o?"/":"")+e},n.isAbsolute=function(e){return"/"===e.charAt(0)},n.join=function(){var e=Array.prototype.slice.call(arguments,0);return n.normalize(r(e,function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},n.relative=function(e,t){function r(e){for(var t=0;t<e.length&&""===e[t];t++);for(var n=e.length-1;n>=0&&""===e[n];n--);return t>n?[]:e.slice(t,n-t+1)}e=n.resolve(e).substr(1),t=n.resolve(t).substr(1);for(var o=r(e.split("/")),i=r(t.split("/")),a=Math.min(o.length,i.length),u=a,s=0;s<a;s++)if(o[s]!==i[s]){u=s;break}for(var l=[],s=u;s<o.length;s++)l.push("..");return(l=l.concat(i.slice(u))).join("/")},n.sep="/",n.delimiter=":",n.dirname=function(e){var t=i(e),n=t[0],r=t[1];return n||r?(r&&(r=r.substr(0,r.length-1)),n+r):"."},n.basename=function(e,t){var n=i(e)[2];return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},n.extname=function(e){return i(e)[3]};var a="b"==="ab".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)}}).call(this,e("_process"))},{_process:114}],113:[function(e,t,n){(function(e){"use strict";function n(t,n,r,o){if("function"!=typeof t)throw new TypeError('"callback" argument must be a function');var i,a,u=arguments.length;switch(u){case 0:case 1:return e.nextTick(t);case 2:return e.nextTick(function(){t.call(null,n)});case 3:return e.nextTick(function(){t.call(null,n,r)});case 4:return e.nextTick(function(){t.call(null,n,r,o)});default:for(i=new Array(u-1),a=0;a<i.length;)i[a++]=arguments[a];return e.nextTick(function(){t.apply(null,i)})}}!e.version||0===e.version.indexOf("v0.")||0===e.version.indexOf("v1.")&&0!==e.version.indexOf("v1.8.")?t.exports=n:t.exports=e.nextTick}).call(this,e("_process"))},{_process:114}],114:[function(e,t,n){function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(f===setTimeout)return setTimeout(e,0);if((f===r||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function a(e){if(p===clearTimeout)return clearTimeout(e);if((p===o||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function u(){g&&d&&(g=!1,d.length?m=d.concat(m):v=-1,m.length&&s())}function s(){if(!g){var e=i(u);g=!0;for(var t=m.length;t;){for(d=m,m=[];++v<t;)d&&d[v].run();v=-1,t=m.length}d=null,g=!1,a(e)}}function l(e,t){this.fun=e,this.array=t}function c(){}var f,p,h=t.exports={};!function(){try{f="function"==typeof setTimeout?setTimeout:r}catch(e){f=r}try{p="function"==typeof clearTimeout?clearTimeout:o}catch(e){p=o}}();var d,m=[],g=!1,v=-1;h.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];m.push(new l(e,t)),1!==m.length||g||i(s)},l.prototype.run=function(){this.fun.apply(null,this.array)},h.title="browser",h.browser=!0,h.env={},h.argv=[],h.version="",h.versions={},h.on=c,h.addListener=c,h.once=c,h.off=c,h.removeListener=c,h.removeAllListeners=c,h.emit=c,h.prependListener=c,h.prependOnceListener=c,h.listeners=function(e){return[]},h.binding=function(e){throw new Error("process.binding is not supported")},h.cwd=function(){return"/"},h.chdir=function(e){throw new Error("process.chdir is not supported")},h.umask=function(){return 0}},{}],115:[function(e,t,n){(function(e){!function(r){function o(e){throw new RangeError(F[e])}function i(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function a(e,t){var n=e.split("@"),r="";return n.length>1&&(r=n[0]+"@",e=n[1]),r+i((e=e.replace(R,".")).split("."),t).join(".")}function u(e){for(var t,n,r=[],o=0,i=e.length;o<i;)(t=e.charCodeAt(o++))>=55296&&t<=56319&&o<i?56320==(64512&(n=e.charCodeAt(o++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--):r.push(t);return r}function s(e){return i(e,function(e){var t="";return e>65535&&(t+=P((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=P(e)}).join("")}function l(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:A}function c(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function f(e,t,n){var r=0;for(e=n?M(e/k):e>>1,e+=M(e/t);e>L*x>>1;r+=A)e=M(e/L);return M(r+(L+1)*e/(e+C))}function p(e){var t,n,r,i,a,u,c,p,h,d,m=[],g=e.length,v=0,b=B,y=O;for((n=e.lastIndexOf(S))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&o("not-basic"),m.push(e.charCodeAt(r));for(i=n>0?n+1:0;i<g;){for(a=v,u=1,c=A;i>=g&&o("invalid-input"),((p=l(e.charCodeAt(i++)))>=A||p>M((w-v)/u))&&o("overflow"),v+=p*u,h=c<=y?E:c>=y+x?x:c-y,!(p<h);c+=A)u>M(w/(d=A-h))&&o("overflow"),u*=d;y=f(v-a,t=m.length+1,0==a),M(v/t)>w-b&&o("overflow"),b+=M(v/t),v%=t,m.splice(v++,0,b)}return s(m)}function h(e){var t,n,r,i,a,s,l,p,h,d,m,g,v,b,y,_=[];for(g=(e=u(e)).length,t=B,n=0,a=O,s=0;s<g;++s)(m=e[s])<128&&_.push(P(m));for(r=i=_.length,i&&_.push(S);r<g;){for(l=w,s=0;s<g;++s)(m=e[s])>=t&&m<l&&(l=m);for(l-t>M((w-n)/(v=r+1))&&o("overflow"),n+=(l-t)*v,t=l,s=0;s<g;++s)if((m=e[s])<t&&++n>w&&o("overflow"),m==t){for(p=n,h=A;d=h<=a?E:h>=a+x?x:h-a,!(p<d);h+=A)y=p-d,b=A-d,_.push(P(c(d+y%b,0))),p=M(y/b);_.push(P(c(p,0))),a=f(n,v,r==i),n=0,++r}++n,++t}return _.join("")}function d(e){return a(e,function(e){return D.test(e)?p(e.slice(4).toLowerCase()):e})}function m(e){return a(e,function(e){return T.test(e)?"xn--"+h(e):e})}var g="object"==typeof n&&n&&!n.nodeType&&n,v="object"==typeof t&&t&&!t.nodeType&&t,b="object"==typeof e&&e;b.global!==b&&b.window!==b&&b.self!==b||(r=b);var y,_,w=2147483647,A=36,E=1,x=26,C=38,k=700,O=72,B=128,S="-",D=/^xn--/,T=/[^\x20-\x7E]/,R=/[\x2E\u3002\uFF0E\uFF61]/g,F={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},L=A-E,M=Math.floor,P=String.fromCharCode;if(y={version:"1.4.1",ucs2:{decode:u,encode:s},decode:p,encode:h,toASCII:m,toUnicode:d},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define("punycode",function(){return y});else if(g&&v)if(t.exports==g)v.exports=y;else for(_ in y)y.hasOwnProperty(_)&&(g[_]=y[_]);else r.punycode=y}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],116:[function(e,t,n){"use strict";function r(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,n,i){t=t||"&",n=n||"=";var a={};if("string"!=typeof e||0===e.length)return a;e=e.split(t);var u=1e3;i&&"number"==typeof i.maxKeys&&(u=i.maxKeys);var s=e.length;u>0&&s>u&&(s=u);for(var l=0;l<s;++l){var c,f,p,h,d=e[l].replace(/\+/g,"%20"),m=d.indexOf(n);m>=0?(c=d.substr(0,m),f=d.substr(m+1)):(c=d,f=""),p=decodeURIComponent(c),h=decodeURIComponent(f),r(a,p)?o(a[p])?a[p].push(h):a[p]=[a[p],h]:a[p]=h}return a};var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],117:[function(e,t,n){"use strict";function r(e,t){if(e.map)return e.map(t);for(var n=[],r=0;r<e.length;r++)n.push(t(e[r],r));return n}var o=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};t.exports=function(e,t,n,u){return t=t||"&",n=n||"=",null===e&&(e=void 0),"object"==typeof e?r(a(e),function(a){var u=encodeURIComponent(o(a))+n;return i(e[a])?r(e[a],function(e){return u+encodeURIComponent(o(e))}).join(t):u+encodeURIComponent(o(e[a]))}).join(t):u?encodeURIComponent(o(u))+n+encodeURIComponent(o(e)):""};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)},a=Object.keys||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.push(n);return t}},{}],118:[function(e,t,n){"use strict";n.decode=n.parse=e("./decode"),n.encode=n.stringify=e("./encode")},{"./decode":116,"./encode":117}],119:[function(e,t,n){"use strict";function r(e){if(!(this instanceof r))return new r(e);l.call(this,e),c.call(this,e),e&&!1===e.readable&&(this.readable=!1),e&&!1===e.writable&&(this.writable=!1),this.allowHalfOpen=!0,e&&!1===e.allowHalfOpen&&(this.allowHalfOpen=!1),this.once("end",o)}function o(){this.allowHalfOpen||this._writableState.ended||u(i,this)}function i(e){e.end()}var a=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};t.exports=r;var u=e("process-nextick-args"),s=e("core-util-is");s.inherits=e("inherits");var l=e("./_stream_readable"),c=e("./_stream_writable");s.inherits(r,l);for(var f=a(c.prototype),p=0;p<f.length;p++){var h=f[p];r.prototype[h]||(r.prototype[h]=c.prototype[h])}},{"./_stream_readable":121,"./_stream_writable":123,"core-util-is":102,inherits:107,"process-nextick-args":113}],120:[function(e,t,n){"use strict";function r(e){if(!(this instanceof r))return new r(e);o.call(this,e)}t.exports=r;var o=e("./_stream_transform"),i=e("core-util-is");i.inherits=e("inherits"),i.inherits(r,o),r.prototype._transform=function(e,t,n){n(null,e)}},{"./_stream_transform":122,"core-util-is":102,inherits:107}],121:[function(e,t,n){(function(n){"use strict";function r(e,t,n){if("function"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?D(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}function o(t,n){B=B||e("./_stream_duplex"),t=t||{},this.objectMode=!!t.objectMode,n instanceof B&&(this.objectMode=this.objectMode||!!t.readableObjectMode);var r=t.highWaterMark,o=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:o,this.highWaterMark=~~this.highWaterMark,this.buffer=new q,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.defaultEncoding=t.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(N||(N=e("string_decoder/").StringDecoder),this.decoder=new N(t.encoding),this.encoding=t.encoding)}function i(t){if(B=B||e("./_stream_duplex"),!(this instanceof i))return new i(t);this._readableState=new o(t,this),this.readable=!0,t&&"function"==typeof t.read&&(this._read=t.read),R.call(this)}function a(e,t,n,r,o){var i=c(t,n);if(i)e.emit("error",i);else if(null===n)t.reading=!1,f(e,t);else if(t.objectMode||n&&n.length>0)if(t.ended&&!o){var a=new Error("stream.push() after EOF");e.emit("error",a)}else if(t.endEmitted&&o){var s=new Error("stream.unshift() after end event");e.emit("error",s)}else{var l;!t.decoder||o||r||(n=t.decoder.write(n),l=!t.objectMode&&0===n.length),o||(t.reading=!1),l||(t.flowing&&0===t.length&&!t.sync?(e.emit("data",n),e.read(0)):(t.length+=t.objectMode?1:n.length,o?t.buffer.unshift(n):t.buffer.push(n),t.needReadable&&p(e))),d(e,t)}else o||(t.reading=!1);return u(t)}function u(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||0===e.length)}function s(e){return e>=I?e=I:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function l(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!==e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=s(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function c(e,t){var n=null;return F.isBuffer(t)||"string"==typeof t||null===t||void 0===t||e.objectMode||(n=new TypeError("Invalid non-string/buffer chunk")),n}function f(e,t){if(!t.ended){if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,p(e)}}function p(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(U("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?S(h,e):h(e))}function h(e){U("emit readable"),e.emit("readable"),_(e)}function d(e,t){t.readingMore||(t.readingMore=!0,S(m,e,t))}function m(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(U("maybeReadMore read 0"),e.read(0),n!==t.length);)n=t.length;t.readingMore=!1}function g(e){return function(){var t=e._readableState;U("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&T(e,"data")&&(t.flowing=!0,_(e))}}function v(e){U("readable nexttick read 0"),e.read(0)}function b(e,t){t.resumeScheduled||(t.resumeScheduled=!0,S(y,e,t))}function y(e,t){t.reading||(U("resume read 0"),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit("resume"),_(e),t.flowing&&!t.reading&&e.read(0)}function _(e){var t=e._readableState;for(U("flow",t.flowing);t.flowing&&null!==e.read(););}function w(e,t){if(0===t.length)return null;var n;return t.objectMode?n=t.buffer.shift():!e||e>=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=A(e,t.buffer,t.decoder),n}function A(e,t,n){var r;return e<t.head.data.length?(r=t.head.data.slice(0,e),t.head.data=t.head.data.slice(e)):r=e===t.head.data.length?t.shift():n?E(e,t):x(e,t),r}function E(e,t){var n=t.head,r=1,o=n.data;for(e-=o.length;n=n.next;){var i=n.data,a=e>i.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++r}return t.length-=r,o}function x(e,t){var n=L.allocUnsafe(e),r=t.head,o=1;for(r.data.copy(n),e-=r.data.length;r=r.next;){var i=r.data,a=e>i.length?i.length:e;if(i.copy(n,n.length-e,0,a),0===(e-=a)){a===i.length?(++o,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++o}return t.length-=o,n}function C(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,S(k,t,e))}function k(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function O(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}t.exports=i;var B,S=e("process-nextick-args"),D=e("isarray");i.ReadableState=o;e("events").EventEmitter;var T=function(e,t){return e.listeners(t).length},R=e("./internal/streams/stream"),F=e("buffer").Buffer,L=e("buffer-shims"),M=e("core-util-is");M.inherits=e("inherits");var P=e("util"),U=void 0;U=P&&P.debuglog?P.debuglog("stream"):function(){};var N,q=e("./internal/streams/BufferList");M.inherits(i,R);var z=["error","close","destroy","pause","resume"];i.prototype.push=function(e,t){var n=this._readableState;return n.objectMode||"string"!=typeof e||(t=t||n.defaultEncoding)!==n.encoding&&(e=L.from(e,t),t=""),a(this,n,e,t,!1)},i.prototype.unshift=function(e){return a(this,this._readableState,e,"",!0)},i.prototype.isPaused=function(){return!1===this._readableState.flowing},i.prototype.setEncoding=function(t){return N||(N=e("string_decoder/").StringDecoder),this._readableState.decoder=new N(t),this._readableState.encoding=t,this};var I=8388608;i.prototype.read=function(e){U("read",e),e=parseInt(e,10);var t=this._readableState,n=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return U("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?C(this):p(this),null;if(0===(e=l(e,t))&&t.ended)return 0===t.length&&C(this),null;var r=t.needReadable;U("need readable",r),(0===t.length||t.length-e<t.highWaterMark)&&U("length less than watermark",r=!0),t.ended||t.reading?U("reading or ended",r=!1):r&&(U("do read"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=l(n,t)));var o;return o=e>0?w(e,t):null,null===o?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&C(this)),null!==o&&this.emit("data",o),o},i.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},i.prototype.pipe=function(e,t){function o(e){U("onunpipe"),e===p&&a()}function i(){U("onend"),e.end()}function a(){U("cleanup"),e.removeListener("close",l),e.removeListener("finish",c),e.removeListener("drain",m),e.removeListener("error",s),e.removeListener("unpipe",o),p.removeListener("end",i),p.removeListener("end",a),p.removeListener("data",u),v=!0,!h.awaitDrain||e._writableState&&!e._writableState.needDrain||m()}function u(t){U("ondata"),b=!1,!1!==e.write(t)||b||((1===h.pipesCount&&h.pipes===e||h.pipesCount>1&&-1!==O(h.pipes,e))&&!v&&(U("false write response, pause",p._readableState.awaitDrain),p._readableState.awaitDrain++,b=!0),p.pause())}function s(t){U("onerror",t),f(),e.removeListener("error",s),0===T(e,"error")&&e.emit("error",t)}function l(){e.removeListener("finish",c),f()}function c(){U("onfinish"),e.removeListener("close",l),f()}function f(){U("unpipe"),p.unpipe(e)}var p=this,h=this._readableState;switch(h.pipesCount){case 0:h.pipes=e;break;case 1:h.pipes=[h.pipes,e];break;default:h.pipes.push(e)}h.pipesCount+=1,U("pipe count=%d opts=%j",h.pipesCount,t);var d=(!t||!1!==t.end)&&e!==n.stdout&&e!==n.stderr?i:a;h.endEmitted?S(d):p.once("end",d),e.on("unpipe",o);var m=g(p);e.on("drain",m);var v=!1,b=!1;return p.on("data",u),r(e,"error",s),e.once("close",l),e.once("finish",c),e.emit("pipe",p),h.flowing||(U("pipe resume"),p.resume()),e},i.prototype.unpipe=function(e){var t=this._readableState;if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this),this);if(!e){var n=t.pipes,r=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o<r;o++)n[o].emit("unpipe",this);return this}var i=O(t.pipes,e);return-1===i?this:(t.pipes.splice(i,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit("unpipe",this),this)},i.prototype.on=function(e,t){var n=R.prototype.on.call(this,e,t);if("data"===e)!1!==this._readableState.flowing&&this.resume();else if("readable"===e){var r=this._readableState;r.endEmitted||r.readableListening||(r.readableListening=r.needReadable=!0,r.emittedReadable=!1,r.reading?r.length&&p(this):S(v,this))}return n},i.prototype.addListener=i.prototype.on,i.prototype.resume=function(){var e=this._readableState;return e.flowing||(U("resume"),e.flowing=!0,b(this,e)),this},i.prototype.pause=function(){return U("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(U("pause"),this._readableState.flowing=!1,this.emit("pause")),this},i.prototype.wrap=function(e){var t=this._readableState,n=!1,r=this;e.on("end",function(){if(U("wrapped end"),t.decoder&&!t.ended){var e=t.decoder.end();e&&e.length&&r.push(e)}r.push(null)}),e.on("data",function(o){U("wrapped data"),t.decoder&&(o=t.decoder.write(o)),(!t.objectMode||null!==o&&void 0!==o)&&(t.objectMode||o&&o.length)&&(r.push(o)||(n=!0,e.pause()))});for(var o in e)void 0===this[o]&&"function"==typeof e[o]&&(this[o]=function(t){return function(){return e[t].apply(e,arguments)}}(o));for(var i=0;i<z.length;i++)e.on(z[i],r.emit.bind(r,z[i]));return r._read=function(t){U("wrapped _read",t),n&&(n=!1,e.resume())},r},i._fromList=w}).call(this,e("_process"))},{"./_stream_duplex":119,"./internal/streams/BufferList":124,"./internal/streams/stream":125,_process:114,buffer:5,"buffer-shims":4,"core-util-is":102,events:103,inherits:107,isarray:109,"process-nextick-args":113,"string_decoder/":126,util:2}],122:[function(e,t,n){"use strict";function r(e){this.afterTransform=function(t,n){return o(e,t,n)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null,this.writeencoding=null}function o(e,t,n){var r=e._transformState;r.transforming=!1;var o=r.writecb;if(!o)return e.emit("error",new Error("no writecb in Transform class"));r.writechunk=null,r.writecb=null,null!==n&&void 0!==n&&e.push(n),o(t);var i=e._readableState;i.reading=!1,(i.needReadable||i.length<i.highWaterMark)&&e._read(i.highWaterMark)}function i(e){if(!(this instanceof i))return new i(e);u.call(this,e),this._transformState=new r(this);var t=this;this._readableState.needReadable=!0,this._readableState.sync=!1,e&&("function"==typeof e.transform&&(this._transform=e.transform),"function"==typeof e.flush&&(this._flush=e.flush)),this.once("prefinish",function(){"function"==typeof this._flush?this._flush(function(e,n){a(t,e,n)}):a(t)})}function a(e,t,n){if(t)return e.emit("error",t);null!==n&&void 0!==n&&e.push(n);var r=e._writableState,o=e._transformState;if(r.length)throw new Error("Calling transform done when ws.length != 0");if(o.transforming)throw new Error("Calling transform done when still transforming");return e.push(null)}t.exports=i;var u=e("./_stream_duplex"),s=e("core-util-is");s.inherits=e("inherits"),s.inherits(i,u),i.prototype.push=function(e,t){return this._transformState.needTransform=!1,u.prototype.push.call(this,e,t)},i.prototype._transform=function(e,t,n){throw new Error("_transform() is not implemented")},i.prototype._write=function(e,t,n){var r=this._transformState;if(r.writecb=n,r.writechunk=e,r.writeencoding=t,!r.transforming){var o=this._readableState;(r.needTransform||o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}},i.prototype._read=function(e){var t=this._transformState;null!==t.writechunk&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0}},{"./_stream_duplex":119,"core-util-is":102,inherits:107}],123:[function(e,t,n){(function(n){"use strict";function r(){}function o(e,t,n){this.chunk=e,this.encoding=t,this.callback=n,this.next=null}function i(t,n){E=E||e("./_stream_duplex"),t=t||{},this.objectMode=!!t.objectMode,n instanceof E&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var r=t.highWaterMark,o=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:o,this.highWaterMark=~~this.highWaterMark,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1;var i=!1===t.decodeStrings;this.decodeStrings=!i,this.defaultEncoding=t.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){d(n,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new A(this)}function a(t){if(E=E||e("./_stream_duplex"),!(T.call(a,this)||this instanceof E))return new a(t);this._writableState=new i(t,this),this.writable=!0,t&&("function"==typeof t.write&&(this._write=t.write),"function"==typeof t.writev&&(this._writev=t.writev)),B.call(this)}function u(e,t){var n=new Error("write after end");e.emit("error",n),x(t,n)}function s(e,t,n,r){var o=!0,i=!1;return null===n?i=new TypeError("May not write null values to stream"):"string"==typeof n||void 0===n||t.objectMode||(i=new TypeError("Invalid non-string/buffer chunk")),i&&(e.emit("error",i),x(r,i),o=!1),o}function l(e,t,n){return e.objectMode||!1===e.decodeStrings||"string"!=typeof t||(t=D.from(t,n)),t}function c(e,t,n,r,i,a){n||(r=l(t,r,i),S.isBuffer(r)&&(i="buffer"));var u=t.objectMode?1:r.length;t.length+=u;var s=t.length<t.highWaterMark;if(s||(t.needDrain=!0),t.writing||t.corked){var c=t.lastBufferedRequest;t.lastBufferedRequest=new o(r,i,a),c?c.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else f(e,t,!1,u,r,i,a);return s}function f(e,t,n,r,o,i,a){t.writelen=r,t.writecb=a,t.writing=!0,t.sync=!0,n?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function p(e,t,n,r,o){--t.pendingcb,n?x(o,r):o(r),e._writableState.errorEmitted=!0,e.emit("error",r)}function h(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}function d(e,t){var n=e._writableState,r=n.sync,o=n.writecb;if(h(n),t)p(e,n,r,t,o);else{var i=b(n);i||n.corked||n.bufferProcessing||!n.bufferedRequest||v(e,n),r?C(m,e,n,i,o):m(e,n,i,o)}}function m(e,t,n,r){n||g(e,t),t.pendingcb--,r(),_(e,t)}function g(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}function v(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var a=0;n;)o[a]=n,n=n.next,a+=1;f(e,t,!0,t.length,o,"",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new A(t)}else{for(;n;){var u=n.chunk,s=n.encoding,l=n.callback;if(f(e,t,!1,t.objectMode?1:u.length,u,s,l),n=n.next,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequestCount=0,t.bufferedRequest=n,t.bufferProcessing=!1}function b(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function y(e,t){t.prefinished||(t.prefinished=!0,e.emit("prefinish"))}function _(e,t){var n=b(t);return n&&(0===t.pendingcb?(y(e,t),t.finished=!0,e.emit("finish")):y(e,t)),n}function w(e,t,n){t.ending=!0,_(e,t),n&&(t.finished?x(n):e.once("finish",n)),t.ended=!0,e.writable=!1}function A(e){var t=this;this.next=null,this.entry=null,this.finish=function(n){var r=t.entry;for(t.entry=null;r;){var o=r.callback;e.pendingcb--,o(n),r=r.next}e.corkedRequestsFree?e.corkedRequestsFree.next=t:e.corkedRequestsFree=t}}t.exports=a;var E,x=e("process-nextick-args"),C=!n.browser&&["v0.10","v0.9."].indexOf(n.version.slice(0,5))>-1?setImmediate:x;a.WritableState=i;var k=e("core-util-is");k.inherits=e("inherits");var O={deprecate:e("util-deprecate")},B=e("./internal/streams/stream"),S=e("buffer").Buffer,D=e("buffer-shims");k.inherits(a,B),i.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(i.prototype,"buffer",{get:O.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.")})}catch(e){}}();var T;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(T=Function.prototype[Symbol.hasInstance],Object.defineProperty(a,Symbol.hasInstance,{value:function(e){return!!T.call(this,e)||e&&e._writableState instanceof i}})):T=function(e){return e instanceof this},a.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},a.prototype.write=function(e,t,n){var o=this._writableState,i=!1,a=S.isBuffer(e);return"function"==typeof t&&(n=t,t=null),a?t="buffer":t||(t=o.defaultEncoding),"function"!=typeof n&&(n=r),o.ended?u(this,n):(a||s(this,o,e,n))&&(o.pendingcb++,i=c(this,o,a,e,t,n)),i},a.prototype.cork=function(){this._writableState.corked++},a.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||v(this,e))},a.prototype.setDefaultEncoding=function(e){if("string"==typeof e&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},a.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},a.prototype._writev=null,a.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!==e&&void 0!==e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||w(this,r,n)}}).call(this,e("_process"))},{"./_stream_duplex":119,"./internal/streams/stream":125,_process:114,buffer:5,"buffer-shims":4,"core-util-is":102,inherits:107,"process-nextick-args":113,"util-deprecate":163}],124:[function(e,t,n){"use strict";function r(){this.head=null,this.tail=null,this.length=0}e("buffer").Buffer;var o=e("buffer-shims");t.exports=r,r.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},r.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},r.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},r.prototype.clear=function(){this.head=this.tail=null,this.length=0},r.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},r.prototype.concat=function(e){if(0===this.length)return o.alloc(0);if(1===this.length)return this.head.data;for(var t=o.allocUnsafe(e>>>0),n=this.head,r=0;n;)n.data.copy(t,r),r+=n.data.length,n=n.next;return t}},{buffer:5,"buffer-shims":4}],125:[function(e,t,n){t.exports=e("events").EventEmitter},{events:103}],126:[function(e,t,n){"use strict";function r(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}function o(e){var t=r(e);if("string"!=typeof t&&(b.isEncoding===_||!_(e)))throw new Error("Unknown encoding: "+e);return t||e}function i(e){this.encoding=o(e);var t;switch(this.encoding){case"utf16le":this.text=p,this.end=h,t=4;break;case"utf8":this.fillLast=l,t=4;break;case"base64":this.text=d,this.end=m,t=3;break;default:return this.write=g,void(this.end=v)}this.lastNeed=0,this.lastTotal=0,this.lastChar=y.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:-1}function u(e,t,n){var r=t.length-1;if(r<n)return 0;var o=a(t[r]);return o>=0?(o>0&&(e.lastNeed=o-1),o):--r<n?0:(o=a(t[r]))>=0?(o>0&&(e.lastNeed=o-2),o):--r<n?0:(o=a(t[r]),o>=0?(o>0&&(2===o?o=0:e.lastNeed=o-3),o):0)}function s(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,"�".repeat(n);if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,"�".repeat(n+1);if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,"�".repeat(n+2)}}function l(e){var t=this.lastTotal-this.lastNeed,n=s(this,e,t);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function c(e,t){var n=u(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)}function f(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+"�".repeat(this.lastTotal-this.lastNeed):t}function p(e,t){if((e.length-t)%2==0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function h(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function d(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function m(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function g(e){return e.toString(this.encoding)}function v(e){return e&&e.length?this.write(e):""}var b=e("buffer").Buffer,y=e("buffer-shims"),_=b.isEncoding||function(e){switch((e=""+e)&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};n.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n<e.length?t?t+this.text(e,n):this.text(e,n):t||""},i.prototype.end=f,i.prototype.text=c,i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},{buffer:5,"buffer-shims":4}],127:[function(e,t,n){(n=t.exports=e("./lib/_stream_readable.js")).Stream=n,n.Readable=n,n.Writable=e("./lib/_stream_writable.js"),n.Duplex=e("./lib/_stream_duplex.js"),n.Transform=e("./lib/_stream_transform.js"),n.PassThrough=e("./lib/_stream_passthrough.js")},{"./lib/_stream_duplex.js":119,"./lib/_stream_passthrough.js":120,"./lib/_stream_readable.js":121,"./lib/_stream_transform.js":122,"./lib/_stream_writable.js":123}],128:[function(e,t,n){"use strict";t.exports={ABSOLUTE:"absolute",PATH_RELATIVE:"pathRelative",ROOT_RELATIVE:"rootRelative",SHORTEST:"shortest"}},{}],129:[function(e,t,n){"use strict";function r(e,t){return!e.auth||t.removeAuth||!e.extra.relation.maximumHost&&t.output!==m.ABSOLUTE?"":e.auth+"@"}function o(e,t){return e.hash?e.hash:""}function i(e,t){return e.host.full&&(e.extra.relation.maximumAuth||t.output===m.ABSOLUTE)?e.host.full:""}function a(e,t){var n="",r=e.path.absolute.string,o=e.path.relative.string,i=d(e,t);if(e.extra.relation.maximumHost||t.output===m.ABSOLUTE||t.output===m.ROOT_RELATIVE)n=r;else if(o.length<=r.length&&t.output===m.SHORTEST||t.output===m.PATH_RELATIVE){if(""===(n=o)){var a=h(e,t)&&!!p(e,t);e.extra.relation.maximumPath&&!i?n="./":!e.extra.relation.overridesQuery||i||a||(n="./")}}else n=r;return"/"!==n||i||!t.removeRootTrailingSlash||e.extra.relation.minimumPort&&t.output!==m.ABSOLUTE||(n=""),n}function u(e,t){return e.port&&!e.extra.portIsDefault&&e.extra.relation.maximumHost?":"+e.port:""}function s(e,t){return h(e,t)?p(e,t):""}function l(e,t){return d(e,t)?e.resource:""}function c(e,t){var n="";return(e.extra.relation.maximumHost||t.output===m.ABSOLUTE)&&(e.extra.relation.minimumScheme&&t.schemeRelative&&t.output!==m.ABSOLUTE?n+="//":n+=e.scheme+"://"),n}function f(e,t){var n="";return n+=c(e,t),n+=r(e,t),n+=i(e,t),n+=u(e,t),n+=a(e,t),n+=l(e,t),n+=s(e,t),n+=o(e,t)}function p(e,t){var n=t.removeEmptyQueries&&e.extra.relation.minimumPort;return e.query.string[n?"stripped":"full"]}function h(e,t){return!e.extra.relation.minimumQuery||t.output===m.ABSOLUTE||t.output===m.ROOT_RELATIVE}function d(e,t){var n=t.removeDirectoryIndexes&&e.extra.resourceIsIndex,r=e.extra.relation.minimumResource&&t.output!==m.ABSOLUTE&&t.output!==m.ROOT_RELATIVE;return!!e.resource&&!r&&!n}var m=e("./constants");t.exports=f},{"./constants":128}],130:[function(e,t,n){"use strict";function r(e,t){this.options=a(t,{defaultPorts:{ftp:21,http:80,https:443},directoryIndexes:["index.html"],ignore_www:!1,output:r.SHORTEST,rejectedSchemes:["data","javascript","mailto"],removeAuth:!1,removeDirectoryIndexes:!0,removeEmptyQueries:!1,removeRootTrailingSlash:!0,schemeRelative:!0,site:void 0,slashesDenoteHost:!0}),this.from=s.from(e,this.options,null)}var o=e("./constants"),i=e("./format"),a=e("./options"),u=e("./util/object"),s=e("./parse"),l=e("./relate");r.prototype.relate=function(e,t,n){if(u.isPlainObject(t)?(n=t,t=e,e=null):t||(t=e,e=null),n=a(n,this.options),e=e||n.site,!(e=s.from(e,n,this.from))||!e.href)throw new Error("from value not defined.");if(e.extra.hrefInfo.minimumPathOnly)throw new Error("from value supplied is not absolute: "+e.href);return!1===(t=s.to(t,n)).valid?t.href:(t=l(e,t,n),t=i(t,n))},r.relate=function(e,t,n){return(new r).relate(e,t,n)},u.shallowMerge(r,o),t.exports=r},{"./constants":128,"./format":129,"./options":131,"./parse":134,"./relate":141,"./util/object":143}],131:[function(e,t,n){"use strict";function r(e,t){if(i.isPlainObject(e)){var n={};for(var r in t)t.hasOwnProperty(r)&&(void 0!==e[r]?n[r]=o(e[r],t[r]):n[r]=t[r]);return n}return t}function o(e,t){return t instanceof Object&&e instanceof Object?t instanceof Array&&e instanceof Array?t.concat(e):i.shallowMerge(e,t):e}var i=e("./util/object");t.exports=r},{"./util/object":143}],132:[function(e,t,n){"use strict";function r(e,t){if(t.ignore_www){var n=e.host.full;if(n){var r=n;0===n.indexOf("www.")&&(r=n.substr(4)),e.host.stripped=r}}}t.exports=r},{}],133:[function(e,t,n){"use strict";function r(e){var t=!(e.scheme||e.auth||e.host.full||e.port),n=t&&!e.path.absolute.string,r=n&&!e.resource,o=r&&!e.query.string.full.length,i=o&&!e.hash;e.extra.hrefInfo.minimumPathOnly=t,e.extra.hrefInfo.minimumResourceOnly=n,e.extra.hrefInfo.minimumQueryOnly=r,e.extra.hrefInfo.minimumHashOnly=o,e.extra.hrefInfo.empty=i}t.exports=r},{}],134:[function(e,t,n){"use strict";function r(e,t,n){if(e){var r=o(e,t),i=f.resolveDotSegments(r.path.absolute.array);return r.path.absolute.array=i,r.path.absolute.string="/"+f.join(i),r}return n}function o(e,t){var n=c(e,t);return!1===n.valid?n:(a(n,t),s(n,t),u(n,t),l(n,t),i(n),n)}var i=e("./hrefInfo"),a=e("./host"),u=e("./path"),s=e("./port"),l=e("./query"),c=e("./urlstring"),f=e("../util/path");t.exports={from:r,to:o}},{"../util/path":144,"./host":132,"./hrefInfo":133,"./path":135,"./port":136,"./query":137,"./urlstring":138}],135:[function(e,t,n){"use strict";function r(e,t){var n=!1;return t.directoryIndexes.every(function(t){return t!==e||(n=!0,!1)}),n}function o(e,t){var n=e.path.absolute.string;if(n){var o=n.lastIndexOf("/");if(o>-1){if(++o<n.length){var a=n.substr(o);"."!==a&&".."!==a?(e.resource=a,n=n.substr(0,o)):n+="/"}e.path.absolute.string=n,e.path.absolute.array=i(n)}else"."===n||".."===n?(n+="/",e.path.absolute.string=n,e.path.absolute.array=i(n)):(e.resource=n,e.path.absolute.string=null);e.extra.resourceIsIndex=r(e.resource,t)}}function i(e){if("/"!==e){var t=[];return e.split("/").forEach(function(e){""!==e&&t.push(e)}),t}return[]}t.exports=o},{}],136:[function(e,t,n){"use strict";function r(e,t){var n=-1;for(var r in t.defaultPorts)if(r===e.scheme&&t.defaultPorts.hasOwnProperty(r)){n=t.defaultPorts[r];break}n>-1&&(n=n.toString(),null===e.port&&(e.port=n),e.extra.portIsDefault=e.port===n)}t.exports=r},{}],137:[function(e,t,n){"use strict";function r(e,t){e.query.string.full=o(e.query.object,!1),t.removeEmptyQueries&&(e.query.string.stripped=o(e.query.object,!0))}function o(e,t){var n=0,r="";for(var o in e)if(""!==o&&!0===i.call(e,o)){var a=e[o];""===a&&t||(r+=1==++n?"?":"&",o=encodeURIComponent(o),r+=""!==a?o+"="+encodeURIComponent(a).replace(/%20/g,"+"):o)}return r}var i=Object.prototype.hasOwnProperty;t.exports=r},{}],138:[function(e,t,n){"use strict";function r(e){var t=e.protocol;return t&&t.indexOf(":")===t.length-1&&(t=t.substr(0,t.length-1)),e.host={full:e.hostname,stripped:null},e.path={absolute:{array:null,string:e.pathname},relative:{array:null,string:null}},e.query={object:e.query,string:{full:null,stripped:null}},e.extra={hrefInfo:{minimumPathOnly:null,minimumResourceOnly:null,minimumQueryOnly:null,minimumHashOnly:null,empty:null,separatorOnlyQuery:"?"===e.search},portIsDefault:null,relation:{maximumScheme:null,maximumAuth:null,maximumHost:null,maximumPort:null,maximumPath:null,maximumResource:null,maximumQuery:null,maximumHash:null,minimumScheme:null,minimumAuth:null,minimumHost:null,minimumPort:null,minimumPath:null,minimumResource:null,minimumQuery:null,minimumHash:null,overridesQuery:null},resourceIsIndex:null,slashes:e.slashes},e.resource=null,e.scheme=t,delete e.hostname,delete e.pathname,delete e.protocol,delete e.search,delete e.slashes,e}function o(e,t){var n=!0;return t.rejectedSchemes.every(function(t){return n=!(0===e.indexOf(t+":"))}),n}function i(e,t){return o(e,t)?r(a(e,!0,t.slashesDenoteHost)):{href:e,valid:!1}}var a=e("url").parse;t.exports=i},{url:161}],139:[function(e,t,n){"use strict";function r(e,t,n){u.upToPath(e,t,n),e.extra.relation.minimumScheme&&(e.scheme=t.scheme),e.extra.relation.minimumAuth&&(e.auth=t.auth),e.extra.relation.minimumHost&&(e.host=s.clone(t.host)),e.extra.relation.minimumPort&&i(e,t),e.extra.relation.minimumScheme&&o(e,t),u.pathOn(e,t,n),e.extra.relation.minimumResource&&a(e,t),e.extra.relation.minimumQuery&&(e.query=s.clone(t.query)),e.extra.relation.minimumHash&&(e.hash=t.hash)}function o(e,t){if(e.extra.relation.maximumHost||!e.extra.hrefInfo.minimumResourceOnly){var n=e.path.absolute.array,r="/";n?(e.extra.hrefInfo.minimumPathOnly&&0!==e.path.absolute.string.indexOf("/")&&(n=t.path.absolute.array.concat(n)),n=l.resolveDotSegments(n),r+=l.join(n)):n=[],e.path.absolute.array=n,e.path.absolute.string=r}else e.path=s.clone(t.path)}function i(e,t){e.port=t.port,e.extra.portIsDefault=t.extra.portIsDefault}function a(e,t){e.resource=t.resource,e.extra.resourceIsIndex=t.extra.resourceIsIndex}var u=e("./findRelation"),s=e("../util/object"),l=e("../util/path");t.exports=r},{"../util/object":143,"../util/path":144,"./findRelation":140}],140:[function(e,t,n){"use strict";function r(e,t,n){var r=e.extra.hrefInfo.minimumPathOnly,o=e.scheme===t.scheme||!e.scheme,i=o&&(e.auth===t.auth||n.removeAuth||r),a=n.ignore_www?"stripped":"full",u=i&&(e.host[a]===t.host[a]||r),s=u&&(e.port===t.port||r);e.extra.relation.minimumScheme=o,e.extra.relation.minimumAuth=i,e.extra.relation.minimumHost=u,e.extra.relation.minimumPort=s,e.extra.relation.maximumScheme=!o||o&&!i,e.extra.relation.maximumAuth=!o||o&&!u,e.extra.relation.maximumHost=!o||o&&!s}function o(e,t,n){var r=e.extra.hrefInfo.minimumQueryOnly,o=e.extra.hrefInfo.minimumHashOnly,i=e.extra.hrefInfo.empty,a=e.extra.relation.minimumPort,u=e.extra.relation.minimumScheme,s=a&&e.path.absolute.string===t.path.absolute.string,l=e.resource===t.resource||!e.resource&&t.extra.resourceIsIndex||n.removeDirectoryIndexes&&e.extra.resourceIsIndex&&!t.resource,c=s&&(l||r||o||i),f=n.removeEmptyQueries?"stripped":"full",p=e.query.string[f],h=t.query.string[f],d=c&&!!p&&p===h||(o||i)&&!e.extra.hrefInfo.separatorOnlyQuery,m=d&&e.hash===t.hash;e.extra.relation.minimumPath=s,e.extra.relation.minimumResource=c,e.extra.relation.minimumQuery=d,e.extra.relation.minimumHash=m,e.extra.relation.maximumPort=!u||u&&!s,e.extra.relation.maximumPath=!u||u&&!c,e.extra.relation.maximumResource=!u||u&&!d,e.extra.relation.maximumQuery=!u||u&&!m,e.extra.relation.maximumHash=!u||u&&!m,e.extra.relation.overridesQuery=s&&e.extra.relation.maximumResource&&!d&&!!h}t.exports={pathOn:o,upToPath:r}},{}],141:[function(e,t,n){"use strict";function r(e,t,n){return o(t,e,n),i(t,e,n),t}var o=e("./absolutize"),i=e("./relativize");t.exports=r},{"./absolutize":139,"./relativize":142}],142:[function(e,t,n){"use strict";function r(e,t){var n=[],r=!0,o=-1;return t.forEach(function(t,i){r&&(e[i]!==t?r=!1:o=i),r||n.push("..")}),e.forEach(function(e,t){t>o&&n.push(e)}),n}function o(e,t,n){if(e.extra.relation.minimumScheme){var o=r(e.path.absolute.array,t.path.absolute.array);e.path.relative.array=o,e.path.relative.string=i.join(o)}}var i=e("../util/path");t.exports=o},{"../util/path":144}],143:[function(e,t,n){"use strict";function r(e){if(e instanceof Object){var t=e instanceof Array?[]:{};for(var n in e)e.hasOwnProperty(n)&&(t[n]=r(e[n]));return t}return e}function o(e){return!!e&&"object"==typeof e&&e.constructor===Object}function i(e,t){if(e instanceof Object&&t instanceof Object)for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}t.exports={clone:r,isPlainObject:o,shallowMerge:i}},{}],144:[function(e,t,n){"use strict";function r(e){return e.length>0?e.join("/")+"/":""}function o(e){var t=[];return e.forEach(function(e){".."!==e?"."!==e&&t.push(e):t.length>0&&t.splice(t.length-1,1)}),t}t.exports={join:r,resolveDotSegments:o}},{}],145:[function(e,t,n){function r(){this._array=[],this._set=Object.create(null)}var o=e("./util"),i=Object.prototype.hasOwnProperty;r.fromArray=function(e,t){for(var n=new r,o=0,i=e.length;o<i;o++)n.add(e[o],t);return n},r.prototype.size=function(){return Object.getOwnPropertyNames(this._set).length},r.prototype.add=function(e,t){var n=o.toSetString(e),r=i.call(this._set,n),a=this._array.length;r&&!t||this._array.push(e),r||(this._set[n]=a)},r.prototype.has=function(e){var t=o.toSetString(e);return i.call(this._set,t)},r.prototype.indexOf=function(e){var t=o.toSetString(e);if(i.call(this._set,t))return this._set[t];throw new Error('"'+e+'" is not in the set.')},r.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error("No element indexed by "+e)},r.prototype.toArray=function(){return this._array.slice()},n.ArraySet=r},{"./util":154}],146:[function(e,t,n){function r(e){return e<0?1+(-e<<1):0+(e<<1)}function o(e){var t=e>>1;return 1==(1&e)?-t:t}var i=e("./base64");n.encode=function(e){var t,n="",o=r(e);do{t=31&o,(o>>>=5)>0&&(t|=32),n+=i.encode(t)}while(o>0);return n},n.decode=function(e,t,n){var r,a,u=e.length,s=0,l=0;do{if(t>=u)throw new Error("Expected more digits in base 64 VLQ value.");if(-1===(a=i.decode(e.charCodeAt(t++))))throw new Error("Invalid base64 digit: "+e.charAt(t-1));r=!!(32&a),s+=(a&=31)<<l,l+=5}while(r);n.value=o(s),n.rest=t}},{"./base64":147}],147:[function(e,t,n){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");n.encode=function(e){if(0<=e&&e<r.length)return r[e];throw new TypeError("Must be between 0 and 63: "+e)},n.decode=function(e){return 65<=e&&e<=90?e-65:97<=e&&e<=122?e-97+26:48<=e&&e<=57?e-48+52:43==e?62:47==e?63:-1}},{}],148:[function(e,t,n){function r(e,t,o,i,a,u){var s=Math.floor((t-e)/2)+e,l=a(o,i[s],!0);return 0===l?s:l>0?t-s>1?r(s,t,o,i,a,u):u==n.LEAST_UPPER_BOUND?t<i.length?t:-1:s:s-e>1?r(e,s,o,i,a,u):u==n.LEAST_UPPER_BOUND?s:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var a=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(a<0)return-1;for(;a-1>=0&&0===o(t[a],t[a-1],!0);)--a;return a}},{}],149:[function(e,t,n){function r(e,t){var n=e.generatedLine,r=t.generatedLine,o=e.generatedColumn,a=t.generatedColumn;return r>n||r==n&&a>=o||i.compareByGeneratedPositionsInflated(e,t)<=0}function o(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var i=e("./util");o.prototype.unsortedForEach=function(e,t){this._array.forEach(e,t)},o.prototype.add=function(e){r(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},o.prototype.toArray=function(){return this._sorted||(this._array.sort(i.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},n.MappingList=o},{"./util":154}],150:[function(e,t,n){function r(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function o(e,t){return Math.round(e+Math.random()*(t-e))}function i(e,t,n,a){if(n<a){var u=n-1;r(e,o(n,a),a);for(var s=e[a],l=n;l<a;l++)t(e[l],s)<=0&&r(e,u+=1,l);r(e,u+1,l);var c=u+1;i(e,t,n,c-1),i(e,t,c+1,a)}}n.quickSort=function(e,t){i(e,t,0,e.length-1)}},{}],151:[function(e,t,n){function r(e){var t=e;return"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=t.sections?new a(t):new o(t)}function o(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=u.getArg(t,"version"),r=u.getArg(t,"sources"),o=u.getArg(t,"names",[]),i=u.getArg(t,"sourceRoot",null),a=u.getArg(t,"sourcesContent",null),s=u.getArg(t,"mappings"),c=u.getArg(t,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);r=r.map(String).map(u.normalize).map(function(e){return i&&u.isAbsolute(i)&&u.isAbsolute(e)?u.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(r,!0),this.sourceRoot=i,this.sourcesContent=a,this._mappings=s,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function a(e){var t=e;"string"==typeof e&&(t=JSON.parse(e.replace(/^\)\]\}'/,"")));var n=u.getArg(t,"version"),o=u.getArg(t,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var t=u.getArg(e,"offset"),n=u.getArg(t,"line"),o=u.getArg(t,"column");if(n<i.line||n===i.line&&o<i.column)throw new Error("Section offsets must be ordered and non-overlapping.");return i=t,{generatedOffset:{generatedLine:n+1,generatedColumn:o+1},consumer:new r(u.getArg(e,"map"))}})}var u=e("./util"),s=e("./binary-search"),l=e("./array-set").ArraySet,c=e("./base64-vlq"),f=e("./quick-sort").quickSort;r.fromSourceMap=function(e){return o.fromSourceMap(e)},r.prototype._version=3,r.prototype.__generatedMappings=null,Object.defineProperty(r.prototype,"_generatedMappings",{get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),r.prototype.__originalMappings=null,Object.defineProperty(r.prototype,"_originalMappings",{get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),r.prototype._charIsMappingSeparator=function(e,t){var n=e.charAt(t);return";"===n||","===n},r.prototype._parseMappings=function(e,t){throw new Error("Subclasses must implement _parseMappings")},r.GENERATED_ORDER=1,r.ORIGINAL_ORDER=2,r.GREATEST_LOWER_BOUND=1,r.LEAST_UPPER_BOUND=2,r.prototype.eachMapping=function(e,t,n){var o,i=t||null;switch(n||r.GENERATED_ORDER){case r.GENERATED_ORDER:o=this._generatedMappings;break;case r.ORIGINAL_ORDER:o=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var a=this.sourceRoot;o.map(function(e){var t=null===e.source?null:this._sources.at(e.source);return null!=t&&null!=a&&(t=u.join(a,t)),{source:t,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:null===e.name?null:this._names.at(e.name)}},this).forEach(e,i)},r.prototype.allGeneratedPositionsFor=function(e){var t=u.getArg(e,"line"),n={source:u.getArg(e,"source"),originalLine:t,originalColumn:u.getArg(e,"column",0)};if(null!=this.sourceRoot&&(n.source=u.relative(this.sourceRoot,n.source)),!this._sources.has(n.source))return[];n.source=this._sources.indexOf(n.source);var r=[],o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",u.compareByOriginalPositions,s.LEAST_UPPER_BOUND);if(o>=0){var i=this._originalMappings[o];if(void 0===e.column)for(var a=i.originalLine;i&&i.originalLine===a;)r.push({line:u.getArg(i,"generatedLine",null),column:u.getArg(i,"generatedColumn",null),lastColumn:u.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===t&&i.originalColumn==l;)r.push({line:u.getArg(i,"generatedLine",null),column:u.getArg(i,"generatedColumn",null),lastColumn:u.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return r},n.SourceMapConsumer=r,o.prototype=Object.create(r.prototype),o.prototype.consumer=r,o.fromSourceMap=function(e){var t=Object.create(o.prototype),n=t._names=l.fromArray(e._names.toArray(),!0),r=t._sources=l.fromArray(e._sources.toArray(),!0);t.sourceRoot=e._sourceRoot,t.sourcesContent=e._generateSourcesContent(t._sources.toArray(),t.sourceRoot),t.file=e._file;for(var a=e._mappings.toArray().slice(),s=t.__generatedMappings=[],c=t.__originalMappings=[],p=0,h=a.length;p<h;p++){var d=a[p],m=new i;m.generatedLine=d.generatedLine,m.generatedColumn=d.generatedColumn,d.source&&(m.source=r.indexOf(d.source),m.originalLine=d.originalLine,m.originalColumn=d.originalColumn,d.name&&(m.name=n.indexOf(d.name)),c.push(m)),s.push(m)}return f(t.__originalMappings,u.compareByOriginalPositions),t},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._sources.toArray().map(function(e){return null!=this.sourceRoot?u.join(this.sourceRoot,e):e},this)}}),o.prototype._parseMappings=function(e,t){for(var n,r,o,a,s,l=1,p=0,h=0,d=0,m=0,g=0,v=e.length,b=0,y={},_={},w=[],A=[];b<v;)if(";"===e.charAt(b))l++,b++,p=0;else if(","===e.charAt(b))b++;else{for((n=new i).generatedLine=l,a=b;a<v&&!this._charIsMappingSeparator(e,a);a++);if(r=e.slice(b,a),o=y[r])b+=r.length;else{for(o=[];b<a;)c.decode(e,b,_),s=_.value,b=_.rest,o.push(s);if(2===o.length)throw new Error("Found a source, but no line and column");if(3===o.length)throw new Error("Found a source and line, but no column");y[r]=o}n.generatedColumn=p+o[0],p=n.generatedColumn,o.length>1&&(n.source=m+o[1],m+=o[1],n.originalLine=h+o[2],h=n.originalLine,n.originalLine+=1,n.originalColumn=d+o[3],d=n.originalColumn,o.length>4&&(n.name=g+o[4],g+=o[4])),A.push(n),"number"==typeof n.originalLine&&w.push(n)}f(A,u.compareByGeneratedPositionsDeflated),this.__generatedMappings=A,f(w,u.compareByOriginalPositions),this.__originalMappings=w},o.prototype._findMapping=function(e,t,n,r,o,i){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[r]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[r]);return s.search(e,t,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e<this._generatedMappings.length;++e){var t=this._generatedMappings[e];if(e+1<this._generatedMappings.length){var n=this._generatedMappings[e+1];if(t.generatedLine===n.generatedLine){t.lastGeneratedColumn=n.generatedColumn-1;continue}}t.lastGeneratedColumn=1/0}},o.prototype.originalPositionFor=function(e){var t={generatedLine:u.getArg(e,"line"),generatedColumn:u.getArg(e,"column")},n=this._findMapping(t,this._generatedMappings,"generatedLine","generatedColumn",u.compareByGeneratedPositionsDeflated,u.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(n>=0){var o=this._generatedMappings[n];if(o.generatedLine===t.generatedLine){var i=u.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=u.join(this.sourceRoot,i)));var a=u.getArg(o,"name",null);return null!==a&&(a=this._names.at(a)),{source:i,line:u.getArg(o,"originalLine",null),column:u.getArg(o,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,t){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=u.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var n;if(null!=this.sourceRoot&&(n=u.urlParse(this.sourceRoot))){var r=e.replace(/^file:\/\//,"");if("file"==n.scheme&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!n.path||"/"==n.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var t=u.getArg(e,"source");if(null!=this.sourceRoot&&(t=u.relative(this.sourceRoot,t)),!this._sources.has(t))return{line:null,column:null,lastColumn:null};var n={source:t=this._sources.indexOf(t),originalLine:u.getArg(e,"line"),originalColumn:u.getArg(e,"column")},o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",u.compareByOriginalPositions,u.getArg(e,"bias",r.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===n.source)return{line:u.getArg(i,"generatedLine",null),column:u.getArg(i,"generatedColumn",null),lastColumn:u.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,a.prototype=Object.create(r.prototype),a.prototype.constructor=r,a.prototype._version=3,Object.defineProperty(a.prototype,"sources",{get:function(){for(var e=[],t=0;t<this._sections.length;t++)for(var n=0;n<this._sections[t].consumer.sources.length;n++)e.push(this._sections[t].consumer.sources[n]);return e}}),a.prototype.originalPositionFor=function(e){var t={generatedLine:u.getArg(e,"line"),generatedColumn:u.getArg(e,"column")},n=s.search(t,this._sections,function(e,t){var n=e.generatedLine-t.generatedOffset.generatedLine;return n||e.generatedColumn-t.generatedOffset.generatedColumn}),r=this._sections[n];return r?r.consumer.originalPositionFor({line:t.generatedLine-(r.generatedOffset.generatedLine-1),column:t.generatedColumn-(r.generatedOffset.generatedLine===t.generatedLine?r.generatedOffset.generatedColumn-1:0),bias:e.bias}):{source:null,line:null,column:null,name:null}},a.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(e){return e.consumer.hasContentsOfAllSources()})},a.prototype.sourceContentFor=function(e,t){for(var n=0;n<this._sections.length;n++){var r=this._sections[n].consumer.sourceContentFor(e,!0);if(r)return r}if(t)return null;throw new Error('"'+e+'" is not in the SourceMap.')},a.prototype.generatedPositionFor=function(e){for(var t=0;t<this._sections.length;t++){var n=this._sections[t];if(-1!==n.consumer.sources.indexOf(u.getArg(e,"source"))){var r=n.consumer.generatedPositionFor(e);if(r)return{line:r.line+(n.generatedOffset.generatedLine-1),column:r.column+(n.generatedOffset.generatedLine===r.line?n.generatedOffset.generatedColumn-1:0)}}}return{line:null,column:null}},a.prototype._parseMappings=function(e,t){this.__generatedMappings=[],this.__originalMappings=[];for(var n=0;n<this._sections.length;n++)for(var r=this._sections[n],o=r.consumer._generatedMappings,i=0;i<o.length;i++){var a=o[i],s=r.consumer._sources.at(a.source);null!==r.consumer.sourceRoot&&(s=u.join(r.consumer.sourceRoot,s)),this._sources.add(s),s=this._sources.indexOf(s);var l=r.consumer._names.at(a.name);this._names.add(l),l=this._names.indexOf(l);var c={source:s,generatedLine:a.generatedLine+(r.generatedOffset.generatedLine-1),generatedColumn:a.generatedColumn+(r.generatedOffset.generatedLine===a.generatedLine?r.generatedOffset.generatedColumn-1:0),originalLine:a.originalLine,originalColumn:a.originalColumn,name:l};this.__generatedMappings.push(c),"number"==typeof c.originalLine&&this.__originalMappings.push(c)}f(this.__generatedMappings,u.compareByGeneratedPositionsDeflated),f(this.__originalMappings,u.compareByOriginalPositions)},n.IndexedSourceMapConsumer=a},{"./array-set":145,"./base64-vlq":146,"./binary-search":148,"./quick-sort":150,"./util":154}],152:[function(e,t,n){function r(e){e||(e={}),this._file=i.getArg(e,"file",null),this._sourceRoot=i.getArg(e,"sourceRoot",null),this._skipValidation=i.getArg(e,"skipValidation",!1),this._sources=new a,this._names=new a,this._mappings=new u,this._sourcesContents=null}var o=e("./base64-vlq"),i=e("./util"),a=e("./array-set").ArraySet,u=e("./mapping-list").MappingList;r.prototype._version=3,r.fromSourceMap=function(e){var t=e.sourceRoot,n=new r({file:e.file,sourceRoot:t});return e.eachMapping(function(e){var r={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(r.source=e.source,null!=t&&(r.source=i.relative(t,r.source)),r.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(r.name=e.name)),n.addMapping(r)}),e.sources.forEach(function(t){var r=e.sourceContentFor(t);null!=r&&n.setSourceContent(t,r)}),n},r.prototype.addMapping=function(e){var t=i.getArg(e,"generated"),n=i.getArg(e,"original",null),r=i.getArg(e,"source",null),o=i.getArg(e,"name",null);this._skipValidation||this._validateMapping(t,n,r,o),null!=r&&(r=String(r),this._sources.has(r)||this._sources.add(r)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:t.line,generatedColumn:t.column,originalLine:null!=n&&n.line,originalColumn:null!=n&&n.column,source:r,name:o})},r.prototype.setSourceContent=function(e,t){var n=e;null!=this._sourceRoot&&(n=i.relative(this._sourceRoot,n)),null!=t?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[i.toSetString(n)]=t):this._sourcesContents&&(delete this._sourcesContents[i.toSetString(n)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},r.prototype.applySourceMap=function(e,t,n){var r=t;if(null==t){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');r=e.file}var o=this._sourceRoot;null!=o&&(r=i.relative(o,r));var u=new a,s=new a;this._mappings.unsortedForEach(function(t){if(t.source===r&&null!=t.originalLine){var a=e.originalPositionFor({line:t.originalLine,column:t.originalColumn});null!=a.source&&(t.source=a.source,null!=n&&(t.source=i.join(n,t.source)),null!=o&&(t.source=i.relative(o,t.source)),t.originalLine=a.line,t.originalColumn=a.column,null!=a.name&&(t.name=a.name))}var l=t.source;null==l||u.has(l)||u.add(l);var c=t.name;null==c||s.has(c)||s.add(c)},this),this._sources=u,this._names=s,e.sources.forEach(function(t){var r=e.sourceContentFor(t);null!=r&&(null!=n&&(t=i.join(n,t)),null!=o&&(t=i.relative(o,t)),this.setSourceContent(t,r))},this)},r.prototype._validateMapping=function(e,t,n,r){if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||t||n||r)&&!(e&&"line"in e&&"column"in e&&t&&"line"in t&&"column"in t&&e.line>0&&e.column>=0&&t.line>0&&t.column>=0&&n))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:t,name:r}))},r.prototype._serializeMappings=function(){for(var e,t,n,r,a=0,u=1,s=0,l=0,c=0,f=0,p="",h=this._mappings.toArray(),d=0,m=h.length;d<m;d++){if(t=h[d],e="",t.generatedLine!==u)for(a=0;t.generatedLine!==u;)e+=";",u++;else if(d>0){if(!i.compareByGeneratedPositionsInflated(t,h[d-1]))continue;e+=","}e+=o.encode(t.generatedColumn-a),a=t.generatedColumn,null!=t.source&&(r=this._sources.indexOf(t.source),e+=o.encode(r-f),f=r,e+=o.encode(t.originalLine-1-l),l=t.originalLine-1,e+=o.encode(t.originalColumn-s),s=t.originalColumn,null!=t.name&&(n=this._names.indexOf(t.name),e+=o.encode(n-c),c=n)),p+=e}return p},r.prototype._generateSourcesContent=function(e,t){return e.map(function(e){if(!this._sourcesContents)return null;null!=t&&(e=i.relative(t,e));var n=i.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,n)?this._sourcesContents[n]:null},this)},r.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},r.prototype.toString=function(){return JSON.stringify(this.toJSON())},n.SourceMapGenerator=r},{"./array-set":145,"./base64-vlq":146,"./mapping-list":149,"./util":154}],153:[function(e,t,n){function r(e,t,n,r,o){this.children=[],this.sourceContents={},this.line=null==e?null:e,this.column=null==t?null:t,this.source=null==n?null:n,this.name=null==o?null:o,this[a]=!0,null!=r&&this.add(r)}var o=e("./source-map-generator").SourceMapGenerator,i=e("./util"),a="$$$isSourceNode$$$";r.fromStringWithSourceMap=function(e,t,n){function o(e,t){if(null===e||void 0===e.source)a.add(t);else{var o=n?i.join(n,e.source):e.source;a.add(new r(e.originalLine,e.originalColumn,o,t,e.name))}}var a=new r,u=e.split(/(\r?\n)/),s=function(){return u.shift()+(u.shift()||"")},l=1,c=0,f=null;return t.eachMapping(function(e){if(null!==f){if(!(l<e.generatedLine)){var t=(n=u[0]).substr(0,e.generatedColumn-c);return u[0]=n.substr(e.generatedColumn-c),c=e.generatedColumn,o(f,t),void(f=e)}o(f,s()),l++,c=0}for(;l<e.generatedLine;)a.add(s()),l++;if(c<e.generatedColumn){var n=u[0];a.add(n.substr(0,e.generatedColumn)),u[0]=n.substr(e.generatedColumn),c=e.generatedColumn}f=e},this),u.length>0&&(f&&o(f,s()),a.add(u.join(""))),t.sources.forEach(function(e){var r=t.sourceContentFor(e);null!=r&&(null!=n&&(e=i.join(n,e)),a.setSourceContent(e,r))}),a},r.prototype.add=function(e){if(Array.isArray(e))e.forEach(function(e){this.add(e)},this);else{if(!e[a]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);e&&this.children.push(e)}return this},r.prototype.prepend=function(e){if(Array.isArray(e))for(var t=e.length-1;t>=0;t--)this.prepend(e[t]);else{if(!e[a]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},r.prototype.walk=function(e){for(var t,n=0,r=this.children.length;n<r;n++)(t=this.children[n])[a]?t.walk(e):""!==t&&e(t,{source:this.source,line:this.line,column:this.column,name:this.name})},r.prototype.join=function(e){var t,n,r=this.children.length;if(r>0){for(t=[],n=0;n<r-1;n++)t.push(this.children[n]),t.push(e);t.push(this.children[n]),this.children=t}return this},r.prototype.replaceRight=function(e,t){var n=this.children[this.children.length-1];return n[a]?n.replaceRight(e,t):"string"==typeof n?this.children[this.children.length-1]=n.replace(e,t):this.children.push("".replace(e,t)),this},r.prototype.setSourceContent=function(e,t){this.sourceContents[i.toSetString(e)]=t},r.prototype.walkSourceContents=function(e){for(var t=0,n=this.children.length;t<n;t++)this.children[t][a]&&this.children[t].walkSourceContents(e);for(var r=Object.keys(this.sourceContents),t=0,n=r.length;t<n;t++)e(i.fromSetString(r[t]),this.sourceContents[r[t]])},r.prototype.toString=function(){var e="";return this.walk(function(t){e+=t}),e},r.prototype.toStringWithSourceMap=function(e){var t={code:"",line:1,column:0},n=new o(e),r=!1,i=null,a=null,u=null,s=null;return this.walk(function(e,o){t.code+=e,null!==o.source&&null!==o.line&&null!==o.column?(i===o.source&&a===o.line&&u===o.column&&s===o.name||n.addMapping({source:o.source,original:{line:o.line,column:o.column},generated:{line:t.line,column:t.column},name:o.name}),i=o.source,a=o.line,u=o.column,s=o.name,r=!0):r&&(n.addMapping({generated:{line:t.line,column:t.column}}),i=null,r=!1);for(var l=0,c=e.length;l<c;l++)10===e.charCodeAt(l)?(t.line++,t.column=0,l+1===c?(i=null,r=!1):r&&n.addMapping({source:o.source,original:{line:o.line,column:o.column},generated:{line:t.line,column:t.column},name:o.name})):t.column++}),this.walkSourceContents(function(e,t){n.setSourceContent(e,t)}),{code:t.code,map:n}},n.SourceNode=r},{"./source-map-generator":152,"./util":154}],154:[function(e,t,n){function r(e,t,n){if(t in e)return e[t];if(3===arguments.length)return n;throw new Error('"'+t+'" is a required argument.')}function o(e){var t=e.match(v);return t?{scheme:t[1],auth:t[2],host:t[3],port:t[4],path:t[5]}:null}function i(e){var t="";return e.scheme&&(t+=e.scheme+":"),t+="//",e.auth&&(t+=e.auth+"@"),e.host&&(t+=e.host),e.port&&(t+=":"+e.port),e.path&&(t+=e.path),t}function a(e){var t=e,r=o(e);if(r){if(!r.path)return e;t=r.path}for(var a,u=n.isAbsolute(t),s=t.split(/\/+/),l=0,c=s.length-1;c>=0;c--)"."===(a=s[c])?s.splice(c,1):".."===a?l++:l>0&&(""===a?(s.splice(c+1,l),l=0):(s.splice(c,2),l--));return""===(t=s.join("/"))&&(t=u?"/":"."),r?(r.path=t,i(r)):t}function u(e,t){""===e&&(e="."),""===t&&(t=".");var n=o(t),r=o(e);if(r&&(e=r.path||"/"),n&&!n.scheme)return r&&(n.scheme=r.scheme),i(n);if(n||t.match(b))return t;if(r&&!r.host&&!r.path)return r.host=t,i(r);var u="/"===t.charAt(0)?t:a(e.replace(/\/+$/,"")+"/"+t);return r?(r.path=u,i(r)):u}function s(e,t){""===e&&(e="."),e=e.replace(/\/$/,"");for(var n=0;0!==t.indexOf(e+"/");){var r=e.lastIndexOf("/");if(r<0)return t;if((e=e.slice(0,r)).match(/^([^\/]+:\/)?\/*$/))return t;++n}return Array(n+1).join("../")+t.substr(e.length+1)}function l(e){return e}function c(e){return p(e)?"$"+e:e}function f(e){return p(e)?e.slice(1):e}function p(e){if(!e)return!1;var t=e.length;if(t<9)return!1;if(95!==e.charCodeAt(t-1)||95!==e.charCodeAt(t-2)||111!==e.charCodeAt(t-3)||116!==e.charCodeAt(t-4)||111!==e.charCodeAt(t-5)||114!==e.charCodeAt(t-6)||112!==e.charCodeAt(t-7)||95!==e.charCodeAt(t-8)||95!==e.charCodeAt(t-9))return!1;for(var n=t-10;n>=0;n--)if(36!==e.charCodeAt(n))return!1;return!0}function h(e,t,n){var r=e.source-t.source;return 0!==r?r:0!==(r=e.originalLine-t.originalLine)?r:0!==(r=e.originalColumn-t.originalColumn)||n?r:0!==(r=e.generatedColumn-t.generatedColumn)?r:(r=e.generatedLine-t.generatedLine,0!==r?r:e.name-t.name)}function d(e,t,n){var r=e.generatedLine-t.generatedLine;return 0!==r?r:0!==(r=e.generatedColumn-t.generatedColumn)||n?r:0!==(r=e.source-t.source)?r:0!==(r=e.originalLine-t.originalLine)?r:(r=e.originalColumn-t.originalColumn,0!==r?r:e.name-t.name)}function m(e,t){return e===t?0:e>t?1:-1}function g(e,t){var n=e.generatedLine-t.generatedLine;return 0!==n?n:0!==(n=e.generatedColumn-t.generatedColumn)?n:0!==(n=m(e.source,t.source))?n:0!==(n=e.originalLine-t.originalLine)?n:(n=e.originalColumn-t.originalColumn,0!==n?n:m(e.name,t.name))}n.getArg=r;var v=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,b=/^data:.+\,.+$/;n.urlParse=o,n.urlGenerate=i,n.normalize=a,n.join=u,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(v)},n.relative=s;var y=function(){return!("__proto__"in Object.create(null))}();n.toSetString=y?l:c,n.fromSetString=y?l:f,n.compareByOriginalPositions=h,n.compareByGeneratedPositionsDeflated=d,n.compareByGeneratedPositionsInflated=g},{}],155:[function(e,t,n){n.SourceMapGenerator=e("./lib/source-map-generator").SourceMapGenerator,n.SourceMapConsumer=e("./lib/source-map-consumer").SourceMapConsumer,n.SourceNode=e("./lib/source-node").SourceNode},{"./lib/source-map-consumer":151,"./lib/source-map-generator":152,"./lib/source-node":153}],156:[function(e,t,n){(function(t){var r=e("./lib/request"),o=e("xtend"),i=e("builtin-status-codes"),a=e("url"),u=n;u.request=function(e,n){e="string"==typeof e?a.parse(e):o(e);var i=-1===t.location.protocol.search(/^https?:$/)?"http:":"",u=e.protocol||i,s=e.hostname||e.host,l=e.port,c=e.path||"/";s&&-1!==s.indexOf(":")&&(s="["+s+"]"),e.url=(s?u+"//"+s:"")+(l?":"+l:"")+c,e.method=(e.method||"GET").toUpperCase(),e.headers=e.headers||{};var f=new r(e);return n&&f.on("response",n),f},u.get=function(e,t){var n=u.request(e,t);return n.end(),n},u.Agent=function(){},u.Agent.defaultMaxSockets=4,u.STATUS_CODES=i,u.METHODS=["CHECKOUT","CONNECT","COPY","DELETE","GET","HEAD","LOCK","M-SEARCH","MERGE","MKACTIVITY","MKCOL","MOVE","NOTIFY","OPTIONS","PATCH","POST","PROPFIND","PROPPATCH","PURGE","PUT","REPORT","SEARCH","SUBSCRIBE","TRACE","UNLOCK","UNSUBSCRIBE"]}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./lib/request":158,"builtin-status-codes":6,url:161,xtend:165}],157:[function(e,t,n){(function(e){function t(){if(void 0!==i)return i;if(e.XMLHttpRequest){i=new e.XMLHttpRequest;try{i.open("GET",e.XDomainRequest?"/":"https://example.com")}catch(e){i=null}}else i=null;return i}function r(e){var n=t();if(!n)return!1;try{return n.responseType=e,n.responseType===e}catch(e){}return!1}function o(e){return"function"==typeof e}n.fetch=o(e.fetch)&&o(e.ReadableStream),n.blobConstructor=!1;try{new Blob([new ArrayBuffer(1)]),n.blobConstructor=!0}catch(e){}var i,a=void 0!==e.ArrayBuffer,u=a&&o(e.ArrayBuffer.prototype.slice);n.arraybuffer=n.fetch||a&&r("arraybuffer"),n.msstream=!n.fetch&&u&&r("ms-stream"),n.mozchunkedarraybuffer=!n.fetch&&a&&r("moz-chunked-arraybuffer"),n.overrideMimeType=n.fetch||!!t()&&o(t().overrideMimeType),n.vbArray=o(e.VBArray),i=null}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],158:[function(e,t,n){(function(n,r,o){function i(e,t){return u.fetch&&t?"fetch":u.mozchunkedarraybuffer?"moz-chunked-arraybuffer":u.msstream?"ms-stream":u.arraybuffer&&e?"arraybuffer":u.vbArray&&e?"text:vbarray":"text"}function a(e){try{var t=e.status;return null!==t&&0!==t}catch(e){return!1}}var u=e("./capability"),s=e("inherits"),l=e("./response"),c=e("readable-stream"),f=e("to-arraybuffer"),p=l.IncomingMessage,h=l.readyStates,d=t.exports=function(e){var t=this;c.Writable.call(t),t._opts=e,t._body=[],t._headers={},e.auth&&t.setHeader("Authorization","Basic "+new o(e.auth).toString("base64")),Object.keys(e.headers).forEach(function(n){t.setHeader(n,e.headers[n])});var n,r=!0;if("disable-fetch"===e.mode||"timeout"in e)r=!1,n=!0;else if("prefer-streaming"===e.mode)n=!1;else if("allow-wrong-content-type"===e.mode)n=!u.overrideMimeType;else{if(e.mode&&"default"!==e.mode&&"prefer-fast"!==e.mode)throw new Error("Invalid value for opts.mode");n=!0}t._mode=i(n,r),t.on("finish",function(){t._onFinish()})};s(d,c.Writable),d.prototype.setHeader=function(e,t){var n=this,r=e.toLowerCase();-1===m.indexOf(r)&&(n._headers[r]={name:e,value:t})},d.prototype.getHeader=function(e){var t=this._headers[e.toLowerCase()];return t?t.value:null},d.prototype.removeHeader=function(e){delete this._headers[e.toLowerCase()]},d.prototype._onFinish=function(){var e=this;if(!e._destroyed){var t=e._opts,i=e._headers,a=null;"GET"!==t.method&&"HEAD"!==t.method&&(a=u.blobConstructor?new r.Blob(e._body.map(function(e){return f(e)}),{type:(i["content-type"]||{}).value||""}):o.concat(e._body).toString());var s=[];if(Object.keys(i).forEach(function(e){var t=i[e].name,n=i[e].value;Array.isArray(n)?n.forEach(function(e){s.push([t,e])}):s.push([t,n])}),"fetch"===e._mode)r.fetch(e._opts.url,{method:e._opts.method,headers:s,body:a||void 0,mode:"cors",credentials:t.withCredentials?"include":"same-origin"}).then(function(t){e._fetchResponse=t,e._connect()},function(t){e.emit("error",t)});else{var l=e._xhr=new r.XMLHttpRequest;try{l.open(e._opts.method,e._opts.url,!0)}catch(t){return void n.nextTick(function(){e.emit("error",t)})}"responseType"in l&&(l.responseType=e._mode.split(":")[0]),"withCredentials"in l&&(l.withCredentials=!!t.withCredentials),"text"===e._mode&&"overrideMimeType"in l&&l.overrideMimeType("text/plain; charset=x-user-defined"),"timeout"in t&&(l.timeout=t.timeout,l.ontimeout=function(){e.emit("timeout")}),s.forEach(function(e){l.setRequestHeader(e[0],e[1])}),e._response=null,l.onreadystatechange=function(){switch(l.readyState){case h.LOADING:case h.DONE:e._onXHRProgress()}},"moz-chunked-arraybuffer"===e._mode&&(l.onprogress=function(){e._onXHRProgress()}),l.onerror=function(){e._destroyed||e.emit("error",new Error("XHR error"))};try{l.send(a)}catch(t){return void n.nextTick(function(){e.emit("error",t)})}}}},d.prototype._onXHRProgress=function(){var e=this;a(e._xhr)&&!e._destroyed&&(e._response||e._connect(),e._response._onXHRProgress())},d.prototype._connect=function(){var e=this;e._destroyed||(e._response=new p(e._xhr,e._fetchResponse,e._mode),e._response.on("error",function(t){e.emit("error",t)}),e.emit("response",e._response))},d.prototype._write=function(e,t,n){this._body.push(e),n()},d.prototype.abort=d.prototype.destroy=function(){var e=this;e._destroyed=!0,e._response&&(e._response._destroyed=!0),e._xhr&&e._xhr.abort()},d.prototype.end=function(e,t,n){var r=this;"function"==typeof e&&(n=e,e=void 0),c.Writable.prototype.end.call(r,e,t,n)},d.prototype.flushHeaders=function(){},d.prototype.setTimeout=function(){},d.prototype.setNoDelay=function(){},d.prototype.setSocketKeepAlive=function(){};var m=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","date","dnt","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"]}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{"./capability":157,"./response":159,_process:114,buffer:5,inherits:107,"readable-stream":127,"to-arraybuffer":160}],159:[function(e,t,n){(function(t,r,o){var i=e("./capability"),a=e("inherits"),u=e("readable-stream"),s=n.readyStates={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},l=n.IncomingMessage=function(e,n,r){function a(){l.read().then(function(e){if(!s._destroyed){if(e.done)return void s.push(null);s.push(new o(e.value)),a()}}).catch(function(e){s.emit("error",e)})}var s=this;if(u.Readable.call(s),s._mode=r,s.headers={},s.rawHeaders=[],s.trailers={},s.rawTrailers=[],s.on("end",function(){t.nextTick(function(){s.emit("close")})}),"fetch"===r){s._fetchResponse=n,s.url=n.url,s.statusCode=n.status,s.statusMessage=n.statusText,n.headers.forEach(function(e,t){s.headers[t.toLowerCase()]=e,s.rawHeaders.push(t,e)});var l=n.body.getReader();a()}else if(s._xhr=e,s._pos=0,s.url=e.responseURL,s.statusCode=e.status,s.statusMessage=e.statusText,e.getAllResponseHeaders().split(/\r?\n/).forEach(function(e){var t=e.match(/^([^:]+):\s*(.*)/);if(t){var n=t[1].toLowerCase();"set-cookie"===n?(void 0===s.headers[n]&&(s.headers[n]=[]),s.headers[n].push(t[2])):void 0!==s.headers[n]?s.headers[n]+=", "+t[2]:s.headers[n]=t[2],s.rawHeaders.push(t[1],t[2])}}),s._charset="x-user-defined",!i.overrideMimeType){var c=s.rawHeaders["mime-type"];if(c){var f=c.match(/;\s*charset=([^;])(;|$)/);f&&(s._charset=f[1].toLowerCase())}s._charset||(s._charset="utf-8")}};a(l,u.Readable),l.prototype._read=function(){},l.prototype._onXHRProgress=function(){var e=this,t=e._xhr,n=null;switch(e._mode){case"text:vbarray":if(t.readyState!==s.DONE)break;try{n=new r.VBArray(t.responseBody).toArray()}catch(e){}if(null!==n){e.push(new o(n));break}case"text":try{n=t.responseText}catch(t){e._mode="text:vbarray";break}if(n.length>e._pos){var i=n.substr(e._pos);if("x-user-defined"===e._charset){for(var a=new o(i.length),u=0;u<i.length;u++)a[u]=255&i.charCodeAt(u);e.push(a)}else e.push(i,e._charset);e._pos=n.length}break;case"arraybuffer":if(t.readyState!==s.DONE||!t.response)break;n=t.response,e.push(new o(new Uint8Array(n)));break;case"moz-chunked-arraybuffer":if(n=t.response,t.readyState!==s.LOADING||!n)break;e.push(new o(new Uint8Array(n)));break;case"ms-stream":if(n=t.response,t.readyState!==s.LOADING)break;var l=new r.MSStreamReader;l.onprogress=function(){l.result.byteLength>e._pos&&(e.push(new o(new Uint8Array(l.result.slice(e._pos)))),e._pos=l.result.byteLength)},l.onload=function(){e.push(null)},l.readAsArrayBuffer(n)}e._xhr.readyState===s.DONE&&"ms-stream"!==e._mode&&e.push(null)}}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{"./capability":157,_process:114,buffer:5,inherits:107,"readable-stream":127}],160:[function(e,t,n){var r=e("buffer").Buffer;t.exports=function(e){if(e instanceof Uint8Array){if(0===e.byteOffset&&e.byteLength===e.buffer.byteLength)return e.buffer;if("function"==typeof e.buffer.slice)return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}if(r.isBuffer(e)){for(var t=new Uint8Array(e.length),n=e.length,o=0;o<n;o++)t[o]=e[o];return t.buffer}throw new Error("Argument must be a Buffer")}},{buffer:5}],161:[function(e,t,n){"use strict";function r(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function o(e,t,n){if(e&&l.isObject(e)&&e instanceof r)return e;var o=new r;return o.parse(e,t,n),o}function i(e){return l.isString(e)&&(e=o(e)),e instanceof r?e.format():r.prototype.format.call(e)}function a(e,t){return o(e,!1,!0).resolve(t)}function u(e,t){return e?o(e,!1,!0).resolveObject(t):t}var s=e("punycode"),l=e("./util");n.parse=o,n.resolve=a,n.resolveObject=u,n.format=i,n.Url=r;var c=/^([a-z0-9.+-]+:)/i,f=/:[0-9]*$/,p=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,h=["<",">",'"',"`"," ","\r","\n","\t"],d=["{","}","|","\\","^","`"].concat(h),m=["'"].concat(d),g=["%","/","?",";","#"].concat(m),v=["/","?","#"],b={javascript:!0,"javascript:":!0},y={javascript:!0,"javascript:":!0},_={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},w=e("querystring");r.prototype.parse=function(e,t,n){if(!l.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var r=e.indexOf("?"),o=-1!==r&&r<e.indexOf("#")?"?":"#",i=e.split(o);i[0]=i[0].replace(/\\/g,"/");var a=e=i.join(o);if(a=a.trim(),!n&&1===e.split("#").length){var u=p.exec(a);if(u)return this.path=a,this.href=a,this.pathname=u[1],u[2]?(this.search=u[2],this.query=t?w.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search="",this.query={}),this}var f=c.exec(a);if(f){var h=(f=f[0]).toLowerCase();this.protocol=h,a=a.substr(f.length)}if(n||f||a.match(/^\/\/[^@\/]+@[^@\/]+/)){var d="//"===a.substr(0,2);!d||f&&y[f]||(a=a.substr(2),this.slashes=!0)}if(!y[f]&&(d||f&&!_[f])){for(var A=-1,E=0;E<v.length;E++)-1!==(k=a.indexOf(v[E]))&&(-1===A||k<A)&&(A=k);var x,C;-1!==(C=-1===A?a.lastIndexOf("@"):a.lastIndexOf("@",A))&&(x=a.slice(0,C),a=a.slice(C+1),this.auth=decodeURIComponent(x)),A=-1;for(E=0;E<g.length;E++){var k=a.indexOf(g[E]);-1!==k&&(-1===A||k<A)&&(A=k)}-1===A&&(A=a.length),this.host=a.slice(0,A),a=a.slice(A),this.parseHost(),this.hostname=this.hostname||"";var O="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!O)for(var B=this.hostname.split(/\./),E=0,S=B.length;E<S;E++){var D=B[E];if(D&&!D.match(/^[+a-z0-9A-Z_-]{0,63}$/)){for(var T="",R=0,F=D.length;R<F;R++)D.charCodeAt(R)>127?T+="x":T+=D[R];if(!T.match(/^[+a-z0-9A-Z_-]{0,63}$/)){var L=B.slice(0,E),M=B.slice(E+1),P=D.match(/^([+a-z0-9A-Z_-]{0,63})(.*)$/);P&&(L.push(P[1]),M.unshift(P[2])),M.length&&(a="/"+M.join(".")+a),this.hostname=L.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),O||(this.hostname=s.toASCII(this.hostname));var U=this.port?":"+this.port:"",N=this.hostname||"";this.host=N+U,this.href+=this.host,O&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==a[0]&&(a="/"+a))}if(!b[h])for(var E=0,S=m.length;E<S;E++){var q=m[E];if(-1!==a.indexOf(q)){var z=encodeURIComponent(q);z===q&&(z=escape(q)),a=a.split(q).join(z)}}var I=a.indexOf("#");-1!==I&&(this.hash=a.substr(I),a=a.slice(0,I));var j=a.indexOf("?");if(-1!==j?(this.search=a.substr(j),this.query=a.substr(j+1),t&&(this.query=w.parse(this.query)),a=a.slice(0,j)):t&&(this.search="",this.query={}),a&&(this.pathname=a),_[h]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var U=this.pathname||"",V=this.search||"";this.path=U+V}return this.href=this.format(),this},r.prototype.format=function(){var e=this.auth||"";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,":"),e+="@");var t=this.protocol||"",n=this.pathname||"",r=this.hash||"",o=!1,i="";this.host?o=e+this.host:this.hostname&&(o=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(o+=":"+this.port)),this.query&&l.isObject(this.query)&&Object.keys(this.query).length&&(i=w.stringify(this.query));var a=this.search||i&&"?"+i||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||_[t])&&!1!==o?(o="//"+(o||""),n&&"/"!==n.charAt(0)&&(n="/"+n)):o||(o=""),r&&"#"!==r.charAt(0)&&(r="#"+r),a&&"?"!==a.charAt(0)&&(a="?"+a),n=n.replace(/[?#]/g,function(e){return encodeURIComponent(e)}),a=a.replace("#","%23"),t+o+n+a+r},r.prototype.resolve=function(e){return this.resolveObject(o(e,!1,!0)).format()},r.prototype.resolveObject=function(e){if(l.isString(e)){var t=new r;t.parse(e,!1,!0),e=t}for(var n=new r,o=Object.keys(this),i=0;i<o.length;i++){var a=o[i];n[a]=this[a]}if(n.hash=e.hash,""===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var u=Object.keys(e),s=0;s<u.length;s++){var c=u[s];"protocol"!==c&&(n[c]=e[c])}return _[n.protocol]&&n.hostname&&!n.pathname&&(n.path=n.pathname="/"),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!_[e.protocol]){for(var f=Object.keys(e),p=0;p<f.length;p++){var h=f[p];n[h]=e[h]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||y[e.protocol])n.pathname=e.pathname;else{for(E=(e.pathname||"").split("/");E.length&&!(e.host=E.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==E[0]&&E.unshift(""),E.length<2&&E.unshift(""),n.pathname=E.join("/")}if(n.search=e.search,n.query=e.query,n.host=e.host||"",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var d=n.pathname||"",m=n.search||"";n.path=d+m}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var g=n.pathname&&"/"===n.pathname.charAt(0),v=e.host||e.pathname&&"/"===e.pathname.charAt(0),b=v||g||n.host&&e.pathname,w=b,A=n.pathname&&n.pathname.split("/")||[],E=e.pathname&&e.pathname.split("/")||[],x=n.protocol&&!_[n.protocol];if(x&&(n.hostname="",n.port=null,n.host&&(""===A[0]?A[0]=n.host:A.unshift(n.host)),n.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===E[0]?E[0]=e.host:E.unshift(e.host)),e.host=null),b=b&&(""===E[0]||""===A[0])),v)n.host=e.host||""===e.host?e.host:n.host,n.hostname=e.hostname||""===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,A=E;else if(E.length)A||(A=[]),A.pop(),A=A.concat(E),n.search=e.search,n.query=e.query;else if(!l.isNullOrUndefined(e.search))return x&&(n.hostname=n.host=A.shift(),(D=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@"))&&(n.auth=D.shift(),n.host=n.hostname=D.shift())),n.search=e.search,n.query=e.query,l.isNull(n.pathname)&&l.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n;if(!A.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var C=A.slice(-1)[0],k=(n.host||e.host||A.length>1)&&("."===C||".."===C)||""===C,O=0,B=A.length;B>=0;B--)"."===(C=A[B])?A.splice(B,1):".."===C?(A.splice(B,1),O++):O&&(A.splice(B,1),O--);if(!b&&!w)for(;O--;O)A.unshift("..");!b||""===A[0]||A[0]&&"/"===A[0].charAt(0)||A.unshift(""),k&&"/"!==A.join("/").substr(-1)&&A.push("");var S=""===A[0]||A[0]&&"/"===A[0].charAt(0);if(x){n.hostname=n.host=S?"":A.length?A.shift():"";var D=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@");D&&(n.auth=D.shift(),n.host=n.hostname=D.shift())}return(b=b||n.host&&A.length)&&!S&&A.unshift(""),A.length?n.pathname=A.join("/"):(n.pathname=null,n.path=null),l.isNull(n.pathname)&&l.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},r.prototype.parseHost=function(){var e=this.host,t=f.exec(e);t&&(":"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},{"./util":162,punycode:115,querystring:118}],162:[function(e,t,n){"use strict";t.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},{}],163:[function(e,t,n){(function(e){function n(e,t){function n(){if(!o){if(r("throwDeprecation"))throw new Error(t);r("traceDeprecation")?console.trace(t):console.warn(t),o=!0}return e.apply(this,arguments)}if(r("noDeprecation"))return e;var o=!1;return n}function r(t){try{if(!e.localStorage)return!1}catch(e){return!1}var n=e.localStorage[t];return null!=n&&"true"===String(n).toLowerCase()}t.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],164:[function(e,t,n){n.baseChar=/[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B36-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60\u0D61\u0E01-\u0E2E\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102\u1103\u1105-\u1107\u1109\u110B\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D\u116E\u1172\u1173\u1175\u119E\u11A8\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u212E\u2180-\u2182\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\uAC00-\uD7A3]/,n.ideographic=/[\u3007\u3021-\u3029\u4E00-\u9FA5]/,n.letter=/[A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7\u04C8\u04CB\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B36-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60\u0D61\u0E01-\u0E2E\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102\u1103\u1105-\u1107\u1109\u110B\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D\u116E\u1172\u1173\u1175\u119E\u11A8\u11AB\u11AE\u11AF\u11B7\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A\u212B\u212E\u2180-\u2182\u3007\u3021-\u3029\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\u4E00-\u9FA5\uAC00-\uD7A3]/,n.combiningChar=/[\u0300-\u0345\u0360\u0361\u0483-\u0486\u0591-\u05A1\u05A3-\u05B9\u05BB-\u05BD\u05BF\u05C1\u05C2\u05C4\u064B-\u0652\u0670\u06D6-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0901-\u0903\u093C\u093E-\u094D\u0951-\u0954\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A02\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A70\u0A71\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0B01-\u0B03\u0B3C\u0B3E-\u0B43\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B82\u0B83\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C01-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C82\u0C83\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86-\u0F8B\u0F90-\u0F95\u0F97\u0F99-\u0FAD\u0FB1-\u0FB7\u0FB9\u20D0-\u20DC\u20E1\u302A-\u302F\u3099\u309A]/,n.digit=/[0-9\u0660-\u0669\u06F0-\u06F9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE7-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29]/,n.extender=/[\xB7\u02D0\u02D1\u0387\u0640\u0E46\u0EC6\u3005\u3031-\u3035\u309D\u309E\u30FC-\u30FE]/},{}],165:[function(e,t,n){function r(){for(var e={},t=0;t<arguments.length;t++){var n=arguments[t];for(var r in n)o.call(n,r)&&(e[r]=n[r])}return e}t.exports=r;var o=Object.prototype.hasOwnProperty},{}],166:[function(e,t,n){"use strict";function r(e){return u(e,!0)}function o(e){var t=s.source+"(?:\\s*("+i(e)+")[ \\t\\n\\f\\r]*(?:"+c.join("|")+"))?";if(e.customAttrSurround){for(var n=[],r=e.customAttrSurround.length-1;r>=0;r--)n[r]="(?:("+e.customAttrSurround[r][0].source+")\\s*"+t+"\\s*("+e.customAttrSurround[r][1].source+"))";n.push("(?:"+t+")"),t="(?:"+n.join("|")+")"}return new RegExp("^\\s*"+t)}function i(e){return l.concat(e.customAttrAssign||[]).map(function(e){return"(?:"+e.source+")"}).join("|")}function a(e,t){function n(e){var t=e.match(p);if(t){var n={tagName:t[1],attrs:[]};e=e.slice(t[0].length);for(var r,o;!(r=e.match(h))&&(o=e.match(c));)e=e.slice(o[0].length),n.attrs.push(o);if(r)return n.unarySlash=r[1],n.rest=e.slice(r[0].length),n}}function r(e,n){var r;if(n){var o=n.toLowerCase();for(r=l.length-1;r>=0&&l[r].tag.toLowerCase()!==o;r--);}else r=0;if(r>=0){for(var a=l.length-1;a>=r;a--)t.end&&t.end(l[a].tag,l[a].attrs,a>r||!e);l.length=r,i=r&&l[r-1].tag}else"br"===n.toLowerCase()?t.start&&t.start(n,[],!0,""):"p"===n.toLowerCase()&&(t.start&&t.start(n,[],!1,"",!0),t.end&&t.end(n,[]))}for(var i,a,u,s,l=[],c=o(t);e;){if(a=e,i&&w(i)){var f=i.toLowerCase(),x=E[f]||(E[f]=new RegExp("([\\s\\S]*?)</"+f+"[^>]*>","i"));e=e.replace(x,function(e,n){return"script"!==f&&"style"!==f&&"noscript"!==f&&(n=n.replace(/<!--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),t.chars&&t.chars(n),""}),r("</"+f+">",f)}else{var C=e.indexOf("<");if(0===C){if(/^<!--/.test(e)){var k=e.indexOf("--\x3e");if(k>=0){t.comment&&t.comment(e.substring(4,k)),e=e.substring(k+3),u="";continue}}if(/^<!\[/.test(e)){var O=e.indexOf("]>");if(O>=0){t.comment&&t.comment(e.substring(2,O+1),!0),e=e.substring(O+2),u="";continue}}var B=e.match(m);if(B){t.doctype&&t.doctype(B[0]),e=e.substring(B[0].length),u="";continue}var S=e.match(d);if(S){e=e.substring(S[0].length),S[0].replace(d,r),u="/"+S[1].toLowerCase();continue}var D=n(e);if(D){e=D.rest,function(e){var n=e.tagName,o=e.unarySlash;if(t.html5&&"p"===i&&A(n)&&r("",i),!t.html5)for(;i&&b(i);)r("",i);y(n)&&i===n&&r("",n);var a=v(n)||"html"===n&&"head"===i||!!o,u=e.attrs.map(function(e){function n(t){return u=e[t],void 0!==(o=e[t+1])?'"':void 0!==(o=e[t+2])?"'":(void 0===(o=e[t+3])&&_(r)&&(o=r),"")}var r,o,i,a,u,s;g&&-1===e[0].indexOf('""')&&(""===e[3]&&delete e[3],""===e[4]&&delete e[4],""===e[5]&&delete e[5]);var l=1;if(t.customAttrSurround)for(var c=0,f=t.customAttrSurround.length;c<f;c++,l+=7)if(r=e[l+1]){s=n(l+2),i=e[l],a=e[l+6];break}return!r&&(r=e[l])&&(s=n(l+1)),{name:r,value:o,customAssign:u||"=",customOpen:i||"",customClose:a||"",quote:s||""}});a||(l.push({tag:n,attrs:u}),i=n,o=""),t.start&&t.start(n,u,a,o)}(D),u=D.tagName.toLowerCase();continue}}var T;C>=0?(T=e.substring(0,C),e=e.substring(C)):(T=e,e="");var R=n(e);s=R?R.tagName:(R=e.match(d))?"/"+R[1]:"",t.chars&&t.chars(T,u,s),u=""}if(e===a)throw new Error("Parse Error: "+e)}t.partialMarkup||r()}var u=e("./utils").createMapFromString,s=/([^\s"'<>\/=]+)/,l=[/=/],c=[/"([^"]*)"+/.source,/'([^']*)'+/.source,/([^ \t\n\f\r"'`=<>]+)/.source],f=function(){var t=e("ncname").source.slice(1,-1);return"((?:"+t+"\\:)?"+t+")"}(),p=new RegExp("^<"+f),h=/^\s*(\/?)>/,d=new RegExp("^<\\/"+f+"[^>]*>"),m=/^<!DOCTYPE [^>]+>/i,g=!1;"x".replace(/x(.)?/g,function(e,t){g=""===t});var v=r("area,base,basefont,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),b=r("a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,noscript,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,svg,textarea,tt,u,var"),y=r("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),_=r("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),w=r("script,style"),A=r("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),E={};n.HTMLParser=a,n.HTMLtoXML=function(e){var t="";return new a(e,{start:function(e,n,r){t+="<"+e;for(var o=0,i=n.length;o<i;o++)t+=" "+n[o].name+'="'+(n[o].value||"").replace(/"/g,"&#34;")+'"';t+=(r?"/":"")+">"},end:function(e){t+="</"+e+">"},chars:function(e){t+=e},comment:function(e){t+="\x3c!--"+e+"--\x3e"},ignore:function(e){t+=e}}),t},n.HTMLtoDOM=function(e,t){var n={html:!0,head:!0,body:!0,title:!0},r={link:"head",base:"head"};t?t=t.ownerDocument||t.getOwnerDocument&&t.getOwnerDocument()||t:"undefined"!=typeof DOMDocument?t=new DOMDocument:"undefined"!=typeof document&&document.implementation&&document.implementation.createDocument?t=document.implementation.createDocument("","",null):"undefined"!=typeof ActiveX&&(t=new ActiveXObject("Msxml.DOMDocument"));var o=[];if(!(t.documentElement||t.getDocumentElement&&t.getDocumentElement())&&t.createElement&&function(){var e=t.createElement("html"),n=t.createElement("head");n.appendChild(t.createElement("title")),e.appendChild(n),e.appendChild(t.createElement("body")),t.appendChild(e)}(),t.getElementsByTagName)for(var i in n)n[i]=t.getElementsByTagName(i)[0];var u=n.body;return new a(e,{start:function(e,i,a){if(n[e])return void(u=n[e]);var s=t.createElement(e);for(var l in i)s.setAttribute(i[l].name,i[l].value);r[e]&&"boolean"!=typeof n[r[e]]?n[r[e]].appendChild(s):u&&u.appendChild&&u.appendChild(s),a||(o.push(s),u=s)},end:function(){o.length-=1,u=o[o.length-1]},chars:function(e){u.appendChild(t.createTextNode(e))},comment:function(){},ignore:function(){}}),t}},{"./utils":168,ncname:110}],167:[function(e,t,n){"use strict";function r(){}function o(){}r.prototype.sort=function(e,t){t=t||0;for(var n=0,r=this.keys.length;n<r;n++){var o=this.keys[n],i=o.slice(1),a=e.indexOf(i,t);if(-1!==a){do{a!==t&&(e.splice(a,1),e.splice(t,0,i)),t++}while(-1!==(a=e.indexOf(i,t)));return this[o].sort(e,t)}}return e},o.prototype={add:function(e){var t=this;e.forEach(function(n){var r="$"+n;t[r]||(t[r]=[],t[r].processed=0),t[r].push(e)})},createSorter:function(){var e=this,t=new r;return t.keys=Object.keys(e).sort(function(t,n){var r=e[t].length,o=e[n].length;return r<o?1:r>o?-1:t<n?-1:t>n?1:0}).filter(function(n){if(e[n].processed<e[n].length){var r=n.slice(1),i=new o;return e[n].forEach(function(t){for(var n;-1!==(n=t.indexOf(r));)t.splice(n,1);t.forEach(function(t){e["$"+t].processed++}),i.add(t.slice(0))}),t[n]=i.createSorter(),!0}return!1}),t}},t.exports=o},{}],168:[function(e,t,n){"use strict";function r(e,t){var n={};return e.forEach(function(e){n[e]=1}),t?function(e){return 1===n[e.toLowerCase()]}:function(e){return 1===n[e]}}n.createMap=r,n.createMapFromString=function(e,t){return r(e.split(/,/),t)}},{}],"html-minifier":[function(e,t,n){"use strict";function r(e){return e&&e.replace(/\s+/g,function(e){return"\t"===e?"\t":e.replace(/(^|\xA0+)[^\xA0]+/g,"$1 ")})}function o(e,t,n,o,i){var a="",u="";return t.preserveLineBreaks&&(e=e.replace(/^\s*?[\n\r]\s*/,function(){return a="\n",""}).replace(/\s*?[\n\r]\s*$/,function(){return u="\n",""})),n&&(e=e.replace(/^\s+/,function(e){var n=!a&&t.conservativeCollapse;return n&&"\t"===e?"\t":e.replace(/^[^\xA0]+/,"").replace(/(\xA0+)[^\xA0]+/g,"$1 ")||(n?" ":"")})),o&&(e=e.replace(/\s+$/,function(e){var n=!u&&t.conservativeCollapse;return n&&"\t"===e?"\t":e.replace(/[^\xA0]+(\xA0+)/g," $1").replace(/[^\xA0]+$/,"")||(n?" ":"")})),i&&(e=r(e)),a+e+u}function i(e,t,n,r){var i=t&&!re(t);i&&!r.collapseInlineTagWhitespace&&(i="/"===t.charAt(0)?!te(t.slice(1)):!ne(t));var a=n&&!re(n);return a&&!r.collapseInlineTagWhitespace&&(a="/"===n.charAt(0)?!ne(n.slice(1)):!te(n)),o(e,r,i,a,t&&n)}function a(e){return/^\[if\s[^\]]+]|\[endif]$/.test(e)}function u(e,t){for(var n=0,r=t.ignoreCustomComments.length;n<r;n++)if(t.ignoreCustomComments[n].test(e))return!0;return!1}function s(e,t){var n=t.customEventAttributes;if(n){for(var r=n.length;r--;)if(n[r].test(e))return!0;return!1}return/^on[a-z]{3,}$/.test(e)}function l(e){return/^[^ \t\n\f\r"'`=<>]+$/.test(e)}function c(e,t){for(var n=e.length;n--;)if(e[n].name.toLowerCase()===t)return!0;return!1}function f(e,t,n,r){return n=n?X(n.toLowerCase()):"","script"===e&&"language"===t&&"javascript"===n||"form"===e&&"method"===t&&"get"===n||"input"===e&&"type"===t&&"text"===n||"script"===e&&"charset"===t&&!c(r,"src")||"a"===e&&"name"===t&&c(r,"id")||"area"===e&&"shape"===t&&"rect"===n}function p(e){return""===(e=X(e.split(/;/,2)[0]).toLowerCase())||oe(e)}function h(e,t){if("script"!==e)return!1;for(var n=0,r=t.length;n<r;n++)if("type"===t[n].name.toLowerCase())return p(t[n].value);return!0}function d(e){return""===(e=X(e).toLowerCase())||"text/css"===e}function m(e,t){if("style"!==e)return!1;for(var n=0,r=t.length;n<r;n++)if("type"===t[n].name.toLowerCase())return d(t[n].value);return!0}function g(e,t){return ie(e)||"draggable"===e&&!ae(t)}function v(e,t){return/^(?:a|area|link|base)$/.test(t)&&"href"===e||"img"===t&&/^(?:src|longdesc|usemap)$/.test(e)||"object"===t&&/^(?:classid|codebase|data|usemap)$/.test(e)||"q"===t&&"cite"===e||"blockquote"===t&&"cite"===e||("ins"===t||"del"===t)&&"cite"===e||"form"===t&&"action"===e||"input"===t&&("src"===e||"usemap"===e)||"head"===t&&"profile"===e||"script"===t&&("src"===e||"for"===e)}function b(e,t){return/^(?:a|area|object|button)$/.test(t)&&"tabindex"===e||"input"===t&&("maxlength"===e||"tabindex"===e)||"select"===t&&("size"===e||"tabindex"===e)||"textarea"===t&&/^(?:rows|cols|tabindex)$/.test(e)||"colgroup"===t&&"span"===e||"col"===t&&"span"===e||("th"===t||"td"===t)&&("rowspan"===e||"colspan"===e)}function y(e,t,n){if("link"!==e)return!1;for(var r=0,o=t.length;r<o;r++)if("rel"===t[r].name&&t[r].value===n)return!0}function _(e,t,n){return"media"===n&&(y(e,t,"stylesheet")||m(e,t))}function w(e,t){return"srcset"===e&&ue(t)}function A(e,t,n,o,i){if(n&&s(t,o))return n=X(n).replace(/^javascript:\s*/i,""),o.minifyJS(n,!0);if("class"===t)return n=X(n),n=o.sortClassName?o.sortClassName(n):r(n);if(v(t,e))return n=X(n),y(e,i,"canonical")?n:o.minifyURLs(n);if(b(t,e))return X(n);if("style"===t)return(n=X(n))&&(/;$/.test(n)&&!/&#?[0-9a-zA-Z]+;$/.test(n)&&(n=n.replace(/\s*;$/,"")),n=C(o.minifyCSS(x(n)))),n;if(w(t,e))n=X(n).split(/\s+,\s*|\s*,\s+/).map(function(e){var t=e,n="",r=e.match(/\s+([1-9][0-9]*w|[0-9]+(?:\.[0-9]+)?x)$/);if(r){t=t.slice(0,-r[0].length);var i=+r[1].slice(0,-1),a=r[1].slice(-1);1===i&&"x"===a||(n=" "+i+a)}return o.minifyURLs(t)+n}).join(", ");else if(E(e,i)&&"content"===t)n=n.replace(/\s+/g,"").replace(/[0-9]+\.[0-9]+/g,function(e){return(+e).toString()});else if(n&&o.customAttrCollapse&&o.customAttrCollapse.test(t))n=n.replace(/\n+|\r+|\s{2,}/g,"");else if("script"===e&&"type"===t)n=X(n.replace(/\s*;\s*/g,";"));else if(_(e,i,t))return n=X(n),O(o.minifyCSS(k(n)));return n}function E(e,t){if("meta"!==e)return!1;for(var n=0,r=t.length;n<r;n++)if("name"===t[n].name&&"viewport"===t[n].value)return!0}function x(e){return"*{"+e+"}"}function C(e){var t=e.match(/^\*\{([\s\S]*)\}$/);return t?t[1]:e}function k(e){return"@media "+e+"{a{top:0}}"}function O(e){var t=e.match(/^@media ([\s\S]*?)\s*{[\s\S]*}$/);return t?t[1]:e}function B(e,t){return t.processConditionalComments?e.replace(/^(\[if\s[^\]]+]>)([\s\S]*?)(<!\[endif])$/,function(e,n,r,o){return n+$(r,t,!0)+o}):e}function S(e,t,n){for(var r=0,o=n.length;r<o;r++)if("type"===n[r].name.toLowerCase()&&t.processScripts.indexOf(n[r].value)>-1)return $(e,t);return e}function D(e,t){switch(e){case"html":case"head":return!0;case"body":return!ce(t);case"colgroup":return"col"===t;case"tbody":return"tr"===t}return!1}function T(e,t){switch(t){case"colgroup":return"colgroup"===e;case"tbody":return be(e)}return!1}function R(e,t){switch(e){case"html":case"head":case"body":case"colgroup":case"caption":return!0;case"li":case"optgroup":case"tr":return t===e;case"dt":case"dd":return fe(t);case"p":return pe(t);case"rb":case"rt":case"rp":return de(t);case"rtc":return me(t);case"option":return ge(t);case"thead":case"tbody":return ve(t);case"tfoot":return"tbody"===t;case"td":case"th":return ye(t)}return!1}function F(e,t,n,r){return!(n&&!/^\s*$/.test(n))&&("function"==typeof r.removeEmptyAttributes?r.removeEmptyAttributes(t,e):"input"===e&&"value"===t||Ce.test(t))}function L(e,t){for(var n=t.length-1;n>=0;n--)if(t[n].name===e)return!0;return!1}function M(e,t){switch(e){case"textarea":return!1;case"audio":case"script":case"video":if(L("src",t))return!1;break;case"iframe":if(L("src",t)||L("srcdoc",t))return!1;break;case"object":if(L("data",t))return!1;break;case"applet":if(L("code",t))return!1}return!0}function P(e){return!/^(?:script|style|pre|textarea)$/.test(e)}function U(e){return!/^(?:pre|textarea)$/.test(e)}function N(e,t,n,r){var o=r.caseSensitive?e.name:e.name.toLowerCase(),i=e.value;if(r.decodeEntities&&i&&(i=Y(i,{isAttributeValue:!0})),!(r.removeRedundantAttributes&&f(n,o,i,t)||r.removeScriptTypeAttributes&&"script"===n&&"type"===o&&p(i)||r.removeStyleLinkTypeAttributes&&("style"===n||"link"===n)&&"type"===o&&d(i)||(i=A(n,o,i,r,t),r.removeEmptyAttributes&&F(n,o,i,r))))return r.decodeEntities&&i&&(i=i.replace(/&(#?[0-9a-zA-Z]+;)/g,"&amp;$1")),{attr:e,name:o,value:i}}function q(e,t,n,r,o){var i,a,u=e.name,s=e.value,c=e.attr,f=c.quote;return void 0===s||n.removeAttributeQuotes&&!~s.indexOf(o)&&l(s)?a=!r||t||/\/$/.test(s)?s+" ":s:(n.preventAttributesEscaping||(s='"'===(f=void 0===n.quoteCharacter?(s.match(/'/g)||[]).length<(s.match(/"/g)||[]).length?"'":'"':"'"===n.quoteCharacter?"'":'"')?s.replace(/"/g,"&#34;"):s.replace(/'/g,"&#39;")),a=f+s+f,r||n.removeTagWhitespace||(a+=" ")),void 0===s||n.collapseBooleanAttributes&&g(u.toLowerCase(),s.toLowerCase())?(i=u,r||(i+=" ")):i=u+c.customAssign+a,c.customOpen+i+c.customClose}function z(e){return e}function I(e){["html5","includeAutoGeneratedTags"].forEach(function(t){t in e||(e[t]=!0)}),"function"!=typeof e.log&&(e.log=z);for(var t=["canCollapseWhitespace","canTrimWhitespace"],n=0,r=t.length;n<r;n++)e[t[n]]||(e[t[n]]=function(){return!1});if("ignoreCustomComments"in e||(e.ignoreCustomComments=[/^!/]),"ignoreCustomFragments"in e||(e.ignoreCustomFragments=[/<%[\s\S]*?%>/,/<\?[\s\S]*?\?>/]),e.minifyURLs||(e.minifyURLs=z),"function"!=typeof e.minifyURLs){var o=e.minifyURLs;"string"==typeof o?o={site:o}:"object"!=typeof o&&(o={}),e.minifyURLs=function(t){try{return W.relate(t,o)}catch(n){return e.log(n),t}}}if(e.minifyJS||(e.minifyJS=z),"function"!=typeof e.minifyJS){var i=e.minifyJS;"object"!=typeof i&&(i={}),(i.parse||(i.parse={})).bare_returns=!1,e.minifyJS=function(t,n){var r=t.match(/^\s*<!--.*/),o=r?t.slice(r[0].length).replace(/\n\s*-->\s*$/,""):t;i.parse.bare_returns=n;var a=Z.minify(o,i);return a.error?(e.log(a.error),t):a.code.replace(/;$/,"")}}if(e.minifyCSS||(e.minifyCSS=z),"function"!=typeof e.minifyCSS){var a=e.minifyCSS;"object"!=typeof a&&(a={}),e.minifyCSS=function(t){t=t.replace(/(url\s*\(\s*)("|'|)(.*?)\2(\s*\))/gi,function(t,n,r,o,i){return n+r+e.minifyURLs(o)+r+i});try{return new K(a).minify(t).styles}catch(n){return e.log(n),t}}}}function j(e){var t;do{t=Math.random().toString(36).replace(/^0\.[0-9]*/,"")}while(~e.indexOf(t));return t}function V(e,t,n,r){function o(e){return e.map(function(e){return t.caseSensitive?e.name:e.name.toLowerCase()})}function i(e,t){return!t||-1===e.indexOf(t)}function a(e){return i(e,n)&&i(e,r)}function u(e){var n,r;new G(e,{start:function(e,i){s&&(s[e]||(s[e]=new Q),s[e].add(o(i).filter(a)));for(var u=0,c=i.length;u<c;u++){var f=i[u];l&&"class"===(t.caseSensitive?f.name:f.name.toLowerCase())?l.add(X(f.value).split(/[ \t\n\f\r]+/).filter(a)):t.processScripts&&"type"===f.name.toLowerCase()&&(n=e,r=f.value)}},end:function(){n=""},chars:function(e){t.processScripts&&ke(n)&&t.processScripts.indexOf(r)>-1&&u(e)}})}var s=t.sortAttributes&&Object.create(null),l=t.sortClassName&&new Q,c=t.log;if(t.log=null,t.sortAttributes=!1,t.sortClassName=!1,u($(e,t)),t.log=c,s){var f=Object.create(null);for(var p in s)f[p]=s[p].createSorter();t.sortAttributes=function(e,t){var n=f[e];if(n){var r=Object.create(null),i=o(t);i.forEach(function(e,n){(r[e]||(r[e]=[])).push(t[n])}),n.sort(i).forEach(function(e,n){t[n]=r[e].shift()})}}}if(l){var h=l.createSorter();t.sortClassName=function(e){return h.sort(e.split(/[ \n\f\r]+/)).join(" ")}}}function $(e,t,n){function s(e){return e.replace(A,function(e,t,n){var r=W[+n];return r[1]+w+n+r[2]})}function l(e,n){return P(e)||t.canCollapseWhitespace(e,n)}function c(e,n){return U(e)||t.canTrimWhitespace(e,n)}function f(){for(var e=E.length-1;e>0&&!/^<[^\/!]/.test(E[e]);)e--;E.length=Math.max(0,e)}function p(){for(var e=E.length-1;e>0&&!/^<\//.test(E[e]);)e--;E.length=Math.max(0,e)}function d(e,n){for(var r=null;e>=0&&c(r);e--){var o=E[e],a=o.match(/^<\/([\w:-]+)>$/);if(a)r=a[1];else if(/>$/.test(o)||(E[e]=i(o,null,n,t)))break}}function g(e){var t=E.length-1;if(E.length>1){var n=E[E.length-1];/^(?:<!|$)/.test(n)&&-1===n.indexOf(_)&&t--}d(t,e)}var v=[];I(t=t||{}),t.collapseWhitespace&&(e=o(e,t,!0,!0));var b,y,_,w,A,E=[],x="",C="",k=[],O=[],F=[],L="",z="",$=Date.now(),K=[],W=[];e=e.replace(/<!-- htmlmin:ignore -->([\s\S]*?)<!-- htmlmin:ignore -->/g,function(n,r){if(!_){_=j(e);var o=new RegExp("^"+_+"([0-9]+)$");t.ignoreCustomComments?t.ignoreCustomComments.push(o):t.ignoreCustomComments=[o]}var i="\x3c!--"+_+K.length+"--\x3e";return K.push(r),i});var Q=t.ignoreCustomFragments.map(function(e){return e.source});if(Q.length){var Z=new RegExp("\\s*(?:"+Q.join("|")+")+\\s*","g");e=e.replace(Z,function(n){if(!w){w=j(e),A=new RegExp("(\\s*)"+w+"([0-9]+)(\\s*)","g");var r=t.minifyCSS;r&&(t.minifyCSS=function(e){return r(s(e))});var o=t.minifyJS;o&&(t.minifyJS=function(e,t){return o(s(e),t)})}var i=w+W.length;return W.push(/^(\s*)[\s\S]*?(\s*)$/.exec(n)),"\t"+i+"\t"})}(t.sortAttributes&&"function"!=typeof t.sortAttributes||t.sortClassName&&"function"!=typeof t.sortClassName)&&V(e,t,_,w),new G(e,{partialMarkup:n,html5:t.html5,start:function(e,n,r,o,i){var a=e.toLowerCase();if("svg"===a){v.push(t);var u={};for(var s in t)u[s]=t[s];u.keepClosingSlash=!0,u.caseSensitive=!0,t=u}e=t.caseSensitive?e:a,C=e,b=e,ne(e)||(x=""),y=!1,k=n;var h=t.removeOptionalTags;if(h){var d=xe(e);d&&D(L,e)&&f(),L="",d&&R(z,e)&&(p(),h=!T(z,e)),z=""}t.collapseWhitespace&&(O.length||g(e),c(e,n)||O.push(e),l(e,n)||F.push(e));var m="<"+e,_=o&&t.keepClosingSlash;E.push(m),t.sortAttributes&&t.sortAttributes(e,n);for(var A=[],B=n.length,S=!0;--B>=0;){var M=N(n[B],n,e,t);M&&(A.unshift(q(M,_,t,S,w)),S=!1)}A.length>0?(E.push(" "),E.push.apply(E,A)):h&&se(e)&&(L=e),E.push(E.pop()+(_?"/":"")+">"),i&&!t.includeAutoGeneratedTags&&(f(),L="")},end:function(e,n,r){var o=e.toLowerCase();"svg"===o&&(t=v.pop()),e=t.caseSensitive?e:o,t.collapseWhitespace&&(O.length?e===O[O.length-1]&&O.pop():g("/"+e),F.length&&e===F[F.length-1]&&F.pop());var i=!1;e===C&&(C="",i=!y),t.removeOptionalTags&&(i&&_e(L)&&f(),L="",!xe(e)||!z||Ee(z)||"p"===z&&he(e)||p(),z=le(e)?e:""),t.removeEmptyElements&&i&&M(e,n)?(f(),L="",z=""):(r&&!t.includeAutoGeneratedTags?z="":E.push("</"+e+">"),b="/"+e,te(e)?i&&(x+="|"):x="")},chars:function(e,n,r){if(n=""===n?"comment":n,r=""===r?"comment":r,t.decodeEntities&&e&&!ke(C)&&(e=Y(e)),t.collapseWhitespace){if(!O.length){if("comment"===n){var a=E[E.length-1];if(-1===a.indexOf(_)&&(a||(n=b),E.length>1&&(!a||!t.conservativeCollapse&&/ $/.test(x)))){var u=E.length-2;E[u]=E[u].replace(/\s+$/,function(t){return e=t+e,""})}}if(n)if("/nobr"===n||"wbr"===n){if(/^\s/.test(e)){for(var s=E.length-1;s>0&&0!==E[s].lastIndexOf("<"+n);)s--;d(s-1,"br")}}else ne("/"===n.charAt(0)?n.slice(1):n)&&(e=o(e,t,/(?:^|\s)$/.test(x)));!(e=n||r?i(e,n,r,t):o(e,t,!0,!0))&&/\s$/.test(x)&&n&&"/"===n.charAt(0)&&d(E.length-1,r)}F.length||"html"===r||n&&r||(e=o(e,t,!1,!1,!0))}t.processScripts&&ke(C)&&(e=S(e,t,k)),h(C,k)&&(e=t.minifyJS(e)),m(C,k)&&(e=t.minifyCSS(e)),t.removeOptionalTags&&e&&(("html"===L||"body"===L&&!/^\s/.test(e))&&f(),L="",(we(z)||Ae(z)&&!/^\s/.test(e))&&p(),z=""),b=/^\s*$/.test(e)?n:"comment",t.decodeEntities&&e&&!ke(C)&&(e=e.replace(/&(#?[0-9a-zA-Z]+;)/g,"&amp$1").replace(/</g,"&lt;")),x+=e,e&&(y=!0),E.push(e)},comment:function(e,n){var r=n?"<!":"\x3c!--",o=n?">":"--\x3e";e=a(e)?r+B(e,t)+o:t.removeComments?u(e,t)?"\x3c!--"+e+"--\x3e":"":r+e+o,t.removeOptionalTags&&e&&(L="",z=""),E.push(e)},doctype:function(e){E.push(t.useShortDoctype?"<!DOCTYPE html>":r(e))},customAttrAssign:t.customAttrAssign,customAttrSurround:t.customAttrSurround}),t.removeOptionalTags&&(_e(L)&&f(),z&&!Ee(z)&&p()),t.collapseWhitespace&&g("br");var J=H(E,t);return A&&(J=J.replace(A,function(e,n,r,i){var a=W[+r][0];return t.collapseWhitespace?("\t"!==n&&(a=n+a),"\t"!==i&&(a+=i),o(a,{preserveLineBreaks:t.preserveLineBreaks,conservativeCollapse:!t.trimCustomFragments},/^\s/.test(a),/\s$/.test(a))):a})),_&&(J=J.replace(new RegExp("\x3c!--"+_+"([0-9]+)--\x3e","g"),function(e,t){return K[+t]})),t.log("minified in: "+(Date.now()-$)+"ms"),J}function H(e,t){var n,r=t.maxLineLength;if(r){for(var i,a=[],u="",s=0,l=e.length;s<l;s++)i=e[s],u.length+i.length<r?u+=i:(a.push(u.replace(/^\n/,"")),u=i);a.push(u),n=a.join("\n")}else n=e.join("");return t.collapseWhitespace?o(n,t,!0,!0):n}var K=e("clean-css"),Y=e("he").decode,G=e("./htmlparser").HTMLParser,W=e("relateurl"),Q=e("./tokenchain"),Z=e("uglify-js"),J=e("./utils"),X=String.prototype.trim?function(e){return"string"!=typeof e?e:e.trim()}:function(e){return"string"!=typeof e?e:e.replace(/^\s+/,"").replace(/\s+$/,"")},ee=J.createMapFromString,te=ee("a,abbr,acronym,b,bdi,bdo,big,button,cite,code,del,dfn,em,font,i,ins,kbd,mark,math,nobr,q,rt,rp,s,samp,small,span,strike,strong,sub,sup,svg,time,tt,u,var"),ne=ee("a,abbr,acronym,b,big,del,em,font,i,ins,kbd,mark,nobr,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var"),re=ee("comment,img,input,wbr"),oe=J.createMap(["text/javascript","text/ecmascript","text/jscript","application/javascript","application/x-javascript","application/ecmascript"]),ie=ee("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),ae=ee("true,false"),ue=ee("img,source"),se=ee("html,head,body,colgroup,tbody"),le=ee("html,head,body,li,dt,dd,p,rb,rt,rtc,rp,optgroup,option,colgroup,caption,thead,tbody,tfoot,tr,td,th"),ce=ee("meta,link,script,style,template,noscript"),fe=ee("dt,dd"),pe=ee("address,article,aside,blockquote,details,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,main,menu,nav,ol,p,pre,section,table,ul"),he=ee("a,audio,del,ins,map,noscript,video"),de=ee("rb,rt,rtc,rp"),me=ee("rb,rtc,rp"),ge=ee("option,optgroup"),ve=ee("tbody,tfoot"),be=ee("thead,tbody,tfoot"),ye=ee("td,th"),_e=ee("html,head,body"),we=ee("html,body"),Ae=ee("head,colgroup,caption"),Ee=ee("dt,thead"),xe=ee("a,abbr,acronym,address,applet,area,article,aside,audio,b,base,basefont,bdi,bdo,bgsound,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,dir,div,dl,dt,element,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,isindex,kbd,keygen,label,legend,li,link,listing,main,map,mark,marquee,menu,menuitem,meta,meter,multicol,nav,nobr,noembed,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,plaintext,pre,progress,q,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,spacer,span,strike,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,tt,u,ul,var,video,wbr,xmp"),Ce=new RegExp("^(?:class|id|style|title|lang|dir|on(?:focus|blur|change|click|dblclick|mouse(?:down|up|over|move|out)|key(?:press|down|up)))$"),ke=ee("script,style");n.minify=function(e,t){return $(e,t)}},{"./htmlparser":166,"./tokenchain":167,"./utils":168,"clean-css":7,he:104,relateurl:130,"uglify-js":"uglify-js"}],"uglify-js":[function(e,t,n){(function(e){!function(t){"use strict";function n(e){for(var t=Object.create(null),n=0;n<e.length;++n)t[e[n]]=!0;return t}function r(e){return e.split("")}function o(e,t){return t.indexOf(e)>=0}function i(e,t){for(var n=0,r=t.length;n<r;++n)if(e(t[n]))return t[n]}function a(e,t){if(t<=0)return"";if(1==t)return e;var n=a(e,t>>1);return n+=n,1&t&&(n+=e),n}function u(e){Object.defineProperty(e.prototype,"stack",{get:function(){var e=new Error(this.message);e.name=this.name;try{throw e}catch(e){return e.stack}}})}function s(e,t){this.message=e,this.defs=t}function l(e,t,n){!0===e&&(e={});var r=e||{};if(n)for(var o in r)E(r,o)&&!E(t,o)&&s.croak("`"+o+"` is not a supported option",t);for(var o in t)E(t,o)&&(r[o]=e&&E(e,o)?e[o]:t[o]);return r}function c(e,t){var n=0;for(var r in t)E(t,r)&&(e[r]=t[r],n++);return n}function f(){}function p(){return!1}function h(){return!0}function d(){return this}function m(){return null}function g(e,t){e.indexOf(t)<0&&e.push(t)}function v(e,t){return e.replace(/\{(.+?)\}/g,function(e,n){return t&&t[n]})}function b(e,t){for(var n=e.length;--n>=0;)e[n]===t&&e.splice(n,1)}function y(e,t){function n(e,n){for(var r=[],o=0,i=0,a=0;o<e.length&&i<n.length;)t(e[o],n[i])<=0?r[a++]=e[o++]:r[a++]=n[i++];return o<e.length&&r.push.apply(r,e.slice(o)),i<n.length&&r.push.apply(r,n.slice(i)),r}function r(e){if(e.length<=1)return e;var t=Math.floor(e.length/2),o=e.slice(0,t),i=e.slice(t);return o=r(o),i=r(i),n(o,i)}return e.length<2?e.slice():r(e)}function _(e){function t(e){return JSON.stringify(e).replace(/[\u2028\u2029]/g,function(e){switch(e){case"\u2028":return"\\u2028";case"\u2029":return"\\u2029"}return e})}function n(e){if(1==e.length)return r+="return str === "+t(e[0])+";";r+="switch(str){";for(var n=0;n<e.length;++n)r+="case "+t(e[n])+":";r+="return true}return false;"}e instanceof Array||(e=e.split(" "));var r="",o=[];e:for(a=0;a<e.length;++a){for(var i=0;i<o.length;++i)if(o[i][0].length==e[a].length){o[i].push(e[a]);continue e}o.push([e[a]])}if(o.length>3){o.sort(function(e,t){return t.length-e.length}),r+="switch(str.length){";for(var a=0;a<o.length;++a){var u=o[a];r+="case "+u[0].length+":",n(u)}r+="}"}else n(e);return new Function("str",r)}function w(e,t){for(var n=e.length;--n>=0;)if(!t(e[n]))return!1;return!0}function A(){this._values=Object.create(null),this._size=0}function E(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function x(e){for(var t,n=e.parent(-1),r=0;t=e.parent(r);r++){if(t instanceof oe&&t.body===n)return!0;if(!(t instanceof Ke&&t.expressions[0]===n||t instanceof $e&&t.expression===n&&!(t instanceof He)||t instanceof Ge&&t.expression===n||t instanceof We&&t.expression===n||t instanceof et&&t.condition===n||t instanceof Xe&&t.left===n||t instanceof Je&&t.expression===n))return!1;n=t}}function C(e,n,r,o){arguments.length<4&&(o=re);var i=n=n?n.split(/\s+/):[];o&&o.PROPS&&(n=n.concat(o.PROPS));for(var a="return function AST_"+e+"(props){ if (props) { ",u=n.length;--u>=0;)a+="this."+n[u]+" = props."+n[u]+";";var s=o&&new o;(s&&s.initialize||r&&r.initialize)&&(a+="this.initialize();"),a+="}}";var l=new Function(a)();if(s&&(l.prototype=s,l.BASE=o),o&&o.SUBCLASSES.push(l),l.prototype.CTOR=l,l.PROPS=n||null,l.SELF_PROPS=i,l.SUBCLASSES=[],e&&(l.prototype.TYPE=l.TYPE=e),r)for(u in r)E(r,u)&&(/^\$/.test(u)?l[u.substr(1)]=r[u]:l.prototype[u]=r[u]);return l.DEFMETHOD=function(e,t){this.prototype[e]=t},void 0!==t&&(t["AST_"+e]=l),l}function k(e,t){var n=e.body;if(n instanceof oe)n._walk(t);else for(var r=0,o=n.length;r<o;r++)n[r]._walk(t)}function O(e){this.visit=e,this.stack=[],this.directives=Object.create(null)}function B(e){return e>=97&&e<=122||e>=65&&e<=90||e>=170&&Ht.letter.test(String.fromCharCode(e))}function S(e){return e>=48&&e<=57}function D(e){return S(e)||B(e)}function T(e){return Ht.digit.test(String.fromCharCode(e))}function R(e){return Ht.non_spacing_mark.test(e)||Ht.space_combining_mark.test(e)}function F(e){return Ht.connector_punctuation.test(e)}function L(e){return!Mt(e)&&/^[a-z_$][a-z0-9_$]*$/i.test(e)}function M(e){return 36==e||95==e||B(e)}function P(e){var t=e.charCodeAt(0);return M(t)||S(t)||8204==t||8205==t||R(e)||F(e)||T(t)}function U(e){return/^[a-z_$][a-z0-9_$]*$/i.test(e)}function N(e){if(Nt.test(e))return parseInt(e.substr(2),16);if(qt.test(e))return parseInt(e.substr(1),8);var t=parseFloat(e);return t==e?t:void 0}function q(e,t,n,r,o){this.message=e,this.filename=t,this.line=n,this.col=r,this.pos=o}function z(e,t,n,r,o){throw new q(e,t,n,r,o)}function I(e,t,n){return e.type==t&&(null==n||e.value==n)}function j(e,t,n,r){function o(){return O.text.charAt(O.pos)}function i(e,t){var n=O.text.charAt(O.pos++);if(e&&!n)throw Kt;return jt(n)?(O.newline_before=O.newline_before||!t,++O.line,O.col=0,t||"\r"!=n||"\n"!=o()||(++O.pos,n="\n")):++O.col,n}function a(e){for(;e-- >0;)i()}function u(e){return O.text.substr(O.pos,e.length)==e}function s(){for(var e=O.text,t=O.pos,n=O.text.length;t<n;++t){var r=e[t];if(jt(r))return t}return-1}function l(e,t){var n=O.text.indexOf(e,O.pos);if(t&&-1==n)throw Kt;return n}function c(){O.tokline=O.line,O.tokcol=O.col,O.tokpos=O.pos}function f(n,r,o){O.regex_allowed="operator"==n&&!Gt(r)||"keyword"==n&&Pt(r)||"punc"==n&&Vt(r),B="punc"==n&&"."==r;var i={type:n,value:r,line:O.tokline,col:O.tokcol,pos:O.tokpos,endline:O.line,endcol:O.col,endpos:O.pos,nlb:O.newline_before,file:t};if(/^(?:num|string|regexp)$/i.test(n)&&(i.raw=e.substring(i.pos,i.endpos)),!o){i.comments_before=O.comments_before,O.comments_before=[];for(var a=0,u=i.comments_before.length;a<u;a++)i.nlb=i.nlb||i.comments_before[a].nlb}return O.newline_before=!1,new ne(i)}function p(){for(;It(o());)i()}function h(e){for(var t,n="",r=0;(t=o())&&e(t,r++);)n+=i();return n}function d(e){z(e,t,O.tokline,O.tokcol,O.tokpos)}function m(e){var t=!1,n=!1,r=!1,o="."==e,i=h(function(i,a){var u=i.charCodeAt(0);switch(u){case 120:case 88:return!r&&(r=!0);case 101:case 69:return!!r||!t&&(t=n=!0);case 45:return n||0==a&&!e;case 43:return n;case n=!1,46:return!(o||r||t)&&(o=!0)}return D(u)});e&&(i=e+i),qt.test(i)&&k.has_directive("use strict")&&d("Legacy octal literals are not allowed in strict mode");var a=N(i);if(!isNaN(a))return f("num",a);d("Invalid syntax: "+i)}function g(e){var t=i(!0,e);switch(t.charCodeAt(0)){case 110:return"\n";case 114:return"\r";case 116:return"\t";case 98:return"\b";case 118:return"\v";case 102:return"\f";case 120:return String.fromCharCode(b(2));case 117:return String.fromCharCode(b(4));case 10:return"";case 13:if("\n"==o())return i(!0,e),""}return t>="0"&&t<="7"?v(t):t}function v(e){var t=o();return t>="0"&&t<="7"&&(e+=i(!0))[0]<="3"&&(t=o())>="0"&&t<="7"&&(e+=i(!0)),"0"===e?"\0":(e.length>0&&k.has_directive("use strict")&&d("Legacy octal escape sequences are not allowed in strict mode"),String.fromCharCode(parseInt(e,8)))}function b(e){for(var t=0;e>0;--e){var n=parseInt(i(!0),16);isNaN(n)&&d("Invalid hex-character pattern in string"),t=t<<4|n}return t}function y(e){var t,n=O.regex_allowed,r=s();return-1==r?(t=O.text.substr(O.pos),O.pos=O.text.length):(t=O.text.substring(O.pos,r),O.pos=r),O.col=O.tokcol+(O.pos-O.tokpos),O.comments_before.push(f(e,t,!0)),O.regex_allowed=n,k}function _(){for(var e,t,n=!1,r="",a=!1;null!=(e=o());)if(n)"u"!=e&&d("Expecting UnicodeEscapeSequence -- uXXXX"),P(e=g())||d("Unicode char: "+e.charCodeAt(0)+" is not valid in identifier"),r+=e,n=!1;else if("\\"==e)a=n=!0,i();else{if(!P(e))break;r+=i()}return Ft(r)&&a&&(t=r.charCodeAt(0).toString(16).toUpperCase(),r="\\u"+"0000".substr(t.length)+t+r.slice(1)),r}function w(e){function t(e){if(!o())return e;var n=e+o();return zt(n)?(i(),t(n)):e}return f("operator",t(e||i()))}function A(){switch(i(),o()){case"/":return i(),y("comment1");case"*":return i(),R()}return O.regex_allowed?F(""):w("/")}function E(){return i(),S(o().charCodeAt(0))?m("."):f("punc",".")}function x(){var e=_();return B?f("name",e):Lt(e)?f("atom",e):Ft(e)?zt(e)?f("operator",e):f("keyword",e):f("name",e)}function C(e,t){return function(n){try{return t(n)}catch(t){if(t!==Kt)throw t;d(e)}}}function k(e){if(null!=e)return F(e);for(r&&0==O.pos&&u("#!")&&(c(),a(2),y("comment5"));;){if(p(),c(),n){if(u("\x3c!--")){a(4),y("comment3");continue}if(u("--\x3e")&&O.newline_before){a(3),y("comment4");continue}}var t=o();if(!t)return f("eof");var s=t.charCodeAt(0);switch(s){case 34:case 39:return T(t);case 46:return E();case 47:var l=A();if(l===k)continue;return l}if(S(s))return m();if($t(t))return f("punc",i());if(Ut(t))return w();if(92==s||M(s))return x();break}d("Unexpected character '"+t+"'")}var O={text:e,filename:t,pos:0,tokpos:0,line:1,tokline:0,col:0,tokcol:0,newline_before:!1,regex_allowed:!1,comments_before:[],directives:{},directive_stack:[]},B=!1,T=C("Unterminated string constant",function(e){for(var t=i(),n="";;){var r=i(!0,!0);if("\\"==r)r=g(!0);else if(jt(r))d("Unterminated string constant");else if(r==t)break;n+=r}var o=f("string",n);return o.quote=e,o}),R=C("Unterminated multiline comment",function(){var e=O.regex_allowed,t=l("*/",!0),n=O.text.substring(O.pos,t).replace(/\r\n|\r|\u2028|\u2029/g,"\n");return a(n.length+2),O.comments_before.push(f("comment2",n,!0)),O.regex_allowed=e,k}),F=C("Unterminated regular expression",function(e){for(var t,n=!1,r=!1;t=i(!0);)if(jt(t))d("Unexpected line terminator");else if(n)e+="\\"+t,n=!1;else if("["==t)r=!0,e+=t;else if("]"==t&&r)r=!1,e+=t;else{if("/"==t&&!r)break;"\\"==t?n=!0:e+=t}var o=_();try{return f("regexp",new RegExp(e,o))}catch(e){d(e.message)}});return k.context=function(e){return e&&(O=e),O},k.add_directive=function(e){O.directive_stack[O.directive_stack.length-1].push(e),void 0===O.directives[e]?O.directives[e]=1:O.directives[e]++},k.push_directives_stack=function(){O.directive_stack.push([])},k.pop_directives_stack=function(){for(var e=O.directive_stack[O.directive_stack.length-1],t=0;t<e.length;t++)O.directives[e[t]]--;O.directive_stack.pop()},k.has_directive=function(e){return O.directives[e]>0},k}function V(e,t){function n(e,t){return I($.token,e,t)}function r(){return $.peeked||($.peeked=$.input())}function o(){return $.prev=$.token,$.peeked?($.token=$.peeked,$.peeked=null):$.token=$.input(),$.in_directives=$.in_directives&&("string"==$.token.type||n("punc",";")),$.token}function a(){return $.prev}function u(e,t,n,r){var o=$.input.context();z(e,o.filename,null!=t?t:o.tokline,null!=n?n:o.tokcol,null!=r?r:o.tokpos)}function s(e,t){u(t,e.line,e.col)}function c(e){null==e&&(e=$.token),s(e,"Unexpected token: "+e.type+" ("+e.value+")")}function f(e,t){if(n(e,t))return o();s($.token,"Unexpected token "+$.token.type+" «"+$.token.value+"», expected "+e+" «"+t+"»")}function p(e){return f("punc",e)}function h(){return!t.strict&&($.token.nlb||n("eof")||n("punc","}"))}function d(e){n("punc",";")?o():e||h()||c()}function m(){p("(");var e=oe(!0);return p(")"),e}function g(e){return function(){var t=$.token,n=e(),r=a();return n.start=t,n.end=r,n}}function v(){(n("operator","/")||n("operator","/="))&&($.peeked=null,$.token=$.input($.token.value.substr(1)))}function b(){var e=M(gt);i(function(t){return t.name==e.name},$.labels)&&u("Label "+e.name+" defined twice"),p(":"),$.labels.push(e);var t=H();return $.labels.pop(),t instanceof he||e.references.forEach(function(t){t instanceof Re&&(t=t.label.start,u("Continue label `"+e.name+"` refers to non-IterationStatement.",t.line,t.col,t.pos))}),new pe({body:t,label:e})}function y(e){return new ue({body:(e=oe(!0),d(),e)})}function _(e){var t,n=null;h()||(n=M(bt,!0)),null!=n?((t=i(function(e){return e.name==n.name},$.labels))||u("Undefined label "+n.name),n.thedef=t):0==$.in_loop&&u(e.TYPE+" not inside a loop or switch"),d();var r=new e({label:n});return t&&t.references.push(r),r}function w(){p("(");var e=null;return!n("punc",";")&&(e=n("keyword","var")?(o(),Y(!0)):oe(!0,!0),n("operator","in"))?(e instanceof je&&e.definitions.length>1&&u("Only one variable declaration allowed in for..in loop"),o(),E(e)):A(e)}function A(e){p(";");var t=n("punc",";")?null:oe(!0);p(";");var r=n("punc",")")?null:oe(!0);return p(")"),new ve({init:e,condition:t,step:r,body:V(H)})}function E(e){var t=e instanceof je?e.definitions[0].name:null,n=oe(!0);return p(")"),new be({init:e,name:t,object:n,body:V(H)})}function x(){var e=m(),t=H(),r=null;return n("keyword","else")&&(o(),r=H()),new Fe({condition:e,body:t,alternative:r})}function C(){p("{");for(var e=[];!n("punc","}");)n("eof")&&c(),e.push(H());return o(),e}function k(){p("{");for(var e,t=[],r=null,i=null;!n("punc","}");)n("eof")&&c(),n("keyword","case")?(i&&(i.end=a()),r=[],i=new Ue({start:(e=$.token,o(),e),expression:oe(!0),body:r}),t.push(i),p(":")):n("keyword","default")?(i&&(i.end=a()),r=[],i=new Pe({start:(e=$.token,o(),p(":"),e),body:r}),t.push(i)):(r||c(),r.push(H()));return i&&(i.end=a()),o(),t}function O(){var e=C(),t=null,r=null;if(n("keyword","catch")){s=$.token;o(),p("(");var i=M(mt);p(")"),t=new qe({start:s,argname:i,body:C(),end:a()})}if(n("keyword","finally")){var s=$.token;o(),r=new ze({start:s,body:C(),end:a()})}return t||r||u("Missing catch/finally blocks"),new Ne({body:e,bcatch:t,bfinally:r})}function B(e){for(var t=[];t.push(new Ve({start:$.token,name:M(ft),value:n("operator","=")?(o(),oe(!1,e)):null,end:a()})),n("punc",",");)o();return t}function S(){var e,t=$.token;switch(t.type){case"name":case"keyword":e=F(vt);break;case"num":e=new At({start:t,end:t,value:t.value});break;case"string":e=new wt({start:t,end:t,value:t.value,quote:t.quote});break;case"regexp":e=new Et({start:t,end:t,value:t.value});break;case"atom":switch(t.value){case"false":e=new Tt({start:t,end:t});break;case"true":e=new Rt({start:t,end:t});break;case"null":e=new Ct({start:t,end:t})}break;case"operator":U(t.value)||u("Invalid getter/setter name: "+t.value,t.line,t.col,t.pos),e=F(vt)}return o(),e}function D(e,t,r){for(var i=!0,a=[];!n("punc",e)&&(i?i=!1:p(","),!t||!n("punc",e));)n("punc",",")&&r?a.push(new Bt({start:$.token,end:$.token})):a.push(oe(!1));return o(),a}function T(){var e=$.token;switch(e.type){case"operator":Ft(e.value)||c();case"num":case"string":case"name":case"keyword":case"atom":return o(),e.value;default:c()}}function R(){var e=$.token;return"name"!=e.type&&c(),o(),e.value}function F(e){var t=$.token.value;return new("this"==t?yt:e)({name:String(t),start:$.token,end:$.token})}function L(e){"arguments"!=e.name&&"eval"!=e.name||u("Unexpected "+e.name+" in strict mode",e.start.line,e.start.col,e.start.pos)}function M(e,t){if(!n("name"))return t||u("Name expected"),null;var r=F(e);return $.input.has_directive("use strict")&&r instanceof ct&&L(r),o(),r}function P(e,t,n){var r=t.value;switch(r){case"++":case"--":q(n)||u("Invalid use of "+r+" operator",t.line,t.col,t.pos);break;case"delete":n instanceof vt&&$.input.has_directive("use strict")&&u("Calling delete on expression not allowed in strict mode",n.start.line,n.start.col,n.start.pos)}return new e({operator:r,expression:n})}function N(e){return te(ee(!0),0,e)}function q(e){return e instanceof Ye||e instanceof vt}function V(e){++$.in_loop;var t=e();return--$.in_loop,t}t=l(t,{bare_returns:!1,expression:!1,filename:null,html5_comments:!0,shebang:!0,strict:!1,toplevel:null});var $={input:"string"==typeof e?j(e,t.filename,t.html5_comments,t.shebang):e,token:null,prev:null,peeked:null,in_function:0,in_directives:!0,in_loop:0,labels:[]};$.token=o();var H=g(function(){var e;switch(v(),$.token.type){case"string":$.in_directives&&(e=r(),-1==$.token.raw.indexOf("\\")&&(e.nlb||I(e,"eof")||I(e,"punc",";")||I(e,"punc","}"))?$.input.add_directive($.token.value):$.in_directives=!1);var i=$.in_directives,s=y();return i?new ae(s.body):s;case"num":case"regexp":case"operator":case"atom":return y();case"name":return I(r(),"punc",":")?b():y();case"punc":switch($.token.value){case"{":return new le({start:$.token,body:C(),end:a()});case"[":case"(":return y();case";":return $.in_directives=!1,o(),new ce;default:c()}case"keyword":switch(e=$.token.value,o(),e){case"break":return _(Te);case"continue":return _(Re);case"debugger":return d(),new ie;case"do":return new me({body:V(H),condition:(f("keyword","while"),e=m(),d(!0),e)});case"while":return new ge({condition:m(),body:V(H)});case"for":return w();case"function":return K(Ce);case"if":return x();case"return":return 0!=$.in_function||t.bare_returns||u("'return' outside of function"),new Be({value:n("punc",";")?(o(),null):h()?null:(e=oe(!0),d(),e)});case"switch":return new Le({expression:m(),body:V(k)});case"throw":return $.token.nlb&&u("Illegal newline after 'throw'"),new Se({value:(e=oe(!0),d(),e)});case"try":return O();case"var":return e=Y(),d(),e;case"with":return $.input.has_directive("use strict")&&u("Strict mode may not include a with statement"),new ye({expression:m(),body:H()})}}c()}),K=function(e){var t=e===Ce,r=n("name")?M(t?ht:dt):null;t&&!r&&c(),p("(");for(var i=[],a=!0;!n("punc",")");)a?a=!1:p(","),i.push(M(pt));o();var u=$.in_loop,s=$.labels;++$.in_function,$.in_directives=!0,$.input.push_directives_stack(),$.in_loop=0,$.labels=[];var l=C();return $.input.has_directive("use strict")&&(r&&L(r),i.forEach(L)),$.input.pop_directives_stack(),--$.in_function,$.in_loop=u,$.labels=s,new e({name:r,argnames:i,body:l})},Y=function(e){return new je({start:a(),definitions:B(e),end:a()})},G=function(e){var t=$.token;f("operator","new");var r,i=W(!1);return n("punc","(")?(o(),r=D(")")):r=[],X(new He({start:t,expression:i,args:r,end:a()}),e)},W=function(e){if(n("operator","new"))return G(e);var t=$.token;if(n("punc")){switch(t.value){case"(":o();var r=oe(!0);return r.start=t,r.end=$.token,p(")"),X(r,e);case"[":return X(Q(),e);case"{":return X(J(),e)}c()}if(n("keyword","function")){o();var i=K(xe);return i.start=t,i.end=a(),X(i,e)}if(Zt[$.token.type])return X(S(),e);c()},Q=g(function(){return p("["),new nt({elements:D("]",!t.strict,!0)})}),Z=g(function(){return K(Ee)}),J=g(function(){p("{");for(var e=!0,r=[];!n("punc","}")&&(e?e=!1:p(","),t.strict||!n("punc","}"));){var i=$.token,u=i.type,s=T();if("name"==u&&!n("punc",":")){var l=new lt({start:$.token,name:T(),end:a()});if("get"==s){r.push(new ut({start:i,key:l,value:Z(),end:a()}));continue}if("set"==s){r.push(new at({start:i,key:l,value:Z(),end:a()}));continue}}p(":"),r.push(new it({start:i,quote:i.quote,key:s,value:oe(!1),end:a()}))}return o(),new rt({properties:r})}),X=function(e,t){var r=e.start;if(n("punc","."))return o(),X(new Ge({start:r,expression:e,property:R(),end:a()}),t);if(n("punc","[")){o();var i=oe(!0);return p("]"),X(new We({start:r,expression:e,property:i,end:a()}),t)}return t&&n("punc","(")?(o(),X(new $e({start:r,expression:e,args:D(")"),end:a()}),!0)):e},ee=function(e){var t=$.token;if(n("operator")&&Yt(t.value)){o(),v();var r=P(Ze,t,ee(e));return r.start=t,r.end=a(),r}for(var i=W(e);n("operator")&&Gt($.token.value)&&!$.token.nlb;)(i=P(Je,$.token,i)).start=t,i.end=$.token,o();return i},te=function(e,t,r){var i=n("operator")?$.token.value:null;"in"==i&&r&&(i=null);var a=null!=i?Qt[i]:null;if(null!=a&&a>t){o();var u=te(ee(!0),a,r);return te(new Xe({start:e.start,left:e,operator:i,right:u,end:u.end}),t,r)}return e},ne=function(e){var t=$.token,r=N(e);if(n("operator","?")){o();var i=oe(!1);return p(":"),new et({start:t,condition:r,consequent:i,alternative:oe(!1,e),end:a()})}return r},re=function(e){var t=$.token,r=ne(e),i=$.token.value;if(n("operator")&&Wt(i)){if(q(r))return o(),new tt({start:t,left:r,operator:i,right:re(e),end:a()});u("Invalid assignment")}return r},oe=function(e,t){for(var i=$.token,a=[];;){if(a.push(re(t)),!e||!n("punc",","))break;o(),e=!0}return 1==a.length?a[0]:new Ke({start:i,expressions:a,end:r()})};return t.expression?oe(!0):function(){var e=$.token,r=[];for($.input.push_directives_stack();!n("eof");)r.push(H());$.input.pop_directives_stack();var o=a(),i=t.toplevel;return i?(i.body=i.body.concat(r),i.end=o):i=new we({start:e,body:r,end:o}),i}()}function $(e,t){O.call(this),this.before=e,this.after=t}function H(e,t,n){this.name=n.name,this.orig=[n],this.scope=e,this.references=[],this.global=!1,this.mangled_name=null,this.undeclared=!1,this.index=t,this.id=H.next_id++}function K(e){return"comment2"==e.type&&/@preserve|@license|@cc_on/i.test(e.value)}function Y(e){function t(e,t){return e.replace(/[\u0000-\u001f\u007f-\uffff]/g,function(e){var n=e.charCodeAt(0).toString(16);if(n.length<=2&&!t){for(;n.length<2;)n="0"+n;return"\\x"+n}for(;n.length<4;)n="0"+n;return"\\u"+n})}function n(n,r){function o(){return"'"+n.replace(/\x27/g,"\\'")+"'"}function i(){return'"'+n.replace(/\x22/g,'\\"')+'"'}var a=0,u=0;switch(n=n.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g,function(t,r){switch(t){case'"':return++a,'"';case"'":return++u,"'";case"\\":return"\\\\";case"\n":return"\\n";case"\r":return"\\r";case"\t":return"\\t";case"\b":return"\\b";case"\f":return"\\f";case"\v":return e.ie8?"\\x0B":"\\v";case"\u2028":return"\\u2028";case"\u2029":return"\\u2029";case"\ufeff":return"\\ufeff";case"\0":return/[0-7]/.test(n.charAt(r+1))?"\\x00":"\\0"}return t}),e.ascii_only&&(n=t(n)),e.quote_style){case 1:return o();case 2:return i();case 3:return"'"==r?o():i();default:return a>u?o():i()}}function r(t,r){var o=n(t,r);return e.inline_script&&(o=(o=(o=o.replace(/<\x2fscript([>\/\t\n\f\r ])/gi,"<\\/script$1")).replace(/\x3c!--/g,"\\x3c!--")).replace(/--\x3e/g,"--\\x3e")),o}function o(n){return n=n.toString(),e.ascii_only&&(n=t(n,!0)),n}function i(t){return a(" ",e.indent_start+x-t*e.indent_level)}function u(t){var n=(t=String(t)).charAt(0),r=R.charAt(R.length-1);if(D&&(D=!1,(":"==r&&"}"==n||(!n||";}".indexOf(n)<0)&&";"!=r)&&(e.semicolons||L(n)?(B+=";",C++,O++):(F(),B+="\n",O++,k++,C=0,/^\s+$/.test(t)&&(D=!0)),e.beautify||(S=!1))),!e.beautify&&e.preserve_line&&j[j.length-1])for(var o=j[j.length-1].start.line;k<o;)F(),B+="\n",O++,k++,C=0,S=!1;S&&((P(r)&&(P(n)||"\\"==n)||"/"==n&&n==r||("+"==n||"-"==n)&&n==R)&&(B+=" ",C++,O++),S=!1),B+=t,O+=t.length;var i=t.split(/\r?\n/),a=i.length-1;k+=a,C+=i[0].length,a>0&&(F(),C=i[a].length),R=t}function s(){D=!1,u(";")}function c(){return x+e.indent_level}function d(e){var t;return u("{"),q(),N(c(),function(){t=e()}),U(),u("}"),t}function m(e){u("(");var t=e();return u(")"),t}function g(e){u("[");var t=e();return u("]"),t}function v(){u(","),M()}function b(){u(":"),e.space_colon&&M()}function y(){return T&&F(),B}var w=p;if((e=l(e,{ascii_only:!1,beautify:!1,bracketize:!1,comments:!1,ie8:!1,indent_level:4,indent_start:0,inline_script:!0,keep_quoted_props:!1,max_line_len:!1,preamble:null,preserve_line:!1,quote_keys:!1,quote_style:0,semicolons:!0,shebang:!0,source_map:null,space_colon:!0,unescape_regexps:!1,width:80,wrap_iife:!1},!0)).comments){var A=e.comments;if("string"==typeof e.comments&&/^\/.*\/[a-zA-Z]*$/.test(e.comments)){var E=e.comments.lastIndexOf("/");A=new RegExp(e.comments.substr(1,E-1),e.comments.substr(E+1))}w=A instanceof RegExp?function(e){return"comment5"!=e.type&&A.test(e.value)}:"function"==typeof A?function(e){return"comment5"!=e.type&&A(this,e)}:"some"===A?K:h}var x=0,C=0,k=1,O=0,B="",S=!1,D=!1,T=0,R="",F=e.max_line_len?function(){if(C>e.max_line_len){if(T){var t=B.slice(0,T),n=B.slice(T);B=t+"\n"+n,k++,O++,C=n.length}C>e.max_line_len&&re.warn("Output exceeds {max_line_len} characters",e)}T=0}:f,L=_("( [ + * / - , ."),M=e.beautify?function(){u(" ")}:function(){S=!0},U=e.beautify?function(t){e.beautify&&u(i(t?.5:0))}:f,N=e.beautify?function(e,t){!0===e&&(e=c());var n=x;x=e;var r=t();return x=n,r}:function(e,t){return t()},q=e.beautify?function(){u("\n")}:e.max_line_len?function(){F(),T=B.length}:f,z=e.beautify?function(){u(";")}:function(){D=!0},I=e.source_map?function(t,n){try{t&&e.source_map.add(t.file||"?",k,C,t.line,t.col,n||"name"!=t.type?n:t.value)}catch(e){re.warn("Couldn't figure out mapping for {file}:{line},{col} → {cline},{ccol} [{name}]",{file:t.file,line:t.line,col:t.col,cline:k,ccol:C,name:n||""})}}:f,j=[];return{get:y,toString:y,indent:U,indentation:function(){return x},current_width:function(){return C-x},should_break:function(){return e.width&&this.current_width()>=e.width},newline:q,print:u,space:M,comma:v,colon:b,last:function(){return R},semicolon:z,force_semicolon:s,to_ascii:t,print_name:function(e){u(o(e))},print_string:function(e,t,n){var o=r(e,t);!0===n&&-1===o.indexOf("\\")&&(Xt.test(B)||s(),s()),u(o)},encode_string:r,next_indent:c,with_indent:N,with_block:d,with_parens:m,with_square:g,add_mapping:I,option:function(t){return e[t]},comment_filter:w,line:function(){return k},col:function(){return C},pos:function(){return O},push_node:function(e){j.push(e)},pop_node:function(){return j.pop()},parent:function(e){return j[j.length-2-(e||0)]}}}function G(e,t){if(!(this instanceof G))return new G(e,t);$.call(this,this.before,this.after),this.options=l(e,{booleans:!t,cascade:!t,collapse_vars:!t,comparisons:!t,conditionals:!t,dead_code:!t,drop_console:!1,drop_debugger:!t,evaluate:!t,expression:!1,global_defs:{},hoist_funs:!t,hoist_vars:!1,ie8:!1,if_return:!t,join_vars:!t,keep_fargs:!0,keep_fnames:!1,keep_infinity:!1,loops:!t,negate_iife:!t,passes:1,properties:!t,pure_getters:!t&&"strict",pure_funcs:null,reduce_vars:!t,sequences:!t,side_effects:!t,switches:!t,top_retain:null,toplevel:!(!e||!e.top_retain),unsafe:!1,unsafe_comps:!1,unsafe_math:!1,unsafe_proto:!1,unused:!t,warnings:!1},!0);var n=this.options.pure_funcs;this.pure_funcs="function"==typeof n?n:n?function(e){return n.indexOf(e.expression.print_to_string())<0}:h;var r=this.options.top_retain;r instanceof RegExp?this.top_retain=function(e){return r.test(e.name)}:"function"==typeof r?this.top_retain=r:r&&("string"==typeof r&&(r=r.split(/,/)),this.top_retain=function(e){return r.indexOf(e.name)>=0});var o=this.options.toplevel;"string"==typeof o?(this.toplevel.funcs=/funcs/.test(o),this.toplevel.vars=/vars/.test(o)):(this.toplevel=o?h:p,this.toplevel.funcs=this.toplevel.vars=o);var i=this.options.sequences;this.sequences_limit=1==i?800:0|i,this.warnings_produced={}}function W(e){function t(t,o,i,a,u,s){if(r){var l=r.originalPositionFor({line:a,column:u});if(null===l.source)return;t=l.source,a=l.line,u=l.column,s=l.name||s}n.addMapping({generated:{line:o+e.dest_line_diff,column:i},original:{line:a+e.orig_line_diff,column:u},source:t,name:s})}e=l(e,{file:null,root:null,orig:null,orig_line_diff:0,dest_line_diff:0});var n=new MOZ_SourceMap.SourceMapGenerator({file:e.file,sourceRoot:e.root}),r=e.orig&&new MOZ_SourceMap.SourceMapConsumer(e.orig);return r&&Array.isArray(e.orig.sources)&&r._sources.toArray().forEach(function(e){var t=r.sourceContentFor(e,!0);t&&n.setSourceContent(e,t)}),{add:t,get:function(){return n},toString:function(){return JSON.stringify(n.toJSON())}}}function Q(e){function t(t){g(e,t)}["null","true","false","Infinity","-Infinity","undefined"].forEach(t),[Object,Array,Function,Number,String,Boolean,Error,Math,Date,RegExp].forEach(function(e){Object.getOwnPropertyNames(e).map(t),e.prototype&&Object.getOwnPropertyNames(e.prototype).map(t)})}function Z(e,t){function n(e){return!(v.indexOf(e)>=0)&&(!(s.indexOf(e)>=0)&&(t.only_cache?c.props.has(e):!/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(e)))}function r(e){return!(h&&e in b)&&(!(p&&!p.test(e))&&(!(s.indexOf(e)>=0)&&(c.props.has(e)||m.indexOf(e)>=0)))}function o(e,t){if(t)return void(b[e]=!0);n(e)&&g(m,e),r(e)||g(v,e)}function i(e){if(!r(e))return e;var t=c.props.get(e);if(!t){if(d){var o="_$"+e+"$"+f+"_";!n(o)||h&&o in b||(t=o)}if(!t)do{t=Jt(++c.cname)}while(!n(t)||h&&t in b);c.props.set(e,t)}return t}function a(e,t){var n={};try{!function e(r){r.walk(new O(function(r){if(r instanceof Ke)return e(r.expressions[r.expressions.length-1]),!0;if(r instanceof wt)return o(r.value,t),!0;if(r instanceof et)return e(r.consequent),e(r.alternative),!0;throw n}))}(e)}catch(e){if(e!==n)throw e}}function u(e){return e.transform(new $(function(e){if(e instanceof Ke){var t=e.expressions.length-1;e.expressions[t]=u(e.expressions[t])}else e instanceof wt?e.value=i(e.value):e instanceof et&&(e.consequent=u(e.consequent),e.alternative=u(e.alternative));return e}))}var s=(t=l(t,{builtins:!1,cache:null,debug:!1,keep_quoted:!1,only_cache:!1,regex:null,reserved:null})).reserved||[];t.builtins||Q(s);var c=t.cache;null==c&&(c={cname:-1,props:new A});var f,p=t.regex,h=t.keep_quoted,d=!1!==t.debug;d&&(f=!0===t.debug?"":t.debug);var m=[],v=[],b={};return e.walk(new O(function(e){e instanceof it?o(e.key,h&&e.quote):e instanceof ot?o(e.key.name):e instanceof Ge?o(e.property):e instanceof We&&a(e.property,h)})),e.transform(new $(function(e){e instanceof it?h&&e.quote||(e.key=i(e.key)):e instanceof ot?e.key.name=i(e.key.name):e instanceof Ge?e.property=i(e.property):e instanceof We&&(h||(e.property=u(e.property)))}))}function J(e){var t=/\n\/\/# sourceMappingURL=data:application\/json(;.*?)?;base64,(.*)/.exec(e);return t?en(t[2]):(re.warn("inline source map not found"),null)}function X(e,t,n){t[e]&&n.forEach(function(n){t[n]&&("object"!=typeof t[n]&&(t[n]={}),e in t[n]||(t[n][e]=t[e]))})}function ee(e,t){var n=re.warn_function;try{"string"==typeof e&&(e=[e]),X("ie8",t=l(t,{compress:{},ie8:!1,keep_fnames:!1,mangle:{},output:{},parse:{},sourceMap:!1,toplevel:!1,warnings:!1,wrap:!1},!0),["compress","mangle","output"]),X("keep_fnames",t,["compress","mangle"]),X("toplevel",t,["compress","mangle"]),X("warnings",t,["compress"]),t.mangle&&(t.mangle=l(t.mangle,{cache:null,eval:!1,ie8:!1,keep_fnames:!1,properties:!1,reserved:[],toplevel:!1},!0)),t.sourceMap&&(t.sourceMap=l(t.sourceMap,{content:null,filename:null,includeSources:!1,root:null,url:null},!0));var r=[];t.warnings&&!re.warn_function&&(re.warn_function=function(e){r.push(e)});var o;if(e instanceof we)o=e;else{t.parse=t.parse||{},t.parse.toplevel=null;for(var i in e)if(t.parse.filename=i,t.parse.toplevel=V(e[i],t.parse),t.sourceMap&&"inline"==t.sourceMap.content){if(Object.keys(e).length>1)throw new Error("inline source map only works with singular input");t.sourceMap.content=J(e[i])}o=t.parse.toplevel}t.wrap&&(o=o.wrap_commonjs(t.wrap)),t.compress&&(o.figure_out_scope(t.mangle),o=new G(t.compress).compress(o)),t.mangle&&(o.figure_out_scope(t.mangle),Jt.reset(),o.compute_char_frequency(t.mangle),o.mangle_names(t.mangle),t.mangle.properties&&(o=Z(o,t.mangle.properties)));var a={};if(t.output.ast&&(a.ast=o),!E(t.output,"code")||t.output.code){if(t.sourceMap&&("string"==typeof t.sourceMap.content&&(t.sourceMap.content=JSON.parse(t.sourceMap.content)),t.output.source_map=W({file:t.sourceMap.filename,orig:t.sourceMap.content,root:t.sourceMap.root}),t.sourceMap.includeSources))for(var i in e)t.output.source_map.get().setSourceContent(i,e[i]);delete t.output.ast,delete t.output.code;var u=Y(t.output);o.print(u),a.code=u.get(),t.sourceMap&&(a.map=t.output.source_map.toString(),"inline"==t.sourceMap.url?a.code+="\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,"+tn(a.map):t.sourceMap.url&&(a.code+="\n//# sourceMappingURL="+t.sourceMap.url))}return r.length&&(a.warnings=r),a}catch(e){return{error:e}}finally{re.warn_function=n}}s.prototype=Object.create(Error.prototype),s.prototype.constructor=s,s.prototype.name="DefaultsError",u(s),s.croak=function(e,t){throw new s(e,t)};var te=function(){function e(e,i,a){function u(){var u=i(e[s],s),f=u instanceof r;return f&&(u=u.v),u instanceof t?(u=u.v)instanceof n?c.push.apply(c,a?u.v.slice().reverse():u.v):c.push(u):u!==o&&(u instanceof n?l.push.apply(l,a?u.v.slice().reverse():u.v):l.push(u)),f}var s,l=[],c=[];if(e instanceof Array)if(a){for(s=e.length;--s>=0&&!u(););l.reverse(),c.reverse()}else for(s=0;s<e.length&&!u();++s);else for(s in e)if(E(e,s)&&u())break;return c.concat(l)}function t(e){this.v=e}function n(e){this.v=e}function r(e){this.v=e}e.at_top=function(e){return new t(e)},e.splice=function(e){return new n(e)},e.last=function(e){return new r(e)};var o=e.skip={};return e}();A.prototype={set:function(e,t){return this.has(e)||++this._size,this._values["$"+e]=t,this},add:function(e,t){return this.has(e)?this.get(e).push(t):this.set(e,[t]),this},get:function(e){return this._values["$"+e]},del:function(e){return this.has(e)&&(--this._size,delete this._values["$"+e]),this},has:function(e){return"$"+e in this._values},each:function(e){for(var t in this._values)e(this._values[t],t.substr(1))},size:function(){return this._size},map:function(e){var t=[];for(var n in this._values)t.push(e(this._values[n],n.substr(1)));return t},toObject:function(){return this._values}},A.fromObject=function(e){var t=new A;return t._size=c(t._values,e),t};var ne=C("Token","type value line col pos endline endcol endpos nlb comments_before file raw",{},null),re=C("Node","start end",{_clone:function(e){if(e){var t=this.clone();return t.transform(new $(function(e){if(e!==t)return e.clone(!0)}))}return new this.CTOR(this)},clone:function(e){return this._clone(e)},$documentation:"Base class of all AST nodes",$propdoc:{start:"[AST_Token] The first token of this node",end:"[AST_Token] The last token of this node"},_walk:function(e){return e._visit(this)},walk:function(e){return this._walk(e)}},null);re.warn_function=null,re.warn=function(e,t){re.warn_function&&re.warn_function(v(e,t))};var oe=C("Statement",null,{$documentation:"Base class of all statements"}),ie=C("Debugger",null,{$documentation:"Represents a debugger statement"},oe),ae=C("Directive","value scope quote",{$documentation:'Represents a directive, like "use strict";',$propdoc:{value:"[string] The value of this directive as a plain string (it's not an AST_String!)",scope:"[AST_Scope/S] The scope that this directive affects",quote:"[string] the original quote character"}},oe),ue=C("SimpleStatement","body",{$documentation:"A statement consisting of an expression, i.e. a = 1 + 2",$propdoc:{body:"[AST_Node] an expression node (should not be instanceof AST_Statement)"},_walk:function(e){return e._visit(this,function(){this.body._walk(e)})}},oe),se=C("Block","body",{$documentation:"A body of statements (usually bracketed)",$propdoc:{body:"[AST_Statement*] an array of statements"},_walk:function(e){return e._visit(this,function(){k(this,e)})}},oe),le=C("BlockStatement",null,{$documentation:"A block statement"},se),ce=C("EmptyStatement",null,{$documentation:"The empty statement (empty block or simply a semicolon)"},oe),fe=C("StatementWithBody","body",{$documentation:"Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`",$propdoc:{body:"[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement"}},oe),pe=C("LabeledStatement","label",{$documentation:"Statement with a label",$propdoc:{label:"[AST_Label] a label definition"},_walk:function(e){return e._visit(this,function(){this.label._walk(e),this.body._walk(e)})},clone:function(e){var t=this._clone(e);if(e){var n=t.label,r=this.label;t.walk(new O(function(e){e instanceof De&&e.label&&e.label.thedef===r&&(e.label.thedef=n,n.references.push(e))}))}return t}},fe),he=C("IterationStatement",null,{$documentation:"Internal class.  All loops inherit from it."},fe),de=C("DWLoop","condition",{$documentation:"Base class for do/while statements",$propdoc:{condition:"[AST_Node] the loop condition.  Should not be instanceof AST_Statement"}},he),me=C("Do",null,{$documentation:"A `do` statement",_walk:function(e){return e._visit(this,function(){this.body._walk(e),this.condition._walk(e)})}},de),ge=C("While",null,{$documentation:"A `while` statement",_walk:function(e){return e._visit(this,function(){this.condition._walk(e),this.body._walk(e)})}},de),ve=C("For","init condition step",{$documentation:"A `for` statement",$propdoc:{init:"[AST_Node?] the `for` initialization code, or null if empty",condition:"[AST_Node?] the `for` termination clause, or null if empty",step:"[AST_Node?] the `for` update clause, or null if empty"},_walk:function(e){return e._visit(this,function(){this.init&&this.init._walk(e),this.condition&&this.condition._walk(e),this.step&&this.step._walk(e),this.body._walk(e)})}},he),be=C("ForIn","init name object",{$documentation:"A `for ... in` statement",$propdoc:{init:"[AST_Node] the `for/in` initialization code",name:"[AST_SymbolRef?] the loop variable, only if `init` is AST_Var",object:"[AST_Node] the object that we're looping through"},_walk:function(e){return e._visit(this,function(){this.init._walk(e),this.object._walk(e),this.body._walk(e)})}},he),ye=C("With","expression",{$documentation:"A `with` statement",$propdoc:{expression:"[AST_Node] the `with` expression"},_walk:function(e){return e._visit(this,function(){this.expression._walk(e),this.body._walk(e)})}},fe),_e=C("Scope","directives variables functions uses_with uses_eval parent_scope enclosed cname",{$documentation:"Base class for all statements introducing a lexical scope",$propdoc:{directives:"[string*/S] an array of directives declared in this scope",variables:"[Object/S] a map of name -> SymbolDef for all variables/functions defined in this scope",functions:"[Object/S] like `variables`, but only lists function declarations",uses_with:"[boolean/S] tells whether this scope uses the `with` statement",uses_eval:"[boolean/S] tells whether this scope contains a direct call to the global `eval`",parent_scope:"[AST_Scope?/S] link to the parent scope",enclosed:"[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes",cname:"[integer/S] current index for mangling variables (used internally by the mangler)"}},se),we=C("Toplevel","globals",{$documentation:"The toplevel scope",$propdoc:{globals:"[Object/S] a map of name -> SymbolDef for all undeclared names"},wrap_commonjs:function(e){var t=this.body,n="(function(exports){'$ORIG';})(typeof "+e+"=='undefined'?("+e+"={}):"+e+");";return n=V(n),n=n.transform(new $(function(e){if(e instanceof ae&&"$ORIG"==e.value)return te.splice(t)}))}},_e),Ae=C("Lambda","name argnames uses_arguments",{$documentation:"Base class for functions",$propdoc:{name:"[AST_SymbolDeclaration?] the name of this function",argnames:"[AST_SymbolFunarg*] array of function arguments",uses_arguments:"[boolean/S] tells whether this function accesses the arguments array"},_walk:function(e){return e._visit(this,function(){this.name&&this.name._walk(e);for(var t=this.argnames,n=0,r=t.length;n<r;n++)t[n]._walk(e);k(this,e)})}},_e),Ee=C("Accessor",null,{$documentation:"A setter/getter function.  The `name` property is always null."},Ae),xe=C("Function",null,{$documentation:"A function expression"},Ae),Ce=C("Defun",null,{$documentation:"A function definition"},Ae),ke=C("Jump",null,{$documentation:"Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)"},oe),Oe=C("Exit","value",{$documentation:"Base class for “exits” (`return` and `throw`)",$propdoc:{value:"[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return"},_walk:function(e){return e._visit(this,this.value&&function(){this.value._walk(e)})}},ke),Be=C("Return",null,{$documentation:"A `return` statement"},Oe),Se=C("Throw",null,{$documentation:"A `throw` statement"},Oe),De=C("LoopControl","label",{$documentation:"Base class for loop control statements (`break` and `continue`)",$propdoc:{label:"[AST_LabelRef?] the label, or null if none"},_walk:function(e){return e._visit(this,this.label&&function(){this.label._walk(e)})}},ke),Te=C("Break",null,{$documentation:"A `break` statement"},De),Re=C("Continue",null,{$documentation:"A `continue` statement"},De),Fe=C("If","condition alternative",{$documentation:"A `if` statement",$propdoc:{condition:"[AST_Node] the `if` condition",alternative:"[AST_Statement?] the `else` part, or null if not present"},_walk:function(e){return e._visit(this,function(){this.condition._walk(e),this.body._walk(e),this.alternative&&this.alternative._walk(e)})}},fe),Le=C("Switch","expression",{$documentation:"A `switch` statement",$propdoc:{expression:"[AST_Node] the `switch` “discriminant”"},_walk:function(e){return e._visit(this,function(){this.expression._walk(e),k(this,e)})}},se),Me=C("SwitchBranch",null,{$documentation:"Base class for `switch` branches"},se),Pe=C("Default",null,{$documentation:"A `default` switch branch"},Me),Ue=C("Case","expression",{$documentation:"A `case` switch branch",$propdoc:{expression:"[AST_Node] the `case` expression"},_walk:function(e){return e._visit(this,function(){this.expression._walk(e),k(this,e)})}},Me),Ne=C("Try","bcatch bfinally",{$documentation:"A `try` statement",$propdoc:{bcatch:"[AST_Catch?] the catch block, or null if not present",bfinally:"[AST_Finally?] the finally block, or null if not present"},_walk:function(e){return e._visit(this,function(){k(this,e),this.bcatch&&this.bcatch._walk(e),this.bfinally&&this.bfinally._walk(e)})}},se),qe=C("Catch","argname",{$documentation:"A `catch` node; only makes sense as part of a `try` statement",$propdoc:{argname:"[AST_SymbolCatch] symbol for the exception"},_walk:function(e){return e._visit(this,function(){this.argname._walk(e),k(this,e)})}},se),ze=C("Finally",null,{$documentation:"A `finally` node; only makes sense as part of a `try` statement"},se),Ie=C("Definitions","definitions",{$documentation:"Base class for `var` nodes (variable declarations/initializations)",$propdoc:{definitions:"[AST_VarDef*] array of variable definitions"},_walk:function(e){return e._visit(this,function(){for(var t=this.definitions,n=0,r=t.length;n<r;n++)t[n]._walk(e)})}},oe),je=C("Var",null,{$documentation:"A `var` statement"},Ie),Ve=C("VarDef","name value",{$documentation:"A variable declaration; only appears in a AST_Definitions node",$propdoc:{name:"[AST_SymbolVar] name of the variable",value:"[AST_Node?] initializer, or null of there's no initializer"},_walk:function(e){return e._visit(this,function(){this.name._walk(e),this.value&&this.value._walk(e)})}}),$e=C("Call","expression args",{$documentation:"A function call expression",$propdoc:{expression:"[AST_Node] expression to invoke as function",args:"[AST_Node*] array of arguments"},_walk:function(e){return e._visit(this,function(){for(var t=this.args,n=0,r=t.length;n<r;n++)t[n]._walk(e);this.expression._walk(e)})}}),He=C("New",null,{$documentation:"An object instantiation.  Derives from a function call since it has exactly the same properties"},$e),Ke=C("Sequence","expressions",{$documentation:"A sequence expression (comma-separated expressions)",$propdoc:{expressions:"[AST_Node*] array of expressions (at least two)"},_walk:function(e){return e._visit(this,function(){this.expressions.forEach(function(t){t._walk(e)})})}}),Ye=C("PropAccess","expression property",{$documentation:'Base class for property access expressions, i.e. `a.foo` or `a["foo"]`',$propdoc:{expression:"[AST_Node] the “container” expression",property:"[AST_Node|string] the property to access.  For AST_Dot this is always a plain string, while for AST_Sub it's an arbitrary AST_Node"}}),Ge=C("Dot",null,{$documentation:"A dotted property access expression",_walk:function(e){return e._visit(this,function(){this.expression._walk(e)})}},Ye),We=C("Sub",null,{$documentation:'Index-style property access, i.e. `a["foo"]`',_walk:function(e){return e._visit(this,function(){this.expression._walk(e),this.property._walk(e)})}},Ye),Qe=C("Unary","operator expression",{$documentation:"Base class for unary expressions",$propdoc:{operator:"[string] the operator",expression:"[AST_Node] expression that this unary operator applies to"},_walk:function(e){return e._visit(this,function(){this.expression._walk(e)})}}),Ze=C("UnaryPrefix",null,{$documentation:"Unary prefix expression, i.e. `typeof i` or `++i`"},Qe),Je=C("UnaryPostfix",null,{$documentation:"Unary postfix expression, i.e. `i++`"},Qe),Xe=C("Binary","operator left right",{$documentation:"Binary expression, i.e. `a + b`",$propdoc:{left:"[AST_Node] left-hand side expression",operator:"[string] the operator",right:"[AST_Node] right-hand side expression"},_walk:function(e){return e._visit(this,function(){this.left._walk(e),this.right._walk(e)})}}),et=C("Conditional","condition consequent alternative",{$documentation:"Conditional expression using the ternary operator, i.e. `a ? b : c`",$propdoc:{condition:"[AST_Node]",consequent:"[AST_Node]",alternative:"[AST_Node]"},_walk:function(e){return e._visit(this,function(){this.condition._walk(e),this.consequent._walk(e),this.alternative._walk(e)})}}),tt=C("Assign",null,{$documentation:"An assignment expression — `a = b + 5`"},Xe),nt=C("Array","elements",{$documentation:"An array literal",$propdoc:{elements:"[AST_Node*] array of elements"},_walk:function(e){return e._visit(this,function(){for(var t=this.elements,n=0,r=t.length;n<r;n++)t[n]._walk(e)})}}),rt=C("Object","properties",{$documentation:"An object literal",$propdoc:{properties:"[AST_ObjectProperty*] array of properties"},_walk:function(e){return e._visit(this,function(){for(var t=this.properties,n=0,r=t.length;n<r;n++)t[n]._walk(e)})}}),ot=C("ObjectProperty","key value",{$documentation:"Base class for literal object properties",$propdoc:{key:"[string] the property name converted to a string for ObjectKeyVal.  For setters and getters this is an AST_SymbolAccessor.",value:"[AST_Node] property value.  For setters and getters this is an AST_Accessor."},_walk:function(e){return e._visit(this,function(){this.value._walk(e)})}}),it=C("ObjectKeyVal","quote",{$documentation:"A key: value object property",$propdoc:{quote:"[string] the original quote character"}},ot),at=C("ObjectSetter",null,{$documentation:"An object setter property"},ot),ut=C("ObjectGetter",null,{$documentation:"An object getter property"},ot),st=C("Symbol","scope name thedef",{$propdoc:{name:"[string] name of this symbol",scope:"[AST_Scope/S] the current scope (not necessarily the definition scope)",thedef:"[SymbolDef/S] the definition of this symbol"},$documentation:"Base class for all symbols"}),lt=C("SymbolAccessor",null,{$documentation:"The name of a property accessor (setter/getter function)"},st),ct=C("SymbolDeclaration","init",{$documentation:"A declaration symbol (symbol in var, function name or argument, symbol in catch)"},st),ft=C("SymbolVar",null,{$documentation:"Symbol defining a variable"},ct),pt=C("SymbolFunarg",null,{$documentation:"Symbol naming a function argument"},ft),ht=C("SymbolDefun",null,{$documentation:"Symbol defining a function"},ct),dt=C("SymbolLambda",null,{$documentation:"Symbol naming a function expression"},ct),mt=C("SymbolCatch",null,{$documentation:"Symbol naming the exception in catch"},ct),gt=C("Label","references",{$documentation:"Symbol naming a label (declaration)",$propdoc:{references:"[AST_LoopControl*] a list of nodes referring to this label"},initialize:function(){this.references=[],this.thedef=this}},st),vt=C("SymbolRef",null,{$documentation:"Reference to some symbol (not definition/declaration)"},st),bt=C("LabelRef",null,{$documentation:"Reference to a label symbol"},st),yt=C("This",null,{$documentation:"The `this` symbol"},st),_t=C("Constant",null,{$documentation:"Base class for all constants",getValue:function(){return this.value}}),wt=C("String","value quote",{$documentation:"A string literal",$propdoc:{value:"[string] the contents of this string",quote:"[string] the original quote character"}},_t),At=C("Number","value literal",{$documentation:"A number literal",$propdoc:{value:"[number] the numeric value",literal:"[string] numeric value as string (optional)"}},_t),Et=C("RegExp","value",{$documentation:"A regexp literal",$propdoc:{value:"[RegExp] the actual regexp"}},_t),xt=C("Atom",null,{$documentation:"Base class for atoms"},_t),Ct=C("Null",null,{$documentation:"The `null` atom",value:null},xt),kt=C("NaN",null,{$documentation:"The impossible value",value:NaN},xt),Ot=C("Undefined",null,{$documentation:"The `undefined` value",value:void 0},xt),Bt=C("Hole",null,{$documentation:"A hole in an array",value:void 0},xt),St=C("Infinity",null,{$documentation:"The `Infinity` value",value:1/0},xt),Dt=C("Boolean",null,{$documentation:"Base class for booleans"},xt),Tt=C("False",null,{$documentation:"The `false` atom",value:!1},Dt),Rt=C("True",null,{$documentation:"The `true` atom",value:!0},Dt);O.prototype={_visit:function(e,t){this.push(e);var n=this.visit(e,t?function(){t.call(e)}:f);return!n&&t&&t.call(e),this.pop(e),n},parent:function(e){return this.stack[this.stack.length-2-(e||0)]},push:function(e){e instanceof Ae?this.directives=Object.create(this.directives):e instanceof ae&&!this.directives[e.value]&&(this.directives[e.value]=e),this.stack.push(e)},pop:function(e){this.stack.pop(),e instanceof Ae&&(this.directives=Object.getPrototypeOf(this.directives))},self:function(){return this.stack[this.stack.length-1]},find_parent:function(e){for(var t=this.stack,n=t.length;--n>=0;){var r=t[n];if(r instanceof e)return r}},has_directive:function(e){var t=this.directives[e];if(t)return t;var n=this.stack[this.stack.length-1];if(n instanceof _e)for(var r=0;r<n.body.length;++r){var o=n.body[r];if(!(o instanceof ae))break;if(o.value==e)return o}},in_boolean_context:function(){for(var e=this.stack,t=e.length,n=e[--t];t>0;){var r=e[--t];if(r instanceof Fe&&r.condition===n||r instanceof et&&r.condition===n||r instanceof de&&r.condition===n||r instanceof ve&&r.condition===n||r instanceof Ze&&"!"==r.operator&&r.expression===n)return!0;if(!(r instanceof Xe)||"&&"!=r.operator&&"||"!=r.operator)return!1;n=r}},loopcontrol_target:function(e){var t=this.stack;if(e.label){for(n=t.length;--n>=0;)if((r=t[n])instanceof pe&&r.label.name==e.label.name)return r.body}else for(var n=t.length;--n>=0;){var r=t[n];if(r instanceof he||e instanceof Te&&r instanceof Le)return r}}};var Ft="break case catch const continue debugger default delete do else finally for function if in instanceof new return switch throw try typeof var void while with",Lt="false null true",Mt="abstract boolean byte char class double enum export extends final float goto implements import int interface let long native package private protected public short static super synchronized this throws transient volatile yield "+Lt+" "+Ft,Pt="return new delete throw else case";Ft=_(Ft),Mt=_(Mt),Pt=_(Pt),Lt=_(Lt);var Ut=_(r("+-*&%=<>!?|~^")),Nt=/^0x[0-9a-f]+$/i,qt=/^0[0-7]+$/,zt=_(["in","instanceof","typeof","new","void","delete","++","--","+","-","!","~","&","|","^","*","/","%",">>","<<",">>>","<",">","<=",">=","==","===","!=","!==","?","=","+=","-=","/=","*=","%=",">>=","<<=",">>>=","|=","^=","&=","&&","||"]),It=_(r("  \n\r\t\f\v​           \u2028\u2029   \ufeff")),jt=_(r("\n\r\u2028\u2029")),Vt=_(r("[{(,;:")),$t=_(r("[]{}(),;:")),Ht=(_(r("gmsiy")),{letter:new RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),digit:new RegExp("[\\u0030-\\u0039\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19]"),non_spacing_mark:new RegExp("[\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065E\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0900-\\u0902\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F90-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1DC0-\\u1DE6\\u1DFD-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F\\uA67C\\uA67D\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA8C4\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE26]"),space_combining_mark:new RegExp("[\\u0903\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u19B0-\\u19C0\\u19C8\\u19C9\\u1A19-\\u1A1B\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF2\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BD-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC]"),connector_punctuation:new RegExp("[\\u005F\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F]")});q.prototype=Object.create(Error.prototype),q.prototype.constructor=q,q.prototype.name="SyntaxError",u(q);var Kt={},Yt=_(["typeof","void","delete","--","++","!","~","-","+"]),Gt=_(["--","++"]),Wt=_(["=","+=","-=","/=","*=","%=",">>=","<<=",">>>=","|=","^=","&="]),Qt=function(e,t){for(var n=0;n<e.length;++n)for(var r=e[n],o=0;o<r.length;++o)t[r[o]]=n+1;return t}([["||"],["&&"],["|"],["^"],["&"],["==","===","!=","!=="],["<",">","<=",">=","in","instanceof"],[">>","<<",">>>"],["+","-"],["*","/","%"]],{}),Zt=(n(["for","do","while","switch"]),n(["atom","num","string","regexp","name"]));$.prototype=new O,function(e){function t(t,n){t.DEFMETHOD("transform",function(t,r){var o,i;return t.push(this),t.before&&(o=t.before(this,n,r)),o===e&&(t.after?(t.stack[t.stack.length-1]=o=this,n(o,t),(i=t.after(o,r))!==e&&(o=i)):n(o=this,t)),t.pop(this),o})}function n(e,t){return te(e,function(e){return e.transform(t,!0)})}t(re,f),t(pe,function(e,t){e.label=e.label.transform(t),e.body=e.body.transform(t)}),t(ue,function(e,t){e.body=e.body.transform(t)}),t(se,function(e,t){e.body=n(e.body,t)}),t(de,function(e,t){e.condition=e.condition.transform(t),e.body=e.body.transform(t)}),t(ve,function(e,t){e.init&&(e.init=e.init.transform(t)),e.condition&&(e.condition=e.condition.transform(t)),e.step&&(e.step=e.step.transform(t)),e.body=e.body.transform(t)}),t(be,function(e,t){e.init=e.init.transform(t),e.object=e.object.transform(t),e.body=e.body.transform(t)}),t(ye,function(e,t){e.expression=e.expression.transform(t),e.body=e.body.transform(t)}),t(Oe,function(e,t){e.value&&(e.value=e.value.transform(t))}),t(De,function(e,t){e.label&&(e.label=e.label.transform(t))}),t(Fe,function(e,t){e.condition=e.condition.transform(t),e.body=e.body.transform(t),e.alternative&&(e.alternative=e.alternative.transform(t))}),t(Le,function(e,t){e.expression=e.expression.transform(t),e.body=n(e.body,t)}),t(Ue,function(e,t){e.expression=e.expression.transform(t),e.body=n(e.body,t)}),t(Ne,function(e,t){e.body=n(e.body,t),e.bcatch&&(e.bcatch=e.bcatch.transform(t)),e.bfinally&&(e.bfinally=e.bfinally.transform(t))}),t(qe,function(e,t){e.argname=e.argname.transform(t),e.body=n(e.body,t)}),t(Ie,function(e,t){e.definitions=n(e.definitions,t)}),t(Ve,function(e,t){e.name=e.name.transform(t),e.value&&(e.value=e.value.transform(t))}),t(Ae,function(e,t){e.name&&(e.name=e.name.transform(t)),e.argnames=n(e.argnames,t),e.body=n(e.body,t)}),t($e,function(e,t){e.expression=e.expression.transform(t),e.args=n(e.args,t)}),t(Ke,function(e,t){e.expressions=n(e.expressions,t)}),t(Ge,function(e,t){e.expression=e.expression.transform(t)}),t(We,function(e,t){e.expression=e.expression.transform(t),e.property=e.property.transform(t)}),t(Qe,function(e,t){e.expression=e.expression.transform(t)}),t(Xe,function(e,t){e.left=e.left.transform(t),e.right=e.right.transform(t)}),t(et,function(e,t){e.condition=e.condition.transform(t),e.consequent=e.consequent.transform(t),e.alternative=e.alternative.transform(t)}),t(nt,function(e,t){e.elements=n(e.elements,t)}),t(rt,function(e,t){e.properties=n(e.properties,t)}),t(ot,function(e,t){e.value=e.value.transform(t)})}(),H.next_id=1,H.prototype={unmangleable:function(e){return e||(e={}),this.global&&!e.toplevel||this.undeclared||!e.eval&&(this.scope.uses_eval||this.scope.uses_with)||e.keep_fnames&&(this.orig[0]instanceof dt||this.orig[0]instanceof ht)},mangle:function(e){var t=e.cache&&e.cache.props;if(this.global&&t&&t.has(this.name))this.mangled_name=t.get(this.name);else if(!this.mangled_name&&!this.unmangleable(e)){var n=this.scope,r=this.orig[0];e.ie8&&r instanceof dt&&(n=n.parent_scope);var o;this.defun&&(o=this.defun.variables.get(this.name))?this.mangled_name=o.mangled_name||o.name:this.mangled_name=n.next_mangled(e,this),this.global&&t&&t.set(this.name,this.mangled_name)}}},we.DEFMETHOD("figure_out_scope",function(e){e=l(e,{cache:null,ie8:!1});var t=this,n=t.parent_scope=null,r=new A,o=null,i=new O(function(t,i){if(t instanceof qe){a=n;return(n=new _e(t)).init_scope_vars(a),i(),n=a,!0}if(t instanceof _e){t.init_scope_vars(n);var a=n,u=o,s=r;return o=n=t,r=new A,i(),n=a,o=u,r=s,!0}if(t instanceof pe){var l=t.label;if(r.has(l.name))throw new Error(v("Label {name} defined twice",l));return r.set(l.name,l),i(),r.del(l.name),!0}if(t instanceof ye)for(var c=n;c;c=c.parent_scope)c.uses_with=!0;else if(t instanceof st&&(t.scope=n),t instanceof gt&&(t.thedef=t,t.references=[]),t instanceof dt)o.def_function(t);else if(t instanceof ht)(t.scope=o.parent_scope).def_function(t);else if(t instanceof ft){if(o.def_variable(t),o!==n){t.mark_enclosed(e);var f=n.find_variable(t);t.thedef!==f&&(t.thedef=f,t.reference(e))}}else if(t instanceof mt)n.def_variable(t).defun=o;else if(t instanceof bt){var p=r.get(t.name);if(!p)throw new Error(v("Undefined label {name} [{line},{col}]",{name:t.name,line:t.start.line,col:t.start.col}));t.thedef=p}});t.walk(i);var a=null,i=(t.globals=new A,new O(function(n,r){if(n instanceof Ae){var o=a;return a=n,r(),a=o,!0}if(n instanceof De&&n.label)return n.label.thedef.references.push(n),!0;if(n instanceof vt){var u=n.name;if("eval"==u&&i.parent()instanceof $e)for(var s=n.scope;s&&!s.uses_eval;s=s.parent_scope)s.uses_eval=!0;var l=n.scope.find_variable(u);return n.scope instanceof Ae&&"arguments"==u&&(n.scope.uses_arguments=!0),l||(l=t.def_global(n)),n.thedef=l,n.reference(e),!0}}));t.walk(i),e.ie8&&t.walk(new O(function(n,r){if(n instanceof mt){var o=n.name,i=n.thedef.references,a=n.thedef.defun,u=a.find_variable(o)||t.globals.get(o)||a.def_variable(n);return i.forEach(function(t){t.thedef=u,t.reference(e)}),n.thedef=u,!0}})),e.cache&&(this.cname=e.cache.cname)}),we.DEFMETHOD("def_global",function(e){var t=this.globals,n=e.name;if(t.has(n))return t.get(n);var r=new H(this,t.size(),e);return r.undeclared=!0,r.global=!0,t.set(n,r),r}),_e.DEFMETHOD("init_scope_vars",function(e){this.variables=new A,this.functions=new A,this.uses_with=!1,this.uses_eval=!1,this.parent_scope=e,this.enclosed=[],this.cname=-1}),Ae.DEFMETHOD("init_scope_vars",function(){_e.prototype.init_scope_vars.apply(this,arguments),this.uses_arguments=!1,this.def_variable(new pt({name:"arguments",start:this.start,end:this.end}))}),st.DEFMETHOD("mark_enclosed",function(e){for(var t=this.definition(),n=this.scope;n&&(g(n.enclosed,t),e.keep_fnames&&n.functions.each(function(e){g(t.scope.enclosed,e)}),n!==t.scope);)n=n.parent_scope}),st.DEFMETHOD("reference",function(e){this.definition().references.push(this),this.mark_enclosed(e)}),_e.DEFMETHOD("find_variable",function(e){return e instanceof st&&(e=e.name),this.variables.get(e)||this.parent_scope&&this.parent_scope.find_variable(e)}),_e.DEFMETHOD("def_function",function(e){this.functions.set(e.name,this.def_variable(e))}),_e.DEFMETHOD("def_variable",function(e){var t;return this.variables.has(e.name)?(t=this.variables.get(e.name)).orig.push(e):(t=new H(this,this.variables.size(),e),this.variables.set(e.name,t),t.global=!this.parent_scope),e.thedef=t}),_e.DEFMETHOD("next_mangled",function(e){var t=this.enclosed;e:for(;;){var n=Jt(++this.cname);if(L(n)&&!(e.reserved.indexOf(n)>=0)){for(var r=t.length;--r>=0;){var o=t[r];if(n==(o.mangled_name||o.unmangleable(e)&&o.name))continue e}return n}}}),xe.DEFMETHOD("next_mangled",function(e,t){for(var n=t.orig[0]instanceof pt&&this.name&&this.name.definition(),r=n?n.mangled_name||n.name:null;;){var o=Ae.prototype.next_mangled.call(this,e,t);if(!r||r!=o)return o}}),st.DEFMETHOD("unmangleable",function(e){return this.definition().unmangleable(e)}),gt.DEFMETHOD("unmangleable",function(){return!1}),st.DEFMETHOD("unreferenced",function(){return 0==this.definition().references.length&&!(this.scope.uses_eval||this.scope.uses_with)}),st.DEFMETHOD("undeclared",function(){return this.definition().undeclared}),bt.DEFMETHOD("undeclared",function(){return!1}),gt.DEFMETHOD("undeclared",function(){return!1}),st.DEFMETHOD("definition",function(){return this.thedef}),st.DEFMETHOD("global",function(){return this.definition().global}),we.DEFMETHOD("_default_mangler_options",function(e){return l(e,{eval:!1,ie8:!1,keep_fnames:!1,reserved:[],toplevel:!1})}),we.DEFMETHOD("mangle_names",function(e){(e=this._default_mangler_options(e)).reserved.push("arguments");var t=-1,n=[];e.cache&&this.globals.each(function(t){e.reserved.indexOf(t.name)<0&&n.push(t)});var r=new O(function(o,i){if(o instanceof pe){var a=t;return i(),t=a,!0}if(o instanceof _e){r.parent();var u=[];return o.variables.each(function(t){e.reserved.indexOf(t.name)<0&&u.push(t)}),void n.push.apply(n,u)}if(o instanceof gt){var s;do{s=Jt(++t)}while(!L(s));return o.mangled_name=s,!0}if(!e.ie8&&o instanceof mt)return void n.push(o.definition())});this.walk(r),n.forEach(function(t){t.mangle(e)}),e.cache&&(e.cache.cname=this.cname)}),we.DEFMETHOD("compute_char_frequency",function(e){e=this._default_mangler_options(e);var t=new O(function(t){t instanceof _t?Jt.consider(t.print_to_string()):t instanceof Be?Jt.consider("return"):t instanceof Se?Jt.consider("throw"):t instanceof Re?Jt.consider("continue"):t instanceof Te?Jt.consider("break"):t instanceof ie?Jt.consider("debugger"):t instanceof ae?Jt.consider(t.value):t instanceof ge?Jt.consider("while"):t instanceof me?Jt.consider("do while"):t instanceof Fe?(Jt.consider("if"),t.alternative&&Jt.consider("else")):t instanceof je?Jt.consider("var"):t instanceof Ae?Jt.consider("function"):t instanceof ve?Jt.consider("for"):t instanceof be?Jt.consider("for in"):t instanceof Le?Jt.consider("switch"):t instanceof Ue?Jt.consider("case"):t instanceof Pe?Jt.consider("default"):t instanceof ye?Jt.consider("with"):t instanceof at?Jt.consider("set"+t.key):t instanceof ut?Jt.consider("get"+t.key):t instanceof it?Jt.consider(t.key):t instanceof He?Jt.consider("new"):t instanceof yt?Jt.consider("this"):t instanceof Ne?Jt.consider("try"):t instanceof qe?Jt.consider("catch"):t instanceof ze?Jt.consider("finally"):t instanceof st&&t.unmangleable(e)?Jt.consider(t.name):t instanceof Qe||t instanceof Xe?Jt.consider(t.operator):t instanceof Ge&&Jt.consider(t.property)});this.walk(t),Jt.sort()});var Jt=function(){function e(){r=Object.create(null),(n=o.split("").map(function(e){return e.charCodeAt(0)})).forEach(function(e){r[e]=0})}function t(e){var t="",r=54;e++;do{e--,t+=String.fromCharCode(n[e%r]),e=Math.floor(e/r),r=64}while(e>0);return t}var n,r,o="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789";return t.consider=function(e){for(var t=e.length;--t>=0;){var n=e.charCodeAt(t);n in r&&++r[n]}},t.sort=function(){n=y(n,function(e,t){return S(e)&&!S(t)?1:S(t)&&!S(e)?-1:r[t]-r[e]})},t.reset=e,e(),t.get=function(){return n},t.freq=function(){return r},t}(),Xt=/^$|[;{][\s\n]*$/;!function(){function e(e,t){e.DEFMETHOD("_codegen",t)}function t(e,n){Array.isArray(e)?e.forEach(function(e){t(e,n)}):e.DEFMETHOD("needs_parens",n)}function n(e,t,n,r){var o=e.length-1;g=r,e.forEach(function(e,r){!0!==g||e instanceof ae||e instanceof ce||e instanceof ue&&e.body instanceof wt||(g=!1),e instanceof ce||(n.indent(),e.print(n),r==o&&t||(n.newline(),t&&n.newline())),!0===g&&e instanceof ue&&e.body instanceof wt&&(g=!1)}),g=!1}function r(e,t,r){e.length>0?t.with_block(function(){n(e,!1,t,r)}):t.print("{}")}function o(e,t){var n=e.body;if(t.option("bracketize")||t.option("ie8")&&n instanceof me)return p(n,t);if(!n)return t.force_semicolon();for(;;)if(n instanceof Fe){if(!n.alternative)return void p(e.body,t);n=n.alternative}else{if(!(n instanceof fe))break;n=n.body}u(e.body,t)}function i(e,t,n){if(n)try{e.walk(new O(function(e){if(e instanceof Xe&&"in"==e.operator)throw t})),e.print(t)}catch(n){if(n!==t)throw n;e.print(t,!0)}else e.print(t)}function a(e){return[92,47,46,43,42,63,40,41,91,93,123,125,36,94,58,124,33,10,13,0,65279,8232,8233].indexOf(e)<0}function u(e,t){t.option("bracketize")?p(e,t):!e||e instanceof ce?t.force_semicolon():e.print(t)}function s(e,t){return e.args.length>0||t.option("beautify")}function l(e){for(var t=e[0],n=t.length,r=1;r<e.length;++r)e[r].length<n&&(n=(t=e[r]).length);return t}function c(e){var t,n=e.toString(10),r=[n.replace(/^0\./,".").replace("e+","e")];return Math.floor(e)===e?(e>=0?r.push("0x"+e.toString(16).toLowerCase(),"0"+e.toString(8)):r.push("-0x"+(-e).toString(16).toLowerCase(),"-0"+(-e).toString(8)),(t=/^(.*?)(0+)$/.exec(e))&&r.push(t[1]+"e"+t[2].length)):(t=/^0?\.(0+)(.*)$/.exec(e))&&r.push(t[2]+"e-"+(t[1].length+t[2].length),n.substr(n.indexOf("."))),l(r)}function p(e,t){!e||e instanceof ce?t.print("{}"):e instanceof le?e.print(t):t.with_block(function(){t.indent(),e.print(t),t.newline()})}function h(e,t){e.DEFMETHOD("add_source_map",function(e){t(this,e)})}function d(e,t){t.add_mapping(e.start)}var m=!1,g=!1;re.DEFMETHOD("print",function(e,t){function n(){r.add_comments(e),r.add_source_map(e),o(r,e)}var r=this,o=r._codegen,i=m;r instanceof ae&&"use asm"==r.value&&e.parent()instanceof _e&&(m=!0),e.push_node(r),t||r.needs_parens(e)?e.with_parens(n):n(),e.pop_node(),r instanceof _e&&(m=i)}),re.DEFMETHOD("print_to_string",function(e){var t=Y(e);return e||(t._readonly=!0),this.print(t),t.get()}),re.DEFMETHOD("add_comments",function(e){if(!e._readonly){var t=this,n=t.start;if(n&&!n._comments_dumped){n._comments_dumped=!0;var r=n.comments_before||[];if(t instanceof Oe&&t.value&&t.value.walk(new O(function(e){if(e.start&&e.start.comments_before&&(r=r.concat(e.start.comments_before),e.start.comments_before=[]),e instanceof xe||e instanceof nt||e instanceof rt)return!0})),0==e.pos()){r.length>0&&e.option("shebang")&&"comment5"==r[0].type&&(e.print("#!"+r.shift().value+"\n"),e.indent());var o=e.option("preamble");o&&e.print(o.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g,"\n"))}r=r.filter(e.comment_filter,t),!e.option("beautify")&&r.length>0&&/comment[134]/.test(r[0].type)&&0!==e.col()&&r[0].nlb&&e.print("\n"),r.forEach(function(t){/comment[134]/.test(t.type)?(e.print("//"+t.value+"\n"),e.indent()):"comment2"==t.type&&(e.print("/*"+t.value+"*/"),n.nlb?(e.print("\n"),e.indent()):e.space())})}}}),t(re,function(){return!1}),t(xe,function(e){if(x(e))return!0;if(e.option("wrap_iife")){var t=e.parent();return t instanceof $e&&t.expression===this}return!1}),t(rt,function(e){return x(e)}),t(Qe,function(e){var t=e.parent();return t instanceof Ye&&t.expression===this||t instanceof $e&&t.expression===this}),t(Ke,function(e){var t=e.parent();return t instanceof $e||t instanceof Qe||t instanceof Xe||t instanceof Ve||t instanceof Ye||t instanceof nt||t instanceof ot||t instanceof et}),t(Xe,function(e){var t=e.parent();if(t instanceof $e&&t.expression===this)return!0;if(t instanceof Qe)return!0;if(t instanceof Ye&&t.expression===this)return!0;if(t instanceof Xe){var n=t.operator,r=Qt[n],o=this.operator,i=Qt[o];if(r>i||r==i&&this===t.right)return!0}}),t(Ye,function(e){var t=e.parent();if(t instanceof He&&t.expression===this)try{this.walk(new O(function(e){if(e instanceof $e)throw t}))}catch(e){if(e!==t)throw e;return!0}}),t($e,function(e){var t,n=e.parent();return n instanceof He&&n.expression===this||this.expression instanceof xe&&n instanceof Ye&&n.expression===this&&(t=e.parent(1))instanceof tt&&t.left===n}),t(He,function(e){var t=e.parent();if(!s(this,e)&&(t instanceof Ye||t instanceof $e&&t.expression===this))return!0}),t(At,function(e){var t=e.parent();if(t instanceof Ye&&t.expression===this){var n=this.getValue();if(n<0||/^0/.test(c(n)))return!0}}),t([tt,et],function(e){var t=e.parent();return t instanceof Qe||(t instanceof Xe&&!(t instanceof tt)||(t instanceof $e&&t.expression===this||(t instanceof et&&t.condition===this||(t instanceof Ye&&t.expression===this||void 0))))}),e(ae,function(e,t){t.print_string(e.value,e.quote),t.semicolon()}),e(ie,function(e,t){t.print("debugger"),t.semicolon()}),fe.DEFMETHOD("_do_print_body",function(e){u(this.body,e)}),e(oe,function(e,t){e.body.print(t),t.semicolon()}),e(we,function(e,t){n(e.body,!0,t,!0),t.print("")}),e(pe,function(e,t){e.label.print(t),t.colon(),e.body.print(t)}),e(ue,function(e,t){e.body.print(t),t.semicolon()}),e(le,function(e,t){r(e.body,t)}),e(ce,function(e,t){t.semicolon()}),e(me,function(e,t){t.print("do"),t.space(),p(e.body,t),t.space(),t.print("while"),t.space(),t.with_parens(function(){e.condition.print(t)}),t.semicolon()}),e(ge,function(e,t){t.print("while"),t.space(),t.with_parens(function(){e.condition.print(t)}),t.space(),e._do_print_body(t)}),e(ve,function(e,t){t.print("for"),t.space(),t.with_parens(function(){e.init?(e.init instanceof Ie?e.init.print(t):i(e.init,t,!0),t.print(";"),t.space()):t.print(";"),e.condition?(e.condition.print(t),t.print(";"),t.space()):t.print(";"),e.step&&e.step.print(t)}),t.space(),e._do_print_body(t)}),e(be,function(e,t){t.print("for"),t.space(),t.with_parens(function(){e.init.print(t),t.space(),t.print("in"),t.space(),e.object.print(t)}),t.space(),e._do_print_body(t)}),e(ye,function(e,t){t.print("with"),t.space(),t.with_parens(function(){e.expression.print(t)}),t.space(),e._do_print_body(t)}),Ae.DEFMETHOD("_do_print",function(e,t){var n=this;t||e.print("function"),n.name&&(e.space(),n.name.print(e)),e.with_parens(function(){n.argnames.forEach(function(t,n){n&&e.comma(),t.print(e)})}),e.space(),r(n.body,e,!0)}),e(Ae,function(e,t){e._do_print(t)}),Oe.DEFMETHOD("_do_print",function(e,t){e.print(t),this.value&&(e.space(),this.value.print(e)),e.semicolon()}),e(Be,function(e,t){e._do_print(t,"return")}),e(Se,function(e,t){e._do_print(t,"throw")}),De.DEFMETHOD("_do_print",function(e,t){e.print(t),this.label&&(e.space(),this.label.print(e)),e.semicolon()}),e(Te,function(e,t){e._do_print(t,"break")}),e(Re,function(e,t){e._do_print(t,"continue")}),e(Fe,function(e,t){t.print("if"),t.space(),t.with_parens(function(){e.condition.print(t)}),t.space(),e.alternative?(o(e,t),t.space(),t.print("else"),t.space(),e.alternative instanceof Fe?e.alternative.print(t):u(e.alternative,t)):e._do_print_body(t)}),e(Le,function(e,t){t.print("switch"),t.space(),t.with_parens(function(){e.expression.print(t)}),t.space();var n=e.body.length-1;n<0?t.print("{}"):t.with_block(function(){e.body.forEach(function(e,r){t.indent(!0),e.print(t),r<n&&e.body.length>0&&t.newline()})})}),Me.DEFMETHOD("_do_print_body",function(e){e.newline(),this.body.forEach(function(t){e.indent(),t.print(e),e.newline()})}),e(Pe,function(e,t){t.print("default:"),e._do_print_body(t)}),e(Ue,function(e,t){t.print("case"),t.space(),e.expression.print(t),t.print(":"),e._do_print_body(t)}),e(Ne,function(e,t){t.print("try"),t.space(),r(e.body,t),e.bcatch&&(t.space(),e.bcatch.print(t)),e.bfinally&&(t.space(),e.bfinally.print(t))}),e(qe,function(e,t){t.print("catch"),t.space(),t.with_parens(function(){e.argname.print(t)}),t.space(),r(e.body,t)}),e(ze,function(e,t){t.print("finally"),t.space(),r(e.body,t)}),Ie.DEFMETHOD("_do_print",function(e,t){e.print(t),e.space(),this.definitions.forEach(function(t,n){n&&e.comma(),t.print(e)});var n=e.parent();(n instanceof ve||n instanceof be)&&n.init===this||e.semicolon()}),e(je,function(e,t){e._do_print(t,"var")}),e(Ve,function(e,t){if(e.name.print(t),e.value){t.space(),t.print("="),t.space();var n=t.parent(1),r=n instanceof ve||n instanceof be;i(e.value,t,r)}}),e($e,function(e,t){e.expression.print(t),e instanceof He&&!s(e,t)||t.with_parens(function(){e.args.forEach(function(e,n){n&&t.comma(),e.print(t)})})}),e(He,function(e,t){t.print("new"),t.space(),$e.prototype._codegen(e,t)}),Ke.DEFMETHOD("_do_print",function(e){this.expressions.forEach(function(t,n){n>0&&(e.comma(),e.should_break()&&(e.newline(),e.indent())),t.print(e)})}),e(Ke,function(e,t){e._do_print(t)}),e(Ge,function(e,t){var n=e.expression;n.print(t),n instanceof At&&n.getValue()>=0&&(/[xa-f.)]/i.test(t.last())||t.print(".")),t.print("."),t.add_mapping(e.end),t.print_name(e.property)}),e(We,function(e,t){e.expression.print(t),t.print("["),e.property.print(t),t.print("]")}),e(Ze,function(e,t){var n=e.operator;t.print(n),(/^[a-z]/i.test(n)||/[+-]$/.test(n)&&e.expression instanceof Ze&&/^[+-]/.test(e.expression.operator))&&t.space(),e.expression.print(t)}),e(Je,function(e,t){e.expression.print(t),t.print(e.operator)}),e(Xe,function(e,t){var n=e.operator;e.left.print(t),">"==n[0]&&e.left instanceof Je&&"--"==e.left.operator?t.print(" "):t.space(),t.print(n),("<"==n||"<<"==n)&&e.right instanceof Ze&&"!"==e.right.operator&&e.right.expression instanceof Ze&&"--"==e.right.expression.operator?t.print(" "):t.space(),e.right.print(t)}),e(et,function(e,t){e.condition.print(t),t.space(),t.print("?"),t.space(),e.consequent.print(t),t.space(),t.colon(),e.alternative.print(t)}),e(nt,function(e,t){t.with_square(function(){var n=e.elements,r=n.length;r>0&&t.space(),n.forEach(function(e,n){n&&t.comma(),e.print(t),n===r-1&&e instanceof Bt&&t.comma()}),r>0&&t.space()})}),e(rt,function(e,t){e.properties.length>0?t.with_block(function(){e.properties.forEach(function(e,n){n&&(t.print(","),t.newline()),t.indent(),e.print(t)}),t.newline()}):t.print("{}")}),e(it,function(e,t){var n=e.key,r=e.quote;t.option("quote_keys")?t.print_string(n+""):("number"==typeof n||!t.option("beautify")&&+n+""==n)&&parseFloat(n)>=0?t.print(c(n)):(Mt(n)?!t.option("ie8"):U(n))?r&&t.option("keep_quoted_props")?t.print_string(n,r):t.print_name(n):t.print_string(n,r),t.colon(),e.value.print(t)}),e(at,function(e,t){t.print("set"),t.space(),e.key.print(t),e.value._do_print(t,!0)}),e(ut,function(e,t){t.print("get"),t.space(),e.key.print(t),e.value._do_print(t,!0)}),e(st,function(e,t){var n=e.definition();t.print_name(n?n.mangled_name||n.name:e.name)}),e(Bt,f),e(yt,function(e,t){t.print("this")}),e(_t,function(e,t){t.print(e.getValue())}),e(wt,function(e,t){t.print_string(e.getValue(),e.quote,g)}),e(At,function(e,t){m&&e.start&&null!=e.start.raw?t.print(e.start.raw):t.print(c(e.getValue()))}),e(Et,function(e,t){var n=e.getValue().toString();t.option("ascii_only")?n=t.to_ascii(n):t.option("unescape_regexps")&&(n=n.split("\\\\").map(function(e){return e.replace(/\\u[0-9a-fA-F]{4}|\\x[0-9a-fA-F]{2}/g,function(e){var t=parseInt(e.substr(2),16);return a(t)?String.fromCharCode(t):e})}).join("\\\\")),t.print(n);var r=t.parent();r instanceof Xe&&/^in/.test(r.operator)&&r.left===e&&t.print(" ")}),h(re,f),h(ae,d),h(ie,d),h(st,d),h(ke,d),h(fe,d),h(pe,f),h(Ae,d),h(Le,d),h(Me,d),h(le,d),h(we,f),h(He,d),h(Ne,d),h(qe,d),h(ze,d),h(Ie,d),h(_t,d),h(at,function(e,t){t.add_mapping(e.start,e.key.name)}),h(ut,function(e,t){t.add_mapping(e.start,e.key.name)}),h(ot,function(e,t){t.add_mapping(e.start,e.key)})}(),G.prototype=new $,c(G.prototype,{option:function(e){return this.options[e]},toplevel:function(e){for(var t=0,n=e.orig.length;t<n;t++)if(!this.toplevel[e.orig[t]instanceof ht?"funcs":"vars"])return!1;return!0},compress:function(e){this.option("expression")&&e.process_expression(!0);for(var t=+this.options.passes||1,n=0;n<t&&n<3;++n)(n>0||this.option("reduce_vars"))&&e.reset_opt_flags(this,!0),e=e.transform(this);return this.option("expression")&&e.process_expression(!1),e},info:function(){"verbose"==this.options.warnings&&re.warn.apply(re,arguments)},warn:function(e,t){if(this.options.warnings){var n=v(e,t);n in this.warnings_produced||(this.warnings_produced[n]=!0,re.warn.apply(re,arguments))}},clear_warnings:function(){this.warnings_produced={}},before:function(e,t,n){if(e._squeezed)return e;var r=!1;e instanceof _e&&(e=e.hoist_declarations(this),r=!0),t(e,this),t(e,this);var o=e.optimize(this);return r&&o instanceof _e&&(o.drop_unused(this),t(o,this)),o===e&&(o._squeezed=!0),o}}),function(){function e(e,t){e.DEFMETHOD("optimize",function(e){var n=this;if(n._optimized)return n;if(e.has_directive("use asm"))return n;var r=t(n,e);return r._optimized=!0,r})}function t(e){return e instanceof vt&&e.definition().orig[0]instanceof dt}function n(e,t){for(var n,r=0;(n=e.parent(r++))&&!(n instanceof _e);)if(n instanceof qe){n=n.argname.definition().scope;break}return n.find_variable(t)}function r(e,t,n){return n||(n={}),t&&(n.start||(n.start=t.start),n.end||(n.end=t.end)),new e(n)}function a(e,t){return 1==t.length?t[0]:r(Ke,e,{expressions:t})}function u(e,t){switch(typeof e){case"string":return r(wt,t,{value:e});case"number":return isNaN(e)?r(kt,t):isFinite(e)?1/e<0?r(Ze,t,{operator:"-",expression:r(At,t,{value:-e})}):r(At,t,{value:e}):e<0?r(Ze,t,{operator:"-",expression:r(St,t)}):r(St,t);case"boolean":return r(e?Rt:Tt,t);case"undefined":return r(Ot,t);default:if(null===e)return r(Ct,t,{value:null});if(e instanceof RegExp)return r(Et,t,{value:e});throw new Error(v("Can't handle constant of type: {type}",{type:typeof e}))}}function s(e,t,n){return e instanceof Ze&&"delete"==e.operator||e instanceof $e&&e.expression===t&&(n instanceof Ye||n instanceof vt&&"eval"==n.name)?a(t,[r(At,t,{value:0}),n]):n}function l(e,t){t instanceof Ke?e.push.apply(e,t.expressions):e.push(t)}function c(e){if(null===e)return[];if(e instanceof le)return e.body;if(e instanceof ce)return[];if(e instanceof oe)return[e];throw new Error("Can't convert thing to statement array")}function g(e){return null===e||(e instanceof ce||e instanceof le&&0==e.body.length)}function y(e){return e instanceof Le?e:(e instanceof ve||e instanceof be||e instanceof de)&&e.body instanceof le?e.body:e}function C(e){return e instanceof $e&&!(e instanceof He)&&(e.expression instanceof xe||C(e.expression))}function B(e,n){function o(e){var t=[];return e.reduce(function(e,n){return n instanceof le?(u=!0,e.push.apply(e,o(n.body))):n instanceof ce?u=!0:n instanceof ae?t.indexOf(n.value)<0?(e.push(n),t.push(n.value)):u=!0:e.push(n),e},[])}function i(e,t){function n(e){o.pop();var n=i.body;return n instanceof Ke||(n=r(Ke,n,{expressions:[n]})),l(n.expressions,e),n.transform(t)}var o=[],i=null;return e.forEach(function(e){if(i)if(e instanceof ve)try{i.body.walk(new O(function(e){if(e instanceof Xe&&"in"==e.operator)throw n})),!e.init||e.init instanceof Ie?e.init||(e.init=i.body.drop_side_effect_free(t),o.pop()):e.init=n(e.init)}catch(e){if(e!==n)throw e}else e instanceof Fe?e.condition=n(e.condition):e instanceof ye?e.expression=n(e.expression):e instanceof Oe&&e.value?e.value=n(e.value):e instanceof Oe?e.value=n(r(Ot,e).transform(t)):e instanceof Le&&(e.expression=n(e.expression));o.push(e),i=e instanceof ue?e:null}),o}var u,f=10;do{u=!1,e=o(e),n.option("dead_code")&&(e=function(e,t){var n=!1,r=e.length,o=t.self();return e=e.reduce(function(e,r){if(n)D(t,r,e);else{if(r instanceof De){var i=t.loopcontrol_target(r);r instanceof Te&&!(i instanceof he)&&y(i)===o||r instanceof Re&&y(i)===o?r.label&&b(r.label.thedef.references,r):e.push(r)}else e.push(r);P(r)&&(n=!0)}return e},[]),u=e.length!=r,e}(e,n)),n.option("if_return")&&(e=function(e,t){var n=t.self(),o=function(e){for(var t=0,n=e.length;--n>=0;){var r=e[n];if(r instanceof Fe&&r.body instanceof Be&&++t>1)return!0}return!1}(e),i=n instanceof Ae,a=[];e:for(var s=e.length;--s>=0;){var l=e[s];switch(!0){case i&&l instanceof Be&&!l.value&&0==a.length:u=!0;continue e;case l instanceof Fe:if(l.body instanceof Be){if((i&&0==a.length||a[0]instanceof Be&&!a[0].value)&&!l.body.value&&!l.alternative){u=!0;var f=r(ue,l.condition,{body:l.condition});a.unshift(f);continue e}if(a[0]instanceof Be&&l.body.value&&a[0].value&&!l.alternative){u=!0,(l=l.clone()).alternative=a[0],a[0]=l.transform(t);continue e}if(o&&(0==a.length||a[0]instanceof Be)&&l.body.value&&!l.alternative&&i){u=!0,(l=l.clone()).alternative=a[0]||r(Be,l,{value:null}),a[0]=l.transform(t);continue e}if(!l.body.value&&i){u=!0,(l=l.clone()).condition=l.condition.negate(t);var p=S(m=c(l.alternative).concat(a));l.body=r(le,l,{body:m}),l.alternative=null,a=p.concat([l.transform(t)]);continue e}if(t.option("sequences")&&s>0&&e[s-1]instanceof Fe&&e[s-1].body instanceof Be&&1==a.length&&i&&a[0]instanceof ue&&!l.alternative){u=!0,a.push(r(Be,a[0],{value:null}).transform(t)),a.unshift(l);continue e}}var h=P(l.body),d=h instanceof De?t.loopcontrol_target(h):null;if(h&&(h instanceof Be&&!h.value&&i||h instanceof Re&&n===y(d)||h instanceof Te&&d instanceof le&&n===d)){h.label&&b(h.label.thedef.references,h),u=!0;var m=c(l.body).slice(0,-1);(l=l.clone()).condition=l.condition.negate(t),l.body=r(le,l,{body:c(l.alternative).concat(a)}),l.alternative=r(le,l,{body:m}),a=[l.transform(t)];continue e}d=(h=P(l.alternative))instanceof De?t.loopcontrol_target(h):null;if(h&&(h instanceof Be&&!h.value&&i||h instanceof Re&&n===y(d)||h instanceof Te&&d instanceof le&&n===d)){h.label&&b(h.label.thedef.references,h),u=!0,(l=l.clone()).body=r(le,l.body,{body:c(l.body).concat(a)}),l.alternative=r(le,l.alternative,{body:c(l.alternative).slice(0,-1)}),a=[l.transform(t)];continue e}a.unshift(l);break;default:a.unshift(l)}}return a}(e,n)),n.sequences_limit>0&&(e=function(e,t){function n(){if(o.length){var e=a(o[0],o);s.push(r(ue,e,{body:e})),o=[]}}if(e.length<2)return e;var o=[],s=[];return e.forEach(function(e){if(e instanceof ue){o.length>=t.sequences_limit&&n();var r=e.body;o.length>0&&(r=r.drop_side_effect_free(t)),r&&l(o,r)}else n(),s.push(e)}),n(),s=i(s,t),u=s.length!=e.length,s}(e,n)),n.option("join_vars")&&(e=function(e,t){var n=null;return e.reduce(function(e,t){return t instanceof Ie&&n&&n.TYPE==t.TYPE?(n.definitions=n.definitions.concat(t.definitions),u=!0):t instanceof ve&&n instanceof je&&(!t.init||t.init.TYPE==n.TYPE)?(u=!0,e.pop(),t.init?t.init.definitions=n.definitions.concat(t.init.definitions):t.init=n,e.push(t),n=t):(n=t,e.push(t)),e},[])}(e,n)),n.option("collapse_vars")&&(e=function(e,n){function o(e){e instanceof tt&&!e.left.has_side_effects(n)||e instanceof Qe&&("++"==e.operator||"--"==e.operator)?f.push(e):e instanceof Ke?e.expressions.forEach(o):e instanceof Ie?e.definitions.forEach(function(e){e.value&&f.push(e)}):e instanceof ue?o(e.body):e instanceof ve&&e.init&&o(e.init)}function i(e){for(;e instanceof Ye;)e=e.expression;return e}function a(e){return e instanceof Ve?e.value&&e.name:R(e.left,e)}function l(e){return 1==e.orig.length&&e.orig[0]instanceof ht||e.scope===c&&e.references.every(function(e){return e.scope===c})}var c=n.find_parent(_e);if(c.uses_eval||c.uses_with)return e;for(var f=[],p=e.length;--p>=0;)for(o(e[p]);f.length>0;){var h=f.pop(),d=function(e){if(!(e instanceof Ve))return e[e instanceof tt?"left":"expression"];var t=e.name.definition();return t.orig.length>1||1==t.references.length&&(!t.global||n.toplevel(t))?r(vt,e.name,e.name):void 0}(h);if(d&&!t(d)){var m=function(e){var t=Object.create(null);if(e instanceof Qe)return t;var n,r=new O(function(e,o){if(e instanceof _e){var a=n;return o(),n=a,!0}if(e instanceof vt||e instanceof Ye){var u=i(e);u instanceof vt&&(t[u.name]=t[u.name]||R(e,r.parent()))}});return e[e instanceof tt?"right":"value"].walk(r),t}(h);d instanceof vt&&(m[d.name]=!1);for(var g=function(e){return!(e instanceof Qe)&&e[e instanceof tt?"right":"value"].has_side_effects(n)}(h),v=!1,y=!1,_=!1,w=(new $(function(e,t){if(y)return e;{if(v){var o=w.parent();if(e instanceof tt&&"="!=e.operator&&d.equivalent_to(e.left)||e instanceof ie||e instanceof he&&!(e instanceof ve)||e instanceof vt&&e.undeclared()||e instanceof Ne||e instanceof ye||o instanceof ve&&e!==o.init)return y=!0,e;if(!(e instanceof ct)&&!R(e,o)&&d.equivalent_to(e)){if(u=_=y=!0,n.info("Collapsing {name} [{file}:{line},{col}]",{name:e.print_to_string(),file:e.start.file,line:e.start.line,col:e.start.col}),h instanceof Je)return r(Ze,h,h);if(h instanceof Ve){var c=h.name.definition();return 1!=c.references.length||c.global&&!n.toplevel(c)?r(tt,h,{operator:"=",left:r(vt,h.name,h.name),right:h.value}):s(o,e,h.value)}return h}var f;return e instanceof $e||e instanceof Oe||e instanceof Ye||e instanceof vt&&(m[e.name]||g&&!l(e.definition()))||(f=a(e))&&i(f).name in m||o instanceof Xe&&("&&"==o.operator||"||"==o.operator)||o instanceof Ue||o instanceof et||o instanceof ve||o instanceof Fe?(e instanceof _e||t(e,w),y=!0,e):e instanceof Pe||e instanceof _e?e:void 0}if(e===h)return v=!0,e}})),A=p;!y&&A<e.length;A++)e[A].transform(w);_&&!function(t){var n=!1;return e[p].transform(new $(function(e,r,o){return n?e:e===t?(n=!0,e instanceof Ve&&b(e.name.definition().orig,e.name),o?te.skip:null):void 0},function(e){if(e instanceof Ke)switch(e.expressions.length){case 0:return null;case 1:return e.expressions[0]}if(e instanceof Ie&&0==e.definitions.length||e instanceof ue&&!e.body)return null}))}(h)&&e.splice(p,1)}}return e}(e,n))}while(u&&f-- >0);return e}function S(e){for(var t=[],n=e.length-1;n>=0;--n){var r=e[n];r instanceof Ce&&(e.splice(n,1),t.unshift(r))}return t}function D(e,t,n){t instanceof Ce||e.warn("Dropping unreachable code [{file}:{line},{col}]",t.start),t.walk(new O(function(t){return t instanceof Ie?(e.warn("Declarations in unreachable code! [{file}:{line},{col}]",t.start),t.remove_initializers(),n.push(t),!0):t instanceof Ce?(n.push(t),!0):t instanceof _e||void 0}))}function T(e,t){return e.is_undefined||e instanceof Ot||e instanceof Ze&&"void"==e.operator&&!e.expression.has_side_effects(t)}function R(e,t){return t instanceof Qe&&j(t.operator)?t.expression:t instanceof tt&&t.left===e?e:void 0}function F(e,t){return e.print_to_string().length>t.print_to_string().length?t:e}function L(e,t){return F(r(ue,e,{body:e}),r(ue,t,{body:t})).body}function M(e,t,n){return(x(e)?L:F)(t,n)}function P(e){return e&&e.aborts()}function N(e,t){function n(n){n=c(n),e.body instanceof le?(e.body=e.body.clone(),e.body.body=n.concat(e.body.body.slice(1)),e.body=e.body.transform(t)):e.body=r(le,e.body,{body:n}).transform(t),N(e,t)}var o=e.body instanceof le?e.body.body[0]:e.body;o instanceof Fe&&(o.body instanceof Te&&t.loopcontrol_target(o.body)===t.self()?(e.condition?e.condition=r(Xe,e.condition,{left:e.condition,operator:"&&",right:o.condition.negate(t)}):e.condition=o.condition.negate(t),n(o.alternative)):o.alternative instanceof Te&&t.loopcontrol_target(o.alternative)===t.self()&&(e.condition?e.condition=r(Xe,e.condition,{left:e.condition,operator:"&&",right:o.condition}):e.condition=o.condition,n(o.body)))}function z(e,t){return e instanceof vt||e.TYPE===t.TYPE}function I(e,t){return t.option("booleans")&&t.in_boolean_context()?M(t,e,a(e,[e,r(Rt,e)]).optimize(t)):e}e(re,function(e,t){return e}),re.DEFMETHOD("equivalent_to",function(e){return this.TYPE==e.TYPE&&this.print_to_string()==e.print_to_string()}),_e.DEFMETHOD("process_expression",function(e,t){var n=this,o=new $(function(i){if(e&&i instanceof ue)return r(Be,i,{value:i.body});if(!e&&i instanceof Be){if(t){var a=i.value&&i.value.drop_side_effect_free(t,!0);return a?r(ue,i,{body:a}):r(ce,i)}return r(ue,i,{body:i.value||r(Ze,i,{operator:"void",expression:r(At,i,{value:0})})})}if(i instanceof Ae&&i!==n)return i;if(i instanceof se){var u=i.body.length-1;u>=0&&(i.body[u]=i.body[u].transform(o))}return i instanceof Fe&&(i.body=i.body.transform(o),i.alternative&&(i.alternative=i.alternative.transform(o))),i instanceof ye&&(i.body=i.body.transform(o)),i});n.transform(o)}),re.DEFMETHOD("reset_opt_flags",function(e,t){function n(e,t){p[e.id]=t}function o(e){if(p[e.id]){if(null==e.fixed){var t=e.orig[0];if(t instanceof pt||"arguments"==t.name)return!1;e.fixed=r(Ot,t)}return!0}}function i(e,t){return!!E(p,e.id)&&(!!o(e)&&(!1!==e.fixed&&(!(null!=e.fixed&&(!t||e.references.length>0))&&!e.orig.some(function(e){return e instanceof ht||e instanceof dt}))))}function a(){p=Object.create(p)}function u(){p=Object.getPrototypeOf(p)}function s(t){t.escaped=!1,t.scope.uses_eval?t.fixed=!1:!t.global||e.toplevel(t)?t.fixed=void 0:t.fixed=!1,t.references=[],t.should_replace=void 0}function l(e){return e&&e.is_constant()||e instanceof Ae}function c(e,t,n){var r=d.parent(t);return!!(R(e,r)||!n&&r instanceof $e&&r.expression===e)||(r instanceof Ye&&r.expression===e?!n&&c(r,t+1):void 0)}var f=t&&e.option("reduce_vars"),p=Object.create(null),h=new O(function(e){if(e instanceof st){var t=e.definition();e instanceof vt&&t.references.push(e),t.fixed=!1}}),d=new O(function(t,m){if(t._squeezed=!1,t._optimized=!1,f){if(t instanceof we&&t.globals.each(s),t instanceof _e&&t.variables.each(s),t instanceof vt)if((v=t.definition()).references.push(t),void 0===v.fixed||!o(v)||c(t,0,l(t.fixed_value())))v.fixed=!1;else{var g=d.parent();(g instanceof tt&&"="==g.operator&&t===g.right||g instanceof $e&&t!==g.expression||g instanceof Be&&t===g.value&&t.scope!==v.scope||g instanceof Ve&&t===g.value)&&(v.escaped=!0)}if(t instanceof mt&&(t.definition().fixed=!1),t instanceof Ve){if(void 0===(v=t.name.definition()).fixed||i(v,t.value))return t.value?(v.fixed=function(){return t.value},n(v,!1),m()):v.fixed=null,n(v,!0),!0;t.value&&(v.fixed=!1)}if(t instanceof tt&&"="==t.operator&&t.left instanceof vt&&i(v=t.left.definition(),t.right))return v.references.push(t.left),v.fixed=function(){return t.right},n(v,!1),t.right.walk(d),n(v,!0),!0;if(t instanceof Ce){var v=t.name.definition();v.global&&!e.toplevel(v)||o(v)?v.fixed=!1:(v.fixed=t,n(v,!0));y=p;return p=Object.create(null),m(),p=y,!0}if(t instanceof xe){a();var b;return!t.name&&(b=d.parent())instanceof $e&&b.expression===t&&t.argnames.forEach(function(e,o){var i=e.definition();t.uses_arguments||void 0!==i.fixed?i.fixed=!1:(i.fixed=function(){return b.args[o]||r(Ot,b)},n(i,!0))}),m(),u(),!0}if(t instanceof Ee){var y=p;return p=Object.create(null),m(),p=y,!0}if(t instanceof Xe&&("&&"==t.operator||"||"==t.operator))return t.left.walk(d),a(),t.right.walk(d),u(),!0;if(t instanceof et)return t.condition.walk(d),a(),t.consequent.walk(d),u(),a(),t.alternative.walk(d),u(),!0;if(t instanceof Fe)return t.condition.walk(d),a(),t.body.walk(d),u(),t.alternative&&(a(),t.alternative.walk(d),u()),!0;if(t instanceof de)return a(),t.condition.walk(d),t.body.walk(d),u(),!0;if(t instanceof pe)return a(),t.body.walk(d),u(),!0;if(t instanceof ve)return t.init&&t.init.walk(d),t.condition&&(a(),t.condition.walk(d),u()),a(),t.body.walk(d),u(),t.step&&(a(),t.step.walk(d),u()),!0;if(t instanceof be)return t.init.walk(h),t.object.walk(d),a(),t.body.walk(d),u(),!0;if(t instanceof Ne)return a(),k(t,d),u(),t.bcatch&&(a(),t.bcatch.walk(d),u()),t.bfinally&&t.bfinally.walk(d),!0;if(t instanceof Me)return a(),m(),u(),!0}});this.walk(d)}),vt.DEFMETHOD("fixed_value",function(){var e=this.definition().fixed;return!e||e instanceof re?e:e()}),function(e){function t(e){return/strict/.test(e)}re.DEFMETHOD("may_throw_on_access",function(e){var t=e.option("pure_getters");return!t||this._throw_on_access(t)}),e(re,t),e(Ct,h),e(Ot,h),e(_t,p),e(nt,p),e(rt,function(e){if(!t(e))return!1;for(var n=this.properties.length;--n>=0;)if(this.properties[n].value instanceof Ee)return!0;return!1}),e(xe,p),e(Je,p),e(Ze,function(){return"void"==this.operator}),e(Xe,function(e){switch(this.operator){case"&&":return this.left._throw_on_access(e);case"||":return this.left._throw_on_access(e)&&this.right._throw_on_access(e);default:return!1}}),e(tt,function(e){return"="==this.operator&&this.right._throw_on_access(e)}),e(et,function(e){return this.consequent._throw_on_access(e)||this.alternative._throw_on_access(e)}),e(Ke,function(e){return this.expressions[this.expressions.length-1]._throw_on_access(e)}),e(vt,function(e){if(this.is_undefined)return!0;if(!t(e))return!1;var n=this.fixed_value();return!n||n._throw_on_access(e)})}(function(e,t){e.DEFMETHOD("_throw_on_access",t)}),function(e){var t=["!","delete"],n=["in","instanceof","==","!=","===","!==","<","<=",">=",">"];e(re,p),e(Ze,function(){return o(this.operator,t)}),e(Xe,function(){return o(this.operator,n)||("&&"==this.operator||"||"==this.operator)&&this.left.is_boolean()&&this.right.is_boolean()}),e(et,function(){return this.consequent.is_boolean()&&this.alternative.is_boolean()}),e(tt,function(){return"="==this.operator&&this.right.is_boolean()}),e(Ke,function(){return this.expressions[this.expressions.length-1].is_boolean()}),e(Rt,h),e(Tt,h)}(function(e,t){e.DEFMETHOD("is_boolean",t)}),function(e){e(re,p),e(At,h);var t=_("+ - ~ ++ --");e(Qe,function(){return t(this.operator)});var n=_("- * / % & | ^ << >> >>>");e(Xe,function(e){return n(this.operator)||"+"==this.operator&&this.left.is_number(e)&&this.right.is_number(e)}),e(tt,function(e){return n(this.operator.slice(0,-1))||"="==this.operator&&this.right.is_number(e)}),e(Ke,function(e){return this.expressions[this.expressions.length-1].is_number(e)}),e(et,function(e){return this.consequent.is_number(e)&&this.alternative.is_number(e)})}(function(e,t){e.DEFMETHOD("is_number",t)}),function(e){e(re,p),e(wt,h),e(Ze,function(){return"typeof"==this.operator}),e(Xe,function(e){return"+"==this.operator&&(this.left.is_string(e)||this.right.is_string(e))}),e(tt,function(e){return("="==this.operator||"+="==this.operator)&&this.right.is_string(e)}),e(Ke,function(e){return this.expressions[this.expressions.length-1].is_string(e)}),e(et,function(e){return this.consequent.is_string(e)&&this.alternative.is_string(e)})}(function(e,t){e.DEFMETHOD("is_string",t)});var j=_("delete ++ --");!function(e){function t(e,n){if(e instanceof re)return r(e.CTOR,n,e);if(Array.isArray(e))return r(nt,n,{elements:e.map(function(e){return t(e,n)})});if(e&&"object"==typeof e){var o=[];for(var i in e)o.push(r(it,n,{key:i,value:t(e[i],n)}));return r(rt,n,{properties:o})}return u(e,n)}re.DEFMETHOD("resolve_defines",function(e){if(e.option("global_defs")){var t=this._find_defs(e,"");if(t){var n,r=this,o=0;do{n=r,r=e.parent(o++)}while(r instanceof Ye&&r.expression===n);if(!R(n,r))return t;e.warn("global_defs "+this.print_to_string()+" redefined [{file}:{line},{col}]",this.start)}}}),e(re,f),e(Ge,function(e,t){return this.expression._find_defs(e,"."+this.property+t)}),e(vt,function(e,n){if(this.global()){var r,o=e.option("global_defs");if(o&&E(o,r=this.name+n)){var i=t(o[r],this),a=e.find_parent(we);return i.walk(new O(function(e){e instanceof vt&&(e.scope=a,e.thedef=a.def_global(e))})),i}}})}(function(e,t){e.DEFMETHOD("_find_defs",t)}),function(e){function t(e,t){if(!t)throw new Error("Compressor must be passed");return e._eval(t)}re.DEFMETHOD("evaluate",function(t){if(!t.option("evaluate"))return this;try{var n=this._eval(t);return!n||n instanceof RegExp||"object"!=typeof n?n:this}catch(t){if(t!==e)throw t;return this}});var n=_("! ~ - + void");re.DEFMETHOD("is_constant",function(){return this instanceof _t?!(this instanceof Et):this instanceof Ze&&this.expression instanceof _t&&n(this.operator)}),re.DEFMETHOD("constant_value",function(e){if(this instanceof _t&&!(this instanceof Et))return this.value;if(this instanceof Ze&&this.expression instanceof _t)switch(this.operator){case"!":return!this.expression.value;case"~":return~this.expression.value;case"-":return-this.expression.value;case"+":return+this.expression.value;default:throw new Error(v("Cannot evaluate unary expression {value}",{value:this.print_to_string()}))}var t=this.evaluate(e);if(t!==this)return t;throw new Error(v("Cannot evaluate constant [{file}:{line},{col}]",this.start))}),e(oe,function(){throw new Error(v("Cannot evaluate a statement [{file}:{line},{col}]",this.start))}),e(Ae,function(){throw e}),e(re,function(){throw e}),e(_t,function(){return this.getValue()}),e(nt,function(n){if(n.option("unsafe"))return this.elements.map(function(e){return t(e,n)});throw e}),e(rt,function(n){if(n.option("unsafe")){for(var r={},o=0,i=this.properties.length;o<i;o++){var a=this.properties[o],u=a.key;if(u instanceof st?u=u.name:u instanceof re&&(u=t(u,n)),"function"==typeof Object.prototype[u])throw e;r[u]=t(a.value,n)}return r}throw e}),e(Ze,function(n){var r=this.expression;switch(this.operator){case"!":return!t(r,n);case"typeof":if(r instanceof xe)return"function";if((r=t(r,n))instanceof RegExp)throw e;return typeof r;case"void":return void t(r,n);case"~":return~t(r,n);case"-":return-t(r,n);case"+":return+t(r,n)}throw e}),e(Xe,function(n){var r,o=this.left,i=this.right;switch(this.operator){case"&&":r=t(o,n)&&t(i,n);break;case"||":r=t(o,n)||t(i,n);break;case"|":r=t(o,n)|t(i,n);break;case"&":r=t(o,n)&t(i,n);break;case"^":r=t(o,n)^t(i,n);break;case"+":r=t(o,n)+t(i,n);break;case"*":r=t(o,n)*t(i,n);break;case"/":r=t(o,n)/t(i,n);break;case"%":r=t(o,n)%t(i,n);break;case"-":r=t(o,n)-t(i,n);break;case"<<":r=t(o,n)<<t(i,n);break;case">>":r=t(o,n)>>t(i,n);break;case">>>":r=t(o,n)>>>t(i,n);break;case"==":r=t(o,n)==t(i,n);break;case"===":r=t(o,n)===t(i,n);break;case"!=":r=t(o,n)!=t(i,n);break;case"!==":r=t(o,n)!==t(i,n);break;case"<":r=t(o,n)<t(i,n);break;case"<=":r=t(o,n)<=t(i,n);break;case">":r=t(o,n)>t(i,n);break;case">=":r=t(o,n)>=t(i,n);break;default:throw e}if(isNaN(r)&&n.find_parent(ye))throw e;return r}),e(et,function(e){return t(this.condition,e)?t(this.consequent,e):t(this.alternative,e)}),e(vt,function(n){if(!n.option("reduce_vars")||this._evaluating)throw e;this._evaluating=!0;try{var r=this.fixed_value();if(!r)throw e;var o=t(r,n);if(E(r,"_eval")||(r._eval=function(){return o}),o&&"object"==typeof o&&this.definition().escaped)throw e;return o}finally{this._evaluating=!1}}),e(Ye,function(n){if(n.option("unsafe")){var r=this.property;r instanceof re&&(r=t(r,n));var o=t(this.expression,n);if(o&&E(o,r))return o[r]}throw e})}(function(e,t){e.DEFMETHOD("_eval",t)}),function(e){function t(e){return r(Ze,e,{operator:"!",expression:e})}function n(e,n,o){var i=t(e);if(o){var a=r(ue,n,{body:n});return F(i,a)===a?n:i}return F(i,n)}e(re,function(){return t(this)}),e(oe,function(){throw new Error("Cannot negate a statement")}),e(xe,function(){return t(this)}),e(Ze,function(){return"!"==this.operator?this.expression:t(this)}),e(Ke,function(e){var t=this.expressions.slice();return t.push(t.pop().negate(e)),a(this,t)}),e(et,function(e,t){var r=this.clone();return r.consequent=r.consequent.negate(e),r.alternative=r.alternative.negate(e),n(this,r,t)}),e(Xe,function(e,r){var o=this.clone(),i=this.operator;if(e.option("unsafe_comps"))switch(i){case"<=":return o.operator=">",o;case"<":return o.operator=">=",o;case">=":return o.operator="<",o;case">":return o.operator="<=",o}switch(i){case"==":return o.operator="!=",o;case"!=":return o.operator="==",o;case"===":return o.operator="!==",o;case"!==":return o.operator="===",o;case"&&":return o.operator="||",o.left=o.left.negate(e,r),o.right=o.right.negate(e),n(this,o,r);case"||":return o.operator="&&",o.left=o.left.negate(e,r),o.right=o.right.negate(e),n(this,o,r)}return t(this)})}(function(e,t){e.DEFMETHOD("negate",function(e,n){return t.call(this,e,n)})}),$e.DEFMETHOD("has_pure_annotation",function(e){if(!e.option("side_effects"))return!1;if(void 0!==this.pure)return this.pure;var t,n,r=!1;return this.start&&(t=this.start.comments_before)&&t.length&&/[@#]__PURE__/.test((n=t[t.length-1]).value)&&(r=n),this.pure=r}),function(e){function t(e,t){for(var n=e.length;--n>=0;)if(e[n].has_side_effects(t))return!0;return!1}e(re,h),e(ce,p),e(_t,p),e(yt,p),e($e,function(e){if(!this.has_pure_annotation(e)&&e.pure_funcs(this))return!0;for(var t=this.args.length;--t>=0;)if(this.args[t].has_side_effects(e))return!0;return!1}),e(se,function(e){return t(this.body,e)}),e(Le,function(e){return this.expression.has_side_effects(e)||t(this.body,e)}),e(Ue,function(e){return this.expression.has_side_effects(e)||t(this.body,e)}),e(Ne,function(e){return t(this.body,e)||this.bcatch&&this.bcatch.has_side_effects(e)||this.bfinally&&this.bfinally.has_side_effects(e)}),e(Fe,function(e){return this.condition.has_side_effects(e)||this.body&&this.body.has_side_effects(e)||this.alternative&&this.alternative.has_side_effects(e)}),e(pe,function(e){return this.body.has_side_effects(e)}),e(ue,function(e){return this.body.has_side_effects(e)}),e(Ce,h),e(xe,p),e(Xe,function(e){return this.left.has_side_effects(e)||this.right.has_side_effects(e)}),e(tt,h),e(et,function(e){return this.condition.has_side_effects(e)||this.consequent.has_side_effects(e)||this.alternative.has_side_effects(e)}),e(Qe,function(e){return j(this.operator)||this.expression.has_side_effects(e)}),e(vt,function(e){return this.undeclared()}),e(ct,p),e(rt,function(e){return t(this.properties,e)}),e(ot,function(e){return this.value.has_side_effects(e)}),e(nt,function(e){return t(this.elements,e)}),e(Ge,function(e){return this.expression.may_throw_on_access(e)||this.expression.has_side_effects(e)}),e(We,function(e){return this.expression.may_throw_on_access(e)||this.expression.has_side_effects(e)||this.property.has_side_effects(e)}),e(Ke,function(e){return this.expressions.some(function(t,n){return t.has_side_effects(e)})})}(function(e,t){e.DEFMETHOD("has_side_effects",t)}),function(e){function t(e){for(var t=e.length;--t>=0;)if(!e[t].is_constant_expression())return!1;return!0}e(re,p),e(_t,h),e(Qe,function(){return this.expression.is_constant_expression()}),e(Xe,function(){return this.left.is_constant_expression()&&this.right.is_constant_expression()}),e(nt,function(){return t(this.elements)}),e(rt,function(){return t(this.properties)}),e(ot,function(){return this.value.is_constant_expression()})}(function(e,t){e.DEFMETHOD("is_constant_expression",t)}),function(e){function t(){var e=this.body.length;return e>0&&P(this.body[e-1])}e(oe,m),e(ke,d),e(le,t),e(Me,t),e(Fe,function(){return this.alternative&&P(this.body)&&P(this.alternative)&&this})}(function(e,t){e.DEFMETHOD("aborts",t)}),e(ae,function(e,t){return t.has_directive(e.value)!==e?r(ce,e):e}),e(ie,function(e,t){return t.option("drop_debugger")?r(ce,e):e}),e(pe,function(e,t){return e.body instanceof Te&&t.loopcontrol_target(e.body)===e.body?r(ce,e):0==e.label.references.length?e.body:e}),e(se,function(e,t){return e.body=B(e.body,t),e}),e(le,function(e,t){switch(e.body=B(e.body,t),e.body.length){case 1:return e.body[0];case 0:return r(ce,e)}return e}),_e.DEFMETHOD("drop_unused",function(e){if(e.option("unused")&&!e.has_directive("use asm")){var t=this;if(!t.uses_eval&&!t.uses_with){var n=!(t instanceof we)||e.toplevel.funcs,o=!(t instanceof we)||e.toplevel.vars;if(n||o){var i=!/keep_assign/.test(e.option("unused")),u=[],c=Object.create(null);t instanceof we&&e.top_retain&&t.variables.each(function(t){!e.top_retain(t)||t.id in c||(c[t.id]=!0,u.push(t))});var f=new A,p=new A,h=this,d=new O(function(r,a){if(r!==t){if(r instanceof Ce)return n||h!==t||(s=r.name.definition()).id in c||(c[s.id]=!0,u.push(s)),p.add(r.name.name,r),!0;if(r instanceof Ie&&h===t)return r.definitions.forEach(function(t){var n=t.name.definition();t.name instanceof ft&&f.add(n.id,t),o||n.id in c||(c[n.id]=!0,u.push(n)),t.value&&(p.add(t.name.name,t.value),t.value.has_side_effects(e)&&t.value.walk(d))}),!0;if(i&&r instanceof tt&&"="==r.operator&&r.left instanceof vt&&h===t)return r.right.walk(d),!0;if(r instanceof vt){var s=r.definition();return s.id in c||(c[s.id]=!0,u.push(s)),!0}if(r instanceof _e){var l=h;return h=r,a(),h=l,!0}}});t.walk(d);for(var m=0;m<u.length;++m)u[m].orig.forEach(function(e){var t=p.get(e.name);t&&t.forEach(function(e){var t=new O(function(e){if(e instanceof vt){var t=e.definition();t.id in c||(c[t.id]=!0,u.push(t))}});e.walk(t)})});var v=new $(function(u,p,h){function d(e){return{name:e.name,file:e.start.file,line:e.start.line,col:e.start.col}}if(u instanceof xe&&u.name&&!e.option("keep_fnames")&&((O=u.name.definition()).id in c&&!(O.orig.length>1)||(u.name=null)),u instanceof Ae&&!(u instanceof Ee))for(var m=!e.option("keep_fargs"),y=u.argnames,_=y.length;--_>=0;){var w=y[_];w.definition().id in c?m=!1:(w.__unused=!0,m&&(y.pop(),e[w.unreferenced()?"warn":"info"]("Dropping unused function argument {name} [{file}:{line},{col}]",d(w))))}if(n&&u instanceof Ce&&u!==t)return u.name.definition().id in c?u:(e[u.name.unreferenced()?"warn":"info"]("Dropping unused function {name} [{file}:{line},{col}]",d(u.name)),r(ce,u));if(o&&u instanceof Ie&&!(v.parent()instanceof be&&v.parent().init===u)){var A=[],E=[],x=[],C=[];if(u.definitions.forEach(function(t){t.value&&(t.value=t.value.transform(v));var n=t.name.definition();if(n.id in c){if(t.name instanceof ft){var o=f.get(n.id);if(o.length>1&&!t.value)return e.warn("Dropping duplicated definition of variable {name} [{file}:{line},{col}]",d(t.name)),b(o,t),void b(n.orig,t.name)}t.value?(C.length>0&&(x.length>0?(l(C,t.value),t.value=a(t.value,C)):A.push(r(ue,u,{body:a(u,C)})),C=[]),x.push(t)):E.push(t)}else if(n.orig[0]instanceof mt)(i=t.value&&t.value.drop_side_effect_free(e))&&l(C,i),t.value=null,E.push(t);else{var i=t.value&&t.value.drop_side_effect_free(e);i?(e.warn("Side effects in initialization of unused variable {name} [{file}:{line},{col}]",d(t.name)),l(C,i)):e[t.name.unreferenced()?"warn":"info"]("Dropping unused variable {name} [{file}:{line},{col}]",d(t.name)),b(n.orig,t.name)}}),0==E.length&&1==x.length&&x[0].name instanceof ft){var k=f.get(x[0].name.definition().id);if(k.length>1){var O=x.pop();e.warn("Converting duplicated definition of variable {name} to assignment [{file}:{line},{col}]",d(O.name)),b(k,O),b(O.name.definition().orig,O.name),C.unshift(r(tt,O,{operator:"=",left:r(vt,O.name,O.name),right:O.value}))}}switch((E.length>0||x.length>0)&&(u.definitions=E.concat(x),A.push(u)),C.length>0&&A.push(r(ue,u,{body:a(u,C)})),A.length){case 0:return h?te.skip:r(ce,u);case 1:return A[0];default:return h?te.splice(A):r(le,u,{body:A})}}if(o&&i&&u instanceof tt&&"="==u.operator&&u.left instanceof vt&&!((O=u.left.definition()).id in c)&&t.variables.get(O.name)===O)return s(v.parent(),u,u.right.transform(v));if(u instanceof ve){if(p(u,this),u.init instanceof le){B=u.init;return u.init=B.body.pop(),B.body.push(u),h?te.splice(B.body):B}return u.init instanceof ue?u.init=u.init.body:g(u.init)&&(u.init=null),u}if(u instanceof pe&&u.body instanceof ve){if(p(u,this),u.body instanceof le){var B=u.body;return u.body=B.body.pop(),B.body.push(u),h?te.splice(B.body):B}return u}return u instanceof _e&&u!==t?u:void 0});t.transform(v)}}}}),_e.DEFMETHOD("hoist_declarations",function(e){var t=this;if(e.has_directive("use asm"))return t;var n=e.option("hoist_funs"),o=e.option("hoist_vars");if(n||o){var u=[],s=[],l=new A,c=0,f=0;t.walk(new O(function(e){return e instanceof _e&&e!==t||(e instanceof je?(++f,!0):void 0)})),o=o&&f>1;var p=new $(function(i){if(i!==t){if(i instanceof ae)return u.push(i),r(ce,i);if(i instanceof Ce&&n)return s.push(i),r(ce,i);if(i instanceof je&&o){i.definitions.forEach(function(e){l.set(e.name.name,e),++c});var a=i.to_assignments(e),f=p.parent();if(f instanceof be&&f.init===i){if(null==a){var h=i.definitions[0].name;return r(vt,h,h)}return a}return f instanceof ve&&f.init===i?a:a?r(ue,i,{body:a}):r(ce,i)}if(i instanceof _e)return i}});if(t=t.transform(p),c>0){var h=[];if(l.each(function(e,n){t instanceof Ae&&i(function(t){return t.name==e.name.name},t.argnames)?l.del(n):((e=e.clone()).value=null,h.push(e),l.set(n,e))}),h.length>0){for(;0<t.body.length;){if(t.body[0]instanceof ue){var d,m,g=t.body[0].body;if(g instanceof tt&&"="==g.operator&&(d=g.left)instanceof st&&l.has(d.name)){if((v=l.get(d.name)).value)break;v.value=g.right,b(h,v),h.push(v),t.body.splice(0,1);continue}if(g instanceof Ke&&(m=g.expressions[0])instanceof tt&&"="==m.operator&&(d=m.left)instanceof st&&l.has(d.name)){var v=l.get(d.name);if(v.value)break;v.value=m.right,b(h,v),h.push(v),t.body[0].body=a(g,g.expressions.slice(1));continue}}if(t.body[0]instanceof ce)t.body.splice(0,1);else{if(!(t.body[0]instanceof le))break;var y=[0,1].concat(t.body[0].body);t.body.splice.apply(t.body,y)}}h=r(je,t,{definitions:h}),s.push(h)}}t.body=u.concat(s,t.body)}return t}),function(e){function t(e,t,n){var r=e.length;if(!r)return null;for(var o=[],i=!1,a=0;a<r;a++){var u=e[a].drop_side_effect_free(t,n);i|=u!==e[a],u&&(l(o,u),n=!1)}return i?o.length?o:null:e}e(re,d),e(_t,m),e(yt,m),e($e,function(e,n){if(!this.has_pure_annotation(e)&&e.pure_funcs(this)){if(this.expression instanceof xe&&(!this.expression.name||!this.expression.name.definition().references.length)){var r=this.clone();return r.expression.process_expression(!1,e),r}return this}this.pure&&(e.warn("Dropping __PURE__ call [{file}:{line},{col}]",this.start),this.pure.value=this.pure.value.replace(/[@#]__PURE__/g," "));var o=t(this.args,e,n);return o&&a(this,o)}),e(Ee,m),e(xe,m),e(Xe,function(e,t){var n=this.right.drop_side_effect_free(e);if(!n)return this.left.drop_side_effect_free(e,t);switch(this.operator){case"&&":case"||":if(n===this.right)return this;var r=this.clone();return r.right=n,r;default:var o=this.left.drop_side_effect_free(e,t);return o?a(this,[o,n]):this.right.drop_side_effect_free(e,t)}}),e(tt,d),e(et,function(e){var t=this.consequent.drop_side_effect_free(e),n=this.alternative.drop_side_effect_free(e);if(t===this.consequent&&n===this.alternative)return this;if(!t)return n?r(Xe,this,{operator:"||",left:this.condition,right:n}):this.condition.drop_side_effect_free(e);if(!n)return r(Xe,this,{operator:"&&",left:this.condition,right:t});var o=this.clone();return o.consequent=t,o.alternative=n,o}),e(Qe,function(e,t){if(j(this.operator))return this;if("typeof"==this.operator&&this.expression instanceof vt)return null;var n=this.expression.drop_side_effect_free(e,t);return t&&this instanceof Ze&&C(n)?n===this.expression&&1===this.operator.length?this:r(Ze,this,{operator:1===this.operator.length?this.operator:"!",expression:n}):n}),e(vt,function(){return this.undeclared()?this:null}),e(rt,function(e,n){var r=t(this.properties,e,n);return r&&a(this,r)}),e(ot,function(e,t){return this.value.drop_side_effect_free(e,t)}),e(nt,function(e,n){var r=t(this.elements,e,n);return r&&a(this,r)}),e(Ge,function(e,t){return this.expression.may_throw_on_access(e)?this:this.expression.drop_side_effect_free(e,t)}),e(We,function(e,t){if(this.expression.may_throw_on_access(e))return this;var n=this.expression.drop_side_effect_free(e,t);if(!n)return this.property.drop_side_effect_free(e,t);var r=this.property.drop_side_effect_free(e);return r?a(this,[n,r]):n}),e(Ke,function(e){var t=this.expressions[this.expressions.length-1],n=t.drop_side_effect_free(e);if(n===t)return this;var r=this.expressions.slice(0,-1);return n&&l(r,n),a(this,r)})}(function(e,t){e.DEFMETHOD("drop_side_effect_free",t)}),e(ue,function(e,t){if(t.option("side_effects")){var n=e.body,o=n.drop_side_effect_free(t,!0);if(!o)return t.warn("Dropping side-effect-free statement [{file}:{line},{col}]",e.start),r(ce,e);if(o!==n)return r(ue,e,{body:o})}return e}),e(de,function(e,t){if(!t.option("loops"))return e;var n=e.condition.evaluate(t);if(n!==e.condition){if(n)return r(ve,e,{body:e.body});if(t.option("dead_code")&&e instanceof ge){var o=[];return D(t,e.body,o),r(le,e,{body:o}).optimize(t)}if(e instanceof me){var i=!1,a=new O(function(t){return!!(t instanceof _e||i)||(t instanceof De&&a.loopcontrol_target(t)===e?i=!0:void 0)}),u=t.parent();if((u instanceof pe?u:e).walk(a),!i)return e.body}}return e instanceof ge?r(ve,e,e).optimize(t):e}),e(ve,function(e,t){if(!t.option("loops"))return e;if(e.condition){var n=e.condition.evaluate(t);if(t.option("dead_code")&&!n){var o=[];return e.init instanceof oe?o.push(e.init):e.init&&o.push(r(ue,e.init,{body:e.init})),D(t,e.body,o),r(le,e,{body:o}).optimize(t)}n!==e.condition&&(n=u(n,e.condition).transform(t),e.condition=F(n,e.condition))}return N(e,t),e}),e(Fe,function(e,t){if(g(e.alternative)&&(e.alternative=null),!t.option("conditionals"))return e;var n=e.condition.evaluate(t);if(n!==e.condition){if(n){if(t.warn("Condition always true [{file}:{line},{col}]",e.condition.start),t.option("dead_code")){o=[];return e.alternative&&D(t,e.alternative,o),o.push(e.body),r(le,e,{body:o}).optimize(t)}}else if(t.warn("Condition always false [{file}:{line},{col}]",e.condition.start),t.option("dead_code")){var o=[];return D(t,e.body,o),e.alternative&&o.push(e.alternative),r(le,e,{body:o}).optimize(t)}n=u(n,e.condition).transform(t),e.condition=F(n,e.condition)}var i=e.condition.negate(t),a=e.condition.print_to_string().length,s=i.print_to_string().length,l=s<a;if(e.alternative&&l){l=!1,e.condition=i;var c=e.body;e.body=e.alternative||r(ce,e),e.alternative=c}if(g(e.body)&&g(e.alternative))return r(ue,e.condition,{body:e.condition.clone()}).optimize(t);if(e.body instanceof ue&&e.alternative instanceof ue)return r(ue,e,{body:r(et,e,{condition:e.condition,consequent:e.body.body,alternative:e.alternative.body})}).optimize(t);if(g(e.alternative)&&e.body instanceof ue)return a===s&&!l&&e.condition instanceof Xe&&"||"==e.condition.operator&&(l=!0),l?r(ue,e,{body:r(Xe,e,{operator:"||",left:i,right:e.body.body})}).optimize(t):r(ue,e,{body:r(Xe,e,{operator:"&&",left:e.condition,right:e.body.body})}).optimize(t);if(e.body instanceof ce&&e.alternative instanceof ue)return r(ue,e,{body:r(Xe,e,{operator:"||",left:e.condition,right:e.alternative.body})}).optimize(t);if(e.body instanceof Oe&&e.alternative instanceof Oe&&e.body.TYPE==e.alternative.TYPE)return r(e.body.CTOR,e,{value:r(et,e,{condition:e.condition,consequent:e.body.value||r(Ot,e.body),alternative:e.alternative.value||r(Ot,e.alternative)}).transform(t)}).optimize(t);if(e.body instanceof Fe&&!e.body.alternative&&!e.alternative&&(e=r(Fe,e,{condition:r(Xe,e.condition,{operator:"&&",left:e.condition,right:e.body.condition}),body:e.body.body,alternative:null})),P(e.body)&&e.alternative){var f=e.alternative;return e.alternative=null,r(le,e,{body:[e,f]}).optimize(t)}if(P(e.alternative)){var p=e.body;return e.body=e.alternative,e.condition=l?i:e.condition.negate(t),e.alternative=null,r(le,e,{body:[e,p]}).optimize(t)}return e}),e(Le,function(e,t){function n(e,n){n&&!P(n)?n.body=n.body.concat(e.body):D(t,e,c)}if(!t.option("switches"))return e;var o,i=e.expression.evaluate(t);if(i!==e.expression){var a=u(i,e.expression).transform(t);e.expression=F(a,e.expression)}if(!t.option("dead_code"))return e;for(var s,l,c=[],f=[],p=0,h=e.body.length;p<h&&!l;p++){if((o=e.body[p])instanceof Pe)s?n(o,f[f.length-1]):s=o;else if(i!==e.expression){var d=o.expression.evaluate(t);if(d===i){if(l=o,s){var m=f.indexOf(s);f.splice(m,1),n(s,f[m-1]),s=null}}else if(d!==o.expression){n(o,f[f.length-1]);continue}}if(P(o)){var g=f[f.length-1];P(g)&&g.body.length==o.body.length&&r(le,g,g).equivalent_to(r(le,o,o))&&(g.body=[])}f.push(o)}for(;p<h;)n(e.body[p++],f[f.length-1]);for(f.length>0&&(f[0].body=c.concat(f[0].body)),e.body=f;o=f[f.length-1];){var v=o.body[o.body.length-1];if(v instanceof Te&&t.loopcontrol_target(v)===e&&o.body.pop(),o.body.length||o instanceof Ue&&(s||o.expression.has_side_effects(t)))break;f.pop()===s&&(s=null)}if(0==f.length)return r(le,e,{body:c.concat(r(ue,e.expression,{body:e.expression}))}).optimize(t);if(1==f.length&&(f[0]===l||f[0]===s)){var b=!1,y=new O(function(t){if(b||t instanceof Ae||t instanceof ue)return!0;t instanceof Te&&y.loopcontrol_target(t)===e&&(b=!0)});if(e.walk(y),!b)return(f=f[0].body.slice()).unshift(r(ue,e.expression,{body:e.expression})),r(le,e,{body:f}).optimize(t)}return e}),e(Ne,function(e,t){if(e.body=B(e.body,t),e.bcatch&&e.bfinally&&w(e.bfinally.body,g)&&(e.bfinally=null),w(e.body,g)){var n=[];return e.bcatch&&D(t,e.bcatch,n),e.bfinally&&(n=n.concat(e.bfinally.body)),r(le,e,{body:n}).optimize(t)}return e}),Ie.DEFMETHOD("remove_initializers",function(){this.definitions.forEach(function(e){e.value=null})}),Ie.DEFMETHOD("to_assignments",function(e){var t=e.option("reduce_vars"),n=this.definitions.reduce(function(e,n){if(n.value){var o=r(vt,n.name,n.name);e.push(r(tt,n,{operator:"=",left:o,right:n.value})),t&&(o.definition().fixed=!1)}return e},[]);return 0==n.length?null:a(this,n)}),e(Ie,function(e,t){return 0==e.definitions.length?r(ce,e):e}),e($e,function(e,t){var n=e.expression;if(t.option("reduce_vars")&&n instanceof vt){var o=n.definition(),i=n.fixed_value();i instanceof Ce&&(o.fixed=i=r(xe,i,i).clone(!0)),i instanceof xe&&(n=i,!t.option("unused")||1!=o.references.length||o.scope.uses_arguments&&o.orig[0]instanceof pt||o.scope.uses_eval||t.find_parent(_e)!==o.scope||(e.expression=n))}if(t.option("unused")&&n instanceof xe&&!n.uses_arguments&&!n.uses_eval){for(var s=0,l=0,c=0,f=e.args.length;c<f;c++){var p=c>=n.argnames.length;if(p||n.argnames[c].__unused){if(k=e.args[c].drop_side_effect_free(t))e.args[s++]=k;else if(!p){e.args[s++]=r(At,e.args[c],{value:0});continue}}else e.args[s++]=e.args[c];l=s}e.args.length=l}if(t.option("unsafe"))if(n instanceof vt&&n.undeclared())switch(n.name){case"Array":if(1!=e.args.length)return r(nt,e,{elements:e.args}).optimize(t);break;case"Object":if(0==e.args.length)return r(rt,e,{properties:[]});break;case"String":if(0==e.args.length)return r(wt,e,{value:""});if(e.args.length<=1)return r(Xe,e,{left:e.args[0],operator:"+",right:r(wt,e,{value:""})}).optimize(t);break;case"Number":if(0==e.args.length)return r(At,e,{value:0});if(1==e.args.length)return r(Ze,e,{expression:e.args[0],operator:"+"}).optimize(t);case"Boolean":if(0==e.args.length)return r(Tt,e);if(1==e.args.length)return r(Ze,e,{expression:r(Ze,e,{expression:e.args[0],operator:"!"}),operator:"!"}).optimize(t);break;case"Function":if(0==e.args.length)return r(xe,e,{argnames:[],body:[]});if(w(e.args,function(e){return e instanceof wt}))try{var h=V(y="(function("+e.args.slice(0,-1).map(function(e){return e.value}).join(",")+"){"+e.args[e.args.length-1].value+"})()"),d={ie8:t.option("ie8")};h.figure_out_scope(d);var m=new G(t.options);(h=h.transform(m)).figure_out_scope(d),h.mangle_names();var v;try{h.walk(new O(function(e){if(e instanceof Ae)throw v=e,h}))}catch(e){if(e!==h)throw e}if(!v)return e;var b=v.argnames.map(function(t,n){return r(wt,e.args[n],{value:t.print_to_string()})}),y=Y();return le.prototype._codegen.call(v,v,y),y=y.toString().replace(/^\{|\}$/g,""),b.push(r(wt,e.args[e.args.length-1],{value:y})),e.args=b,e}catch(n){if(!(n instanceof q))throw console.log(n),n;t.warn("Error parsing code passed to new Function [{file}:{line},{col}]",e.args[e.args.length-1].start),t.warn(n.toString())}}else{if(n instanceof Ge&&"toString"==n.property&&0==e.args.length)return r(Xe,e,{left:r(wt,e,{value:""}),operator:"+",right:n.expression}).optimize(t);if(n instanceof Ge&&n.expression instanceof nt&&"join"==n.property){var _;if(!(e.args.length>0&&(_=e.args[0].evaluate(t))===e.args[0])){var A=[],E=[];if(n.expression.elements.forEach(function(n){var o=n.evaluate(t);o!==n?E.push(o):(E.length>0&&(A.push(r(wt,e,{value:E.join(_)})),E.length=0),A.push(n))}),E.length>0&&A.push(r(wt,e,{value:E.join(_)})),0==A.length)return r(wt,e,{value:""});if(1==A.length)return A[0].is_string(t)?A[0]:r(Xe,A[0],{operator:"+",left:r(wt,e,{value:""}),right:A[0]});if(""==_){var x;return x=A[0].is_string(t)||A[1].is_string(t)?A.shift():r(wt,e,{value:""}),A.reduce(function(e,t){return r(Xe,t,{operator:"+",left:e,right:t})},x).optimize(t)}var k=e.clone();return k.expression=k.expression.clone(),k.expression.expression=k.expression.expression.clone(),k.expression.expression.elements=A,M(t,e,k)}}else if(n instanceof Ge&&n.expression.is_string(t)&&"charAt"==n.property){var B=e.args[0],S=B?B.evaluate(t):0;if(S!==B)return r(We,n,{expression:n.expression,property:u(0|S,B||n)}).optimize(t)}}if(n instanceof xe){if(n.body[0]instanceof Be){var D=n.body[0].value;if(!D||D.is_constant_expression()){b=e.args.concat(D||r(Ot,e));return a(e,b).transform(t)}}if(t.option("side_effects")&&w(n.body,g)){b=e.args.concat(r(Ot,e));return a(e,b).transform(t)}}if(t.option("drop_console")&&n instanceof Ye){for(var T=n.expression;T.expression;)T=T.expression;if(T instanceof vt&&"console"==T.name&&T.undeclared())return r(Ot,e).optimize(t)}return t.option("negate_iife")&&t.parent()instanceof ue&&C(e)?e.negate(t,!0):e}),e(He,function(e,t){if(t.option("unsafe")){var n=e.expression;if(n instanceof vt&&n.undeclared())switch(n.name){case"Object":case"RegExp":case"Function":case"Error":case"Array":return r($e,e,e).transform(t)}}return e}),e(Ke,function(e,n){if(!n.option("side_effects"))return e;var o=[];!function(){var t=x(n),r=e.expressions.length-1;e.expressions.forEach(function(e,i){i<r&&(e=e.drop_side_effect_free(n,t)),e&&(l(o,e),t=!1)})}();var i=o.length-1;return function(){for(;i>0&&T(o[i],n);)i--;i<o.length-1&&(o[i]=r(Ze,e,{operator:"void",expression:o[i]}),o.length=i+1)}(),i>0&&n.option("cascade")&&function(){for(var e=0,a=1;a<=i;a++){var u=o[e],s=o[a];if((u=u instanceof tt&&!u.left.has_side_effects(n)?u.left:u instanceof Qe&&("++"==u.operator||"--"==u.operator)?u.expression:null)&&!t(u))for(var l,c=null;;){if(s.equivalent_to(u)){var f=o[e];f instanceof Je&&(f=r(Ze,f,{operator:f.operator,expression:u})),c?(c[l]=f,o[e]=o[a]):o[e]=f;break}if(s instanceof Xe&&!(s instanceof tt))if(s.left.is_constant()){if("||"==s.operator||"&&"==s.operator){o[++e]=o[a];break}l="right"}else l="left";else{if(!(s instanceof $e||s instanceof Ye||s instanceof Qe&&!j(s.operator))){o[++e]=o[a];break}l="expression"}c=s,s=s[l]}else o[++e]=s}i=e,o.length=i+1}(),0==i?((e=s(n.parent(),e,o[0]))instanceof Ke||(e=e.optimize(n)),e):(e.expressions=o,e)}),Qe.DEFMETHOD("lift_sequences",function(e){if(e.option("sequences")&&this.expression instanceof Ke){var t=this.expression.expressions.slice(),n=this.clone();return n.expression=t.pop(),t.push(n),a(this,t).optimize(e)}return this}),e(Je,function(e,t){return e.lift_sequences(t)}),e(Ze,function(e,t){var n=e.expression;if("delete"==e.operator&&!(n instanceof vt||n instanceof Ye||n instanceof kt||n instanceof St||n instanceof Ot))return n instanceof Ke?((n=n.expressions.slice()).push(r(Rt,e)),a(e,n).optimize(t)):a(e,[n,r(Rt,e)]).optimize(t);var o=e.lift_sequences(t);if(o!==e)return o;if(t.option("side_effects")&&"void"==e.operator)return n=n.drop_side_effect_free(t),n?(e.expression=n,e):r(Ot,e).optimize(t);if(t.option("booleans")&&t.in_boolean_context())switch(e.operator){case"!":if(n instanceof Ze&&"!"==n.operator)return n.expression;n instanceof Xe&&(e=M(t,e,n.negate(t,x(t))));break;case"typeof":return t.warn("Boolean expression always true [{file}:{line},{col}]",e.start),(n instanceof vt?r(Rt,e):a(e,[n,r(Rt,e)])).optimize(t)}if("-"==e.operator&&n instanceof St&&(n=n.transform(t)),n instanceof Xe&&("+"==e.operator||"-"==e.operator)&&("*"==n.operator||"/"==n.operator||"%"==n.operator))return r(Xe,e,{operator:n.operator,left:r(Ze,n.left,{operator:e.operator,expression:n.left}),right:n.right});if("-"!=e.operator||!(n instanceof At||n instanceof St)){var i=e.evaluate(t);if(i!==e)return i=u(i,e).optimize(t),M(t,i,e)}return e}),Xe.DEFMETHOD("lift_sequences",function(e){if(e.option("sequences")){if(this.left instanceof Ke){var t=this.left.expressions.slice();return(i=this.clone()).left=t.pop(),t.push(i),a(this,t).optimize(e)}if(this.right instanceof Ke&&!this.left.has_side_effects(e)){for(var n="="==this.operator&&this.left instanceof vt,r=(t=this.right.expressions).length-1,o=0;o<r&&(n||!t[o].has_side_effects(e));o++);if(o==r)return t=t.slice(),(i=this.clone()).right=t.pop(),t.push(i),a(this,t).optimize(e);if(o>0){var i=this.clone();return i.right=a(this.right,t.slice(o)),(t=t.slice(0,o)).push(i),a(this,t).optimize(e)}}}return this});var H=_("== === != !== * & | ^");e(Xe,function(e,t){function n(){return e.left.is_constant()||e.right.is_constant()||!e.left.has_side_effects(t)&&!e.right.has_side_effects(t)}function o(t){if(n()){t&&(e.operator=t);var r=e.left;e.left=e.right,e.right=r}}if(H(e.operator)&&e.right.is_constant()&&!e.left.is_constant()&&(e.left instanceof Xe&&Qt[e.left.operator]>=Qt[e.operator]||o()),e=e.lift_sequences(t),t.option("comparisons"))switch(e.operator){case"===":case"!==":(e.left.is_string(t)&&e.right.is_string(t)||e.left.is_number(t)&&e.right.is_number(t)||e.left.is_boolean()&&e.right.is_boolean())&&(e.operator=e.operator.substr(0,2));case"==":case"!=":if(e.left instanceof wt&&"undefined"==e.left.value&&e.right instanceof Ze&&"typeof"==e.right.operator){var i=e.right.expression;(i instanceof vt?i.undeclared():i instanceof Ye&&t.option("ie8"))||(e.right=i,e.left=r(Ot,e.left).optimize(t),2==e.operator.length&&(e.operator+="="))}}if(t.option("booleans")&&"+"==e.operator&&t.in_boolean_context()){var l=e.left.evaluate(t),c=e.right.evaluate(t);if(l&&"string"==typeof l)return t.warn("+ in boolean context always true [{file}:{line},{col}]",e.start),a(e,[e.right,r(Rt,e)]).optimize(t);if(c&&"string"==typeof c)return t.warn("+ in boolean context always true [{file}:{line},{col}]",e.start),a(e,[e.left,r(Rt,e)]).optimize(t)}if(t.option("comparisons")&&e.is_boolean()){if(!(t.parent()instanceof Xe)||t.parent()instanceof tt){var f=r(Ze,e,{operator:"!",expression:e.negate(t,x(t))});e=M(t,e,f)}if(t.option("unsafe_comps"))switch(e.operator){case"<":o(">");break;case"<=":o(">=")}}if("+"==e.operator){if(e.right instanceof wt&&""==e.right.getValue()&&e.left.is_string(t))return e.left;if(e.left instanceof wt&&""==e.left.getValue()&&e.right.is_string(t))return e.right;if(e.left instanceof Xe&&"+"==e.left.operator&&e.left.left instanceof wt&&""==e.left.left.getValue()&&e.right.is_string(t))return e.left=e.left.right,e.transform(t)}if(t.option("evaluate")){switch(e.operator){case"&&":if(!(l=e.left.evaluate(t)))return t.warn("Condition left of && always false [{file}:{line},{col}]",e.start),s(t.parent(),e,e.left).optimize(t);if(l!==e.left)return t.warn("Condition left of && always true [{file}:{line},{col}]",e.start),s(t.parent(),e,e.right).optimize(t);if(t.option("booleans")&&t.in_boolean_context()){if(!(c=e.right.evaluate(t)))return t.warn("Boolean && always false [{file}:{line},{col}]",e.start),a(e,[e.left,r(Tt,e)]).optimize(t);if(c!==e.right)return t.warn("Dropping side-effect-free && in boolean context [{file}:{line},{col}]",e.start),e.left.optimize(t)}break;case"||":if(!(l=e.left.evaluate(t)))return t.warn("Condition left of || always false [{file}:{line},{col}]",e.start),s(t.parent(),e,e.right).optimize(t);if(l!==e.left)return t.warn("Condition left of || always true [{file}:{line},{col}]",e.start),s(t.parent(),e,e.left).optimize(t);if(t.option("booleans")&&t.in_boolean_context()){if(!(c=e.right.evaluate(t)))return t.warn("Dropping side-effect-free || in boolean context [{file}:{line},{col}]",e.start),e.left.optimize(t);if(c!==e.right)return t.warn("Boolean || always true [{file}:{line},{col}]",e.start),a(e,[e.left,r(Rt,e)]).optimize(t)}}var p=!0;switch(e.operator){case"+":if(e.left instanceof _t&&e.right instanceof Xe&&"+"==e.right.operator&&e.right.left instanceof _t&&e.right.is_string(t)&&(e=r(Xe,e,{operator:"+",left:r(wt,e.left,{value:""+e.left.getValue()+e.right.left.getValue(),start:e.left.start,end:e.right.left.end}),right:e.right.right})),e.right instanceof _t&&e.left instanceof Xe&&"+"==e.left.operator&&e.left.right instanceof _t&&e.left.is_string(t)&&(e=r(Xe,e,{operator:"+",left:e.left.left,right:r(wt,e.right,{value:""+e.left.right.getValue()+e.right.getValue(),start:e.left.right.start,end:e.right.end})})),e.left instanceof Xe&&"+"==e.left.operator&&e.left.is_string(t)&&e.left.right instanceof _t&&e.right instanceof Xe&&"+"==e.right.operator&&e.right.left instanceof _t&&e.right.is_string(t)&&(e=r(Xe,e,{operator:"+",left:r(Xe,e.left,{operator:"+",left:e.left.left,right:r(wt,e.left.right,{value:""+e.left.right.getValue()+e.right.left.getValue(),start:e.left.right.start,end:e.right.left.end})}),right:e.right.right})),e.right instanceof Ze&&"-"==e.right.operator&&e.left.is_number(t)){e=r(Xe,e,{operator:"-",left:e.left,right:e.right.expression});break}if(e.left instanceof Ze&&"-"==e.left.operator&&n()&&e.right.is_number(t)){e=r(Xe,e,{operator:"-",left:e.right,right:e.left.expression});break}case"*":p=t.option("unsafe_math");case"&":case"|":case"^":if(e.left.is_number(t)&&e.right.is_number(t)&&n()&&!(e.left instanceof Xe&&e.left.operator!=e.operator&&Qt[e.left.operator]>=Qt[e.operator])){var h=r(Xe,e,{operator:e.operator,left:e.right,right:e.left});e=e.right instanceof _t&&!(e.left instanceof _t)?M(t,h,e):M(t,e,h)}p&&e.is_number(t)&&(e.right instanceof Xe&&e.right.operator==e.operator&&(e=r(Xe,e,{operator:e.operator,left:r(Xe,e.left,{operator:e.operator,left:e.left,right:e.right.left,start:e.left.start,end:e.right.left.end}),right:e.right.right})),e.right instanceof _t&&e.left instanceof Xe&&e.left.operator==e.operator&&(e.left.left instanceof _t?e=r(Xe,e,{operator:e.operator,left:r(Xe,e.left,{operator:e.operator,left:e.left.left,right:e.right,start:e.left.left.start,end:e.right.end}),right:e.left.right}):e.left.right instanceof _t&&(e=r(Xe,e,{operator:e.operator,left:r(Xe,e.left,{operator:e.operator,left:e.left.right,right:e.right,start:e.left.right.start,end:e.right.end}),right:e.left.left}))),e.left instanceof Xe&&e.left.operator==e.operator&&e.left.right instanceof _t&&e.right instanceof Xe&&e.right.operator==e.operator&&e.right.left instanceof _t&&(e=r(Xe,e,{operator:e.operator,left:r(Xe,e.left,{operator:e.operator,left:r(Xe,e.left.left,{operator:e.operator,left:e.left.right,right:e.right.left,start:e.left.right.start,end:e.right.left.end}),right:e.left.left}),right:e.right.right})))}}if(e.right instanceof Xe&&e.right.operator==e.operator&&("&&"==e.operator||"||"==e.operator||"+"==e.operator&&(e.right.left.is_string(t)||e.left.is_string(t)&&e.right.right.is_string(t))))return e.left=r(Xe,e.left,{operator:e.operator,left:e.left,right:e.right.left}),e.right=e.right.right,e.transform(t);var d=e.evaluate(t);return d!==e?(d=u(d,e).optimize(t),M(t,d,e)):e}),e(vt,function(e,t){var n=e.resolve_defines(t);if(n)return n.optimize(t);if(!t.option("ie8")&&e.undeclared()&&(!e.scope.uses_with||!t.find_parent(ye)))switch(e.name){case"undefined":return r(Ot,e).optimize(t);case"NaN":return r(kt,e).optimize(t);case"Infinity":return r(St,e).optimize(t)}if(t.option("evaluate")&&t.option("reduce_vars")&&R(e,t.parent())!==e){var o=e.definition(),i=e.fixed_value();if(i){if(void 0===o.should_replace){var a=i.evaluate(t);if(a!==i){var s,l=(a=u(a,i)).optimize(t).print_to_string().length;!function(e){var t;return e.walk(new O(function(e){if(e instanceof vt&&(t=!0),t)return!0})),t}(i)?(l=Math.min(l,i.print_to_string().length),s=function(){var e=F(a.optimize(t),i);return e===a||e===i?e.clone(!0):e}):s=function(){var e=a.optimize(t);return e===a?e.clone(!0):e};var c=o.name.length,f=0;!t.option("unused")||o.global&&!t.toplevel(o)||(f=(c+2+l)/o.references.length),o.should_replace=l<=c+f&&s}else o.should_replace=!1}if(o.should_replace)return o.should_replace()}}return e}),e(Ot,function(e,t){if(t.option("unsafe")){var o=n(t,"undefined");if(o){var i=r(vt,e,{name:"undefined",scope:o.scope,thedef:o});return i.is_undefined=!0,i}}var a=R(t.self(),t.parent());return a&&z(a,e)?e:r(Ze,e,{operator:"void",expression:r(At,e,{value:0})})}),e(St,function(e,t){var o=R(t.self(),t.parent());return o&&z(o,e)?e:!t.option("keep_infinity")||o&&!z(o,e)||n(t,"Infinity")?r(Xe,e,{operator:"/",left:r(At,e,{value:1}),right:r(At,e,{value:0})}):e}),e(kt,function(e,t){var o=R(t.self(),t.parent());return o&&!z(o,e)||n(t,"NaN")?r(Xe,e,{operator:"/",left:r(At,e,{value:0}),right:r(At,e,{value:0})}):e});var K=["+","-","/","*","%",">>","<<",">>>","|","^","&"],W=["*","|","^","&"];e(tt,function(e,t){return"="==(e=e.lift_sequences(t)).operator&&e.left instanceof vt&&e.right instanceof Xe&&(e.right.left instanceof vt&&e.right.left.name==e.left.name&&o(e.right.operator,K)?(e.operator=e.right.operator+"=",e.right=e.right.right):e.right.right instanceof vt&&e.right.right.name==e.left.name&&o(e.right.operator,W)&&!e.right.left.has_side_effects(t)&&(e.operator=e.right.operator+"=",e.right=e.right.left)),e}),e(et,function(e,t){function n(e){return e.is_boolean()?e:r(Ze,e,{operator:"!",expression:e.negate(t)})}function o(e){return e instanceof Rt||e instanceof Ze&&"!"==e.operator&&e.expression instanceof _t&&!e.expression.value}function i(e){return e instanceof Tt||e instanceof Ze&&"!"==e.operator&&e.expression instanceof _t&&!!e.expression.value}if(!t.option("conditionals"))return e;if(e.condition instanceof Ke){var u=e.condition.expressions.slice();return e.condition=u.pop(),u.push(e),a(e,u)}var l=e.condition.evaluate(t);if(l!==e.condition)return l?(t.warn("Condition always true [{file}:{line},{col}]",e.start),s(t.parent(),e,e.consequent)):(t.warn("Condition always false [{file}:{line},{col}]",e.start),s(t.parent(),e,e.alternative));var c=l.negate(t,x(t));M(t,l,c)===c&&(e=r(et,e,{condition:c,consequent:e.alternative,alternative:e.consequent}));var f=e.condition,p=e.consequent,h=e.alternative;return f instanceof vt&&p instanceof vt&&f.definition()===p.definition()?r(Xe,e,{operator:"||",left:f,right:h}):p instanceof tt&&h instanceof tt&&p.operator==h.operator&&p.left.equivalent_to(h.left)&&(!e.condition.has_side_effects(t)||"="==p.operator&&!p.left.has_side_effects(t))?r(tt,e,{operator:p.operator,left:p.left,right:r(et,e,{condition:e.condition,consequent:p.right,alternative:h.right})}):p instanceof $e&&h.TYPE===p.TYPE&&1==p.args.length&&1==h.args.length&&p.expression.equivalent_to(h.expression)&&!p.expression.has_side_effects(t)?(p.args[0]=r(et,e,{condition:e.condition,consequent:p.args[0],alternative:h.args[0]}),p):p instanceof et&&p.alternative.equivalent_to(h)?r(et,e,{condition:r(Xe,e,{left:e.condition,operator:"&&",right:p.condition}),consequent:p.consequent,alternative:h}):p.equivalent_to(h)?a(e,[e.condition,p]).optimize(t):o(e.consequent)?i(e.alternative)?n(e.condition):r(Xe,e,{operator:"||",left:n(e.condition),right:e.alternative}):i(e.consequent)?o(e.alternative)?n(e.condition.negate(t)):r(Xe,e,{operator:"&&",left:n(e.condition.negate(t)),right:e.alternative}):o(e.alternative)?r(Xe,e,{operator:"||",left:n(e.condition.negate(t)),right:e.consequent}):i(e.alternative)?r(Xe,e,{operator:"&&",left:n(e.condition),right:e.consequent}):e}),e(Dt,function(e,t){if(t.option("booleans")){var n=t.parent();return n instanceof Xe&&("=="==n.operator||"!="==n.operator)?(t.warn("Non-strict equality against boolean: {operator} {value} [{file}:{line},{col}]",{operator:n.operator,value:e.value,file:n.start.file,line:n.start.line,col:n.start.col}),r(At,e,{value:+e.value})):r(Ze,e,{operator:"!",expression:r(At,e,{value:1-e.value})})}return e}),e(We,function(e,t){var n=e.property;if(n instanceof wt&&t.option("properties")){if(n=n.getValue(),Mt(n)?!t.option("ie8"):U(n))return r(Ge,e,{expression:e.expression,property:n}).optimize(t);var o=parseFloat(n);isNaN(o)||o.toString()!=n||(e.property=r(At,e.property,{value:o}))}var i=e.evaluate(t);return i!==e?(i=u(i,e).optimize(t),M(t,i,e)):e}),e(Ge,function(e,t){var n=e.resolve_defines(t);if(n)return n.optimize(t);var o=e.property;if(Mt(o)&&t.option("ie8"))return r(We,e,{expression:e.expression,property:r(wt,e,{value:o})}).optimize(t);if(t.option("unsafe_proto")&&e.expression instanceof Ge&&"prototype"==e.expression.property){var i=e.expression.expression;if(i instanceof vt&&i.undeclared())switch(i.name){case"Array":e.expression=r(nt,e.expression,{elements:[]});break;case"Object":e.expression=r(rt,e.expression,{properties:[]});break;case"String":e.expression=r(wt,e.expression,{value:""})}}var a=e.evaluate(t);return a!==e?(a=u(a,e).optimize(t),M(t,a,e)):e}),e(nt,I),e(rt,I),e(Et,I),e(Be,function(e,t){return e.value&&T(e.value,t)&&(e.value=null),e}),e(Ve,function(e,t){var n=t.option("global_defs");return n&&E(n,e.name.name)&&t.warn("global_defs "+e.name.name+" redefined [{file}:{line},{col}]",e.start),e})}(),function(){function e(e){if("Literal"==e.type)return null!=e.raw?e.raw:e.value+""}function n(t){var n=t.loc,r=n&&n.start,o=t.range;return new ne({file:n&&n.source,line:r&&r.line,col:r&&r.column,pos:o?o[0]:t.start,endline:r&&r.line,endcol:r&&r.column,endpos:o?o[0]:t.start,raw:e(t)})}function r(t){var n=t.loc,r=n&&n.end,o=t.range;return new ne({file:n&&n.source,line:r&&r.line,col:r&&r.column,pos:o?o[1]:t.end,endline:r&&r.line,endcol:r&&r.column,endpos:o?o[1]:t.end,raw:e(t)})}function o(e,o,a){var f="function From_Moz_"+e+"(M){\n";f+="return new U2."+o.name+"({\nstart: my_start_token(M),\nend: my_end_token(M)";var h="function To_Moz_"+e+"(M){\n";h+="return {\ntype: "+JSON.stringify(e),a&&a.split(/\s*,\s*/).forEach(function(e){var t=/([a-z0-9$_]+)(=|@|>|%)([a-z0-9$_]+)/i.exec(e);if(!t)throw new Error("Can't understand property map: "+e);var n=t[1],r=t[2],o=t[3];switch(f+=",\n"+o+": ",h+=",\n"+n+": ",r){case"@":f+="M."+n+".map(from_moz)",h+="M."+o+".map(to_moz)";break;case">":f+="from_moz(M."+n+")",h+="to_moz(M."+o+")";break;case"=":f+="M."+n,h+="M."+o;break;case"%":f+="from_moz(M."+n+").body",h+="to_moz_block(M)";break;default:throw new Error("Can't understand operator in propmap: "+e)}}),f+="\n})\n}",h+="\n}\n}",f=new Function("U2","my_start_token","my_end_token","from_moz","return("+f+")")(t,n,r,i),h=new Function("to_moz","to_moz_block","to_moz_scope","return("+h+")")(s,l,c),p[e]=f,u(o,h)}function i(e){h.push(e);var t=null!=e?p[e.type](e):null;return h.pop(),t}function a(e,t,n){var r=e.start,o=e.end;return null!=r.pos&&null!=o.endpos&&(t.range=[r.pos,o.endpos]),r.line&&(t.loc={start:{line:r.line,column:r.col},end:o.endline?{line:o.endline,column:o.endcol}:null},r.file&&(t.loc.source=r.file)),t}function u(e,t){e.DEFMETHOD("to_mozilla_ast",function(){return a(this,t(this))})}function s(e){return null!=e?e.to_mozilla_ast():null}function l(e){return{type:"BlockStatement",body:e.body.map(s)}}function c(e,t){var n=t.body.map(s);return t.body[0]instanceof ue&&t.body[0].body instanceof wt&&n.unshift(s(new ce(t.body[0]))),{type:e,body:n}}var f=function(e){for(var t=!0,n=0;n<e.length;n++)t&&e[n]instanceof oe&&e[n].body instanceof wt?e[n]=new ae({start:e[n].start,end:e[n].end,value:e[n].body.value}):!t||e[n]instanceof oe&&e[n].body instanceof wt||(t=!1);return e},p={Program:function(e){return new we({start:n(e),end:r(e),body:f(e.body.map(i))})},FunctionDeclaration:function(e){return new Ce({start:n(e),end:r(e),name:i(e.id),argnames:e.params.map(i),body:f(i(e.body).body)})},FunctionExpression:function(e){return new xe({start:n(e),end:r(e),name:i(e.id),argnames:e.params.map(i),body:f(i(e.body).body)})},ExpressionStatement:function(e){return new ue({start:n(e),end:r(e),body:i(e.expression)})},TryStatement:function(e){var t=e.handlers||[e.handler];if(t.length>1||e.guardedHandlers&&e.guardedHandlers.length)throw new Error("Multiple catch clauses are not supported.");return new Ne({start:n(e),end:r(e),body:i(e.block).body,bcatch:i(t[0]),bfinally:e.finalizer?new ze(i(e.finalizer)):null})},Property:function(e){var t=e.key,o={start:n(t),end:r(e.value),key:"Identifier"==t.type?t.name:t.value,value:i(e.value)};return"init"==e.kind?new it(o):(o.key=new lt({name:o.key}),o.value=new Ee(o.value),"get"==e.kind?new ut(o):"set"==e.kind?new at(o):void 0)},ArrayExpression:function(e){return new nt({start:n(e),end:r(e),elements:e.elements.map(function(e){return null===e?new Bt:i(e)})})},ObjectExpression:function(e){return new rt({start:n(e),end:r(e),properties:e.properties.map(function(e){return e.type="Property",i(e)})})},SequenceExpression:function(e){return new Ke({start:n(e),end:r(e),expressions:e.expressions.map(i)})},MemberExpression:function(e){return new(e.computed?We:Ge)({start:n(e),end:r(e),property:e.computed?i(e.property):e.property.name,expression:i(e.object)})},SwitchCase:function(e){return new(e.test?Ue:Pe)({start:n(e),end:r(e),expression:i(e.test),body:e.consequent.map(i)})},VariableDeclaration:function(e){return new je({start:n(e),end:r(e),definitions:e.declarations.map(i)})},Literal:function(e){var t=e.value,o={start:n(e),end:r(e)};if(null===t)return new Ct(o);switch(typeof t){case"string":return o.value=t,new wt(o);case"number":return o.value=t,new At(o);case"boolean":return new(t?Rt:Tt)(o);default:var i=e.regex;return i&&i.pattern?o.value=new RegExp(i.pattern,i.flags).toString():o.value=e.regex&&e.raw?e.raw:t,new Et(o)}},Identifier:function(e){var t=h[h.length-2];return new("LabeledStatement"==t.type?gt:"VariableDeclarator"==t.type&&t.id===e?ft:"FunctionExpression"==t.type?t.id===e?dt:pt:"FunctionDeclaration"==t.type?t.id===e?ht:pt:"CatchClause"==t.type?mt:"BreakStatement"==t.type||"ContinueStatement"==t.type?bt:vt)({start:n(e),end:r(e),name:e.name})}};p.UpdateExpression=p.UnaryExpression=function(e){return new(("prefix"in e?e.prefix:"UnaryExpression"==e.type)?Ze:Je)({start:n(e),end:r(e),operator:e.operator,expression:i(e.argument)})},o("EmptyStatement",ce),o("BlockStatement",le,"body@body"),o("IfStatement",Fe,"test>condition, consequent>body, alternate>alternative"),o("LabeledStatement",pe,"label>label, body>body"),o("BreakStatement",Te,"label>label"),o("ContinueStatement",Re,"label>label"),o("WithStatement",ye,"object>expression, body>body"),o("SwitchStatement",Le,"discriminant>expression, cases@body"),o("ReturnStatement",Be,"argument>value"),o("ThrowStatement",Se,"argument>value"),o("WhileStatement",ge,"test>condition, body>body"),o("DoWhileStatement",me,"test>condition, body>body"),o("ForStatement",ve,"init>init, test>condition, update>step, body>body"),o("ForInStatement",be,"left>init, right>object, body>body"),o("DebuggerStatement",ie),o("VariableDeclarator",Ve,"id>name, init>value"),o("CatchClause",qe,"param>argname, body%body"),o("ThisExpression",yt),o("BinaryExpression",Xe,"operator=operator, left>left, right>right"),o("LogicalExpression",Xe,"operator=operator, left>left, right>right"),o("AssignmentExpression",tt,"operator=operator, left>left, right>right"),o("ConditionalExpression",et,"test>condition, consequent>consequent, alternate>alternative"),o("NewExpression",He,"callee>expression, arguments@args"),o("CallExpression",$e,"callee>expression, arguments@args"),u(we,function(e){return c("Program",e)}),u(Ce,function(e){return{type:"FunctionDeclaration",id:s(e.name),params:e.argnames.map(s),body:c("BlockStatement",e)}}),u(xe,function(e){return{type:"FunctionExpression",id:s(e.name),params:e.argnames.map(s),body:c("BlockStatement",e)}}),u(ae,function(e){return{type:"ExpressionStatement",expression:{type:"Literal",value:e.value}}}),u(ue,function(e){return{type:"ExpressionStatement",expression:s(e.body)}}),u(Me,function(e){return{type:"SwitchCase",test:s(e.expression),consequent:e.body.map(s)}}),u(Ne,function(e){return{type:"TryStatement",block:l(e),handler:s(e.bcatch),guardedHandlers:[],finalizer:s(e.bfinally)}}),u(qe,function(e){return{type:"CatchClause",param:s(e.argname),guard:null,body:l(e)}}),u(Ie,function(e){return{type:"VariableDeclaration",kind:"var",declarations:e.definitions.map(s)}}),u(Ke,function(e){return{type:"SequenceExpression",expressions:e.expressions.map(s)}}),u(Ye,function(e){var t=e instanceof We;return{type:"MemberExpression",object:s(e.expression),computed:t,property:t?s(e.property):{type:"Identifier",name:e.property}}}),u(Qe,function(e){return{type:"++"==e.operator||"--"==e.operator?"UpdateExpression":"UnaryExpression",operator:e.operator,prefix:e instanceof Ze,argument:s(e.expression)}}),u(Xe,function(e){return{type:"&&"==e.operator||"||"==e.operator?"LogicalExpression":"BinaryExpression",left:s(e.left),operator:e.operator,right:s(e.right)}}),u(nt,function(e){return{type:"ArrayExpression",elements:e.elements.map(s)}}),u(rt,function(e){return{type:"ObjectExpression",properties:e.properties.map(s)}}),u(ot,function(e){var t,n={type:"Literal",value:e.key instanceof lt?e.key.name:e.key};return e instanceof it?t="init":e instanceof ut?t="get":e instanceof at&&(t="set"),{type:"Property",kind:t,key:n,value:s(e.value)}}),u(st,function(e){var t=e.definition();return{type:"Identifier",name:t?t.mangled_name||t.name:e.name}}),u(Et,function(e){var t=e.value;return{type:"Literal",value:t,raw:t.toString(),regex:{pattern:t.source,flags:t.toString().match(/[gimuy]*$/)[0]}}}),u(_t,function(e){var t=e.value;return"number"==typeof t&&(t<0||0===t&&1/t<0)?{type:"UnaryExpression",operator:"-",prefix:!0,argument:{type:"Literal",value:-t,raw:e.start.raw}}:{type:"Literal",value:t,raw:e.start.raw}}),u(xt,function(e){return{type:"Identifier",name:String(e.value)}}),Dt.DEFMETHOD("to_mozilla_ast",_t.prototype.to_mozilla_ast),Ct.DEFMETHOD("to_mozilla_ast",_t.prototype.to_mozilla_ast),Bt.DEFMETHOD("to_mozilla_ast",function(){return null}),se.DEFMETHOD("to_mozilla_ast",le.prototype.to_mozilla_ast),Ae.DEFMETHOD("to_mozilla_ast",xe.prototype.to_mozilla_ast);var h=null;re.from_mozilla_ast=function(e){var t=h;h=[];var n=i(e);return h=t,n}}();var en="undefined"==typeof atob?function(t){return new e(t,"base64").toString()}:atob,tn="undefined"==typeof btoa?function(t){return new e(t).toString("base64")}:btoa;t.Dictionary=A,t.TreeWalker=O,t.minify=ee,t._push_uniq=g}(void 0===n?n={}:n)}).call(this,e("buffer").Buffer)},{buffer:5}]},{},["html-minifier"]);
\ No newline at end of file
index 9e44c04..08fc3db 100644 (file)
@@ -9,7 +9,7 @@
   <body>
     <div id="outer-wrapper">
       <div id="wrapper">
-        <h1>HTML Minifier <span>(v3.4.4)</span></h1>
+        <h1>HTML Minifier <span>(v3.5.0)</span></h1>
         <textarea rows="8" cols="40" id="input"></textarea>
         <div class="minify-button">
           <button type="button" id="minify-btn">Minify</button>
index 8e565e9..41f3895 100644 (file)
@@ -1,7 +1,7 @@
 {
   "name": "html-minifier",
   "description": "Highly configurable, well-tested, JavaScript-based HTML minifier.",
-  "version": "3.4.4",
+  "version": "3.5.0",
   "keywords": [
     "cli",
     "compress",